Revision: 3728
Author: [email protected]
Date: Wed Jul 14 07:10:07 2010
Log: NEW - bug 2458: Create Critic Manager
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2458

Changed the QuickFix class to CriticFix and added an enum that splits the types of fixes to quick fixes that can fix a problem without user intervention and a dialog fix that will show a dialog the user needs to update to fix the error.
http://code.google.com/p/power-architect/source/detail?r=3728

Added:
 /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticFix.java
Deleted:
 /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/QuickFix.java
Modified:
 /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/Criticism.java
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/CommentCritic.java /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/DuplicateNameCritic.java /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/PhysicalNameCritic.java /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/RelationshipMappingTypeCritic.java /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/ReservedWordsCritic.java /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/SetNullOnNonNullableColumnCritic.java /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSwingUtil.java

=======================================
--- /dev/null
+++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/CriticFix.java Wed Jul 14 07:10:07 2010
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2009, SQL Power Group Inc.
+ *
+ * This file is part of Power*Architect.
+ *
+ * Power*Architect is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Power*Architect is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package ca.sqlpower.architect.ddl.critic;
+
+/**
+ * A quick fix is an automated way to fix a problem with the object model with
+ * the click of a button.
+ */
+public abstract class CriticFix {
+
+    public enum FixType {
+        /**
+         * Fixes of this type can be fixed without user intervention.
+         */
+        QUICK_FIX,
+        /**
+         * Fixes of this type display some kind of dialog the user must
+         * interact with to fix the criticism.
+         */
+        DIALOG_FIX;
+    }
+
+    /**
+     * The description of what will be done if you apply this quick fix.
+     */
+    private final String description;
+
+    private final FixType fixType;
+
+    /**
+     * @param description
+     *            The description of the quick fix should describe how the
+ * object will change. The data of the object to change can be + * used to show the user exactly how the quick fix will make the
+     *            change.
+     */
+    public CriticFix(String description, FixType fixType) {
+        this.description = description;
+        this.fixType = fixType;
+    }
+
+    /**
+     * Calling this method will change the object model as described by the
+     * description to correct the criticism it is associated with.
+     */
+    public abstract void apply();
+
+    public String getDescription() {
+        return description;
+    }
+
+    public FixType getFixType() {
+        return fixType;
+    }
+}
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/QuickFix.java Mon Jun 14 12:45:30 2010
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2009, SQL Power Group Inc.
- *
- * This file is part of Power*Architect.
- *
- * Power*Architect is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * Power*Architect is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package ca.sqlpower.architect.ddl.critic;
-
-/**
- * A quick fix is an automated way to fix a problem with the object model with
- * the click of a button.
- */
-public abstract class QuickFix {
-
-    /**
-     * The description of what will be done if you apply this quick fix.
-     */
-    private final String description;
-
-    /**
-     * @param description
-     *            The description of the quick fix should describe how the
- * object will change. The data of the object to change can be - * used to show the user exactly how the quick fix will make the
-     *            change.
-     */
-    public QuickFix(String description) {
-        this.description = description;
-    }
-
-    /**
-     * Calling this method will change the object model as described by the
-     * description to correct the criticism it is associated with.
-     */
-    public abstract void apply();
-
-    public String getDescription() {
-        return description;
-    }
-}
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/Criticism.java Wed Jun 9 10:53:53 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/Criticism.java Wed Jul 14 07:10:07 2010
@@ -31,7 +31,7 @@

     private final Object subject;
     private final String description;
-    private final QuickFix[] fixes;
+    private final CriticFix[] fixes;

     /**
* The critic that created this criticism. Used to revalidate the criticism
@@ -39,7 +39,7 @@
      */
     private final Critic critic;

- public Criticism(Object subject, String description, Critic critic, QuickFix ... fixes) { + public Criticism(Object subject, String description, Critic critic, CriticFix ... fixes) {
         this.subject = subject;
         this.description = description;
         this.critic = critic;
@@ -54,7 +54,7 @@
         return description;
     }

-    public List<QuickFix> getFixes() {
+    public List<CriticFix> getFixes() {
         return Arrays.asList(fixes);
     }

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/CommentCritic.java Wed Jun 9 10:53:53 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/CommentCritic.java Wed Jul 14 07:10:07 2010
@@ -25,7 +25,8 @@

 import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
 import ca.sqlpower.architect.ddl.critic.Criticism;
-import ca.sqlpower.architect.ddl.critic.QuickFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix.FixType;
 import ca.sqlpower.object.annotation.Accessor;
 import ca.sqlpower.object.annotation.Constructor;
 import ca.sqlpower.object.annotation.ConstructorParameter;
@@ -70,7 +71,7 @@
                     so,
                     "Comment too long for " + getPlatformName(),
                     this,
- new QuickFix("Truncate comment to " + maxLength + " characters") { + new CriticFix("Truncate comment to " + maxLength + " characters", FixType.QUICK_FIX) {
                         public void apply() {
                             if (so instanceof SQLTable) {
                                 SQLTable tbl = (SQLTable)so;
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/DuplicateNameCritic.java Fri Jul 9 15:54:14 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/DuplicateNameCritic.java Wed Jul 14 07:10:07 2010
@@ -27,7 +27,8 @@
 import ca.sqlpower.architect.ArchitectUtils;
 import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
 import ca.sqlpower.architect.ddl.critic.Criticism;
-import ca.sqlpower.architect.ddl.critic.QuickFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix.FixType;
 import ca.sqlpower.sqlobject.SQLColumn;
 import ca.sqlpower.sqlobject.SQLIndex;
 import ca.sqlpower.sqlobject.SQLObject;
@@ -100,7 +101,8 @@
final String newPhysicalName = col.getPhysicalName() + "_" + count;
                 criticisms.add(new Criticism(subject,
"Duplicate physical name \"" + col.getPhysicalName() + "\"", this, - new QuickFix("Replace physical name " + col.getPhysicalName() + " with " + newPhysicalName) { + new CriticFix("Replace physical name " + col.getPhysicalName() + " with " + newPhysicalName,
+                                FixType.QUICK_FIX) {
                             @Override
                             public void apply() {
                                 col.setPhysicalName(newPhysicalName);
@@ -124,7 +126,8 @@
                         "Duplicate physical name \"" + physicalName +
"\". There is a " + ArchitectUtils.convertClassToString(duplicate.getClass())+ " in " + duplicate.getParent().getName() + " with this name already.", this, - new QuickFix("Replace physical name " + obj.getPhysicalName() + " with " + newPhysicalName) { + new CriticFix("Replace physical name " + obj.getPhysicalName() + " with " + newPhysicalName,
+                                FixType.QUICK_FIX) {
                             @Override
                             public void apply() {
                                 if (obj instanceof SQLColumn) {
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/PhysicalNameCritic.java Wed Jun 30 12:59:24 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/PhysicalNameCritic.java Wed Jul 14 07:10:07 2010
@@ -27,7 +27,8 @@
 import ca.sqlpower.architect.ddl.critic.Critic;
 import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
 import ca.sqlpower.architect.ddl.critic.Criticism;
-import ca.sqlpower.architect.ddl.critic.QuickFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix.FixType;
 import ca.sqlpower.object.annotation.Accessor;
 import ca.sqlpower.object.annotation.Constructor;
 import ca.sqlpower.object.annotation.ConstructorParameter;
@@ -91,7 +92,7 @@
                     so,
                     "No physical name for " + so.getName(),
                     this,
-                    new QuickFix("Copy logical name to physical name") {
+ new CriticFix("Copy logical name to physical name", FixType.QUICK_FIX) {
                         public void apply() {
                             so.setPhysicalName(so.getName());
                         }
@@ -104,7 +105,7 @@
                     so,
                     "Physical name too long for " + getPlatformName(),
                     this,
- new QuickFix("Truncate name to " + so.getPhysicalName().substring(0, getMaxNameLength())) { + new CriticFix("Truncate name to " + so.getPhysicalName().substring(0, getMaxNameLength()), FixType.QUICK_FIX) {
                         public void apply() {
if (so.getPhysicalName() != null && so.getPhysicalName().length() > getMaxNameLength()) { so.setPhysicalName(so.getPhysicalName().substring(0, getMaxNameLength()));
@@ -119,7 +120,7 @@
                     so,
                     "Physical name not legal for " + so.getPhysicalName(),
                     this,
- new QuickFix("Replace the physical name with " + newLogicalName) { + new CriticFix("Replace the physical name with " + newLogicalName, FixType.QUICK_FIX) {
                         @Override
                         public void apply() {
                             so.setPhysicalName(newLogicalName);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/RelationshipMappingTypeCritic.java Mon Jul 5 13:31:38 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/RelationshipMappingTypeCritic.java Wed Jul 14 07:10:07 2010
@@ -26,7 +26,8 @@
 import ca.sqlpower.architect.ArchitectUtils;
 import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
 import ca.sqlpower.architect.ddl.critic.Criticism;
-import ca.sqlpower.architect.ddl.critic.QuickFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix.FixType;
 import ca.sqlpower.sqlobject.SQLColumn;
 import ca.sqlpower.sqlobject.SQLTable;
 import ca.sqlpower.sqlobject.UserDefinedSQLType;
@@ -77,7 +78,7 @@
cm.getFkColumn().getShortDisplayName() + " related by FK constraint " +
                                "have different types, scale, or precision",
                     this,
-                    new QuickFix(updateToParentQuickFix) {
+ new CriticFix(updateToParentQuickFix, FixType.QUICK_FIX) {
                         @Override
                         public void apply() {
UserDefinedSQLType typeToUpdate = childColumn.getUserDefinedSQLType();
@@ -88,7 +89,7 @@
                             childColumn.setScale(parentColumn.getScale());
                         }
                     },
-                    new QuickFix(updateToChildQuickFix) {
+ new CriticFix(updateToChildQuickFix, FixType.QUICK_FIX) {
                         @Override
                         public void apply() {
UserDefinedSQLType typeToUpdate = parentColumn.getUserDefinedSQLType();
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/ReservedWordsCritic.java Fri Jun 25 11:31:05 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/ReservedWordsCritic.java Wed Jul 14 07:10:07 2010
@@ -25,7 +25,8 @@

 import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
 import ca.sqlpower.architect.ddl.critic.Criticism;
-import ca.sqlpower.architect.ddl.critic.QuickFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix.FixType;
 import ca.sqlpower.sqlobject.SQLColumn;
 import ca.sqlpower.sqlobject.SQLIndex;
 import ca.sqlpower.sqlobject.SQLObject;
@@ -62,7 +63,7 @@
                                 Messages.getString(typeName),
sqlObject.getPhysicalName() + " (" + sqlObject.getName() + ")"),
                         this,
- new QuickFix(Messages.getString("ReservedWordsCritic.quickFixDesc", newName)) { + new CriticFix(Messages.getString("ReservedWordsCritic.quickFixDesc", newName), FixType.QUICK_FIX) {
                             @Override
                             public void apply() {
                                 sqlObject.setPhysicalName(newName);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/SetNullOnNonNullableColumnCritic.java Fri Jun 25 12:48:20 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/SetNullOnNonNullableColumnCritic.java Wed Jul 14 07:10:07 2010
@@ -26,7 +26,8 @@

 import ca.sqlpower.architect.ddl.critic.CriticAndSettings;
 import ca.sqlpower.architect.ddl.critic.Criticism;
-import ca.sqlpower.architect.ddl.critic.QuickFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix.FixType;
 import ca.sqlpower.sqlobject.SQLColumn;
 import ca.sqlpower.sqlobject.SQLRelationship.ColumnMapping;
 import ca.sqlpower.sqlobject.SQLRelationship.UpdateDeleteRule;
@@ -54,7 +55,7 @@
             criticisms.add(new Criticism(subject,
Messages.getString("SetNullOnNonNullableColumnCritic.deleteRuleCriticism", cm.getParent().getName(), fkcol.getName()), this, - new QuickFix(Messages.getString("SetNullOnNonNullableColumnCritic.quickFix", fkcol.getName())) { + new CriticFix(Messages.getString("SetNullOnNonNullableColumnCritic.quickFix", fkcol.getName()), FixType.QUICK_FIX) {
                                 @Override
                                 public void apply() {
fkcol.setNullable(DatabaseMetaData.columnNullable);
@@ -68,7 +69,7 @@
             criticisms.add(new Criticism(subject,
Messages.getString("SetNullOnNonNullableColumnCritic.updateRuleCriticism", cm.getParent().getName(), fkcol.getName()), this, - new QuickFix(Messages.getString("SetNullOnNonNullableColumnCritic.quickFix", fkcol.getName())) { + new CriticFix(Messages.getString("SetNullOnNonNullableColumnCritic.quickFix", fkcol.getName()), FixType.QUICK_FIX) {
                                 @Override
                                 public void apply() {
fkcol.setNullable(DatabaseMetaData.columnNullable);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSwingUtil.java Mon Jul 5 08:38:08 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticSwingUtil.java Wed Jul 14 07:10:07 2010
@@ -31,7 +31,7 @@
 import javax.swing.text.Document;

 import ca.sqlpower.architect.ddl.critic.CriticismBucket;
-import ca.sqlpower.architect.ddl.critic.QuickFix;
+import ca.sqlpower.architect.ddl.critic.CriticFix;
 import ca.sqlpower.architect.ddl.critic.CriticAndSettings.Severity;
 import ca.sqlpower.architect.diff.SQLObjectComparator;
 import ca.sqlpower.architect.swingui.ArchitectSwingSession;
@@ -108,7 +108,7 @@
                     List<?> list = (List<?>) clickedVal;
                     final JPopupMenu menu = new JPopupMenu();
                     for (Object o : list) {
-                        final QuickFix fix = (QuickFix) o;
+                        final CriticFix fix = (CriticFix) o;
                         menu.add(new AbstractAction(fix.getDescription()) {
                             public void actionPerformed(ActionEvent e) {
                                 fix.apply();

Reply via email to