Author: aadamchik
Date: Sat Jan 21 21:17:37 2012
New Revision: 1234422
URL: http://svn.apache.org/viewvc?rev=1234422&view=rev
Log:
CAY-1616 Remove internal dependencies on deprecated ObjectContext.localObject
migrating unit tests
parameterized merge methods
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/ShallowMergeOperationTest.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.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/main/java/org/apache/cayenne/util/ShallowMergeOperation.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectTrackingTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextReadTest.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java?rev=1234422&r1=1234421&r2=1234422&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContext.java
Sat Jan 21 21:17:37 2012
@@ -43,6 +43,7 @@ import org.apache.cayenne.Persistent;
import org.apache.cayenne.QueryResponse;
import org.apache.cayenne.access.util.IteratedSelectObserver;
import org.apache.cayenne.cache.NestedQueryCache;
+import org.apache.cayenne.configuration.CayenneRuntime;
import org.apache.cayenne.configuration.server.DataContextFactory;
import org.apache.cayenne.event.EventManager;
import org.apache.cayenne.graph.ChildDiffLoader;
@@ -115,8 +116,7 @@ public class DataContext extends BaseCon
* Creates and returns a new child ObjectContext.
*
* @since 3.0
- * @deprecated Since 3.1 replaced by
- * {@link DataContextFactory#createContext(DataChannel)}
+ * @deprecated Since 3.1 replaced by {@link
CayenneRuntime#getContext(DataChannel)}
*/
@Deprecated
public ObjectContext createChildContext() {
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=1234422&r1=1234421&r2=1234422&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:17:37 2012
@@ -74,14 +74,14 @@ public class DeepMergeOperation {
return merge((Persistent) object);
}
- public Object merge(final Persistent peerInParentContext) {
+ public <T extends Persistent> T merge(T peerInParentContext) {
ClassDescriptor descriptor = entityResolver
.getClassDescriptor(peerInParentContext.getObjectId().getEntityName());
return merge(peerInParentContext, descriptor, new HashMap<ObjectId,
Persistent>());
}
- private Object merge(
- final Persistent peerInParentContext,
+ private <T extends Persistent> T merge(
+ final T peerInParentContext,
ClassDescriptor descriptor,
final Map<ObjectId, Persistent> seen) {
@@ -93,12 +93,12 @@ public class DeepMergeOperation {
+ peerInParentContext);
}
- Object seenTarget = seen.get(id);
+ Persistent seenTarget = seen.get(id);
if (seenTarget != null) {
- return seenTarget;
+ return (T) seenTarget;
}
- final Persistent target =
shallowMergeOperation.merge(peerInParentContext);
+ final T target = shallowMergeOperation.merge(peerInParentContext);
seen.put(id, target);
descriptor =
descriptor.getSubclassDescriptor(peerInParentContext.getClass());
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ShallowMergeOperation.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ShallowMergeOperation.java?rev=1234422&r1=1234421&r2=1234422&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ShallowMergeOperation.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ShallowMergeOperation.java
Sat Jan 21 21:17:37 2012
@@ -39,7 +39,7 @@ public class ShallowMergeOperation {
this.context = context;
}
- public Persistent merge(Persistent peerInParentContext) {
+ public <T extends Persistent> T merge(T peerInParentContext) {
if (peerInParentContext == null) {
throw new IllegalArgumentException("Null peerInParentContext");
@@ -59,11 +59,11 @@ public class ShallowMergeOperation {
// have to synchronize almost the entire method to prevent multiple
threads from
// messing up dataobjects per CAY-845.
synchronized (graphManager) {
- Persistent object = (Persistent) graphManager.getNode(id);
+ T object = (T) graphManager.getNode(id);
// merge into an existing object
if (object == null) {
- object = (Persistent) descriptor.createObject();
+ object = (T) descriptor.createObject();
object.setObjectContext(context);
object.setObjectId(id);
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectTrackingTest.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectTrackingTest.java?rev=1234422&r1=1234421&r2=1234422&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectTrackingTest.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextObjectTrackingTest.java
Sat Jan 21 21:17:37 2012
@@ -142,6 +142,7 @@ public class DataContextObjectTrackingTe
assertNotNull(context.getGraphManager().getNode(oid));
}
+ @Deprecated
public void testLocalObjectPeerContextMap() throws Exception {
createArtistsDataSet();
@@ -239,6 +240,7 @@ public class DataContextObjectTrackingTe
});
}
+ @Deprecated
public void testLocalObjectPeerContextNoOverride() throws Exception {
createArtistsDataSet();
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextReadTest.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextReadTest.java?rev=1234422&r1=1234421&r2=1234422&view=diff
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextReadTest.java
(original)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/NestedDataContextReadTest.java
Sat Jan 21 21:17:37 2012
@@ -194,18 +194,22 @@ public class NestedDataContextReadTest e
assertSame(childContext, hollowPeer.getObjectContext());
assertSame(context, hollow.getObjectContext());
- Persistent committedPeer = childContext.localObject(committed
- .getObjectId(), committed);
- assertEquals(PersistenceState.COMMITTED, committedPeer
- .getPersistenceState());
+ Persistent committedPeer = childContext.localObject(
+ committed.getObjectId(),
+ committed);
+ assertEquals(
+ PersistenceState.COMMITTED,
+ committedPeer.getPersistenceState());
assertEquals(committed.getObjectId(),
committedPeer.getObjectId());
assertSame(childContext, committedPeer.getObjectContext());
assertSame(context, committed.getObjectContext());
- Artist modifiedPeer = (Artist)
childContext.localObject(modified
- .getObjectId(), modified);
- assertEquals(PersistenceState.COMMITTED, modifiedPeer
- .getPersistenceState());
+ Artist modifiedPeer = (Artist) childContext.localObject(
+ modified.getObjectId(),
+ modified);
+ assertEquals(
+ PersistenceState.COMMITTED,
+ modifiedPeer.getPersistenceState());
assertEquals(modified.getObjectId(),
modifiedPeer.getObjectId());
assertEquals("M1", modifiedPeer.getArtistName());
assertSame(childContext, modifiedPeer.getObjectContext());
@@ -214,8 +218,9 @@ public class NestedDataContextReadTest e
Persistent deletedPeer = childContext.localObject(
deleted.getObjectId(),
deleted);
- assertEquals(PersistenceState.COMMITTED, deletedPeer
- .getPersistenceState());
+ assertEquals(
+ PersistenceState.COMMITTED,
+ deletedPeer.getPersistenceState());
assertEquals(deleted.getObjectId(), deletedPeer.getObjectId());
assertSame(childContext, deletedPeer.getObjectContext());
assertSame(context, deleted.getObjectContext());
@@ -252,39 +257,19 @@ public class NestedDataContextReadTest e
queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
public void execute() {
- Persistent peerModified2 = childContext.localObject(modified
- .getObjectId(), modified);
+ Persistent peerModified2 = childContext.localObject(
+ modified.getObjectId(),
+ modified);
assertSame(peerModified, peerModified2);
- assertEquals(PersistenceState.MODIFIED, peerModified2
- .getPersistenceState());
+ assertEquals(
+ PersistenceState.MODIFIED,
+ peerModified2.getPersistenceState());
assertEquals("M2", peerModified.getArtistName());
assertEquals("M1", modified.getArtistName());
}
});
}
- public void testLocalObjectRelationship() throws Exception {
-
- final ObjectContext childContext = context.createChildContext();
-
- Artist _new = context.newObject(Artist.class);
- final Painting _newP = context.newObject(Painting.class);
- _new.addToPaintingArray(_newP);
-
- queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
- public void execute() {
- Painting painting = (Painting) childContext.localObject(_newP
- .getObjectId(), _newP);
- assertEquals(PersistenceState.COMMITTED,
painting.getPersistenceState());
- assertNotNull(painting.getToArtist());
- assertEquals(PersistenceState.COMMITTED, painting
- .getToArtist()
- .getPersistenceState());
- }
- });
- }
-
public void testSelect() throws Exception {
createArtistsDataSet();
@@ -412,29 +397,33 @@ public class NestedDataContextReadTest e
assertSame(child, childHollowTargetSrc.getObjectContext());
Artist childHollowTarget = childHollowTargetSrc.getToArtist();
assertNotNull(childHollowTarget);
- assertEquals(PersistenceState.HOLLOW, childHollowTarget
- .getPersistenceState());
+ assertEquals(
+ PersistenceState.HOLLOW,
+ childHollowTarget.getPersistenceState());
assertSame(child, childHollowTarget.getObjectContext());
Artist childModifiedTarget = ((Painting) childSources.get(1))
.getToArtist();
- assertEquals(PersistenceState.COMMITTED, childModifiedTarget
- .getPersistenceState());
+ assertEquals(
+ PersistenceState.COMMITTED,
+ childModifiedTarget.getPersistenceState());
assertSame(child, childModifiedTarget.getObjectContext());
assertEquals("M1", childModifiedTarget.getArtistName());
Painting childDeletedTargetSrc = (Painting)
childSources.get(2);
// make sure we got the right object...
- assertEquals(deletedTargetSrc.getObjectId(),
childDeletedTargetSrc
- .getObjectId());
+ assertEquals(
+ deletedTargetSrc.getObjectId(),
+ childDeletedTargetSrc.getObjectId());
Artist childDeletedTarget =
childDeletedTargetSrc.getToArtist();
assertNull(childDeletedTarget);
Artist childCommittedTarget = ((Painting) childSources.get(3))
.getToArtist();
- assertEquals(PersistenceState.COMMITTED, childCommittedTarget
- .getPersistenceState());
+ assertEquals(
+ PersistenceState.COMMITTED,
+ childCommittedTarget.getPersistenceState());
assertSame(child, childCommittedTarget.getObjectContext());
Painting childNewTargetSrc = (Painting) childSources.get(4);
@@ -442,8 +431,9 @@ public class NestedDataContextReadTest e
assertEquals(newTargetSrc.getObjectId(),
childNewTargetSrc.getObjectId());
Artist childNewTarget = childNewTargetSrc.getToArtist();
assertNotNull(childNewTarget);
- assertEquals(PersistenceState.COMMITTED, childNewTarget
- .getPersistenceState());
+ assertEquals(
+ PersistenceState.COMMITTED,
+ childNewTarget.getPersistenceState());
assertSame(child, childNewTarget.getObjectContext());
assertEquals("N1", childNewTarget.getArtistName());
}
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/ShallowMergeOperationTest.java
URL:
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/ShallowMergeOperationTest.java?rev=1234422&view=auto
==============================================================================
---
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/ShallowMergeOperationTest.java
(added)
+++
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/util/ShallowMergeOperationTest.java
Sat Jan 21 21:17:37 2012
@@ -0,0 +1,67 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.util;
+
+import org.apache.cayenne.ObjectContext;
+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.testdo.testmap.Artist;
+import org.apache.cayenne.testdo.testmap.Painting;
+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;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class ShallowMergeOperationTest extends ServerCase {
+
+ @Inject
+ private ServerRuntime runtime;
+
+ @Inject
+ private DataContext context;
+
+ @Inject
+ private DataChannelInterceptor queryInterceptor;
+
+ public void testLocalObjectRelationship() throws Exception {
+
+ ObjectContext childContext = runtime.getContext(context);
+ final ShallowMergeOperation op = new
ShallowMergeOperation(childContext);
+
+ Artist _new = context.newObject(Artist.class);
+ final Painting _newP = context.newObject(Painting.class);
+ _new.addToPaintingArray(_newP);
+
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ Painting painting = op.merge(_newP);
+
+ assertEquals(PersistenceState.COMMITTED,
painting.getPersistenceState());
+ assertNotNull(painting.getToArtist());
+ assertEquals(PersistenceState.COMMITTED, painting
+ .getToArtist()
+ .getPersistenceState());
+ }
+ });
+ }
+}