You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2005/04/08 19:10:42 UTC

svn commit: r160563 - in incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core: CachingHierarchyManager.java HierarchyManager.java HierarchyManagerImpl.java ItemImpl.java

Author: stefan
Date: Fri Apr  8 10:10:39 2005
New Revision: 160563

URL: http://svn.apache.org/viewcvs?view=rev&rev=160563
Log:
optimized Item.getDepth()

Modified:
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManager.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java
    incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java?view=diff&r1=160562&r2=160563
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/CachingHierarchyManager.java Fri Apr  8 10:10:39 2005
@@ -134,6 +134,18 @@
     /**
      * {@inheritDoc}
      */
+    public int getDepth(ItemId id)
+            throws ItemNotFoundException, RepositoryException {
+        if (pathCache.containsKey(id)) {
+            return getPath(id).getAncestorCount();
+        } else {
+            return delegatee.getDepth(id);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public synchronized Path[] getAllPaths(ItemId id)
             throws ItemNotFoundException, RepositoryException {
         return getAllPaths(id, false);

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManager.java?view=diff&r1=160562&r2=160563
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManager.java Fri Apr  8 10:10:39 2005
@@ -50,6 +50,16 @@
     public QName getName(ItemId id) throws ItemNotFoundException, RepositoryException;
 
     /**
+     * Returns the depth of the specified item which is equivalent to
+     * <code>getPath(id).getAncestorCount()</code>.  
+     * @param id
+     * @return
+     * @throws ItemNotFoundException
+     * @throws RepositoryException
+     */
+    public int getDepth(ItemId id) throws ItemNotFoundException, RepositoryException;
+
+    /**
      * @param id
      * @return
      * @throws ItemNotFoundException

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java?view=diff&r1=160562&r2=160563
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/HierarchyManagerImpl.java Fri Apr  8 10:10:39 2005
@@ -372,6 +372,31 @@
     /**
      * {@inheritDoc}
      */
+    public int getDepth(ItemId id)
+            throws ItemNotFoundException, RepositoryException {
+        try {
+            int depth = 0;
+            ItemState state = getItemState(id);
+            for (String parentUUID = state.getParentUUID(); parentUUID != null;) {
+                state = (NodeState) getItemState(new NodeId(parentUUID));
+                parentUUID = state.getParentUUID();
+                depth++;
+            }
+            return depth;
+        } catch (NoSuchItemStateException nsise) {
+            String msg = "failed to determine depth of " + id;
+            log.debug(msg);
+            throw new ItemNotFoundException(msg, nsise);
+        } catch (ItemStateException ise) {
+            String msg = "failed to determine depth of " + id;
+            log.debug(msg);
+            throw new RepositoryException(msg, ise);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public synchronized Path[] getAllPaths(ItemId id) throws ItemNotFoundException, RepositoryException {
         return getAllPaths(id, false);
     }

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java?view=diff&r1=160562&r2=160563
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java Fri Apr  8 10:10:39 2005
@@ -1438,7 +1438,11 @@
      * {@inheritDoc}
      */
     public int getDepth() throws RepositoryException {
-        return getPrimaryPath().getAncestorCount();
+        if (state.getParentUUID() == null) {
+            // shortcut
+            return 0;
+        }
+        return session.getHierarchyManager().getDepth(id);
     }
 
     /**