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 2012/01/21 22:16:54 UTC

svn commit: r1234421 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src: main/java/org/apache/cayenne/remote/ main/java/org/apache/cayenne/util/ test/java/org/apache/cayenne/util/

Author: aadamchik
Date: Sat Jan 21 21:16:54 2012
New Revision: 1234421

URL: http://svn.apache.org/viewvc?rev=1234421&view=rev
Log:
CAY-1616 Remove internal dependencies on deprecated ObjectContext.localObject

refactoring

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/DeepMergeOperation.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java?rev=1234421&r1=1234420&r2=1234421&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/ClientChannel.java Sat Jan 21 21:16:54 2012
@@ -41,7 +41,6 @@ import org.apache.cayenne.map.EntityReso
 import org.apache.cayenne.query.EntityResultSegment;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.util.DeepMergeOperation;
 import org.apache.cayenne.util.ToStringBuilder;
 
@@ -230,11 +229,7 @@ public class ClientChannel implements Da
                     + object);
         }
 
-        // have to resolve descriptor here for every object, as often a query will not
-        // have any info indicating the entity type
-        ClassDescriptor descriptor = resolver.getClassDescriptor(id.getEntityName());
-
-        return merger.merge(object, descriptor);
+        return merger.merge(object);
     }
 
     public GraphDiff onSync(

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/DeepMergeOperation.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/DeepMergeOperation.java?rev=1234421&r1=1234420&r2=1234421&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/DeepMergeOperation.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/DeepMergeOperation.java Sat Jan 21 21:16:54 2012
@@ -29,6 +29,7 @@ import org.apache.cayenne.CayenneRuntime
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.Persistent;
+import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.reflect.AttributeProperty;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.PropertyVisitor;
@@ -46,30 +47,43 @@ import org.apache.cayenne.reflect.ToOneP
  */
 public class DeepMergeOperation {
 
-    private final Map<ObjectId, Persistent> seen;
+    private final EntityResolver entityResolver;
     private final ShallowMergeOperation shallowMergeOperation;
 
     public DeepMergeOperation(ObjectContext context) {
-        this.seen = new HashMap<ObjectId, Persistent>();
+        this.entityResolver = context.getEntityResolver();
         this.shallowMergeOperation = new ShallowMergeOperation(context);
     }
 
+    /**
+     * @deprecated since 3.1 - unused as the object is now stateless
+     */
     public void reset() {
-        seen.clear();
+        // noop
     }
 
     /**
-     * @deprecated since 3.1 use {@link #merge(Persistent, ClassDescriptor)}.
+     * @deprecated since 3.1 use {@link #merge(Persistent)}.
      */
     public Object merge(Object object, ClassDescriptor descriptor) {
+
         if (!(object instanceof Persistent)) {
             throw new CayenneRuntimeException("Expected Persistent, got: " + object);
         }
 
-        return merge((Persistent) object, descriptor);
+        return merge((Persistent) object);
+    }
+
+    public Object merge(final Persistent peerInParentContext) {
+        ClassDescriptor descriptor = entityResolver
+                .getClassDescriptor(peerInParentContext.getObjectId().getEntityName());
+        return merge(peerInParentContext, descriptor, new HashMap<ObjectId, Persistent>());
     }
 
-    public Object merge(final Persistent peerInParentContext, ClassDescriptor descriptor) {
+    private Object merge(
+            final Persistent peerInParentContext,
+            ClassDescriptor descriptor,
+            final Map<ObjectId, Persistent> seen) {
 
         ObjectId id = peerInParentContext.getObjectId();
 
@@ -98,7 +112,8 @@ public class DeepMergeOperation {
 
                     Object destinationTarget = destinationSource != null ? merge(
                             destinationSource,
-                            property.getTargetDescriptor()) : null;
+                            property.getTargetDescriptor(),
+                            seen) : null;
 
                     Object oldTarget = property.isFault(target) ? null : property
                             .readProperty(target);
@@ -121,7 +136,8 @@ public class DeepMergeOperation {
                             Object destinationSource = entry.getValue();
                             Object destinationTarget = destinationSource != null ? merge(
                                     (Persistent) destinationSource,
-                                    property.getTargetDescriptor()) : null;
+                                    property.getTargetDescriptor(),
+                                    seen) : null;
 
                             targetMap.put(entry.getKey(), destinationTarget);
                         }
@@ -134,7 +150,8 @@ public class DeepMergeOperation {
                         for (Object destinationSource : collection) {
                             Object destinationTarget = destinationSource != null ? merge(
                                     (Persistent) destinationSource,
-                                    property.getTargetDescriptor()) : null;
+                                    property.getTargetDescriptor(),
+                                    seen) : null;
 
                             targetCollection.add(destinationTarget);
                         }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceTest.java?rev=1234421&r1=1234420&r2=1234421&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceTest.java Sat Jan 21 21:16:54 2012
@@ -22,9 +22,7 @@ package org.apache.cayenne.util;
 import org.apache.cayenne.PersistenceState;
 import org.apache.cayenne.access.DataContext;
 import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.testdo.inherit.Department;
 import org.apache.cayenne.testdo.inherit.Employee;
 import org.apache.cayenne.testdo.inherit.Manager;
@@ -37,9 +35,6 @@ import org.apache.cayenne.unit.di.server
 public class DeepMergeOperationInheritanceTest extends ServerCase {
 
     @Inject
-    private EntityResolver resolver;
-
-    @Inject
     private DataContext context;
 
     @Inject
@@ -50,8 +45,6 @@ public class DeepMergeOperationInheritan
 
     public void testDeepMergeExistingSubclass() {
 
-        final ClassDescriptor d = resolver.getClassDescriptor("Department");
-
         final Department d1 = context.newObject(Department.class);
         d1.setName("D1");
 
@@ -83,7 +76,7 @@ public class DeepMergeOperationInheritan
         queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
 
             public void execute() {
-                Department d2 = (Department) op.merge(d1, d);
+                Department d2 = (Department) op.merge(d1);
                 assertNotNull(d2);
                 assertEquals(PersistenceState.COMMITTED, d2.getPersistenceState());
 
@@ -102,8 +95,6 @@ public class DeepMergeOperationInheritan
 
     public void testDeepMergeNonExistentSubclass() {
 
-        final ClassDescriptor d = resolver.getClassDescriptor("Department");
-
         final Department d1 = context.newObject(Department.class);
         d1.setName("D1");
 
@@ -131,7 +122,7 @@ public class DeepMergeOperationInheritan
         queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
 
             public void execute() {
-                Department d2 = (Department) op.merge(d1, d);
+                Department d2 = (Department) op.merge(d1);
                 assertNotNull(d2);
                 assertEquals(PersistenceState.COMMITTED, d2.getPersistenceState());
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationTest.java?rev=1234421&r1=1234420&r2=1234421&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/DeepMergeOperationTest.java Sat Jan 21 21:16:54 2012
@@ -22,23 +22,17 @@ package org.apache.cayenne.util;
 import org.apache.cayenne.Cayenne;
 import org.apache.cayenne.PersistenceState;
 import org.apache.cayenne.access.DataContext;
-import org.apache.cayenne.configuration.server.ServerRuntime;
 import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
 import org.apache.cayenne.unit.di.UnitTestClosure;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.apache.cayenne.util.DeepMergeOperation;
 
 @UseServerRuntime(ServerCase.TESTMAP_PROJECT)
 public class DeepMergeOperationTest extends ServerCase {
 
     @Inject
-    private ServerRuntime runtime;
-
-    @Inject
     private DataChannelInterceptor queryInterceptor;
 
     @Inject
@@ -49,11 +43,6 @@ public class DeepMergeOperationTest exte
 
     public void testDeepMergeNonExistent() {
 
-        final ClassDescriptor d = runtime
-                .getDataDomain()
-                .getEntityResolver()
-                .getClassDescriptor("Artist");
-
         final Artist a = context.newObject(Artist.class);
         a.setArtistName("AAA");
         context.commitChanges();
@@ -63,7 +52,7 @@ public class DeepMergeOperationTest exte
         queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
 
             public void execute() {
-                Artist a2 = (Artist) op.merge(a, d);
+                Artist a2 = (Artist) op.merge(a);
                 assertNotNull(a2);
                 assertEquals(PersistenceState.COMMITTED, a2.getPersistenceState());
                 assertEquals(a.getArtistName(), a2.getArtistName());
@@ -73,11 +62,6 @@ public class DeepMergeOperationTest exte
 
     public void testDeepMergeModified() {
 
-        final ClassDescriptor d = runtime
-                .getDataDomain()
-                .getEntityResolver()
-                .getClassDescriptor("Artist");
-
         final Artist a = context.newObject(Artist.class);
         a.setArtistName("AAA");
         context.commitChanges();
@@ -89,7 +73,7 @@ public class DeepMergeOperationTest exte
         queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
 
             public void execute() {
-                Artist a2 = (Artist) op.merge(a, d);
+                Artist a2 = (Artist) op.merge(a);
                 assertNotNull(a2);
                 assertEquals(PersistenceState.MODIFIED, a2.getPersistenceState());
                 assertSame(a1, a2);