protected void initialise()

in taverna-spreadsheet-import-activity-ui/src/main/java/org/apache/taverna/activities/spreadsheet/views/SpreadsheetImportConfigView.java [178:664]


	protected void initialise() {
		super.initialise();
		newConfiguration = getJson().deepCopy();

		// title
		titlePanel = new JPanel(new BorderLayout());
		titlePanel.setBackground(Color.WHITE);
		addDivider(titlePanel, SwingConstants.BOTTOM, true);

		titleLabel = new JLabel(SpreadsheetImportUIText.getString("SpreadsheetImportConfigView.panelTitle"));
		titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD, 13.5f));
		titleIcon = new JLabel("");
		titleMessage = new DialogTextArea(DEFAULT_MESSAGE);
		titleMessage.setMargin(new Insets(5, 10, 10, 10));
		// titleMessage.setMinimumSize(new Dimension(0, 30));
		titleMessage.setFont(titleMessage.getFont().deriveFont(11f));
		titleMessage.setEditable(false);
		titleMessage.setFocusable(false);
		// titleMessage.setFont(titleLabel.getFont().deriveFont(Font.PLAIN,
		// 12f));

		// column range
		columnLabel = new JLabel(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.columnSectionLabel"));

		JsonNode columnRange = newConfiguration.get("columnRange");
		columnFromValue = new JTextField(new UpperCaseDocument(), SpreadsheetUtils.getColumnLabel(columnRange.get("start").intValue()), 4);
		columnFromValue.setMinimumSize(columnFromValue.getPreferredSize());
		columnToValue = new JTextField(new UpperCaseDocument(), SpreadsheetUtils.getColumnLabel(columnRange.get("end").intValue()), 4);
		columnToValue.setMinimumSize(columnToValue.getPreferredSize());

		columnFromValue.getDocument().addDocumentListener(new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
			}

			public void insertUpdate(DocumentEvent e) {
				checkValue(columnFromValue.getText());
			}

			public void removeUpdate(DocumentEvent e) {
				checkValue(columnFromValue.getText());
			}

			private void checkValue(String text) {
				if (text.trim().equals("")) {
					addErrorMessage(EMPTY_FROM_COLUMN_ERROR_MESSAGE);
				} else if (text.trim().matches("[A-Za-z]+")) {
					String fromColumn = columnFromValue.getText().toUpperCase();
					String toColumn = columnToValue.getText().toUpperCase();
					int fromColumnIndex = SpreadsheetUtils.getColumnIndex(fromColumn);
					int toColumnIndex = SpreadsheetUtils.getColumnIndex(toColumn);
					if (checkColumnRange(fromColumnIndex, toColumnIndex)) {
						columnMappingTableModel.setFromColumn(fromColumnIndex);
						columnMappingTableModel.setToColumn(toColumnIndex);
						newConfiguration.set("columnRange", newConfiguration.objectNode().put("start", fromColumnIndex).put("end", toColumnIndex));
						validatePortNames();
					}
					removeErrorMessage(FROM_COLUMN_ERROR_MESSAGE);
					removeErrorMessage(EMPTY_FROM_COLUMN_ERROR_MESSAGE);
				} else {
					addErrorMessage(FROM_COLUMN_ERROR_MESSAGE);
					removeErrorMessage(EMPTY_FROM_COLUMN_ERROR_MESSAGE);
				}
			}

		});

		columnToValue.getDocument().addDocumentListener(new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
			}

			public void insertUpdate(DocumentEvent e) {
				checkValue(columnToValue.getText());
			}

			public void removeUpdate(DocumentEvent e) {
				checkValue(columnToValue.getText());
			}

			private void checkValue(String text) {
				if (text.trim().equals("")) {
					addErrorMessage(EMPTY_TO_COLUMN_ERROR_MESSAGE);
				} else if (text.trim().matches("[A-Za-z]+")) {
					String fromColumn = columnFromValue.getText().toUpperCase();
					String toColumn = columnToValue.getText().toUpperCase();
					int fromColumnIndex = SpreadsheetUtils.getColumnIndex(fromColumn);
					int toColumnIndex = SpreadsheetUtils.getColumnIndex(toColumn);
					if (checkColumnRange(fromColumnIndex, toColumnIndex)) {
						columnMappingTableModel.setFromColumn(fromColumnIndex);
						columnMappingTableModel.setToColumn(toColumnIndex);
						newConfiguration.set("columnRange", newConfiguration.objectNode().put("start", fromColumnIndex).put("end", toColumnIndex));
						validatePortNames();
					}
					removeErrorMessage(TO_COLUMN_ERROR_MESSAGE);
					removeErrorMessage(EMPTY_TO_COLUMN_ERROR_MESSAGE);

				} else {
					addErrorMessage(TO_COLUMN_ERROR_MESSAGE);
					removeErrorMessage(EMPTY_TO_COLUMN_ERROR_MESSAGE);
				}
			}
		});

		// row range
		rowLabel = new JLabel(SpreadsheetImportUIText.getString("SpreadsheetImportConfigView.rowSectionLabel"));
		addDivider(rowLabel, SwingConstants.TOP, false);

		rowSelectAllOption = new JCheckBox(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.selectAllRowsOption"));
		rowExcludeFirstOption = new JCheckBox(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.excludeHeaderRowOption"));
		rowIgnoreBlankRows = new JCheckBox(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.ignoreBlankRowsOption"));
		rowSelectAllOption.setFocusable(false);
		rowExcludeFirstOption.setFocusable(false);

		JsonNode rowRange = newConfiguration.get("rowRange");
		rowFromValue = new JTextField(new NumericDocument(), String.valueOf(rowRange.get("start").intValue() + 1), 4);
		if (rowRange.get("end").intValue() == -1) {
			rowToValue = new JTextField(new NumericDocument(), "", 4);
		} else {
			rowToValue = new JTextField(new NumericDocument(), String.valueOf(rowRange.get("end").intValue() + 1), 4);
		}
		rowFromValue.setMinimumSize(rowFromValue.getPreferredSize());
		rowToValue.setMinimumSize(rowToValue.getPreferredSize());

		if (newConfiguration.get("allRows").booleanValue()) {
			rowSelectAllOption.setSelected(true);
			rowFromValue.setEditable(false);
			rowFromValue.setEnabled(false);
			rowToValue.setEditable(false);
			rowToValue.setEnabled(false);
		} else {
			rowExcludeFirstOption.setEnabled(false);
		}
		rowExcludeFirstOption.setSelected(newConfiguration.get("excludeFirstRow").booleanValue());
		rowIgnoreBlankRows.setSelected(newConfiguration.get("ignoreBlankRows").booleanValue());

		rowFromValue.getDocument().addDocumentListener(new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
			}

			public void insertUpdate(DocumentEvent e) {
				checkValue(rowFromValue.getText());
			}

			public void removeUpdate(DocumentEvent e) {
				checkValue(rowFromValue.getText());
			}

			private void checkValue(String text) {
				if (text.trim().equals("")) {
					addErrorMessage(EMPTY_FROM_ROW_ERROR_MESSAGE);
				} else if (text.trim().matches("[1-9][0-9]*")) {
					checkRowRange(rowFromValue.getText(), rowToValue.getText());
					int fromRow = Integer.parseInt(rowFromValue.getText());
					((ObjectNode) newConfiguration.get("rowRange")).put("start", fromRow - 1);
					removeErrorMessage(FROM_ROW_ERROR_MESSAGE);
					removeErrorMessage(EMPTY_FROM_ROW_ERROR_MESSAGE);
				} else {
					addErrorMessage(FROM_ROW_ERROR_MESSAGE);
					removeErrorMessage(EMPTY_FROM_ROW_ERROR_MESSAGE);
				}
			}
		});

		rowToValue.getDocument().addDocumentListener(new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
			}

			public void insertUpdate(DocumentEvent e) {
				checkValue(rowToValue.getText());
			}

			public void removeUpdate(DocumentEvent e) {
				checkValue(rowToValue.getText());
			}

			private void checkValue(String text) {
				if (text.trim().equals("")) {
					((ObjectNode) newConfiguration.get("rowRange")).put("end", -1);
					removeErrorMessage(TO_ROW_ERROR_MESSAGE);
					removeErrorMessage(INCONSISTENT_ROW_MESSAGE);
				} else if (text.trim().matches("[0-9]+")) {
					checkRowRange(rowFromValue.getText(), rowToValue.getText());
					int toRow = Integer.parseInt(rowToValue.getText());
					((ObjectNode) newConfiguration.get("rowRange")).put("end", toRow - 1);
					removeErrorMessage(TO_ROW_ERROR_MESSAGE);
				} else {
					addErrorMessage(TO_ROW_ERROR_MESSAGE);
				}
			}
		});

		rowSelectAllOption.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					newConfiguration.put("allRows", true);
					rowExcludeFirstOption.setEnabled(true);
					if (rowExcludeFirstOption.isSelected()) {
						rowFromValue.setText("2");
					} else {
						rowFromValue.setText("1");
					}
					rowToValue.setText("");
					rowFromValue.setEditable(false);
					rowFromValue.setEnabled(false);
					rowToValue.setEditable(false);
					rowToValue.setEnabled(false);
				} else {
					newConfiguration.put("allRows", false);
					rowExcludeFirstOption.setEnabled(false);
					rowFromValue.setEditable(true);
					rowFromValue.setEnabled(true);
					rowToValue.setEditable(true);
					rowToValue.setEnabled(true);
				}
			}
		});

		rowExcludeFirstOption.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					newConfiguration.put("excludeFirstRow", true);
					rowFromValue.setText("2");
					((ObjectNode) newConfiguration.get("rowRange")).put("start", 1);
				} else {
					newConfiguration.put("excludeFirstRow", false);
					rowFromValue.setText("1");
					((ObjectNode) newConfiguration.get("rowRange")).put("start", 0);
				}
			}
		});

		rowIgnoreBlankRows.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				newConfiguration.put("ignoreBlankRows", e.getStateChange() == ItemEvent.SELECTED);
			}
		});

		// empty cells
		emptyCellLabel = new JLabel(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.emptyCellSectionLabel"));
		addDivider(emptyCellLabel, SwingConstants.TOP, false);

		emptyCellButtonGroup = new ButtonGroup();
		emptyCellEmptyStringOption = new JRadioButton(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.emptyStringOption"));
		emptyCellUserDefinedOption = new JRadioButton(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.userDefinedOption"));
		emptyCellErrorValueOption = new JRadioButton(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.generateErrorOption"));
		emptyCellEmptyStringOption.setFocusable(false);
		emptyCellUserDefinedOption.setFocusable(false);
		emptyCellErrorValueOption.setFocusable(false);

		emptyCellUserDefinedValue = new JTextField(newConfiguration.get("emptyCellValue").textValue());

		emptyCellButtonGroup.add(emptyCellEmptyStringOption);
		emptyCellButtonGroup.add(emptyCellUserDefinedOption);
		emptyCellButtonGroup.add(emptyCellErrorValueOption);

		if (newConfiguration.get("emptyCellPolicy").textValue().equals("GENERATE_ERROR")) {
			emptyCellErrorValueOption.setSelected(true);
			emptyCellUserDefinedValue.setEnabled(false);
			emptyCellUserDefinedValue.setEditable(false);
		} else if (newConfiguration.get("emptyCellPolicy").textValue().equals("EMPTY_STRING")) {
			emptyCellEmptyStringOption.setSelected(true);
			emptyCellUserDefinedValue.setEnabled(false);
			emptyCellUserDefinedValue.setEditable(false);
		} else {
			emptyCellUserDefinedOption.setSelected(true);
			emptyCellUserDefinedValue.setText(newConfiguration.get("emptyCellValue").textValue());
			emptyCellUserDefinedValue.setEnabled(true);
			emptyCellUserDefinedValue.setEditable(true);
		}

		emptyCellEmptyStringOption.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				newConfiguration.put("emptyCellPolicy", "EMPTY_STRING");
				emptyCellUserDefinedValue.setEnabled(false);
				emptyCellUserDefinedValue.setEditable(false);
			}
		});
		emptyCellUserDefinedOption.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				newConfiguration.put("emptyCellPolicy", "USER_DEFINED");
				emptyCellUserDefinedValue.setEnabled(true);
				emptyCellUserDefinedValue.setEditable(true);
				emptyCellUserDefinedValue.requestFocusInWindow();
			}
		});
		emptyCellErrorValueOption.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				newConfiguration.put("emptyCellPolicy", "GENERATE_ERROR");
				emptyCellUserDefinedValue.setEnabled(false);
				emptyCellUserDefinedValue.setEditable(false);
			}
		});

		emptyCellUserDefinedValue.getDocument().addDocumentListener(new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
				newConfiguration.put("emptyCellValue", emptyCellUserDefinedValue.getText());
			}

			public void insertUpdate(DocumentEvent e) {
				newConfiguration.put("emptyCellValue", emptyCellUserDefinedValue.getText());
			}

			public void removeUpdate(DocumentEvent e) {
				newConfiguration.put("emptyCellValue", emptyCellUserDefinedValue.getText());
			}
		});

		// column mappings
		columnMappingLabel = new JLabel(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.columnMappingSectionLabel"));
		addDivider(columnMappingLabel, SwingConstants.TOP, false);

		Map<String, String> columnToPortMapping = new HashMap<>();
		if (newConfiguration.has("columnNames")) {
			for (JsonNode columnName : newConfiguration.get("columnNames")) {
				columnToPortMapping.put(columnName.get("column").textValue(), columnName.get("port").textValue());
			}
		}
		columnMappingTableModel = new SpreadsheetImportConfigTableModel(columnFromValue.getText(),
				columnToValue.getText(), columnToPortMapping);

		columnMappingTable = new JTable();
		columnMappingTable.setRowSelectionAllowed(false);
		columnMappingTable.getTableHeader().setReorderingAllowed(false);
		columnMappingTable.setGridColor(Color.LIGHT_GRAY);
		// columnMappingTable.setFocusable(false);

		columnMappingTable.setColumnModel(new DefaultTableColumnModel() {
			public TableColumn getColumn(int columnIndex) {
				TableColumn column = super.getColumn(columnIndex);
				if (columnIndex == 0) {
					column.setMaxWidth(100);
				}
				return column;
			}
		});

		TableCellEditor defaultEditor = columnMappingTable.getDefaultEditor(String.class);
		if (defaultEditor instanceof DefaultCellEditor) {
			DefaultCellEditor defaultCellEditor = (DefaultCellEditor) defaultEditor;
			defaultCellEditor.setClickCountToStart(1);
			Component editorComponent = defaultCellEditor.getComponent();
			if (editorComponent instanceof JTextComponent) {
				final JTextComponent textField = (JTextComponent) editorComponent;
				textField.getDocument().addDocumentListener(new DocumentListener() {
					public void changedUpdate(DocumentEvent e) {
						updateModel(textField.getText());
					}

					public void insertUpdate(DocumentEvent e) {
						updateModel(textField.getText());
					}

					public void removeUpdate(DocumentEvent e) {
						updateModel(textField.getText());
					}

					private void updateModel(String text) {
						int row = columnMappingTable.getEditingRow();
						int column = columnMappingTable.getEditingColumn();
						columnMappingTableModel.setValueAt(text, row, column);

						ArrayNode columnNames = newConfiguration.arrayNode();
						Map<String, String> columnToPortMapping = columnMappingTableModel.getColumnToPortMapping();
						for (Entry<String,String> entry : columnToPortMapping.entrySet()) {
							columnNames.add(newConfiguration.objectNode().put("column", entry.getKey()).put("port", entry.getValue()));
						}
						newConfiguration.put("columnNames", columnNames);
						validatePortNames();
					}

				});
			}
		}

		columnMappingTable.setModel(columnMappingTableModel);

		// output format
		outputFormatLabel = new JLabel(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.outputFormatSectionLabel"));

		outputFormatMultiplePort = new JRadioButton(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.multiplePortOption"));
		outputFormatSinglePort = new JRadioButton(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.singlePortOption"));
		outputFormatMultiplePort.setFocusable(false);
		outputFormatSinglePort.setFocusable(false);

		outputFormatDelimiterLabel = new JLabel(SpreadsheetImportUIText
				.getString("SpreadsheetImportConfigView.userDefinedCsvDelimiter"));
		outputFormatDelimiter = new JTextField(newConfiguration.get("csvDelimiter").textValue(), 5);

		outputFormatButtonGroup = new ButtonGroup();
		outputFormatButtonGroup.add(outputFormatMultiplePort);
		outputFormatButtonGroup.add(outputFormatSinglePort);

		if (newConfiguration.get("outputFormat").textValue().equals("PORT_PER_COLUMN")) {
			outputFormatMultiplePort.setSelected(true);
			outputFormatDelimiterLabel.setEnabled(false);
			outputFormatDelimiter.setEnabled(false);
		} else {
			outputFormatSinglePort.setSelected(true);
			columnMappingLabel.setEnabled(false);
			enableTable(columnMappingTable, false);
		}

		outputFormatMultiplePort.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				outputFormatDelimiterLabel.setEnabled(false);
				outputFormatDelimiter.setEnabled(false);
				columnMappingLabel.setEnabled(true);
				enableTable(columnMappingTable, true);
				newConfiguration.put("outputFormat", "PORT_PER_COLUMN");
			}
		});
		outputFormatSinglePort.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				outputFormatDelimiterLabel.setEnabled(true);
				outputFormatDelimiter.setEnabled(true);
				columnMappingLabel.setEnabled(false);
				enableTable(columnMappingTable, false);
				newConfiguration.put("outputFormat", "SINGLE_PORT");
			}

		});
		outputFormatDelimiter.getDocument().addDocumentListener(new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
				handleUpdate();
			}

			public void insertUpdate(DocumentEvent e) {
				handleUpdate();
			}

			public void removeUpdate(DocumentEvent e) {
				handleUpdate();
			}

			private void handleUpdate() {
				String text = null;
				try {
					text = StringEscapeUtils.unescapeJava(outputFormatDelimiter.getText());
				} catch (RuntimeException re) {}
				if (text == null || text.length() == 0) {
					newConfiguration.put("csvDelimiter", ",");
				} else {
					newConfiguration.put("csvDelimiter", text.substring(0, 1));
				}
			}

		});

		// buttons
		nextButton = new JButton(SpreadsheetImportUIText.getString("SpreadsheetImportConfigView.nextButton"));
		nextButton.setFocusable(false);
		nextButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				backButton.setVisible(true);
				nextButton.setVisible(false);
				cardLayout.last(contentPanel);
			}
		});

		backButton = new JButton(SpreadsheetImportUIText.getString("SpreadsheetImportConfigView.backButton"));
		backButton.setFocusable(false);
		backButton.setVisible(false);
		backButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				nextButton.setVisible(true);
				backButton.setVisible(false);
				cardLayout.first(contentPanel);
			}
		});

		buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		addDivider(buttonPanel, SwingConstants.TOP, true);

		removeAll();
		layoutPanel();
	}