You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2008/08/06 15:17:03 UTC

svn commit: r683257 [1/2] - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/ main/java/org/apache/jackrabbit/core/observation/ main/java/org/apache/jackrabbit/core/persistence/bundle/util/ main/java/org/apache/jackrabbit/...

Author: mreutegg
Date: Wed Aug  6 06:17:00 2008
New Revision: 683257

URL: http://svn.apache.org/viewvc?rev=683257&view=rev
Log:
JCR-1710: Promote ChildNodeEntry and ChildNodeEntries to top level classes.

Added:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntry.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/BatchedItemOperations.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SecurityItemModifier.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ZombieHierarchyManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NodePropBundle.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/OnWorkspaceInconsistency.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeState.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/NodeStateMerger.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalFrozenNodeImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/BatchedItemOperations.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/BatchedItemOperations.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/BatchedItemOperations.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/BatchedItemOperations.java Wed Aug  6 06:17:00 2008
@@ -34,6 +34,7 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.PropertyState;
 import org.apache.jackrabbit.core.state.UpdatableItemStateManager;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.util.ReferenceChangeTracker;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.core.version.VersionManager;
@@ -765,7 +766,7 @@
                 // there's already a node with that name...
 
                 // get definition of existing conflicting node
-                NodeState.ChildNodeEntry entry = parentState.getChildNodeEntry(nodeName, 1);
+                ChildNodeEntry entry = parentState.getChildNodeEntry(nodeName, 1);
                 NodeState conflictingState;
                 NodeId conflictingId = entry.getId();
                 try {
@@ -1667,7 +1668,7 @@
             ArrayList tmp = new ArrayList(targetState.getChildNodeEntries());
             // remove from tail to avoid problems with same-name siblings
             for (int i = tmp.size() - 1; i >= 0; i--) {
-                NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) tmp.get(i);
+                ChildNodeEntry entry = (ChildNodeEntry) tmp.get(i);
                 NodeId nodeId = entry.getId();
                 try {
                     NodeState nodeState = (NodeState) stateMgr.getItemState(nodeId);
@@ -1826,7 +1827,7 @@
             // copy child nodes
             Iterator iter = srcState.getChildNodeEntries().iterator();
             while (iter.hasNext()) {
-                NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) iter.next();
+                ChildNodeEntry entry = (ChildNodeEntry) iter.next();
                 Path srcChildPath = PathFactoryImpl.getInstance().create(srcPath, entry.getName(), true);
                 if (!srcAccessMgr.isGranted(srcChildPath, Permission.READ)) {
                     continue;

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java Wed Aug  6 06:17:00 2008
@@ -22,6 +22,7 @@
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.NodeStateListener;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.util.Dumpable;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
@@ -312,7 +313,7 @@
                 Iterator iter = elements[i].getChildren();
                 while (iter.hasNext()) {
                     PathMap.Element child = (PathMap.Element) iter.next();
-                    NodeState.ChildNodeEntry cne = modified.getChildNodeEntry(
+                    ChildNodeEntry cne = modified.getChildNodeEntry(
                             child.getName(), child.getNormalizedIndex());
                     if (cne == null) {
                         // Item does not exist, remove
@@ -412,7 +413,7 @@
                         continue;
                     }
                     NodeId childId = childEntry.getId();
-                    NodeState.ChildNodeEntry cne = state.getChildNodeEntry(childId);
+                    ChildNodeEntry cne = state.getChildNodeEntry(childId);
                     if (cne == null) {
                         /* Child no longer in parent node state, so remove it */
                         evict(child, false);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java Wed Aug  6 06:17:00 2008
@@ -27,10 +27,10 @@
 import org.apache.jackrabbit.core.state.NoSuchItemStateException;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.PropertyState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException;
-import org.apache.jackrabbit.spi.commons.conversion.PathResolver;
 import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
 import org.apache.jackrabbit.spi.commons.name.PathBuilder;
 import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
@@ -38,7 +38,6 @@
 import org.slf4j.LoggerFactory;
 
 import javax.jcr.ItemNotFoundException;
-import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
 
 /**
@@ -113,7 +112,7 @@
             }
             NodeState parentState = (NodeState) getItemState(parentId);
             if ((typeExpected & RETURN_NODE) != 0) {
-                NodeState.ChildNodeEntry nodeEntry =
+                ChildNodeEntry nodeEntry =
                         getChildNodeEntry(parentState, name, index);
                 if (nodeEntry != null) {
                     id = nodeEntry.getId();
@@ -222,7 +221,7 @@
      *         no such entry.
      * @see ZombieHierarchyManager#getChildNodeEntry(NodeState, NodeId)
      */
-    protected NodeState.ChildNodeEntry getChildNodeEntry(NodeState parent,
+    protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                                          NodeId id) {
         return parent.getChildNodeEntry(id);
     }
@@ -242,7 +241,7 @@
      *         <code>null</code> if there's no such entry.
      * @see ZombieHierarchyManager#getChildNodeEntry(NodeState, Name, int)
      */
-    protected NodeState.ChildNodeEntry getChildNodeEntry(NodeState parent,
+    protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                                          Name name,
                                                          int index) {
         return parent.getChildNodeEntry(name, index);
@@ -281,7 +280,7 @@
         if (state.isNode()) {
             NodeState nodeState = (NodeState) state;
             NodeId id = nodeState.getNodeId();
-            NodeState.ChildNodeEntry entry = getChildNodeEntry(parent, id);
+            ChildNodeEntry entry = getChildNodeEntry(parent, id);
             if (entry == null) {
                 String msg = "failed to build path of " + state.getId() + ": "
                         + parent.getNodeId() + " has no child entry for "
@@ -458,7 +457,7 @@
             throw new RepositoryException(msg, ise);
         }
 
-        NodeState.ChildNodeEntry entry =
+        ChildNodeEntry entry =
                 getChildNodeEntry(parentState, id);
         if (entry == null) {
             String msg = "failed to resolve name of " + id;

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemImpl.java Wed Aug  6 06:17:00 2008
@@ -31,6 +31,7 @@
 import org.apache.jackrabbit.core.state.PropertyState;
 import org.apache.jackrabbit.core.state.SessionItemStateManager;
 import org.apache.jackrabbit.core.state.StaleItemStateException;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.core.version.VersionManager;
 import org.apache.jackrabbit.spi.Name;
@@ -392,7 +393,7 @@
                     NodeState nState = (NodeState) itemState;
                     for (Iterator it = nState.getAddedChildNodeEntries().iterator();
                          it.hasNext() && isGranted;) {
-                        Name nodeName = ((NodeState.ChildNodeEntry) it.next()).getName();
+                        Name nodeName = ((ChildNodeEntry) it.next()).getName();
                         isGranted = accessMgr.isGranted(path, nodeName, Permission.ADD_NODE);
                     }
                     for (Iterator it = nState.getAddedPropertyNames().iterator();
@@ -993,8 +994,8 @@
                                             for (Iterator cneIt =
                                                     parent.getRenamedChildNodeEntries().iterator();
                                                  cneIt.hasNext();) {
-                                                NodeState.ChildNodeEntry cne =
-                                                        (NodeState.ChildNodeEntry) cneIt.next();
+                                                ChildNodeEntry cne =
+                                                        (ChildNodeEntry) cneIt.next();
                                                 if (cne.getId().equals(nodeState.getId())) {
                                                     // node has been renamed,
                                                     // add parent to dependencies
@@ -1015,16 +1016,16 @@
                     for (Iterator cneIt =
                             nodeState.getRemovedChildNodeEntries().iterator();
                          cneIt.hasNext();) {
-                        NodeState.ChildNodeEntry cne =
-                                (NodeState.ChildNodeEntry) cneIt.next();
+                        ChildNodeEntry cne =
+                                (ChildNodeEntry) cneIt.next();
                         dependentIDs.add(cne.getId());
                     }
                     // added child node entries
                     for (Iterator cneIt =
                             nodeState.getAddedChildNodeEntries().iterator();
                          cneIt.hasNext();) {
-                        NodeState.ChildNodeEntry cne =
-                                (NodeState.ChildNodeEntry) cneIt.next();
+                        ChildNodeEntry cne =
+                                (ChildNodeEntry) cneIt.next();
                         dependentIDs.add(cne.getId());
                     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java Wed Aug  6 06:17:00 2008
@@ -30,6 +30,7 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.PropertyState;
 import org.apache.jackrabbit.core.state.SessionItemStateManager;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.util.Dumpable;
 import org.apache.jackrabbit.core.version.VersionHistoryImpl;
 import org.apache.jackrabbit.core.version.VersionImpl;
@@ -151,7 +152,7 @@
             // fallback: try finding applicable definition
             NodeImpl parent = (NodeImpl) getItem(state.getParentId());
             NodeState parentState = (NodeState) parent.getItemState();
-            NodeState.ChildNodeEntry cne = parentState.getChildNodeEntry(state.getNodeId());
+            ChildNodeEntry cne = parentState.getChildNodeEntry(state.getNodeId());
             def = parent.getApplicableChildNodeDefinition(cne.getName(), state.getNodeTypeName());
             state.setDefinitionId(def.unwrap().getId());
         }
@@ -561,7 +562,7 @@
         Iterator iter = ((NodeState) data.getState()).getChildNodeEntries().iterator();
 
         while (iter.hasNext()) {
-            NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) iter.next();
+            ChildNodeEntry entry = (ChildNodeEntry) iter.next();
             // make sure any of the properties can be read.
             if (canRead(entry.getId())) {
                 return true;
@@ -592,7 +593,7 @@
         Iterator iter = ((NodeState) data.getState()).getChildNodeEntries().iterator();
 
         while (iter.hasNext()) {
-            NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) iter.next();
+            ChildNodeEntry entry = (ChildNodeEntry) iter.next();
             // delay check for read-access until item is being built
             // thus avoid duplicate check
             childIds.add(entry.getId());

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Wed Aug  6 06:17:00 2008
@@ -36,6 +36,7 @@
 import org.apache.jackrabbit.core.state.NodeReferencesId;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.PropertyState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.core.version.DateVersionSelector;
 import org.apache.jackrabbit.core.version.InternalFreeze;
@@ -207,7 +208,7 @@
                     if (index == 0) {
                         index = 1;
                     }
-                    NodeState.ChildNodeEntry cne =
+                    ChildNodeEntry cne =
                             thisState.getChildNodeEntry(pe.getName(), index);
                     if (cne != null) {
                         return cne.getId();
@@ -588,7 +589,7 @@
         if (index == 0) {
             index = 1;
         }
-        NodeState.ChildNodeEntry entry =
+        ChildNodeEntry entry =
                 thisState.getChildNodeEntry(nodeName, index);
         if (entry == null) {
             String msg = "failed to remove child " + nodeName + " of "
@@ -646,8 +647,8 @@
             ArrayList tmp = new ArrayList(thisState.getChildNodeEntries());
             // remove from tail to avoid problems with same-name siblings
             for (int i = tmp.size() - 1; i >= 0; i--) {
-                NodeState.ChildNodeEntry entry =
-                        (NodeState.ChildNodeEntry) tmp.get(i);
+                ChildNodeEntry entry =
+                        (ChildNodeEntry) tmp.get(i);
                 // recursively remove child node
                 NodeId childId = entry.getId();
                 //NodeImpl childNode = (NodeImpl) itemMgr.getItem(childId);
@@ -774,7 +775,7 @@
 
         // check for name collisions
         NodeState thisState = data.getNodeState();
-        NodeState.ChildNodeEntry cne = thisState.getChildNodeEntry(nodeName, 1);
+        ChildNodeEntry cne = thisState.getChildNodeEntry(nodeName, 1);
         if (cne != null) {
             // there's already a child node entry with that name;
             // check same-name sibling setting of new node
@@ -1230,7 +1231,7 @@
         ArrayList list = new ArrayList(thisState.getChildNodeEntries());
         // start from tail to avoid problems with same-name siblings
         for (int i = list.size() - 1; i >= 0; i--) {
-            NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) list.get(i);
+            ChildNodeEntry entry = (ChildNodeEntry) list.get(i);
             NodeImpl node = (NodeImpl) itemMgr.getItem(entry.getId());
             // check if node has been defined by mixin type (or one of its supertypes)
             NodeTypeImpl declaringNT = (NodeTypeImpl) node.getDefinition().getDeclaringNodeType();
@@ -1437,7 +1438,7 @@
         if (index == 0) {
             index = 1;
         }
-        NodeState.ChildNodeEntry cne = thisState.getChildNodeEntry(name, index);
+        ChildNodeEntry cne = thisState.getChildNodeEntry(name, index);
         if (cne == null) {
             throw new ItemNotFoundException();
         }
@@ -1479,7 +1480,7 @@
         if (index == 0) {
             index = 1;
         }
-        NodeState.ChildNodeEntry cne = thisState.getChildNodeEntry(name, index);
+        ChildNodeEntry cne = thisState.getChildNodeEntry(name, index);
         if (cne == null) {
             return false;
         }
@@ -1821,7 +1822,7 @@
         ArrayList list = new ArrayList(data.getNodeState().getChildNodeEntries());
         int srcInd = -1, destInd = -1;
         for (int i = 0; i < list.size(); i++) {
-            NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) list.get(i);
+            ChildNodeEntry entry = (ChildNodeEntry) list.get(i);
             if (srcInd == -1) {
                 if (entry.getName().equals(srcName.getName())
                         && (entry.getIndex() == srcName.getIndex()
@@ -1909,7 +1910,7 @@
         // => backup list of child node entries beforehand in order
         // to restore it afterwards
         NodeState state = data.getNodeState();
-        NodeState.ChildNodeEntry cneExisting = state.getChildNodeEntry(id);
+        ChildNodeEntry cneExisting = state.getChildNodeEntry(id);
         if (cneExisting == null) {
             throw new ItemNotFoundException(safeGetJCRPath()
                     + ": no child node entry with id " + id);
@@ -1939,7 +1940,7 @@
             // but preserving original position
             state.removeAllChildNodeEntries();
             for (Iterator iter = cneList.iterator(); iter.hasNext();) {
-                NodeState.ChildNodeEntry cne = (NodeState.ChildNodeEntry) iter.next();
+                ChildNodeEntry cne = (ChildNodeEntry) iter.next();
                 if (cne.getId().equals(id)) {
                     // replace entry with different name
                     state.addChildNodeEntry(nodeName, id);
@@ -2002,7 +2003,7 @@
             throw new ConstraintViolationException(msg, re);
         }
         NodeState thisState = data.getNodeState();
-        NodeState.ChildNodeEntry cne = thisState.getChildNodeEntry(name, 1);
+        ChildNodeEntry cne = thisState.getChildNodeEntry(name, 1);
         if (cne != null) {
             // there's already a child node entry with that name;
             // check same-name sibling setting of new node
@@ -3060,7 +3061,7 @@
         try {
             NodeState parent =
                     (NodeState) stateMgr.getItemState(parentId);
-            NodeState.ChildNodeEntry parentEntry =
+            ChildNodeEntry parentEntry =
                     parent.getChildNodeEntry(getNodeId());
             return parentEntry.getIndex();
         } catch (ItemStateException ise) {
@@ -3257,7 +3258,7 @@
         Path parentPath = parentNode.getPrimaryPath();
         PathBuilder builder = new PathBuilder(parentPath);
 
-        NodeState.ChildNodeEntry entry = ((NodeState) parentNode.getItemState()).
+        ChildNodeEntry entry = ((NodeState) parentNode.getItemState()).
                 getChildNodeEntry(getNodeId());
         if (entry == null) {
             String msg = "failed to build path of " + id + ": "
@@ -4908,7 +4909,7 @@
         ArrayList list = new ArrayList(thisState.getChildNodeEntries());
         // start from tail to avoid problems with same-name siblings
         for (int i = list.size() - 1; i >= 0; i--) {
-            NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) list.get(i);
+            ChildNodeEntry entry = (ChildNodeEntry) list.get(i);
             try {
                 NodeState nodeState =
                         (NodeState) stateMgr.getItemState(entry.getId());

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SecurityItemModifier.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SecurityItemModifier.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SecurityItemModifier.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SecurityItemModifier.java Wed Aug  6 06:17:00 2008
@@ -23,6 +23,7 @@
 import org.apache.jackrabbit.core.nodetype.NodeDefinitionImpl;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.core.state.NodeState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.security.user.UserManagerImpl;
 import org.apache.jackrabbit.core.security.authorization.acl.ACLEditor;
 
@@ -69,7 +70,7 @@
             // check for name collisions
             // TODO: improve. copied from NodeImpl
             NodeState thisState = (NodeState) parentImpl.getItemState();
-            NodeState.ChildNodeEntry cne = thisState.getChildNodeEntry(name, 1);
+            ChildNodeEntry cne = thisState.getChildNodeEntry(name, 1);
             if (cne != null) {
                 // there's already a child node entry with that name;
                 // check same-name sibling setting of new node

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=683257&r1=683256&r2=683257&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 Aug  6 06:17:00 2008
@@ -21,6 +21,7 @@
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.NoSuchItemStateException;
 import org.apache.jackrabbit.core.state.NodeState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.spi.Name;
 
 import java.util.Iterator;
@@ -95,14 +96,14 @@
      * <p/>
      * Also allows for removed/renamed child node entries.
      */
-    protected NodeState.ChildNodeEntry getChildNodeEntry(NodeState parent,
+    protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                                          Name name,
                                                          int index) {
         // check removed child node entries first
         Iterator iter = parent.getRemovedChildNodeEntries().iterator();
         while (iter.hasNext()) {
-            NodeState.ChildNodeEntry entry =
-                    (NodeState.ChildNodeEntry) iter.next();
+            ChildNodeEntry entry =
+                    (ChildNodeEntry) iter.next();
             if (entry.getName().equals(name)
                     && entry.getIndex() == index) {
                 return entry;
@@ -118,13 +119,13 @@
      * <p/>
      * Also allows for removed child node entries.
      */
-    protected NodeState.ChildNodeEntry getChildNodeEntry(NodeState parent,
+    protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                                          NodeId id) {
         // check removed child node entries first
         Iterator iter = parent.getRemovedChildNodeEntries().iterator();
         while (iter.hasNext()) {
-            NodeState.ChildNodeEntry entry =
-                    (NodeState.ChildNodeEntry) iter.next();
+            ChildNodeEntry entry =
+                    (ChildNodeEntry) iter.next();
             if (entry.getId().equals(id)) {
                 return entry;
             }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java Wed Aug  6 06:17:00 2008
@@ -27,6 +27,7 @@
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.NoSuchItemStateException;
 import org.apache.jackrabbit.core.state.NodeState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
@@ -219,9 +220,9 @@
                         }
                         if (parent != null) {
                             // check if node has been renamed
-                            NodeState.ChildNodeEntry moved = null;
+                            ChildNodeEntry moved = null;
                             for (Iterator removedNodes = parent.getRemovedChildNodeEntries().iterator(); removedNodes.hasNext();) {
-                                NodeState.ChildNodeEntry child = (NodeState.ChildNodeEntry) removedNodes.next();
+                                ChildNodeEntry child = (ChildNodeEntry) removedNodes.next();
                                 if (child.getId().equals(n.getNodeId())) {
                                     // found node re-added with different name
                                     moved = child;
@@ -273,14 +274,14 @@
                     // create a node removed and a node added event for every
                     // reorder
                     for (Iterator ro = reordered.iterator(); ro.hasNext();) {
-                        NodeState.ChildNodeEntry child = (NodeState.ChildNodeEntry) ro.next();
+                        ChildNodeEntry child = (ChildNodeEntry) ro.next();
                         Name name = child.getName();
                         int index = (child.getIndex() != 1) ? child.getIndex() : 0;
                         Path parentPath = getPath(n.getNodeId(), hmgr);
                         Path.Element addedElem = PathFactoryImpl.getInstance().create(name, index).getNameElement();
                         // get removed index
                         NodeState overlayed = (NodeState) n.getOverlayedState();
-                        NodeState.ChildNodeEntry entry = overlayed.getChildNodeEntry(child.getId());
+                        ChildNodeEntry entry = overlayed.getChildNodeEntry(child.getId());
                         if (entry == null) {
                             throw new ItemStateException("Unable to retrieve old child index for item: " + child.getId());
                         }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/ItemStateBinding.java Wed Aug  6 06:17:00 2008
@@ -21,6 +21,7 @@
 import org.apache.jackrabbit.core.state.NodeReferencesId;
 import org.apache.jackrabbit.core.state.NodeReferences;
 import org.apache.jackrabbit.core.state.NodeState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.util.StringIndex;
 import org.apache.jackrabbit.core.PropertyId;
 import org.apache.jackrabbit.core.NodeId;
@@ -269,7 +270,7 @@
         c = state.getChildNodeEntries();
         out.writeInt(c.size()); // count
         for (Iterator iter = c.iterator(); iter.hasNext();) {
-            NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) iter.next();
+            ChildNodeEntry entry = (ChildNodeEntry) iter.next();
             writeQName(out, entry.getName());   // name
             writeID(out, entry.getId());  // uuid
         }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NodePropBundle.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NodePropBundle.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NodePropBundle.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NodePropBundle.java Wed Aug  6 06:17:00 2008
@@ -155,7 +155,7 @@
         Iterator iter = list.iterator();
         childNodeEntries.clear();
         while (iter.hasNext()) {
-            NodeState.ChildNodeEntry cne = (NodeState.ChildNodeEntry) iter.next();
+            org.apache.jackrabbit.core.state.ChildNodeEntry cne = (org.apache.jackrabbit.core.state.ChildNodeEntry) iter.next();
             addChildNodeEntry(cne.getName(), cne.getId());
         }
         sharedSet = state.getSharedSet();

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/Serializer.java Wed Aug  6 06:17:00 2008
@@ -25,6 +25,7 @@
 import org.apache.jackrabbit.core.state.NodeReferences;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.PropertyState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.value.BLOBFileValue;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.spi.Name;
@@ -103,7 +104,7 @@
         c = state.getChildNodeEntries();
         out.writeInt(c.size()); // count
         for (Iterator iter = c.iterator(); iter.hasNext();) {
-            NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) iter.next();
+            ChildNodeEntry entry = (ChildNodeEntry) iter.next();
             out.writeUTF(entry.getName().toString());   // name
             out.write(entry.getId().getUUID().getRawBytes());    // uuid
         }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java Wed Aug  6 06:17:00 2008
@@ -34,6 +34,7 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.persistence.PMContext;
 import org.apache.jackrabbit.core.state.PropertyState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.persistence.util.BLOBStore;
 import org.apache.jackrabbit.core.persistence.util.FileSystemBLOBStore;
 import org.apache.jackrabbit.core.persistence.util.ResourceBasedBLOBStore;
@@ -598,7 +599,7 @@
                 writer.write("\t<" + NODES_ELEMENT + ">\n");
                 iter = state.getChildNodeEntries().iterator();
                 while (iter.hasNext()) {
-                    NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) iter.next();
+                    ChildNodeEntry entry = (ChildNodeEntry) iter.next();
                     writer.write("\t\t<" + NODE_ELEMENT + " "
                             + NAME_ATTRIBUTE + "=\"" + Text.encodeIllegalXMLCharacters(entry.getName().toString()) + "\" "
                             + UUID_ATTRIBUTE + "=\"" + entry.getId().getUUID().toString() + "\">\n");

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/OnWorkspaceInconsistency.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/OnWorkspaceInconsistency.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/OnWorkspaceInconsistency.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/OnWorkspaceInconsistency.java Wed Aug  6 06:17:00 2008
@@ -19,6 +19,7 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.ItemStateException;
 import org.apache.jackrabbit.core.state.NoSuchItemStateException;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
@@ -50,7 +51,7 @@
                                            QueryHandler handler,
                                            Path path,
                                            NodeState node,
-                                           NodeState.ChildNodeEntry child)
+                                           ChildNodeEntry child)
                 throws RepositoryException, ItemStateException {
             NamePathResolver resolver = new DefaultNamePathResolver(
                     handler.getContext().getNamespaceRegistry());
@@ -130,6 +131,6 @@
                                                 QueryHandler handler,
                                                 Path path,
                                                 NodeState node,
-                                                NodeState.ChildNodeEntry child)
+                                                ChildNodeEntry child)
             throws ItemStateException, RepositoryException;
 }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java Wed Aug  6 06:17:00 2008
@@ -26,6 +26,7 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.ItemStateException;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.HierarchyManager;
 import org.apache.jackrabbit.core.NodeId;
 import org.apache.jackrabbit.util.Text;
@@ -329,7 +330,7 @@
                 // last segment -> add to collector if node type matches
                 Iterator it = cne.iterator();
                 while (it.hasNext()) {
-                    NodeId id = ((NodeState.ChildNodeEntry) it.next()).getId();
+                    NodeId id = ((ChildNodeEntry) it.next()).getId();
                     NodeState ns = (NodeState) ism.getItemState(id);
                     if (nodeTypeName == null || ns.getNodeTypeName().equals(nodeTypeName)) {
                         collector.add(ns);
@@ -340,7 +341,7 @@
                 offset++;
                 Iterator it = cne.iterator();
                 while (it.hasNext()) {
-                    NodeId id = ((NodeState.ChildNodeEntry) it.next()).getId();
+                    NodeId id = ((ChildNodeEntry) it.next()).getId();
                     resolve((NodeState) ism.getItemState(id), collector, offset);
                 }
             }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java Wed Aug  6 06:17:00 2008
@@ -24,6 +24,7 @@
 import org.apache.jackrabbit.core.state.ItemStateException;
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.NodeState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.query.LocationStepQueryNode;
 import org.apache.jackrabbit.uuid.UUID;
@@ -448,7 +449,7 @@
                             NodeState state = (NodeState) itemMgr.getItemState(id);
                             Iterator entries = state.getChildNodeEntries().iterator();
                             while (entries.hasNext()) {
-                                NodeId childId = ((NodeState.ChildNodeEntry) entries.next()).getId();
+                                NodeId childId = ((ChildNodeEntry) entries.next()).getId();
                                 Term uuidTerm = new Term(FieldNames.UUID, childId.getUUID().toString());
                                 TermDocs docs = reader.termDocs(uuidTerm);
                                 try {
@@ -483,7 +484,7 @@
                             // only select last
                             List childNodes = state.getChildNodeEntries();
                             if (childNodes.size() == 0
-                                    || !((NodeState.ChildNodeEntry) childNodes.get(childNodes.size() - 1))
+                                    || !((ChildNodeEntry) childNodes.get(childNodes.size() - 1))
                                         .getId().equals(id)) {
                                 return false;
                             }
@@ -491,7 +492,7 @@
                             List childNodes = state.getChildNodeEntries();
                             if (position < 1
                                     || childNodes.size() < position
-                                    || !((NodeState.ChildNodeEntry) childNodes.get(position - 1)).getId().equals(id)) {
+                                    || !((ChildNodeEntry) childNodes.get(position - 1)).getId().equals(id)) {
                                 return false;
                             }
                         }
@@ -500,7 +501,7 @@
                         // specified position
                         if (position == LocationStepQueryNode.LAST) {
                             // only select last
-                            NodeState.ChildNodeEntry entry =
+                            ChildNodeEntry entry =
                                     state.getChildNodeEntry(id);
                             if (entry == null) {
                                 // no such child node, probably deleted meanwhile
@@ -510,13 +511,13 @@
                                 Name name = entry.getName();
                                 List childNodes = state.getChildNodeEntries(name);
                                 if (childNodes.size() == 0
-                                        || !((NodeState.ChildNodeEntry) childNodes.get(childNodes.size() - 1))
+                                        || !((ChildNodeEntry) childNodes.get(childNodes.size() - 1))
                                             .getId().equals(id)) {
                                     return false;
                                 }
                             }
                         } else {
-                            NodeState.ChildNodeEntry entry =
+                            ChildNodeEntry entry =
                                     state.getChildNodeEntry(id);
                             if (entry == null) {
                                 // no such child node, probably has been deleted meanwhile

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java Wed Aug  6 06:17:00 2008
@@ -19,6 +19,7 @@
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.ItemStateException;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.NodeId;
 import org.apache.jackrabbit.uuid.UUID;
 import org.apache.lucene.index.IndexReader;
@@ -231,12 +232,12 @@
             while (node.getParentId() != null) {
                 NodeId parentId = node.getParentId();
                 NodeState parent = (NodeState) stateMgr.getItemState(parentId);
-                NodeState.ChildNodeEntry entry = parent.getChildNodeEntry(node.getNodeId());
+                ChildNodeEntry entry = parent.getChildNodeEntry(node.getNodeId());
                 elements.add(entry);
                 node = parent;
             }
             for (int i = elements.size() - 1; i > -1; i--) {
-                NodeState.ChildNodeEntry entry = (NodeState.ChildNodeEntry) elements.get(i);
+                ChildNodeEntry entry = (ChildNodeEntry) elements.get(i);
                 path.append('/').append(entry.getName().getLocalName());
                 if (entry.getIndex() > 1) {
                     path.append('[').append(entry.getIndex()).append(']');

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java Wed Aug  6 06:17:00 2008
@@ -24,6 +24,7 @@
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.ItemStateException;
 import org.apache.jackrabbit.core.state.PropertyState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.HierarchyManager;
 import org.apache.jackrabbit.core.PropertyId;
 import org.apache.jackrabbit.core.HierarchyManagerImpl;
@@ -840,8 +841,8 @@
                 nodeStates = new AbstractIteratorDecorator(
                         context.getChildNodeEntries().iterator()) {
                     public Object next() {
-                        NodeState.ChildNodeEntry cne =
-                                (NodeState.ChildNodeEntry) super.next();
+                        ChildNodeEntry cne =
+                                (ChildNodeEntry) super.next();
                         try {
                             return ism.getItemState(cne.getId());
                         } catch (ItemStateException e) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java Wed Aug  6 06:17:00 2008
@@ -23,6 +23,7 @@
 import org.apache.jackrabbit.core.state.ItemStateManager;
 import org.apache.jackrabbit.core.state.NoSuchItemStateException;
 import org.apache.jackrabbit.core.state.NodeState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.uuid.Constants;
 import org.apache.jackrabbit.uuid.UUID;
 import org.apache.jackrabbit.util.Timer;
@@ -1037,7 +1038,7 @@
         checkVolatileCommit();
         List children = node.getChildNodeEntries();
         for (Iterator it = children.iterator(); it.hasNext();) {
-            NodeState.ChildNodeEntry child = (NodeState.ChildNodeEntry) it.next();
+            ChildNodeEntry child = (ChildNodeEntry) it.next();
             Path childPath = PATH_FACTORY.create(path, child.getName(),
                     child.getIndex(), false);
             NodeState childState = null;

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java?rev=683257&r1=683256&r2=683257&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java Wed Aug  6 06:17:00 2008
@@ -24,6 +24,7 @@
 import org.apache.jackrabbit.core.state.NoSuchItemStateException;
 import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.state.PropertyState;
+import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.value.BLOBFileValue;
 import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.extractor.TextExtractor;
@@ -188,7 +189,7 @@
                         FieldNames.PARENT, node.getParentId().toString(),
                         Field.Store.YES, Field.Index.NO_NORMS, Field.TermVector.NO));
                 NodeState parent = (NodeState) stateProvider.getItemState(node.getParentId());
-                NodeState.ChildNodeEntry child = parent.getChildNodeEntry(node.getNodeId());
+                ChildNodeEntry child = parent.getChildNodeEntry(node.getNodeId());
                 if (child == null) {
                     // this can only happen when jackrabbit
                     // is running in a cluster.

Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java?rev=683257&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java Wed Aug  6 06:17:00 2008
@@ -0,0 +1,506 @@
+/*
+ * 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.jackrabbit.core.state;
+
+import org.apache.commons.collections.map.LinkedMap;
+import org.apache.commons.collections.MapIterator;
+import org.apache.commons.collections.OrderedMapIterator;
+import org.apache.jackrabbit.core.NodeId;
+import org.apache.jackrabbit.spi.Name;
+
+import java.util.List;
+import java.util.HashMap;
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Collection;
+import java.util.ListIterator;
+
+/**
+ * <code>ChildNodeEntries</code> represents an insertion-ordered
+ * collection of <code>ChildNodeEntry</code>s that also maintains
+ * the index values of same-name siblings on insertion and removal.
+ * <p/>
+ * <code>ChildNodeEntries</code> also provides an unmodifiable
+ * <code>List</code> view.
+ */
+class ChildNodeEntries implements List, Cloneable {
+
+    // insertion-ordered map of entries (key=NodeId, value=entry)
+    private LinkedMap entries;
+    // map used for lookup by name
+    // (key=name, value=either a single entry or a list of sns entries)
+    private HashMap nameMap;
+
+    ChildNodeEntries() {
+        entries = new LinkedMap();
+        nameMap = new HashMap();
+    }
+
+    ChildNodeEntry get(NodeId id) {
+        return (ChildNodeEntry) entries.get(id);
+    }
+
+    List get(Name nodeName) {
+        Object obj = nameMap.get(nodeName);
+        if (obj == null) {
+            return Collections.EMPTY_LIST;
+        }
+        if (obj instanceof ArrayList) {
+            // map entry is a list of siblings
+            return Collections.unmodifiableList((ArrayList) obj);
+        } else {
+            // map entry is a single child node entry
+            return Collections.singletonList(obj);
+        }
+    }
+
+    ChildNodeEntry get(Name nodeName, int index) {
+        if (index < 1) {
+            throw new IllegalArgumentException("index is 1-based");
+        }
+
+        Object obj = nameMap.get(nodeName);
+        if (obj == null) {
+            return null;
+        }
+        if (obj instanceof ArrayList) {
+            // map entry is a list of siblings
+            ArrayList siblings = (ArrayList) obj;
+            if (index <= siblings.size()) {
+                return (ChildNodeEntry) siblings.get(index - 1);
+            }
+        } else {
+            // map entry is a single child node entry
+            if (index == 1) {
+                return (ChildNodeEntry) obj;
+            }
+        }
+        return null;
+    }
+
+    ChildNodeEntry add(Name nodeName, NodeId id) {
+        List siblings = null;
+        int index = 0;
+        Object obj = nameMap.get(nodeName);
+        if (obj != null) {
+            if (obj instanceof ArrayList) {
+                // map entry is a list of siblings
+                siblings = (ArrayList) obj;
+                if (siblings.size() > 0) {
+                    // reuse immutable Name instance from 1st same name sibling
+                    // in order to help gc conserving memory
+                    nodeName = ((ChildNodeEntry) siblings.get(0)).getName();
+                }
+            } else {
+                // map entry is a single child node entry,
+                // convert to siblings list
+                siblings = new ArrayList();
+                siblings.add(obj);
+                nameMap.put(nodeName, siblings);
+            }
+            index = siblings.size();
+        }
+
+        index++;
+
+        ChildNodeEntry entry = new ChildNodeEntry(nodeName, id, index);
+        if (siblings != null) {
+            siblings.add(entry);
+        } else {
+            nameMap.put(nodeName, entry);
+        }
+        entries.put(id, entry);
+
+        return entry;
+    }
+
+    void addAll(List entriesList) {
+        Iterator iter = entriesList.iterator();
+        while (iter.hasNext()) {
+            ChildNodeEntry entry = (ChildNodeEntry) iter.next();
+            // delegate to add(Name, String) to maintain consistency
+            add(entry.getName(), entry.getId());
+        }
+    }
+
+    public ChildNodeEntry remove(Name nodeName, int index) {
+        if (index < 1) {
+            throw new IllegalArgumentException("index is 1-based");
+        }
+
+        Object obj = nameMap.get(nodeName);
+        if (obj == null) {
+            return null;
+        }
+
+        if (obj instanceof ChildNodeEntry) {
+            // map entry is a single child node entry
+            if (index != 1) {
+                return null;
+            }
+            ChildNodeEntry removedEntry = (ChildNodeEntry) obj;
+            nameMap.remove(nodeName);
+            entries.remove(removedEntry.getId());
+            return removedEntry;
+        }
+
+        // map entry is a list of siblings
+        List siblings = (ArrayList) obj;
+        if (index > siblings.size()) {
+            return null;
+        }
+
+        // remove from siblings list
+        ChildNodeEntry removedEntry = (ChildNodeEntry) siblings.remove(index - 1);
+        // remove from ordered entries map
+        entries.remove(removedEntry.getId());
+
+        // update indices of subsequent same-name siblings
+        for (int i = index - 1; i < siblings.size(); i++) {
+            ChildNodeEntry oldEntry = (ChildNodeEntry) siblings.get(i);
+            ChildNodeEntry newEntry = new ChildNodeEntry(nodeName, oldEntry.getId(), oldEntry.getIndex() - 1);
+            // overwrite old entry with updated entry in siblings list
+            siblings.set(i, newEntry);
+            // overwrite old entry with updated entry in ordered entries map
+            entries.put(newEntry.getId(), newEntry);
+        }
+
+        // clean up name lookup map if necessary
+        if (siblings.size() == 0) {
+            // no more entries with that name left:
+            // remove from name lookup map as well
+            nameMap.remove(nodeName);
+        } else if (siblings.size() == 1) {
+            // just one entry with that name left:
+            // discard siblings list and update name lookup map accordingly
+            nameMap.put(nodeName, siblings.get(0));
+        }
+
+        // we're done
+        return removedEntry;
+    }
+
+    /**
+     * Removes the child node entry refering to the node with the given id.
+     *
+     * @param id id of node whose entry is to be removed.
+     * @return the removed entry or <code>null</code> if there is no such entry.
+     */
+    ChildNodeEntry remove(NodeId id) {
+        ChildNodeEntry entry = (ChildNodeEntry) entries.get(id);
+        if (entry != null) {
+            return remove(entry.getName(), entry.getIndex());
+        }
+        return entry;
+    }
+
+    /**
+     * Removes the given child node entry.
+     *
+     * @param entry entry to be removed.
+     * @return the removed entry or <code>null</code> if there is no such entry.
+     */
+    public ChildNodeEntry remove(ChildNodeEntry entry) {
+        return remove(entry.getName(), entry.getIndex());
+    }
+
+    /**
+     * Removes all child node entries
+     */
+    public void removeAll() {
+        nameMap.clear();
+        entries.clear();
+    }
+
+    /**
+     * Returns a list of <code>ChildNodeEntry</code>s who do only exist in
+     * <code>this</code> but not in <code>other</code>.
+     * <p/>
+     * Note that two entries are considered identical in this context if
+     * they have the same name and uuid, i.e. the index is disregarded
+     * whereas <code>ChildNodeEntry.equals(Object)</code> also compares
+     * the index.
+     *
+     * @param other entries to be removed
+     * @return a new list of those entries that do only exist in
+     *         <code>this</code> but not in <code>other</code>
+     */
+    List removeAll(ChildNodeEntries other) {
+        if (entries.isEmpty()) {
+            return Collections.EMPTY_LIST;
+        }
+        if (other.isEmpty()) {
+            return this;
+        }
+
+        List result = new ArrayList();
+        Iterator iter = iterator();
+        while (iter.hasNext()) {
+            ChildNodeEntry entry = (ChildNodeEntry) iter.next();
+            ChildNodeEntry otherEntry = other.get(entry.getId());
+            if (entry == otherEntry) {
+                continue;
+            }
+            if (otherEntry == null
+                    || !entry.getName().equals(otherEntry.getName())) {
+                result.add(entry);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Returns a list of <code>ChildNodeEntry</code>s who do exist in
+     * <code>this</code> <i>and</i> in <code>other</code>.
+     * <p/>
+     * Note that two entries are considered identical in this context if
+     * they have the same name and uuid, i.e. the index is disregarded
+     * whereas <code>ChildNodeEntry.equals(Object)</code> also compares
+     * the index.
+     *
+     * @param other entries to be retained
+     * @return a new list of those entries that do exist in
+     *         <code>this</code> <i>and</i> in <code>other</code>
+     */
+    List retainAll(ChildNodeEntries other) {
+        if (entries.isEmpty()
+                || other.isEmpty()) {
+            return Collections.EMPTY_LIST;
+        }
+
+        List result = new ArrayList();
+        Iterator iter = iterator();
+        while (iter.hasNext()) {
+            ChildNodeEntry entry = (ChildNodeEntry) iter.next();
+            ChildNodeEntry otherEntry = other.get(entry.getId());
+            if (entry == otherEntry) {
+                result.add(entry);
+            } else if (otherEntry != null
+                    && entry.getName().equals(otherEntry.getName())) {
+                result.add(entry);
+            }
+        }
+
+        return result;
+    }
+
+    //-------------------------------------------< unmodifiable List view >
+    public boolean contains(Object o) {
+        if (o instanceof ChildNodeEntry) {
+            return entries.containsKey(((ChildNodeEntry) o).getId());
+        } else {
+            return false;
+        }
+    }
+
+    public boolean containsAll(Collection c) {
+        Iterator iter = c.iterator();
+        while (iter.hasNext()) {
+            if (!contains(iter.next())) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public Object get(int index) {
+        return entries.getValue(index);
+    }
+
+    public int indexOf(Object o) {
+        if (o instanceof ChildNodeEntry) {
+            return entries.indexOf(((ChildNodeEntry) o).getId());
+        } else {
+            return -1;
+        }
+    }
+
+    public boolean isEmpty() {
+        return entries.isEmpty();
+    }
+
+    public int lastIndexOf(Object o) {
+        // entries are unique
+        return indexOf(o);
+    }
+
+    public Iterator iterator() {
+        return new EntriesIterator();
+    }
+
+    public ListIterator listIterator() {
+        return new EntriesIterator();
+    }
+
+    public ListIterator listIterator(int index) {
+        if (index < 0 || index >= entries.size()) {
+            throw new IndexOutOfBoundsException();
+        }
+        ListIterator iter = new EntriesIterator();
+        while (index-- > 0) {
+            iter.next();
+        }
+        return iter;
+    }
+
+    public int size() {
+        return entries.size();
+    }
+
+    public List subList(int fromIndex, int toIndex) {
+        // @todo FIXME does not fulfill the contract of List.subList(int,int)
+        return Collections.unmodifiableList(new ArrayList(this).subList(fromIndex, toIndex));
+    }
+
+    public Object[] toArray() {
+        ChildNodeEntry[] array = new ChildNodeEntry[size()];
+        return toArray(array);
+    }
+
+    public Object[] toArray(Object[] a) {
+        if (!a.getClass().getComponentType().isAssignableFrom(ChildNodeEntry.class)) {
+            throw new ArrayStoreException();
+        }
+        if (a.length < size()) {
+            a = new ChildNodeEntry[size()];
+        }
+        MapIterator iter = entries.mapIterator();
+        int i = 0;
+        while (iter.hasNext()) {
+            iter.next();
+            a[i] = entries.getValue(i);
+            i++;
+        }
+        while (i < a.length) {
+            a[i++] = null;
+        }
+        return a;
+    }
+
+    public void add(int index, Object element) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean add(Object o) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean addAll(Collection c) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean addAll(int index, Collection c) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void clear() {
+        throw new UnsupportedOperationException();
+    }
+
+    public Object remove(int index) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean remove(Object o) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean removeAll(Collection c) {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean retainAll(Collection c) {
+        throw new UnsupportedOperationException();
+    }
+
+    public Object set(int index, Object element) {
+        throw new UnsupportedOperationException();
+    }
+
+    //------------------------------------------------< Cloneable support >
+    /**
+     * Returns a shallow copy of this <code>ChildNodeEntries</code> instance;
+     * the entries themselves are not cloned.
+     *
+     * @return a shallow copy of this instance.
+     */
+    protected Object clone() {
+        ChildNodeEntries clone = new ChildNodeEntries();
+        clone.entries = (LinkedMap) entries.clone();
+        clone.nameMap = new HashMap(nameMap.size());
+        for (Iterator it = nameMap.keySet().iterator(); it.hasNext();) {
+            Object key = it.next();
+            Object obj = nameMap.get(key);
+            if (obj instanceof ArrayList) {
+                // clone List
+                obj = ((ArrayList) obj).clone();
+            }
+            clone.nameMap.put(key, obj);
+        }
+        return clone;
+    }
+
+    //----------------------------------------------------< inner classes >
+    class EntriesIterator implements ListIterator {
+
+        private final OrderedMapIterator mapIter;
+
+        EntriesIterator() {
+            mapIter = entries.orderedMapIterator();
+        }
+
+        public boolean hasNext() {
+            return mapIter.hasNext();
+        }
+
+        public Object next() {
+            mapIter.next();
+            return mapIter.getValue();
+        }
+
+        public boolean hasPrevious() {
+            return mapIter.hasPrevious();
+        }
+
+        public int nextIndex() {
+            return entries.indexOf(mapIter.getKey()) + 1;
+        }
+
+        public Object previous() {
+            mapIter.previous();
+            return mapIter.getValue();
+        }
+
+        public int previousIndex() {
+            return entries.indexOf(mapIter.getKey()) - 1;
+        }
+
+        public void add(Object o) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+        public void set(Object o) {
+            throw new UnsupportedOperationException();
+        }
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntry.java?rev=683257&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntry.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntry.java Wed Aug  6 06:17:00 2008
@@ -0,0 +1,92 @@
+/*
+ * $URL:$
+ * $Id:$
+ *
+ * Copyright 1997-2008 Day Management AG
+ * Barfuesserplatz 6, 4001 Basel, Switzerland
+ * All Rights Reserved.
+ *
+ * This software is the confidential and proprietary information of
+ * Day Management AG, ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Day.
+ */
+package org.apache.jackrabbit.core.state;
+
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.core.NodeId;
+
+/**
+ * <code>ChildNodeEntry</code> specifies the name, index (in the case of
+ * same-name siblings) and the UUID of a child node entry.
+ * <p/>
+ * <code>ChildNodeEntry</code> instances are immutable.
+ */
+public final class ChildNodeEntry {
+
+    private int hash = 0;
+
+    private final Name name;
+    private final int index; // 1-based index for same-name siblings
+    private final NodeId id;
+
+    ChildNodeEntry(Name name, NodeId id, int index) {
+        if (name == null) {
+            throw new IllegalArgumentException("name can not be null");
+        }
+        this.name = name;
+
+        if (id == null) {
+            throw new IllegalArgumentException("id can not be null");
+        }
+        this.id = id;
+
+        if (index < 1) {
+            throw new IllegalArgumentException("index is 1-based");
+        }
+        this.index = index;
+    }
+
+    public NodeId getId() {
+        return id;
+    }
+
+    public Name getName() {
+        return name;
+    }
+
+    public int getIndex() {
+        return index;
+    }
+
+    //---------------------------------------< java.lang.Object overrides >
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof ChildNodeEntry) {
+            ChildNodeEntry other = (ChildNodeEntry) obj;
+            return (name.equals(other.name) && id.equals(other.id)
+                    && index == other.index);
+        }
+        return false;
+    }
+
+    public String toString() {
+        return name.toString() + "[" + index + "] -> " + id;
+    }
+
+    public int hashCode() {
+        // ChildNodeEntry is immutable, we can store the computed hash code value
+        int h = hash;
+        if (h == 0) {
+            h = 17;
+            h = 37 * h + name.hashCode();
+            h = 37 * h + id.hashCode();
+            h = 37 * h + index;
+            hash = h;
+        }
+        return h;
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntry.java
------------------------------------------------------------------------------
    svn:eol-style = native