Author: aadamchik
Date: Sun Aug 19 07:15:54 2007
New Revision: 567407

URL: http://svn.apache.org/viewvc?view=rev&rev=567407
Log:
CAY-843 Remove arbitrary reverse relationship mapping limitations 

Modified:
    
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java
    
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateClientDefaultsLoadingTest.java

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java?view=diff&rev=567407&r1=567406&r2=567407
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ChildDiffLoader.java
 Sun Aug 19 07:15:54 2007
@@ -30,6 +30,7 @@
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.query.ObjectIdQuery;
 import org.apache.cayenne.query.Query;
+import org.apache.cayenne.reflect.ArcProperty;
 import org.apache.cayenne.reflect.AttributeProperty;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.Property;
@@ -110,7 +111,7 @@
 
         ClassDescriptor descriptor = 
context.getEntityResolver().getClassDescriptor(
                 ((ObjectId) nodeId).getEntityName());
-        Property property = descriptor.getProperty(arcId.toString());
+        ArcProperty property = (ArcProperty) 
descriptor.getProperty(arcId.toString());
 
         property.visit(new PropertyVisitor() {
 
@@ -119,7 +120,12 @@
             }
 
             public boolean visitToMany(ToManyProperty property) {
-                property.addTarget(source, target, false);
+                // connect reverse arc if the relationship is marked as 
"runtime"
+                ArcProperty reverseArc = property.getComplimentaryReverseArc();
+                boolean autoConnectReverse = reverseArc != null
+                        && reverseArc.getRelationship().isRuntime();
+
+                property.addTarget(source, target, autoConnectReverse);
                 return false;
             }
 
@@ -143,8 +149,13 @@
             }
 
             public boolean visitToMany(ToManyProperty property) {
+                // connect reverse arc if the relationship is marked as 
"runtime"
+                ArcProperty reverseArc = property.getComplimentaryReverseArc();
+                boolean autoConnectReverse = reverseArc != null
+                        && reverseArc.getRelationship().isRuntime();
+
                 Persistent target = findObject(targetNodeId);
-                property.removeTarget(source, target, false);
+                property.removeTarget(source, target, autoConnectReverse);
                 return false;
             }
 

Modified: 
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateClientDefaultsLoadingTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateClientDefaultsLoadingTest.java?view=diff&rev=567407&r1=567406&r2=567407
==============================================================================
--- 
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateClientDefaultsLoadingTest.java
 (original)
+++ 
cayenne/main/trunk/itests/cayenne-api/src/test/java/org/apache/cayenne/itest/cpa/conf/RuntimeLoaderDelegateClientDefaultsLoadingTest.java
 Sun Aug 19 07:15:54 2007
@@ -59,8 +59,7 @@
                o2 = (DefaultsTable3) DataObjectUtils.objectForPK(clientContext,
                                DefaultsTable3.class, 
Collections.singletonMap("id", 2));
 
-               // TODO: andrus 8/15/2007 this fails
-               // assertEquals(1, o2.getDefaultTable4s().size());
-               // assertEquals(0, o1.getDefaultTable4s().size());
+               assertEquals(1, o2.getDefaultTable4s().size());
+               assertEquals(0, o1.getDefaultTable4s().size());
        }
 }


Reply via email to