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();