Revision: 3614
Author: [email protected]
Date: Mon Jun 14 08:38:33 2010
Log: NEW - bug 2458: Create Critic Manager
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2458

Corrected the RelationshipMappingTypeCritic to let the Criticizer walk to the column mapping children instead of making the criticizer skip it and have a critic do extra steps.
http://code.google.com/p/power-architect/source/detail?r=3614

Modified:
 /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/Criticizer.java
/trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/RelationshipMappingTypeCritic.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/Criticizer.java Wed Jun 9 12:14:03 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/Criticizer.java Mon Jun 14 08:38:33 2010
@@ -26,7 +26,6 @@
 import ca.sqlpower.object.SPObject;
 import ca.sqlpower.sqlobject.SQLDatabase;
 import ca.sqlpower.sqlobject.SQLObjectException;
-import ca.sqlpower.sqlobject.SQLRelationship;
 import ca.sqlpower.sqlobject.SQLTable;
 import ca.sqlpower.sqlobject.SQLRelationship.SQLImportedKey;

@@ -72,8 +71,7 @@
         List<Criticism> criticisms = new ArrayList<Criticism>();

         // skip types that don't warrant criticism
-        if ( (!(root instanceof SQLDatabase)) &&
-             (!(root instanceof SQLRelationship.ColumnMapping)) ) {
+        if ( (!(root instanceof SQLDatabase))) {
             for (Critic critic : critics) {
                 List<Criticism> newCriticisms = critic.criticize(root);
                 criticisms.addAll(newCriticisms);
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/RelationshipMappingTypeCritic.java Fri Jun 11 13:42:58 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/ddl/critic/impl/RelationshipMappingTypeCritic.java Mon Jun 14 08:38:33 2010
@@ -28,9 +28,9 @@
 import ca.sqlpower.architect.ddl.critic.Criticism;
 import ca.sqlpower.architect.ddl.critic.QuickFix;
 import ca.sqlpower.sqlobject.SQLColumn;
-import ca.sqlpower.sqlobject.SQLRelationship;
 import ca.sqlpower.sqlobject.SQLTable;
 import ca.sqlpower.sqlobject.UserDefinedSQLType;
+import ca.sqlpower.sqlobject.SQLRelationship.ColumnMapping;

 /**
  * Critic that checks for relationships that do not map any columns between
@@ -42,52 +42,44 @@
super(StarterPlatformTypes.GENERIC.getName(), "Relationships map columns of different types");
     }

-    /**
- * XXX This critic accesses children of the object it is criticizing. This - * is more difficult to make safe when we move the critics to the background
-     * thread.
-     */
     public List<Criticism> criticize(Object so) {
- if (!(so instanceof SQLRelationship)) return Collections.emptyList();
-        SQLRelationship subject = (SQLRelationship) so;
+        if (!(so instanceof ColumnMapping)) return Collections.emptyList();
+        ColumnMapping cm = (ColumnMapping) so;
         List<Criticism> criticisms = new ArrayList<Criticism>();
-        for (SQLRelationship.ColumnMapping cm : subject.getChildren(
-                SQLRelationship.ColumnMapping.class)) {
- if (ArchitectUtils.columnsDiffer(cm.getFkColumn(), cm.getPkColumn())) {
-                final SQLColumn parentColumn = cm.getPkColumn();
-                final SQLTable parentTable = parentColumn.getParent();
-                final SQLColumn childColumn = cm.getFkColumn();
-                final SQLTable childTable = childColumn.getParent();
-                criticisms.add(new Criticism(
-                        subject,
- "Columns related by FK constraint have different types",
-                        this,
- new QuickFix("Change type of " + childTable.getName() + "." + childColumn.getName() + - " (child column) to " + parentColumn.getUserDefinedSQLType().getUpstreamType().getName()) {
-                            @Override
-                            public void apply() {
- UserDefinedSQLType typeToUpdate = childColumn.getUserDefinedSQLType(); - UserDefinedSQLType typeToMatch = parentColumn.getUserDefinedSQLType(); - typeToUpdate.setUpstreamType(typeToMatch.getUpstreamType()); - childColumn.setType(parentColumn.getType()); - childColumn.setPrecision(parentColumn.getPrecision()); - childColumn.setScale(parentColumn.getScale());
-                            }
-                        },
- new QuickFix("Change type of " + parentTable.getName() + "." + parentColumn.getName() + - " (parent column) to " + childColumn.getUserDefinedSQLType().getUpstreamType().getName()) {
-                            @Override
-                            public void apply() {
- UserDefinedSQLType typeToUpdate = parentColumn.getUserDefinedSQLType(); - UserDefinedSQLType typeToMatch = childColumn.getUserDefinedSQLType(); - typeToUpdate.setUpstreamType(typeToMatch.getUpstreamType()); - parentColumn.setType(childColumn.getType()); - parentColumn.setPrecision(childColumn.getPrecision()); - parentColumn.setScale(childColumn.getScale());
-                            }
-                        }
-                ));
-            }
+ if (ArchitectUtils.columnsDiffer(cm.getFkColumn(), cm.getPkColumn())) {
+            final SQLColumn parentColumn = cm.getPkColumn();
+            final SQLTable parentTable = parentColumn.getParent();
+            final SQLColumn childColumn = cm.getFkColumn();
+            final SQLTable childTable = childColumn.getParent();
+            criticisms.add(new Criticism(
+                    cm.getParent(),
+ "Columns related by FK constraint have different types",
+                    this,
+ new QuickFix("Change type of " + childTable.getName() + "." + childColumn.getName() + + " (child column) to " + parentColumn.getUserDefinedSQLType().getUpstreamType().getName()) {
+                        @Override
+                        public void apply() {
+ UserDefinedSQLType typeToUpdate = childColumn.getUserDefinedSQLType(); + UserDefinedSQLType typeToMatch = parentColumn.getUserDefinedSQLType(); + typeToUpdate.setUpstreamType(typeToMatch.getUpstreamType());
+                            childColumn.setType(parentColumn.getType());
+ childColumn.setPrecision(parentColumn.getPrecision());
+                            childColumn.setScale(parentColumn.getScale());
+                        }
+                    },
+ new QuickFix("Change type of " + parentTable.getName() + "." + parentColumn.getName() + + " (parent column) to " + childColumn.getUserDefinedSQLType().getUpstreamType().getName()) {
+                        @Override
+                        public void apply() {
+ UserDefinedSQLType typeToUpdate = parentColumn.getUserDefinedSQLType(); + UserDefinedSQLType typeToMatch = childColumn.getUserDefinedSQLType(); + typeToUpdate.setUpstreamType(typeToMatch.getUpstreamType());
+                            parentColumn.setType(childColumn.getType());
+ parentColumn.setPrecision(childColumn.getPrecision());
+                            parentColumn.setScale(childColumn.getScale());
+                        }
+                    }
+            ));
         }
         return criticisms;
     }

Reply via email to