/* * Copyright 2007 - 2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.jailer.ui; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; import javax.swing.JComponent; import javax.swing.JOptionPane; import net.sf.jailer.datamodel.Column; import net.sf.jailer.util.CsvFile; import net.sf.jailer.util.CsvFile.Line; /** * Editor for single tables. Part of {@link DataModelEditor}. * * @author Ralf Wisser */ public class TableEditor extends javax.swing.JDialog { /** * All tables (as csv-lines). */ private Collection<Line> tables; /** * All associations (as csv-lines). */ private Collection<Line> associations; /** * List of tables to be excluded from deletion. */ private List<String> excludeFromDeletionList = new ArrayList<String>(); /** * Maps table names to display names. */ private final Map<String, String> displayNames; private boolean needsSave; private static class ColumnModel { Column column; boolean isPk; } @SuppressWarnings("serial") private class ColumnListEditor extends ListEditor<ColumnModel> { public ColumnListEditor() { super(new String[] { "Name", "Type"}, "Column", false, false, false); } @Override protected String getDisplayName(ColumnModel element) { return element.column.name; } @Override protected ColumnModel copy(ColumnModel element) { ColumnModel c = new ColumnModel(); c.column = element.column; c.isPk = element.isPk; return c; } @Override protected ColumnModel createNew() { return new ColumnModel(); } @Override protected JComponent createDetailsView(ColumnModel element) { if (element.column != null) { columnName.setText(element.column.name); columnType.setText(element.column.type); columnLength.setText(element.column.length > 0? Integer.toString(element.column.length) : ""); columnPrec.setText(element.column.precision >= 0? Integer.toString(element.column.precision) : ""); columnIsIdentity.setSelected(element.column.isIdentityColumn); columnIsVirtual.setSelected(element.column.isVirtual); columnIsNullable.setSelected(element.column.isNullable); } else { columnName.setText(""); columnType.setText(""); columnLength.setText(""); columnPrec.setText(""); columnIsIdentity.setSelected(false); columnIsVirtual.setSelected(false); columnIsNullable.setSelected(false); } primaryKey1.setSelected(element.isPk); return columnDetailsPanel; } @Override protected void updateFromDetailsView(ColumnModel element, JComponent detailsView, List<ColumnModel> model, StringBuilder errorMessage) { String name = columnName.getText().trim(); if (name.equals("")) { errorMessage.append("Name missing."); return; } String type = columnType.getText().trim(); if (type.equals("")) { errorMessage.append("Type missing."); return; } if (element.column != null && !element.column.name.equals(name)) { for (ColumnModel m: model) { if (m.column.name.equals(name)) { errorMessage.append("Name already exists."); return; } } } int length = 0; if (columnLength.getText().trim().length() > 0) { try { length = Integer.parseInt(columnLength.getText().trim()); } catch (NumberFormatException e) { errorMessage.append("Length is not valid."); return; } } int prec = -1; if (columnPrec.getText().trim().length() > 0) { try { prec = Integer.parseInt(columnPrec.getText().trim()); } catch (NumberFormatException e) { errorMessage.append("Precision is not valid."); return; } } Column c = new Column(name, type, length, prec); c.isIdentityColumn = columnIsIdentity.isSelected(); c.isVirtual = columnIsVirtual.isSelected(); c.isNullable = columnIsNullable.isSelected(); element.column = c; element.isPk = primaryKey1.isSelected(); } @Override protected Object[] toColumnList(ColumnModel element, int index) { String type = toSql(element.column); int i = type.indexOf(" "); if (i > 0) { type = type.substring(i).trim(); } return new String[] { element.column.name, type }; } @Override protected Color getForegroundColor(ColumnModel element, int column) { if (element.isPk && column == 0) { return Color.RED; } return null; } protected Dimension detailsViewMinSize() { return new Dimension(300, 0); } }; /** * Creates new form TableEditor * * @param tables all tables (as csv-lines) * @param associations all associations (as csv-line) * @param excludeFromDeletionList list of tables to be excluded from deletion * @param initialDataTablesList list of tables to export entirely if in closure of subject */ public TableEditor(java.awt.Dialog parent, Map<String, String> displayNames, Collection<Line> tables, List<Line> associations, List<String> excludeFromDeletionList) { super(parent, true); this.tables = tables; this.associations = associations; this.excludeFromDeletionList = excludeFromDeletionList; this.displayNames = displayNames; initComponents(); setSize(600, 600); setLocation(parent.getLocation().x + parent.getSize().width/2 - getPreferredSize().width/2, parent.getLocation().y + parent.getSize().height/2 - getPreferredSize().height/2); UIUtil.initPeer(); } /** * Gets list of current primary key columns. * * @return list of current primary key columns */ private List<Column> getCurrentPrimaryKeys() { List<Column> pk = new ArrayList<Column>(); for (int i = 2; i < currentTableLine.length; ++i) { if (currentTableLine.cells.get(i).length() == 0) { break; } pk.add(Column.parse(currentTableLine.cells.get(i))); } return pk; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; columnDetailsPanel = new javax.swing.JPanel(); primaryKey1 = new javax.swing.JCheckBox(); columnName = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); columnType = new javax.swing.JTextField(); columnLength = new javax.swing.JTextField(); columnPrec = new javax.swing.JTextField(); columnIsIdentity = new javax.swing.JCheckBox(); columnIsVirtual = new javax.swing.JCheckBox(); columnIsNullable = new javax.swing.JCheckBox(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); nameField = new javax.swing.JTextField(); upsertCheckbox = new javax.swing.JCheckBox(); jPanel1 = new javax.swing.JPanel(); jButton1 = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jButton2 = new javax.swing.JButton(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); excludeFromDeletion = new javax.swing.JCheckBox(); jPanel2 = new javax.swing.JPanel(); slotPanel = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); displayName = new javax.swing.JTextField(); columnDetailsPanel.setLayout(new java.awt.GridBagLayout()); primaryKey1.setText(" primary key"); primaryKey1.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); columnDetailsPanel.add(primaryKey1, gridBagConstraints); columnName.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { columnNameActionPerformed(evt); } }); columnName.addInputMethodListener(new java.awt.event.InputMethodListener() { public void caretPositionChanged(java.awt.event.InputMethodEvent evt) { } public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) { columnNameInputMethodTextChanged(evt); } }); columnName.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { columnNameKeyReleased(evt); } public void keyTyped(java.awt.event.KeyEvent evt) { columnNameKeyTyped(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); columnDetailsPanel.add(columnName, gridBagConstraints); jLabel8.setText("Name "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; columnDetailsPanel.add(jLabel8, gridBagConstraints); jLabel9.setText("Type "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; columnDetailsPanel.add(jLabel9, gridBagConstraints); jLabel10.setText("Length "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; columnDetailsPanel.add(jLabel10, gridBagConstraints); jLabel11.setText("Precision "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 10; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; columnDetailsPanel.add(jLabel11, gridBagConstraints); columnType.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { columnTypeActionPerformed(evt); } }); columnType.addInputMethodListener(new java.awt.event.InputMethodListener() { public void caretPositionChanged(java.awt.event.InputMethodEvent evt) { } public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) { columnTypeInputMethodTextChanged(evt); } }); columnType.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { columnTypeKeyReleased(evt); } public void keyTyped(java.awt.event.KeyEvent evt) { columnTypeKeyTyped(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 7; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); columnDetailsPanel.add(columnType, gridBagConstraints); columnLength.setColumns(4); columnLength.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { columnLengthActionPerformed(evt); } }); columnLength.addInputMethodListener(new java.awt.event.InputMethodListener() { public void caretPositionChanged(java.awt.event.InputMethodEvent evt) { } public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) { columnLengthInputMethodTextChanged(evt); } }); columnLength.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { columnLengthKeyReleased(evt); } public void keyTyped(java.awt.event.KeyEvent evt) { columnLengthKeyTyped(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 8; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); columnDetailsPanel.add(columnLength, gridBagConstraints); columnPrec.setColumns(4); columnPrec.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { columnPrecActionPerformed(evt); } }); columnPrec.addInputMethodListener(new java.awt.event.InputMethodListener() { public void caretPositionChanged(java.awt.event.InputMethodEvent evt) { } public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) { columnPrecInputMethodTextChanged(evt); } }); columnPrec.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { columnPrecKeyReleased(evt); } public void keyTyped(java.awt.event.KeyEvent evt) { columnPrecKeyTyped(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 10; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); columnDetailsPanel.add(columnPrec, gridBagConstraints); columnIsIdentity.setText(" identity column (MS SQL)"); columnIsIdentity.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); columnDetailsPanel.add(columnIsIdentity, gridBagConstraints); columnIsIdentity.getAccessibleContext().setAccessibleName(""); columnIsVirtual.setText(" virtual"); columnIsVirtual.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); columnDetailsPanel.add(columnIsVirtual, gridBagConstraints); columnIsNullable.setText(" nullable"); columnIsNullable.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 6; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(1, 0, 4, 0); columnDetailsPanel.add(columnIsNullable, gridBagConstraints); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Table"); getContentPane().setLayout(new java.awt.GridBagLayout()); jLabel1.setText(" Name "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; getContentPane().add(jLabel1, gridBagConstraints); jLabel2.setText(" Columns "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 9; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(jLabel2, gridBagConstraints); nameField.setText("jTextField1j"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(nameField, gridBagConstraints); upsertCheckbox.setText(" generate 'Upsert'-statements for exported rows"); upsertCheckbox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 10; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(8, 0, 0, 0); getContentPane().add(upsertCheckbox, gridBagConstraints); jPanel1.setLayout(new java.awt.GridBagLayout()); jButton1.setText("Ok"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.gridheight = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 0); jPanel1.add(jButton1, gridBagConstraints); jLabel3.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N jLabel3.setText(" "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(8, 0, 0, 0); jPanel1.add(jLabel3, gridBagConstraints); jButton2.setText("Cancel"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.gridheight = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 0); jPanel1.add(jButton2, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 40; gridBagConstraints.gridwidth = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(jPanel1, gridBagConstraints); jLabel5.setText(" "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; getContentPane().add(jLabel5, gridBagConstraints); jLabel6.setText(" "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 10; getContentPane().add(jLabel6, gridBagConstraints); excludeFromDeletion.setText(" exclude from deletion"); excludeFromDeletion.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); excludeFromDeletion.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { excludeFromDeletionActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 14; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(excludeFromDeletion, gridBagConstraints); jPanel2.setLayout(new java.awt.GridBagLayout()); slotPanel.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridheight = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanel2.add(slotPanel, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 9; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(jPanel2, gridBagConstraints); jLabel4.setText(" "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.weightx = 1.0; getContentPane().add(jLabel4, gridBagConstraints); jLabel7.setText(" Display name "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 20; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; getContentPane().add(jLabel7, gridBagConstraints); displayName.setText("jTextField1"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 20; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; getContentPane().add(displayName, gridBagConstraints); pack(); }// </editor-fold>//GEN-END:initComponents private String toSql(Column column) { return column.toSQL(null) + (column.isIdentityColumn? " identity" : "") + (column.isVirtual? " virtual" : "") + (column.isNullable? " null" : ""); } private void excludeFromDeletionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_excludeFromDeletionActionPerformed }//GEN-LAST:event_excludeFromDeletionActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed String msg = null; if (nameField.getText().trim().length() == 0) { msg = "No table name"; } else { for (Line l: tables) { if (l != currentTableLine && l.cells.get(0).equals(nameField.getText().trim())) { msg = "Table already exists"; break; } } } if (msg == null) { String dn = displayNames.get(currentTableLine.cells.get(0)); if (dn == null) { dn = ""; } if (!displayName.getText().trim().equals(dn)) { if (displayNames.containsValue(displayName.getText().trim())) { msg = "duplicate display name"; } } } if (msg != null) { JOptionPane.showMessageDialog(this, msg, "Error", JOptionPane.ERROR_MESSAGE); } else { isOk = true; setVisible(false); } }//GEN-LAST:event_jButton1ActionPerformed private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed setVisible(false); }//GEN-LAST:event_jButton2ActionPerformed private void columnNameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_columnNameActionPerformed }//GEN-LAST:event_columnNameActionPerformed private void columnNameInputMethodTextChanged(java.awt.event.InputMethodEvent evt) {//GEN-FIRST:event_columnNameInputMethodTextChanged }//GEN-LAST:event_columnNameInputMethodTextChanged private void columnNameKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnNameKeyReleased }//GEN-LAST:event_columnNameKeyReleased private void columnNameKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnNameKeyTyped }//GEN-LAST:event_columnNameKeyTyped private void columnTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_columnTypeActionPerformed }//GEN-LAST:event_columnTypeActionPerformed private void columnTypeInputMethodTextChanged(java.awt.event.InputMethodEvent evt) {//GEN-FIRST:event_columnTypeInputMethodTextChanged }//GEN-LAST:event_columnTypeInputMethodTextChanged private void columnTypeKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnTypeKeyReleased }//GEN-LAST:event_columnTypeKeyReleased private void columnTypeKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnTypeKeyTyped }//GEN-LAST:event_columnTypeKeyTyped private void columnLengthActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_columnLengthActionPerformed }//GEN-LAST:event_columnLengthActionPerformed private void columnLengthInputMethodTextChanged(java.awt.event.InputMethodEvent evt) {//GEN-FIRST:event_columnLengthInputMethodTextChanged }//GEN-LAST:event_columnLengthInputMethodTextChanged private void columnLengthKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnLengthKeyReleased }//GEN-LAST:event_columnLengthKeyReleased private void columnLengthKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnLengthKeyTyped }//GEN-LAST:event_columnLengthKeyTyped private void columnPrecActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_columnPrecActionPerformed }//GEN-LAST:event_columnPrecActionPerformed private void columnPrecInputMethodTextChanged(java.awt.event.InputMethodEvent evt) {//GEN-FIRST:event_columnPrecInputMethodTextChanged }//GEN-LAST:event_columnPrecInputMethodTextChanged private void columnPrecKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnPrecKeyReleased }//GEN-LAST:event_columnPrecKeyReleased private void columnPrecKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_columnPrecKeyTyped }//GEN-LAST:event_columnPrecKeyTyped private boolean isOk; private Line currentTableLine; private Line currentColumnLine; /** * Edits a table (as csv-line). * * @param tableLine the table-line * @return <code>true</code> if line was modified */ public boolean edit(Line tableLine, Map<String, Line> columnLines) { needsSave = false; currentTableLine = tableLine; currentColumnLine = columnLines.get(tableLine.cells.get(0)); if (currentColumnLine == null) { currentColumnLine = new CsvFile.Line("", new ArrayList<String>(Arrays.asList(tableLine.cells.get(0)))); if (currentColumnLine.length == 0) { // new table without name currentColumnLine.length = 1; } } List<String> oldTableLineCells = new ArrayList<String>(currentTableLine.cells); int oldTableLineLength = currentTableLine.length; List<String> oldColumnLineCells = new ArrayList<String>(currentColumnLine.cells); int oldColumnLineLength = currentColumnLine.length; String dn = ""; if (displayNames.containsKey(tableLine.cells.get(0))) { dn = displayNames.get(tableLine.cells.get(0)); } displayName.setText(dn); nameField.setText(tableLine.cells.get(0)); upsertCheckbox.setSelected("Y".equals(tableLine.cells.get(1))); String origDisplayName = displayName.getText().trim(); String origName = nameField.getText().trim(); boolean origUpsert = upsertCheckbox.isSelected(); isOk = false; boolean origExcludeSet = excludeFromDeletionList.contains(origName); excludeFromDeletion.setSelected(origExcludeSet); ColumnListEditor columnListEditor = new ColumnListEditor(); slotPanel.removeAll(); GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; slotPanel.add(columnListEditor, gridBagConstraints); List<ColumnModel> columnModel = new ArrayList<ColumnModel>(); for (int i = 1; i < currentColumnLine.length; ++i) { ColumnModel cm = new ColumnModel(); cm.column = Column.parse(currentColumnLine.cells.get(i)); for (Column pk: getCurrentPrimaryKeys()) { if (pk.name.equals(cm.column.name)) { cm.isPk = true; break; } } columnModel.add(cm); } columnListEditor.setModel(columnModel); setVisible(true); boolean excludeSet = excludeFromDeletion.isSelected(); if (columnListEditor.needsSave()) { needsSave = true; } if (isOk) { List<String> line = new ArrayList<String>(); List<String> tLine = new ArrayList<String>(); line.add(""); tLine.add(""); tLine.add(""); for (ColumnModel cm: columnModel) { line.add(toSql(cm.column)); if (cm.isPk) { tLine.add(toSql(cm.column)); } } currentColumnLine.cells.clear(); currentColumnLine.cells.addAll(line); currentColumnLine.length = line.size(); tableLine.cells.clear(); tableLine.cells.addAll(tLine); tableLine.length = tLine.size(); for (int i = 0; i < 10; ++i) { currentColumnLine.cells.add(""); tableLine.cells.add(""); } } if (isOk && !( origDisplayName.equals(displayName.getText()) && origName.equals(nameField.getText()) && !needsSave && origUpsert == upsertCheckbox.isSelected() && origExcludeSet == excludeSet)) { columnLines.remove(currentColumnLine.cells.get(0)); currentColumnLine.cells.set(0, nameField.getText().trim()); columnLines.put(currentColumnLine.cells.get(0), currentColumnLine); tableLine.cells.set(0, nameField.getText().trim()); tableLine.cells.set(1, upsertCheckbox.isSelected()? "Y" : "N"); // update author for (int i = 0; i < tableLine.cells.size() ; ++i) { if ("".equals(tableLine.cells.get(i))) { tableLine.cells.set(i+1, DataModelEditor.DATA_MODEL_EDITOR_AUTHOR); break; } } //rename associations source/destination for (Line a: associations) { if (a.cells.get(0).equalsIgnoreCase(origName.trim())) { a.cells.set(0, nameField.getText().trim()); } if (a.cells.get(1).equalsIgnoreCase(origName.trim())) { a.cells.set(1, nameField.getText().trim()); } } displayNames.remove(origName); dn = displayName.getText().trim(); if (dn.length() > 0) { displayNames.put(nameField.getText().trim(), dn); } excludeFromDeletionList.remove(origName); if (excludeSet) { excludeFromDeletionList.add(nameField.getText().trim()); } return true; } else { currentTableLine.cells.clear(); currentTableLine.cells.addAll(oldTableLineCells); currentTableLine.length = oldTableLineLength; currentColumnLine.cells.clear(); currentColumnLine.cells.addAll(oldColumnLineCells); currentColumnLine.length = oldColumnLineLength; } return false; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel columnDetailsPanel; private javax.swing.JCheckBox columnIsIdentity; private javax.swing.JCheckBox columnIsNullable; private javax.swing.JCheckBox columnIsVirtual; private javax.swing.JTextField columnLength; private javax.swing.JTextField columnName; private javax.swing.JTextField columnPrec; private javax.swing.JTextField columnType; private javax.swing.JTextField displayName; private javax.swing.JCheckBox excludeFromDeletion; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JTextField nameField; private javax.swing.JCheckBox primaryKey1; private javax.swing.JPanel slotPanel; private javax.swing.JCheckBox upsertCheckbox; // End of variables declaration//GEN-END:variables private static final long serialVersionUID = -3331167410435129849L; }