You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by al...@apache.org on 2009/09/30 18:27:28 UTC

svn commit: r820337 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java

Author: alexkli
Date: Wed Sep 30 16:27:28 2009
New Revision: 820337

URL: http://svn.apache.org/viewvc?rev=820337&view=rev
Log:
JCR-2321: ZombieHierarchyManager can return wrong child node entries for replaced nodes

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java?rev=820337&r1=820336&r2=820337&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java Wed Sep 30 16:27:28 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.core;
 
+import java.util.Iterator;
+
 import org.apache.jackrabbit.core.id.ItemId;
 import org.apache.jackrabbit.core.id.NodeId;
 import org.apache.jackrabbit.core.state.ChildNodeEntry;
@@ -99,16 +101,19 @@
     protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                                          Name name,
                                                          int index) {
-        // check removed child node entries first
-        for (ChildNodeEntry entry : parent.getRemovedChildNodeEntries()) {
-            if (entry.getName().equals(name)
-                    && entry.getIndex() == index) {
-                return entry;
+        // first look for the entry in the current child node entry list
+        ChildNodeEntry entry = super.getChildNodeEntry(parent, name, index);
+        if (entry == null) {
+            // if not found, we need to look for a removed child node entry
+            for (ChildNodeEntry candidate : parent.getRemovedChildNodeEntries()) {
+                if (candidate.getName().equals(name)
+                        && candidate.getIndex() == index) {
+                    entry = candidate;
+                    break;
+                }
             }
         }
-        // no matching removed child node entry found in parent,
-        // delegate to base class
-        return super.getChildNodeEntry(parent, name, index);
+        return entry;
     }
 
     /**
@@ -118,14 +123,17 @@
      */
     protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                                          NodeId id) {
-        // check removed child node entries first
-        for (ChildNodeEntry entry : parent.getRemovedChildNodeEntries()) {
-            if (entry.getId().equals(id)) {
-                return entry;
+        // first look for the entry in the current child node entry list
+        ChildNodeEntry entry = super.getChildNodeEntry(parent, id);
+        if (entry == null) {
+            // if not found, we need to look for a removed child node entry
+            for (ChildNodeEntry candidate : parent.getRemovedChildNodeEntries()) {
+                if (candidate.getId().equals(id)) {
+                    entry = candidate;
+                    break;
+                }
             }
         }
-        // no matching removed child node entry found in parent,
-        // delegate to base class
-        return super.getChildNodeEntry(parent, id);
+        return entry;
     }
 }