You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by un...@apache.org on 2013/10/16 15:43:16 UTC

svn commit: r1532761 - in /jackrabbit/branches/2.6/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/state/NodeState.java test/java/org/apache/jackrabbit/core/MoveTest.java

Author: unico
Date: Wed Oct 16 13:43:16 2013
New Revision: 1532761

URL: http://svn.apache.org/r1532761
Log:
JCR-1880 fix problem with reordering same-name siblings

Modified:
    jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java
    jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java

Modified: jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java?rev=1532761&r1=1532760&r2=1532761&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java Wed Oct 16 13:43:16 2013
@@ -16,10 +16,6 @@
  */
 package org.apache.jackrabbit.core.state;
 
-import org.apache.jackrabbit.core.id.ItemId;
-import org.apache.jackrabbit.core.id.NodeId;
-import org.apache.jackrabbit.spi.Name;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -27,6 +23,10 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.jackrabbit.core.id.ItemId;
+import org.apache.jackrabbit.core.id.NodeId;
+import org.apache.jackrabbit.spi.Name;
+
 /**
  * <code>NodeState</code> represents the state of a <code>Node</code>.
  */
@@ -372,8 +372,12 @@ public class NodeState extends ItemState
             }
         }
         if (oldEntry != null) {
-            notifyNodeAdded(newEntry);
-            notifyNodeRemoved(oldEntry);
+            if (oldEntry.getName().equals(newName)) {
+                notifyNodesReplaced();
+            } else {
+                notifyNodeAdded(newEntry);
+                notifyNodeRemoved(oldEntry);
+            }
             return true;
         }
         return false;

Modified: jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java?rev=1532761&r1=1532760&r2=1532761&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java Wed Oct 16 13:43:16 2013
@@ -103,4 +103,52 @@ public class MoveTest extends AbstractJC
         assertEquals(testRootNode.getPath() + "/" + nodeName2, now);
     }
 
+    /**
+     * Test reordering same-name-siblings using move
+     */
+    public void testReorderSameNameSiblingsUsingMove() throws RepositoryException {
+        Session session = testRootNode.getSession();
+        for (NodeIterator it = testRootNode.getNodes(); it.hasNext();) {
+            it.nextNode().remove();
+            session.save();
+        }
+        Node node1 = testRootNode.addNode(nodeName1);
+        Node node2 = testRootNode.addNode(nodeName1);
+        String path = node1.getPath();
+
+        // re-order the nodes using move
+        session.move(path, path);
+
+        assertEquals(path + "[2]", node1.getPath());
+        assertEquals(path, node2.getPath());
+    }
+
+    /**
+     * Verify paths of same name siblings are correct after a (reordering) move
+     * Issue JCR-1880
+     */
+    public void testGetPathDoesNotInfluencePathsAfterMove() throws RepositoryException {
+        doTestMoveWithGetPath(false);
+        doTestMoveWithGetPath(true);
+    }
+
+    private void doTestMoveWithGetPath(boolean index) throws RepositoryException {
+        Session session = testRootNode.getSession();
+        for (NodeIterator it = testRootNode.getNodes(); it.hasNext();) {
+            it.nextNode().remove();
+            session.save();
+        }
+        String testPath = testRootNode.getPath();
+        Node a = testRootNode.addNode("a");
+        Node b = a.addNode("b");
+        session.save();
+        session.move(testPath + "/a/b", testPath + "/a");
+        if (index) {
+            b.getPath();
+        }
+        session.move(testPath + "/a", testPath + "/a");
+        assertEquals(testPath + "/a[2]", a.getPath());
+        assertEquals(testPath + "/a", b.getPath());
+    }
+
 }