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 2006/05/16 23:02:27 UTC

svn commit: r407079 - in /incubator/cayenne/main/trunk/cayenne/cayenne-java/src: cayenne/java/org/objectstyle/cayenne/ tests/java/org/objectstyle/cayenne/

Author: aadamchik
Date: Tue May 16 14:02:10 2006
New Revision: 407079

URL: http://svn.apache.org/viewcvs?rev=407079&view=rev
Log:
CAY-457

Modified:
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/CayenneContextGraphManager.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextChangeLog.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextStateLog.java
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/CayenneContextTst.java

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/CayenneContextGraphManager.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/CayenneContextGraphManager.java?rev=407079&r1=407078&r2=407079&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/CayenneContextGraphManager.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/CayenneContextGraphManager.java Tue May 16 14:02:10 2006
@@ -143,6 +143,19 @@
         return stateLog.dirtyNodes(state);
     }
 
+    public synchronized Object unregisterNode(Object nodeId) {
+        Object node = super.unregisterNode(nodeId);
+        
+        // remove node from other collections...
+        if (node != null) {
+            stateLog.unregisterNode(nodeId);
+            changeLog.unregisterNode(nodeId);
+            return node;
+        }
+
+        return null;
+    }
+
     // ****** Sync Events API *****
     /**
      * Clears commit marker, but keeps all recorded operations.

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextChangeLog.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextChangeLog.java?rev=407079&r1=407078&r2=407079&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextChangeLog.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextChangeLog.java Tue May 16 14:02:10 2006
@@ -61,11 +61,13 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.objectstyle.cayenne.graph.CompoundDiff;
 import org.objectstyle.cayenne.graph.GraphDiff;
+import org.objectstyle.cayenne.graph.NodeDiff;
 
 /**
  * Stores graph operations in the order they were performed, optionally allowing to set
@@ -83,6 +85,20 @@
         reset();
     }
 
+    void unregisterNode(Object nodeId) {
+        Iterator it = diffs.iterator();
+        while (it.hasNext()) {
+            Object next = it.next();
+
+            if (next instanceof NodeDiff) {
+
+                if (nodeId.equals(((NodeDiff) next).getNodeId())) {
+                    it.remove();
+                }
+            }
+        }
+    }
+
     void setMarker(String markerTag) {
         markers.put(markerTag, new Integer(diffs.size()));
     }
@@ -208,4 +224,5 @@
             return new ArrayList(list.subList(offset, offset + size));
         }
     }
+
 }

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextStateLog.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextStateLog.java?rev=407079&r1=407078&r2=407079&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextStateLog.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/ObjectContextStateLog.java Tue May 16 14:02:10 2006
@@ -168,8 +168,12 @@
         return objects;
     }
 
+    void unregisterNode(Object nodeId) {
+        dirtyIds.remove(nodeId);
+    }
+
     // *** GraphChangeHandler methods
-    
+
     public void nodeIdChanged(Object nodeId, Object newId) {
         if (dirtyIds.remove(nodeId)) {
             dirtyIds.add(newId);
@@ -199,4 +203,5 @@
     public void arcDeleted(Object nodeId, Object targetNodeId, Object arcId) {
         dirtyIds.add(nodeId);
     }
+
 }

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/CayenneContextTst.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/CayenneContextTst.java?rev=407079&r1=407078&r2=407079&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/CayenneContextTst.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/CayenneContextTst.java Tue May 16 14:02:10 2006
@@ -288,7 +288,11 @@
         Persistent newObject = context.newObject(MockPersistentObject.class);
         context.deleteObject(newObject);
         assertEquals(PersistenceState.TRANSIENT, newObject.getPersistenceState());
-        assertFalse(context.internalGraphManager().dirtyNodes().contains(newObject));
+        assertFalse(context.internalGraphManager().dirtyNodes().contains(
+                newObject.getObjectId()));
+        
+        // see CAY-547 for details...
+        assertFalse(context.internalGraphManager().dirtyNodes().contains(null));
 
         // COMMITTED
         Persistent committed = new MockPersistentObject();
@@ -314,7 +318,7 @@
         context.deleteObject(deleted);
         assertEquals(PersistenceState.DELETED, committed.getPersistenceState());
     }
-    
+
     public void testBeforePropertyReadShouldInflateHollow() {
 
         ObjectId gid = new ObjectId("MtTable1", "a", "b");
@@ -323,8 +327,8 @@
         inflated.setObjectId(gid);
         inflated.setGlobalAttribute1("abc");
 
-        MockClientConnection connection = new MockClientConnection(new GenericResponse(Arrays
-                .asList(new Object[] {
+        MockClientConnection connection = new MockClientConnection(new GenericResponse(
+                Arrays.asList(new Object[] {
                     inflated
                 })));
         ClientChannel channel = new ClientChannel(connection);