// region Constructor public ImportTableDialog( final Connection connection, String tableName, Iterable<TypedColumn> columns, final Iterable<String> columnFamilies) { setContentPane(this.contentPane); setModal(true); setTitle("Import table from file"); getRootPane().setDefaultButton(this.btImport); this.tfTableName.setText(tableName); this.tfFilePath.setText(String.format("%s.csv", tableName)); this.tableModel = new DefaultTableModel(); this.rowsTable.setModel(this.tableModel); this.tableModel.addColumn("Column Name"); this.tableModel.addColumn("Column Type"); this.rowsTable.setRowHeight(this.rowsTable.getFont().getSize() + 8); this.rowsTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); JComboBox comboBox = new JComboBox(); for (ObjectType objectType : ObjectType.values()) { comboBox.addItem(objectType); } this.rowsTable.getColumn("Column Name").setCellEditor(new JCellEditor(null, false)); this.rowsTable.getColumn("Column Type").setCellEditor(new DefaultCellEditor(comboBox)); for (TypedColumn typedColumn : columns) { this.tableModel.addRow(new Object[] {typedColumn.getColumn(), typedColumn.getType(), null}); } this.rowsTable .getSelectionModel() .addListSelectionListener( new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { ImportTableDialog.this.btRemoveColumn.setEnabled(e.getFirstIndex() != -1); } }); this.btImport.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (validateInput()) { onImport(connection); } } }); this.btClose.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }); // call onCancel() when cross is clicked setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener( new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { dispose(); } }); // call onCancel() on ESCAPE this.contentPane.registerKeyboardAction( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); this.btBrowse.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser dialog = new JFileChooser(); dialog.setCurrentDirectory(new File(".")); dialog.setSelectedFile(new File(ImportTableDialog.this.tfFilePath.getText())); int returnVal = dialog.showSaveDialog(ImportTableDialog.this.contentPane); if (returnVal == JFileChooser.APPROVE_OPTION) { ImportTableDialog.this.tfFilePath.setText(dialog.getSelectedFile().getAbsolutePath()); } } }); this.btAddColumn.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { stopCellEditing(ImportTableDialog.this.rowsTable); AddColumnDialog dialog = new AddColumnDialog(columnFamilies); dialog.showDialog(ImportTableDialog.this); String columnName = dialog.getColumnName(); if (columnName != null) { int rowIndex = getRowIndex(ImportTableDialog.this.rowsTable, 1, columnName); if (rowIndex == -1) { ImportTableDialog.this.tableModel.addRow( new Object[] {columnName, ObjectType.String, null}); rowIndex = ImportTableDialog.this.tableModel.getRowCount() - 1; } ImportTableDialog.this.rowsTable.setRowSelectionInterval(rowIndex, rowIndex); } } }); this.btRemoveColumn.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int selectedRow = ImportTableDialog.this.rowsTable.getSelectedRow(); while (selectedRow != -1) { ImportTableDialog.this.tableModel.removeRow(selectedRow); selectedRow = ImportTableDialog.this.rowsTable.getSelectedRow(); } ImportTableDialog.this.btRemoveColumn.setEnabled(false); } }); this.btCancel.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ImportTableDialog.this.canceled = true; } }); }
/** * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR * call it in your code! * * @noinspection ALL */ private void $$$setupUI$$$() { contentPane = new JPanel(); contentPane.setLayout(new GridLayoutManager(4, 1, new Insets(10, 10, 10, 10), -1, -1)); final JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayoutManager(2, 1, new Insets(0, 0, 0, 0), -1, -1)); contentPane.add( panel1, new GridConstraints( 3, 0, 1, 1, GridConstraints.ANCHOR_SOUTH, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false)); final JPanel panel2 = new JPanel(); panel2.setLayout(new GridLayoutManager(1, 3, new Insets(0, 0, 0, 0), -1, -1)); panel1.add( panel2, new GridConstraints( 1, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_VERTICAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); btImport = new JButton(); btImport.setText("Import"); panel2.add( btImport, new GridConstraints( 0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); btCancel = new JButton(); btCancel.setEnabled(false); btCancel.setText("Cancel"); panel2.add( btCancel, new GridConstraints( 0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); btClose = new JButton(); btClose.setText("Close"); panel2.add( btClose, new GridConstraints( 0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JSeparator separator1 = new JSeparator(); panel1.add( separator1, new GridConstraints( 0, 0, 1, 1, GridConstraints.ANCHOR_NORTH, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); final JPanel panel3 = new JPanel(); panel3.setLayout(new GridLayoutManager(4, 4, new Insets(0, 0, 0, 0), -1, -1)); contentPane.add( panel3, new GridConstraints( 0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); final JLabel label1 = new JLabel(); label1.setText("File path:"); panel3.add( label1, new GridConstraints( 1, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); tfFilePath = new JTextField(); panel3.add( tfFilePath, new GridConstraints( 1, 1, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); btBrowse = new JButton(); btBrowse.setText("Browse"); panel3.add( btBrowse, new GridConstraints( 1, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JLabel label2 = new JLabel(); label2.setText("Delimiter:"); panel3.add( label2, new GridConstraints( 2, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); cmbDelimiter = new JComboBox(); cmbDelimiter.setEditable(true); final DefaultComboBoxModel defaultComboBoxModel1 = new DefaultComboBoxModel(); defaultComboBoxModel1.addElement(","); defaultComboBoxModel1.addElement("|"); defaultComboBoxModel1.addElement("-"); defaultComboBoxModel1.addElement(":"); cmbDelimiter.setModel(defaultComboBoxModel1); panel3.add( cmbDelimiter, new GridConstraints( 2, 1, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JLabel label3 = new JLabel(); label3.setText("Table name:"); panel3.add( label3, new GridConstraints( 0, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); tfTableName = new JTextField(); panel3.add( tfTableName, new GridConstraints( 0, 1, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); final JPanel panel4 = new JPanel(); panel4.setLayout(new GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1)); panel3.add( panel4, new GridConstraints( 3, 0, 1, 4, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); final JPanel panel5 = new JPanel(); panel5.setLayout(new GridLayoutManager(2, 4, new Insets(0, 0, 0, 0), -1, -1)); panel4.add( panel5, new GridConstraints( 0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); final JLabel label4 = new JLabel(); label4.setText("Select types for columns:"); panel5.add( label4, new GridConstraints( 1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final Spacer spacer1 = new Spacer(); panel5.add( spacer1, new GridConstraints( 1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); btRemoveColumn = new JButton(); btRemoveColumn.setEnabled(false); btRemoveColumn.setText("Remove"); panel5.add( btRemoveColumn, new GridConstraints( 1, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); btAddColumn = new JButton(); btAddColumn.setText("Add..."); panel5.add( btAddColumn, new GridConstraints( 1, 2, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JSeparator separator2 = new JSeparator(); panel5.add( separator2, new GridConstraints( 0, 0, 1, 4, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); final JScrollPane scrollPane1 = new JScrollPane(); panel4.add( scrollPane1, new GridConstraints( 1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(400, 200), null, 0, false)); rowsTable = new JTable(); scrollPane1.setViewportView(rowsTable); final JLabel label5 = new JLabel(); label5.setFont(new Font(label5.getFont().getName(), Font.BOLD, label5.getFont().getSize())); label5.setText("* Note: data for not listed columns will be treated as of String type."); panel4.add( label5, new GridConstraints( 2, 0, 1, 1, GridConstraints.ANCHOR_SOUTHWEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JSeparator separator3 = new JSeparator(); contentPane.add( separator3, new GridConstraints( 1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); final JPanel panel6 = new JPanel(); panel6.setLayout(new GridLayoutManager(2, 3, new Insets(0, 0, 0, 0), -1, -1)); contentPane.add( panel6, new GridConstraints( 2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); final JLabel label6 = new JLabel(); label6.setText("Written rows:"); panel6.add( label6, new GridConstraints( 1, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final Spacer spacer2 = new Spacer(); panel6.add( spacer2, new GridConstraints( 1, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); writtenRowsCount = new JLabel(); writtenRowsCount.setText("?"); panel6.add( writtenRowsCount, new GridConstraints( 1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JLabel label7 = new JLabel(); label7.setText("Read rows:"); panel6.add( label7, new GridConstraints( 0, 0, 1, 1, GridConstraints.ANCHOR_EAST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); readRowsCount = new JLabel(); readRowsCount.setText("?"); panel6.add( readRowsCount, new GridConstraints( 0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); }