Author: jfuerth
Date: Fri Oct 10 08:52:59 2008
New Revision: 2771

Modified:
   trunk/regress/ca/sqlpower/architect/swingui/TestColumnEditPanel.java
   trunk/src/ca/sqlpower/architect/swingui/ColumnEditPanel.java
   trunk/src/ca/sqlpower/architect/swingui/messages.properties

Log:
Refresh of the column edit panel UI. It now uses the jgoodies form layout, and is ready for the implementation of multi-column edit!

Modified: trunk/regress/ca/sqlpower/architect/swingui/TestColumnEditPanel.java
==============================================================================
--- trunk/regress/ca/sqlpower/architect/swingui/TestColumnEditPanel.java (original) +++ trunk/regress/ca/sqlpower/architect/swingui/TestColumnEditPanel.java Fri Oct 10 08:52:59 2008
@@ -88,8 +88,7 @@
assertEquals(col3.isAutoIncrement(), panel.getColAutoInc().getModel().isSelected()); assertEquals(col3.isPrimaryKey(), panel.getColInPK().getModel().isSelected()); assertEquals(col3.getNullable() == DatabaseMetaData.columnNullable, panel.getColNullable().getModel().isSelected());
-               assertEquals("None Specified",panel.getSourceDB().getText());
-               assertEquals("None 
Specified",panel.getSourceTableCol().getText());
+               assertEquals("None Specified",panel.getSourceLabel().getText());

         panel = new ColumnEditPanel(col2, session);

@@ -100,8 +99,7 @@
assertEquals(col2.isAutoIncrement(), panel.getColAutoInc().getModel().isSelected()); assertEquals(col2.isPrimaryKey(), panel.getColInPK().getModel().isSelected()); assertEquals(col2.getNullable() == DatabaseMetaData.columnNullable, panel.getColNullable().getModel().isSelected());
-        assertEquals("None Specified",panel.getSourceDB().getText());
-        assertEquals("None Specified",panel.getSourceTableCol().getText());
+        assertEquals("None Specified",panel.getSourceLabel().getText());
        }

        public void testApplyChanges() {

Modified: trunk/src/ca/sqlpower/architect/swingui/ColumnEditPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/ColumnEditPanel.java        
(original)
+++ trunk/src/ca/sqlpower/architect/swingui/ColumnEditPanel.java Fri Oct 10 08:52:59 2008
@@ -18,8 +18,8 @@
  */
 package ca.sqlpower.architect.swingui;

-import java.awt.BorderLayout;
-import java.awt.Dimension;
+import java.awt.Component;
+import java.awt.Font;
 import java.awt.Window;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -28,12 +28,13 @@
 import java.sql.DatabaseMetaData;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;

-import javax.swing.Box;
-import javax.swing.BoxLayout;
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
+import javax.swing.JComponent;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -43,6 +44,7 @@
 import javax.swing.JTextField;
 import javax.swing.SpinnerNumberModel;
 import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
@@ -58,8 +60,13 @@
 import ca.sqlpower.architect.SQLObjectEvent;
 import ca.sqlpower.architect.SQLObjectListener;
 import ca.sqlpower.architect.SQLType;
+import ca.sqlpower.architect.ddl.DDLUtils;
 import ca.sqlpower.swingui.DataEntryPanel;

+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.layout.RowSpec;
+
 /**
* A DataEntryPanel implementation that is capable of modifying the properties * of one or more columns. The user interface is slightly different in multi-column
@@ -69,6 +76,8 @@

private static final Logger logger = Logger.getLogger(ColumnEditPanel.class);

+ private static final Font TITLE_FONT = UIManager.getFont("Label.font").deriveFont(Font.BOLD, 10f);
+
     /**
      * The column we're editing.
      */
@@ -76,9 +85,17 @@

     private final JPanel panel;

-    private final JLabel sourceDB;
-
-    private final JLabel sourceTableCol;
+    /**
+     * Mapping of data entry components to the checkboxes that say whether
+     * or not the value should be applied.
+     */
+ private final Map<JComponent, JCheckBox> componentEnabledMap = new HashMap<JComponent, JCheckBox>();
+
+    /**
+     * Label that shows where the column was reverse engineered from, or
+     * where its data comes from when building an ETL mapping.
+     */
+    private final JLabel sourceLabel;

     private final JTextField colName;

@@ -131,49 +148,75 @@
         }
         this.column = col;

-        panel = new JPanel();
+        FormLayout layout = new FormLayout(
+                "pref:grow, 4dlu, pref:grow",
+                "");
+        layout.setColumnGroups(new int[][] { { 1, 3 } } );
+        panel = new JPanel(layout);
+        CellConstraints cc = new CellConstraints();

-        JPanel centerBox = new JPanel();
-        centerBox.setLayout(new BoxLayout(centerBox, BoxLayout.Y_AXIS));
-        centerBox.add(Box.createVerticalGlue());
-        JPanel centerPanel = new JPanel();
-        centerPanel.setLayout(new FormLayout(5, 5));
-
- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.sourceDb"))); //$NON-NLS-1$
-        centerPanel.add(sourceDB = new JLabel());
-
- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.sourceDbColumn"))); //$NON-NLS-1$
-        centerPanel.add(sourceTableCol = new JLabel());
-
- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.name"))); //$NON-NLS-1$
-        centerPanel.add(colName = new JTextField());
+        int row = 1;
+        layout.appendRow(new RowSpec("p"));
+ panel.add(makeTitle(Messages.getString("ColumnEditPanel.source")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
+        layout.appendRow(new RowSpec("p"));
+        panel.add(sourceLabel = new JLabel(), cc.xyw(1, row++, 3));

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.type"))); //$NON-NLS-1$
-        centerPanel.add(colType = createColTypeEditor());
+        layout.appendRow(new RowSpec("4dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(makeTitle(Messages.getString("ColumnEditPanel.name")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
+        layout.appendRow(new RowSpec("p"));
+        panel.add(colName = new JTextField(), cc.xyw(1, row++, 3));
+
+        layout.appendRow(new RowSpec("4dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(makeTitle(Messages.getString("ColumnEditPanel.type")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
+        layout.appendRow(new RowSpec("p"));
+        panel.add(colType = createColTypeEditor(), cc.xyw(1, row++, 3));
         colType.addActionListener(this);

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.precision"))); //$NON-NLS-1$
-        centerPanel.add(colPrec = createPrecisionEditor());
+        layout.appendRow(new RowSpec("4dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(makeTitle(Messages.getString("ColumnEditPanel.precision")), cc.xy(1, row)); //$NON-NLS-1$ + panel.add(makeTitle(Messages.getString("ColumnEditPanel.scale")), cc.xy(3, row++)); //$NON-NLS-1$
+
+        layout.appendRow(new RowSpec("p"));
+        panel.add(colPrec = createPrecisionEditor(), cc.xy(1, row));
+        panel.add(colScale = createScaleEditor(), cc.xy(3, row++));

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.scale"))); //$NON-NLS-1$
-        centerPanel.add(colScale = createScaleEditor());
+        layout.appendRow(new RowSpec("4dlu"));
+        row++;

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.inPrimaryKey"))); //$NON-NLS-1$
-        centerPanel.add(colInPK = new JCheckBox());
+        layout.appendRow(new RowSpec("p"));
+ panel.add(colInPK = new JCheckBox(Messages.getString("ColumnEditPanel.inPrimaryKey")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
         colInPK.addActionListener(this);

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.allowsNulls"))); //$NON-NLS-1$
-        centerPanel.add(colNullable = new JCheckBox());
+        layout.appendRow(new RowSpec("2dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(colNullable = new JCheckBox(Messages.getString("ColumnEditPanel.allowsNulls")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
         colNullable.addActionListener(this);

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.autoIncrement"))); //$NON-NLS-1$
-        centerPanel.add(colAutoInc = new JCheckBox());
+        layout.appendRow(new RowSpec("2dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(colAutoInc = new JCheckBox(Messages.getString("ColumnEditPanel.autoIncrement")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
         colAutoInc.addActionListener(this);

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.sequenceName"))); //$NON-NLS-1$
-        centerPanel.add(colAutoIncSequenceName = new JTextField());
-        centerPanel.add(new JLabel("")); //$NON-NLS-1$
- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.noteOnSequences"))); //$NON-NLS-1$
+        layout.appendRow(new RowSpec("4dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(makeTitle(Messages.getString("ColumnEditPanel.sequenceName")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
+        layout.appendRow(new RowSpec("p"));
+ panel.add(colAutoIncSequenceName = new JTextField(), cc.xyw(1, row++, 3));

// Listener to update the sequence name when the column name changes
         colName.getDocument().addDocumentListener(new DocumentListener() {
@@ -210,25 +253,33 @@
             }
         });

- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.remarks"))); //$NON-NLS-1$
-        centerPanel.add(new JScrollPane(colRemarks = new JTextArea()));
+        layout.appendRow(new RowSpec("4dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(makeTitle(Messages.getString("ColumnEditPanel.remarks")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
+        layout.appendRow(new RowSpec("fill:pref:grow"));
+ panel.add(new JScrollPane(colRemarks = new JTextArea()), cc.xyw(1, row++, 3)); // TODO grow vertically
         colRemarks.setRows(5);
         colRemarks.setLineWrap(true);
         colRemarks.setWrapStyleWord(true);
-
- centerPanel.add(new JLabel(Messages.getString("ColumnEditPanel.defaultValue"))); //$NON-NLS-1$
-        centerPanel.add(colDefaultValue = new JTextField());
+
+        layout.appendRow(new RowSpec("4dlu"));
+        row++;
+
+        layout.appendRow(new RowSpec("p"));
+ panel.add(makeTitle(Messages.getString("ColumnEditPanel.defaultValue")), cc.xyw(1, row++, 3)); //$NON-NLS-1$
+        layout.appendRow(new RowSpec("p"));
+        panel.add(colDefaultValue = new JTextField(), cc.xyw(1, row++, 3));
         colDefaultValue.addActionListener(this);

- Dimension maxSize = centerPanel.getLayout().preferredLayoutSize(centerPanel);
-        maxSize.width = Integer.MAX_VALUE;
-        centerPanel.setMaximumSize(maxSize);
-        centerBox.add(centerPanel);
-        centerBox.add(Box.createVerticalGlue());
-        panel.add(centerBox, BorderLayout.CENTER);
-
         editColumn(col);
+    }

+    private Component makeTitle(String string) {
+        JLabel label = new JLabel(string);
+        label.setFont(TITLE_FONT);
+        return label;
     }

     private JSpinner createScaleEditor() {
@@ -255,20 +306,14 @@
      *            The column to edit
      */
     private void editColumn(SQLColumn col) throws ArchitectException {
-        if (col.getSourceColumn() == null) {
- sourceDB.setText(Messages.getString("ColumnEditPanel.noneSpecified")); //$NON-NLS-1$ - sourceTableCol.setText(Messages.getString("ColumnEditPanel.noneSpecified")); //$NON-NLS-1$
+        SQLColumn sourceColumn = col.getSourceColumn();
+        if (sourceColumn == null) {
+ sourceLabel.setText(Messages.getString("ColumnEditPanel.noneSpecified")); //$NON-NLS-1$
         } else {
-            StringBuffer sourceDBSchema = new StringBuffer();
- SQLObject so = col.getSourceColumn().getParentTable().getParent();
-            while (so != null) {
-                sourceDBSchema.insert(0, so.getName());
-                sourceDBSchema.insert(0, "."); //$NON-NLS-1$
-                so = so.getParent();
-            }
-            sourceDB.setText(sourceDBSchema.toString().substring(1));
- sourceTableCol.setText(col.getSourceColumn().getParentTable().getName() +
-                    "." + col.getSourceColumn().getName()); //$NON-NLS-1$
+
+            sourceLabel.setText(
+                    DDLUtils.toQualifiedName(
+ sourceColumn.getParentTable()) + "." + sourceColumn.getName());
         }
         colName.setText(col.getName());
         colType.setSelectedItem(SQLType.getType(col.getType()));
@@ -492,13 +537,8 @@
     }

/** Only for testing. Normal client code should not need to call this. */
-    public JLabel getSourceDB() {
-        return sourceDB;
-    }
-
- /** Only for testing. Normal client code should not need to call this. */
-    public JLabel getSourceTableCol() {
-        return sourceTableCol;
+    public JLabel getSourceLabel() {
+        return sourceLabel;
     }

     public boolean hasUnsavedChanges() {

Modified: trunk/src/ca/sqlpower/architect/swingui/messages.properties
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/messages.properties (original)
+++ trunk/src/ca/sqlpower/architect/swingui/messages.properties Fri Oct 10 08:52:59 2008
@@ -73,13 +73,11 @@
 ColumnEditPanel.inPrimaryKey=In Primary Key
 ColumnEditPanel.name=Name
 ColumnEditPanel.noneSpecified=None Specified
-ColumnEditPanel.noteOnSequences=Only applies to target platforms that use sequences
 ColumnEditPanel.precision=Precision
 ColumnEditPanel.remarks=Remarks
 ColumnEditPanel.scale=Scale
-ColumnEditPanel.sequenceName=Sequence Name
-ColumnEditPanel.sourceDb=Source Database
-ColumnEditPanel.sourceDbColumn=Source Table.Column
+ColumnEditPanel.sequenceName=Sequence Name (Only applies to target platforms that use sequences)
+ColumnEditPanel.source=Source for ETL Mapping
 ColumnEditPanel.type=Type
 CompareDMDialog.compareDmDialogTitle=Compare Data Models
 CompareDMFrame.close=Close

Reply via email to