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