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