You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2012/01/01 19:28:08 UTC

svn commit: r1226281 - in /jackrabbit/sandbox/jackrabbit-microkernel/src: main/java/org/apache/jackrabbit/state/ChangeTree.java test/java/org/apache/jackrabbit/state/TransientSpaceTest.java

Author: mduerig
Date: Sun Jan  1 18:28:08 2012
New Revision: 1226281

URL: http://svn.apache.org/viewvc?rev=1226281&view=rev
Log:
Microkernel based prototype of JCR implementation (WIP)
- moving a node to an added node results in wrong order of jsop statements: fixed

Modified:
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/state/TransientSpaceTest.java

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java?rev=1226281&r1=1226280&r2=1226281&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java Sun Jan  1 18:28:08 2012
@@ -29,9 +29,11 @@ import org.apache.jackrabbit.utils.Predi
 import javax.jcr.ItemExistsException;
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.PathNotFoundException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -274,7 +276,18 @@ public class ChangeTree {
         }
 
         private void visitNodes(NodeDelta delta) {
+            List<NodeDelta> moved = new ArrayList<NodeDelta>();
+            // visit move operations after add and remove operations in order to make
+            // sure transiently added move targets are in place
             for (NodeDelta node : delta.childNodes()) {
+                if (node.isMoved()) {
+                    moved.add(node);
+                }
+                else {
+                    node.accept(this);
+                }
+            }
+            for (NodeDelta node : moved) {
                 node.accept(this);
             }
         }
@@ -856,7 +869,12 @@ public class ChangeTree {
 
         @Override
         public String toString() {
-            return "Removed[" + getPath() + ']';
+            if (isMoved()) {
+                return "MovedTo[" + movedTo + ']';
+            }
+            else {
+                return "Removed[" + getPath() + ']';
+            }
         }
 
     }

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/state/TransientSpaceTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/state/TransientSpaceTest.java?rev=1226281&r1=1226280&r2=1226281&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/state/TransientSpaceTest.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/state/TransientSpaceTest.java Sun Jan  1 18:28:08 2012
@@ -844,6 +844,24 @@ public class TransientSpaceTest {
     }
 
     @Test
+    public void moveToAdded() throws RepositoryException {
+        NodeDelta root = transientSpace.getNode(ROOT);
+        root.addNode("node");
+        transientSpace.save();
+        
+        root.addNode("target");
+        root.moveNode("node", ROOT.concat("target/node-moved"));
+        
+        assertNull(transientSpace.getNode(ROOT.concat("node")));
+        assertNotNull(transientSpace.getNode(ROOT.concat("target/node-moved")));
+
+        transientSpace.save();
+
+        assertNull(transientSpace.getNode(ROOT.concat("node")));
+        assertNotNull(transientSpace.getNode(ROOT.concat("target/node-moved")));
+    }
+
+    @Test
     public void setPropertyTest() throws RepositoryException {
         // Set property
         NodeDelta root = transientSpace.getNode(ROOT);