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 2006/07/24 12:38:36 UTC

svn commit: r425002 - /jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java

Author: mreutegg
Date: Mon Jul 24 03:38:35 2006
New Revision: 425002

URL: http://svn.apache.org/viewvc?rev=425002&view=rev
Log:
Clean up todos in CachingItemStateManager. Use newly available PathMap.Element.getDescendant() method.

Modified:
    jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java

Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java?rev=425002&r1=425001&r2=425002&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/CachingItemStateManager.java Mon Jul 24 03:38:35 2006
@@ -18,6 +18,7 @@
 
 import org.apache.jackrabbit.util.PathMap;
 import org.apache.jackrabbit.name.Path;
+import org.apache.jackrabbit.name.MalformedPathException;
 import org.apache.jackrabbit.spi.ItemId;
 import org.apache.jackrabbit.spi.NodeId;
 import org.apache.jackrabbit.spi.EventIterator;
@@ -56,7 +57,7 @@
     public CachingItemStateManager(ItemStateManager ism) {
         this.ism = ism;
         this.uuid2PathElement = new HashMap(); // TODO: must use weak references
-        path2State = new PathMap();            // TODO: must use weak references
+        path2State = new PathMap();      // TODO: must use weak references
     }
 
     //---------------------------------------------------< ItemStateManager >---
@@ -242,8 +243,15 @@
                     PathMap.Element parentElement = getPathElement(state.getParentId());
                     // create path element if necessary
                     if (elem == null) {
-                        // TODO TO-BE-FIXED: put element (marcel, here goes your extra method)
-                        // i removed it, since its not present in JR commons (anchela)
+                        Path.PathElement[] elements = new Path.PathElement[]{
+                            getNameElement((NodeState) parentElement.get(), state)};
+                        Path p = null;
+                        try {
+                            p = new Path.PathBuilder(elements).getPath();
+                        } catch (MalformedPathException e) {
+                            // elements is never empty
+                        }
+                        elem = parentElement.getDescendant(p, false);
                     }
                     elem.set(state);
                     // now put current state to cache
@@ -255,16 +263,14 @@
         // at this point we are guaranteed to have an element
         // now resolve relative path part of id if there is one
         if (relPath != null) {
-            // TODO TO-BE-FIXED: map element (Marcel, here goes your extra method)
-            // i removed it, since its not present in JR commons (anchela)
-            PathMap.Element tmp = null;
-            if (tmp == null) {
+            PathMap.Element tmp = elem.getDescendant(relPath, true);
+            if (tmp == null || tmp.get() == null) {
                 // not yet cached, load from ism
                 ItemState state = ism.getItemState(id);
                 // put to cache
-                // TODO TO-BE-FIXED: put element (Marcel, here goes your extra method)
-                // i removed it, since its not present in JR commons (anchela)
-                tmp = null;
+                if (tmp == null) {
+                    tmp = elem.getDescendant(relPath, false);
+                }
                 tmp.set(state);
             }
             elem = tmp;
@@ -281,7 +287,7 @@
      *         present in the cache.
      */
     private PathMap.Element lookup(ItemId id) {
-        PathMap.Element elem = null;
+        PathMap.Element elem;
         // resolve UUID
         if (id.getUUID() != null) {
             elem = (PathMap.Element) uuid2PathElement.get(id.getUUID());
@@ -289,13 +295,14 @@
                 // not cached
                 return null;
             }
+        } else {
+            // start from root
+            elem = path2State.map(Path.ROOT, false);
         }
 
         // resolve relative path
         if (id.getRelativePath() != null) {
-            // TODO TO-BE-FIXED: map element (Marcel, here goes your extra method)
-            // i removed it, since its not present in JR commons (anchela)
-            elem = null;
+            elem = elem.getDescendant(id.getRelativePath(), true);
         }
 
         return elem;