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();
}