You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/03/28 22:29:56 UTC
svn commit: r928492 - in /cayenne/main/branches/STABLE-3.0:
docs/doc/src/main/resources/RELEASE-NOTES.txt
framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java
Author: aadamchik
Date: Sun Mar 28 20:29:55 2010
New Revision: 928492
URL: http://svn.apache.org/viewvc?rev=928492&view=rev
Log:
CAY-1405 Exception when attempting to "Infer Relationships"
Modified:
cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java
Modified: cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=928492&r1=928491&r2=928492&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt Sun Mar 28 20:29:55 2010
@@ -27,6 +27,7 @@ CAY-1397 ROP: Missing the COMMIT state w
CAY-1400 lazyInitParentDomainName will become null when using Child Context
CAY-1401 Cache group removed from modeler query
CAY-1404 ClassCastException during ObjectDetachOperation
+CAY-1405 Exception when attempting to "Infer Relationships"
CAY-1409 Pkgenerator is accessed needlessly for join tables with own database generated PK
----------------------------------
Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java?rev=928492&r1=928491&r2=928492&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/autorelationship/InferRelationshipsControllerBase.java Sun Mar 28 20:29:55 2010
@@ -20,8 +20,8 @@ package org.apache.cayenne.modeler.dialo
import java.awt.Component;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -58,7 +58,6 @@ public class InferRelationshipsControlle
this.dataMap = dataMap;
this.entities = new ArrayList(dataMap.getDbEntities());
this.selectedEntities = new HashSet();
-
}
public void setRelationships() {
@@ -73,25 +72,28 @@ public class InferRelationshipsControlle
}
public void createRelationships(DbEntity entity) {
- Collection<DbAttribute> attr = entity.getAttributes();
- for (DbAttribute attribute : attr) {
+ for (DbAttribute attribute : entity.getAttributes()) {
+
+ for (DbEntity targetEntity : entities) {
+ // TODO: should we handle relationships to self??
+ if (targetEntity == entity) {
+ continue;
+ }
+
+ if (attribute.getName().equalsIgnoreCase(targetEntity.getName() + "_ID")
+ && !attribute.isPrimaryKey()
+ && !targetEntity.getAttributes().isEmpty()) {
- for (DbEntity myEntity : entities) {
- if ((attribute.getName().equalsIgnoreCase(myEntity.getName() + "_ID"))
- && (!attribute.isPrimaryKey())
- && (myEntity.getAttributes().size() != 0)
- && (myEntity != entity)) {
if (!attribute.isForeignKey()) {
InferRelationships myir = new InferRelationships();
myir.setSource(entity);
- myir.setTarget(myEntity);
+ myir.setTarget(targetEntity);
ir.add(myir);
}
- createReversRelationship(myEntity, entity);
+ createReversRelationship(targetEntity, entity);
}
}
-
}
}
@@ -151,15 +153,35 @@ public class InferRelationshipsControlle
}
public void createJoin() {
- for (InferRelationships myir : ir) {
- DbAttribute temp = getJoinAttribute(myir.getSource(), myir.getTarget());
- myir.setJoinSource(temp);
- if (temp.isPrimaryKey()) {
+ Iterator<InferRelationships> it = ir.iterator();
+ while (it.hasNext()) {
+ InferRelationships myir = it.next();
+
+ DbAttribute src = getJoinAttribute(myir.getSource(), myir.getTarget());
+ if (src == null) {
+ // TODO: andrus 03/28/2010 this is pretty inefficient I guess... We should
+ // check for this condition earlier. See CAY-1405 for the map that caused
+ // this issue
+ it.remove();
+ continue;
+ }
+
+ DbAttribute target = getJoinAttribute(myir.getTarget(), myir.getSource());
+ if (target == null) {
+ // TODO: andrus 03/28/2010 this is pretty inefficient I guess... We should
+ // check for this condition earlier. See CAY-1405 for the map that caused
+ // this issue
+ it.remove();
+ continue;
+ }
+
+ myir.setJoinSource(src);
+ if (src.isPrimaryKey()) {
myir.setToMany(true);
}
- myir.setJoinTarget(getJoinAttribute(myir.getTarget(), myir.getSource()));
- }
+ myir.setJoinTarget(target);
+ }
}
public void createName() {