Author: kevin1219
Date: Fri Aug 29 12:58:15 2008
New Revision: 2668

Modified:
   trunk/src/ca/sqlpower/architect/swingui/SQLObjectComboBoxModel.java
   trunk/src/ca/sqlpower/architect/swingui/olap/DimensionEditPanel.java
   trunk/src/ca/sqlpower/architect/swingui/olap/DimensionUsageEditPanel.java
   trunk/src/ca/sqlpower/architect/swingui/olap/HierarchyEditPanel.java
   trunk/src/ca/sqlpower/architect/swingui/olap/LevelEditPanel.java
   trunk/src/ca/sqlpower/architect/swingui/olap/MeasureEditPanel.java
   trunk/src/ca/sqlpower/architect/swingui/olap/SchemaEditPanel.java

Log:
Tested and tweaked the new SQLObjectComboBoxModel, it needed to select null if the selected item was removed. Used the combo box model in the OLAP edit dialogs so they update to objects being added and removed in the model.
Also used the NotNullValidator to enforce required selections.

However, I haven't added the possible connections to the schema database drop down. Also because tables are not the only children under database, I wasn't able to use the new stuff for combo boxes of tables.

Modified: trunk/src/ca/sqlpower/architect/swingui/SQLObjectComboBoxModel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/SQLObjectComboBoxModel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/SQLObjectComboBoxModel.java Fri Aug 29 12:58:15 2008
@@ -106,8 +106,12 @@
         }

         public void dbChildrenRemoved(SQLObjectEvent e) {
-            for (int i : e.getChangedIndices()) {
-                fireListDataEvent(ListDataEvent.INTERVAL_REMOVED, i, i);
+            for (int i = 0; i < e.getChangedIndices().length; i++) {
+                int changedIndex = e.getChangedIndices()[i];
+                if (selectedItem == e.getChildren()[i]) {
+                    setSelectedItem(null);
+                }
+ fireListDataEvent(ListDataEvent.INTERVAL_REMOVED, changedIndex, changedIndex);
             }
         }


Modified: trunk/src/ca/sqlpower/architect/swingui/olap/DimensionEditPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/DimensionEditPanel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/olap/DimensionEditPanel.java Fri Aug 29 12:58:15 2008
@@ -31,8 +31,10 @@
 import ca.sqlpower.architect.olap.OLAPUtil;
 import ca.sqlpower.architect.olap.MondrianModel.Cube;
 import ca.sqlpower.architect.olap.MondrianModel.Dimension;
+import ca.sqlpower.architect.swingui.SQLObjectComboBoxModel;
 import ca.sqlpower.validation.Validator;
 import ca.sqlpower.validation.swingui.FormValidationHandler;
+import ca.sqlpower.validation.swingui.NotNullValidator;
 import ca.sqlpower.validation.swingui.StatusComponent;
 import ca.sqlpower.validation.swingui.ValidatableDataEntryPanel;
 import ca.sqlpower.validation.swingui.ValidationHandler;
@@ -80,9 +82,15 @@
             typeBox.setSelectedItem(DimensionType.StandardDimension);
         }

+        handler = new FormValidationHandler(status, true);
+ Validator validator = new OLAPObjectNameValidator(dimension.getParent(), dimension, false);
+        handler.addValidateObject(nameField, validator);
+
         // private dimensions only.
         if (dimension.getParent() instanceof Cube) {
builder.append("Foreign Key", foreignKeyChooser = new JComboBox()); + handler.addValidateObject(foreignKeyChooser, new NotNullValidator("Foreign key"));
+
             Cube cube = (Cube) dimension.getParent();
             SQLTable factTable = OLAPUtil.tableForCube(cube);
             if (factTable == null) {
@@ -92,8 +100,8 @@
foreignKeyChooser.addItem("Parent Cube Fact table has no columns");
                 foreignKeyChooser.setEnabled(false);
             } else {
+ foreignKeyChooser.setModel(new SQLObjectComboBoxModel(factTable.getColumnsFolder()));
                 for (SQLColumn col : factTable.getColumns()) {
-                    foreignKeyChooser.addItem(col);
                     if (col.getName().equals(dimension.getForeignKey())) {
                         foreignKeyChooser.setSelectedItem(col);
                     }
@@ -102,10 +110,6 @@
         }

         panel = builder.getPanel();
-
-        handler = new FormValidationHandler(status);
- Validator validator = new OLAPObjectNameValidator(dimension.getParent(), dimension, false);
-        handler.addValidateObject(nameField, validator);
     }
     public boolean applyChanges() {
dimension.startCompoundEdit("Started modifying dimension properties");

Modified: trunk/src/ca/sqlpower/architect/swingui/olap/DimensionUsageEditPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/DimensionUsageEditPanel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/olap/DimensionUsageEditPanel.java Fri Aug 29 12:58:15 2008
@@ -30,7 +30,11 @@
 import ca.sqlpower.architect.olap.OLAPUtil;
 import ca.sqlpower.architect.olap.MondrianModel.Cube;
 import ca.sqlpower.architect.olap.MondrianModel.DimensionUsage;
+import ca.sqlpower.architect.swingui.SQLObjectComboBoxModel;
 import ca.sqlpower.swingui.DataEntryPanel;
+import ca.sqlpower.validation.swingui.FormValidationHandler;
+import ca.sqlpower.validation.swingui.NotNullValidator;
+import ca.sqlpower.validation.swingui.StatusComponent;

 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -44,6 +48,12 @@
     private JTextField captionField;

     private JComboBox foreignKeyChooser;
+
+    /**
+     * Validation handler for errors in the dialog
+     */
+    private FormValidationHandler handler;
+    private StatusComponent status = new StatusComponent();

     /**
      * Creates a new property editor for the given dimension usage.
@@ -59,6 +69,7 @@
FormLayout layout = new FormLayout("left:max(40dlu;pref), 3dlu, 80dlu:grow", "");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
         builder.setDefaultDialogBorder();
+        builder.append(status, 3);
builder.append("Caption", captionField = new JTextField(dimensionUsage.getCaption()));
         builder.append("Foreign Key", foreignKeyChooser = new JComboBox());

@@ -71,13 +82,17 @@
foreignKeyChooser.addItem("Parent Cube Fact table has no columns");
             foreignKeyChooser.setEnabled(false);
         } else {
+ foreignKeyChooser.setModel(new SQLObjectComboBoxModel(factTable.getColumnsFolder()));
             for (SQLColumn col : factTable.getColumns()) {
-                foreignKeyChooser.addItem(col);
                 if (col.getName().equals(dimensionUsage.getForeignKey())) {
                     foreignKeyChooser.setSelectedItem(col);
                 }
             }
         }
+
+        handler = new FormValidationHandler(status, true);
+ handler.addValidateObject(foreignKeyChooser, new NotNullValidator("Foreign key"));
+
         panel = builder.getPanel();
     }


Modified: trunk/src/ca/sqlpower/architect/swingui/olap/HierarchyEditPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/HierarchyEditPanel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/olap/HierarchyEditPanel.java Fri Aug 29 12:58:15 2008
@@ -37,8 +37,10 @@
 import ca.sqlpower.architect.olap.OLAPUtil;
 import ca.sqlpower.architect.olap.MondrianModel.Hierarchy;
 import ca.sqlpower.architect.olap.MondrianModel.Table;
+import ca.sqlpower.architect.swingui.SQLObjectComboBoxModel;
 import ca.sqlpower.validation.Validator;
 import ca.sqlpower.validation.swingui.FormValidationHandler;
+import ca.sqlpower.validation.swingui.NotNullValidator;
 import ca.sqlpower.validation.swingui.StatusComponent;
 import ca.sqlpower.validation.swingui.ValidatableDataEntryPanel;
 import ca.sqlpower.validation.swingui.ValidationHandler;
@@ -85,7 +87,7 @@
hasAll.setSelected(hierarchy.getHasAll() != null ? hierarchy.getHasAll() : true); builder.append("All Level Name", allLevelName = new JTextField(hierarchy.getAllLevelName() != null ? hierarchy.getAllLevelName() : "All"));

- builder.append("Table", tableChooser = new JComboBox((new Vector<SQLTable>(tables)))); + builder.append("Table", tableChooser = new JComboBox(new Vector<SQLTable>(tables)));
         builder.append("Primary Key", primaryKey = new JComboBox());

         if (tables.isEmpty()) {
@@ -109,9 +111,10 @@
             }
         });

-        handler = new FormValidationHandler(status);
+        handler = new FormValidationHandler(status, true);
Validator validator = new OLAPObjectNameValidator(hierarchy.getParent(), hierarchy, true);
         handler.addValidateObject(name, validator);
+ handler.addValidateObject(primaryKey, new NotNullValidator("Primary key"));

         panel = builder.getPanel();
     }
@@ -122,15 +125,16 @@
      * @param primaryKeyName Name of the column to set selected.
      */
     private void updateColumns(String primaryKeyName) {
-        primaryKey.removeAllItems();
         SQLTable selectedTable = (SQLTable) tableChooser.getSelectedItem();
         boolean enableColumns = false;
         try {
             if (selectedTable.getColumns().isEmpty()) {
                 primaryKey.addItem("Table has no columns");
             } else {
+               // kind of a hack to trigger the validator.
+                primaryKey.setSelectedItem(null);
+ primaryKey.setModel(new SQLObjectComboBoxModel(selectedTable.getColumnsFolder()));
                 for (SQLColumn col : selectedTable.getColumns()) {
-                    primaryKey.addItem(col);
                     if (col.getName().equalsIgnoreCase(primaryKeyName)) {
                         primaryKey.setSelectedItem(col);
                     }

Modified: trunk/src/ca/sqlpower/architect/swingui/olap/LevelEditPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/LevelEditPanel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/olap/LevelEditPanel.java Fri Aug 29 12:58:15 2008
@@ -59,11 +59,13 @@
 import ca.sqlpower.architect.olap.MondrianModel.Property;
 import ca.sqlpower.architect.olap.MondrianModel.Schema;
 import ca.sqlpower.architect.olap.MondrianModel.Table;
+import ca.sqlpower.architect.swingui.SQLObjectComboBoxModel;
 import ca.sqlpower.swingui.table.EditableJTable;
 import ca.sqlpower.validation.Status;
 import ca.sqlpower.validation.ValidateResult;
 import ca.sqlpower.validation.Validator;
 import ca.sqlpower.validation.swingui.FormValidationHandler;
+import ca.sqlpower.validation.swingui.NotNullValidator;
 import ca.sqlpower.validation.swingui.StatusComponent;
 import ca.sqlpower.validation.swingui.ValidatableDataEntryPanel;
 import ca.sqlpower.validation.swingui.ValidationHandler;
@@ -169,17 +171,18 @@
             columnChooser.addItem("Parent hierarchy table has no columns");
             columnChooser.setEnabled(false);
         } else {
+ columnChooser.setModel(new SQLObjectComboBoxModel(dimensionTable.getColumnsFolder()));
             for (SQLColumn col : dimensionTable.getColumns()) {
-                columnChooser.addItem(col);
                 if (col.getName().equalsIgnoreCase(level.getColumn())) {
                     columnChooser.setSelectedItem(col);
                 }
             }
         }

-        handler = new FormValidationHandler(status);
+        handler = new FormValidationHandler(status, true);
Validator validator = new OLAPObjectNameValidator(level.getParent(), level, false);
         handler.addValidateObject(name, validator);
+ handler.addValidateObject(columnChooser, new NotNullValidator("Column"));

         builder.appendSeparator("Properties");
         propertiesPanel = new PropertiesEditPanel(dimensionTable, handler);

Modified: trunk/src/ca/sqlpower/architect/swingui/olap/MeasureEditPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/MeasureEditPanel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/olap/MeasureEditPanel.java Fri Aug 29 12:58:15 2008
@@ -41,8 +41,10 @@
 import ca.sqlpower.architect.olap.MondrianModel.Measure;
 import ca.sqlpower.architect.olap.MondrianModel.MeasureExpression;
 import ca.sqlpower.architect.olap.MondrianModel.SQL;
+import ca.sqlpower.architect.swingui.SQLObjectComboBoxModel;
 import ca.sqlpower.validation.Validator;
 import ca.sqlpower.validation.swingui.FormValidationHandler;
+import ca.sqlpower.validation.swingui.NotNullValidator;
 import ca.sqlpower.validation.swingui.StatusComponent;
 import ca.sqlpower.validation.swingui.ValidatableDataEntryPanel;
 import ca.sqlpower.validation.swingui.ValidationHandler;
@@ -78,6 +80,7 @@
     public MeasureEditPanel(Measure measure) throws ArchitectException {
         this.measure = measure;

+        handler = new FormValidationHandler(status, true);
         FormLayout layout = new FormLayout(
                 "left:max(40dlu;pref), 3dlu, 80dlu:grow", "");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
@@ -96,6 +99,7 @@
             public void actionPerformed(ActionEvent arg0) {
                 columnChooser.setEnabled(columnRadioButton.isSelected());
                 expression.setEnabled(expRadioButton.isSelected());
+                handler.performFormValidation();
             }
         };

@@ -123,11 +127,11 @@
         } else if (cubeTable.getColumns().isEmpty()) {
             columnChooser.addItem("Parent Cube table has no columns");
         } else {
+ columnChooser.setModel(new SQLObjectComboBoxModel(cubeTable.getColumnsFolder()));
+            columnRadioButton.doClick();
             for (SQLColumn col : cubeTable.getColumns()) {
-                columnChooser.addItem(col);
                 if (col.getName().equalsIgnoreCase(measure.getColumn())) {
                     columnChooser.setSelectedItem(col);
-                    columnRadioButton.doClick();
                 }
             }
             enableColumns = true;
@@ -151,9 +155,9 @@
             expRadioButton.doClick();
         }

-        handler = new FormValidationHandler(status);
Validator validator = new OLAPObjectNameValidator(measure.getParent(), measure, false);
         handler.addValidateObject(name, validator);
+ handler.addValidateObject(columnChooser, new NotNullValidator("Value column"));

         panel = builder.getPanel();
     }

Modified: trunk/src/ca/sqlpower/architect/swingui/olap/SchemaEditPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/SchemaEditPanel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/olap/SchemaEditPanel.java Fri Aug 29 12:58:15 2008
@@ -19,9 +19,6 @@

 package ca.sqlpower.architect.swingui.olap;

-import java.util.List;
-import java.util.Vector;
-
 import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JPanel;
@@ -33,12 +30,17 @@
 import ca.sqlpower.architect.olap.OLAPUtil;
 import ca.sqlpower.architect.olap.MondrianModel.Schema;
 import ca.sqlpower.architect.swingui.ArchitectSwingSession;
-import ca.sqlpower.swingui.DataEntryPanel;
+import ca.sqlpower.architect.swingui.SQLObjectComboBoxModel;
+import ca.sqlpower.validation.swingui.FormValidationHandler;
+import ca.sqlpower.validation.swingui.NotNullValidator;
+import ca.sqlpower.validation.swingui.StatusComponent;
+import ca.sqlpower.validation.swingui.ValidatableDataEntryPanel;
+import ca.sqlpower.validation.swingui.ValidationHandler;

 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;

-public class SchemaEditPanel implements DataEntryPanel {
+public class SchemaEditPanel implements ValidatableDataEntryPanel {

     private JPanel editorPanel;
     private Schema schema;
@@ -46,21 +48,33 @@
     private final JComboBox databaseBox;
     private final JTextField nameField;

+    /**
+     * Validation handler for errors in the dialog
+     */
+    private FormValidationHandler handler;
+    private StatusComponent status = new StatusComponent();
+
public SchemaEditPanel(ArchitectSwingSession session, Schema schema) throws ArchitectException {
         this.schema = schema;

- List<SQLDatabase> databases = session.getRootObject().getChildren();
-
         FormLayout layout = new FormLayout(
                 "left:max(40dlu;pref), 3dlu, 80dlu:grow", "");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
         builder.setDefaultDialogBorder();
- builder.append("Database", databaseBox = new JComboBox(new Vector<SQLDatabase>(databases)));
+
+        builder.append(status, 3);
+ builder.append("Database", databaseBox = new JComboBox(new SQLObjectComboBoxModel(session.getRootObject())));
         OLAPSession osession = OLAPUtil.getSession(schema);
-        if (osession != null && osession.getDatabase() != null) {
+        if (osession.getDatabase() != null) {
             databaseBox.setSelectedItem(osession.getDatabase());
+        } else {
+            databaseBox.setSelectedItem(session.getTargetDatabase());
         }
builder.append("Name", nameField = new JTextField(schema.getName()));
+
+        handler = new FormValidationHandler(status);
+ handler.addValidateObject(databaseBox, new NotNullValidator("Schema"));
+
         editorPanel = builder.getPanel();
     }

@@ -86,6 +100,10 @@

     public boolean hasUnsavedChanges() {
         return true;
+    }
+
+    public ValidationHandler getValidationHandler() {
+        return handler;
     }

 }

Reply via email to