You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/08/05 15:58:31 UTC

svn commit: r801232 - in /jackrabbit/branches/1.x: ./ jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/ jackrabbit-jcr2spi/src/test/resources/ jackrabbit-jcr2spi/src/te...

Author: jukka
Date: Wed Aug  5 13:58:31 2009
New Revision: 801232

URL: http://svn.apache.org/viewvc?rev=801232&view=rev
Log:
1.x: Merged revisions 794012, 794100 and 794102 from the 1.5 branch (JCR-1797)

Added:
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java
      - copied, changed from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java
      - copied, changed from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java
      - copied, changed from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/resources/
      - copied from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/resources/
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/resources/org/
      - copied from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/resources/org/
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/resources/org/apache/
      - copied from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/resources/org/apache/
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/resources/org/apache/jackrabbit/
      - copied from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/resources/org/apache/jackrabbit/
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/resources/org/apache/jackrabbit/jcr2spi/
      - copied from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/resources/org/apache/jackrabbit/jcr2spi/
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/resources/org/apache/jackrabbit/jcr2spi/default-nodetypes.cnd
      - copied unchanged from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/resources/org/apache/jackrabbit/jcr2spi/default-nodetypes.cnd
Modified:
    jackrabbit/branches/1.x/   (props changed)
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
    jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java
    jackrabbit/branches/1.x/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java

Propchange: jackrabbit/branches/1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Aug  5 13:58:31 2009
@@ -1,2 +1,3 @@
 /incubator/jackrabbit/trunk:78926
+/jackrabbit/branches/1.5:794012,794100,794102
 /jackrabbit/trunk:770143-773197,773483,773525-773555,773584,773588,773828,773835-775756,775833,775836,775840,775868,775981,775986,776036,776256,776310,776313,776321-776322,776332,776356-776357,776362,776373,776650-776693,776737,776757,776776-776777,777024,777029,777034,777478,777509,777541,777548,777936,778445,778613,778616,778621,778645,778720,778802,779032,779040,779068-779071,779074,779076,779081,779084,779086-779088,779090-779092,779094-779096,779101,779223,779225,779227-779228,779230,779233-779234,779460,779475-779476,779504,779550,779552,779555,779561,779563,779583,779590,779618,779621-779622,779624,779642,779654,779657-779659,779661,779936,780006,780010,780025,780085,780985,780989,780993,781017,781051,781054,781294-781300,781305-781311,781318,781328,781338,781344,781347,781369,781372,781377,781416-781417,781423,782621-782622,782644,782646,782652,782669,782675,782677,782683,782694,782921,782925,782930,782936,783002,783004-783005,783042-783043,783239,783278,783304,78331
 9-783321,783324,783326-783327,783330-783333,783337-783338,783340-783341,783343,783345-783346,783356,783359,783383,783386,783412,783435,783444,783447,783523,783688,783703,783708,783710,783719,783757,783759,783761,783786,783809,784011,784013,784039,784058,784060-784061,784090-784091,784106,784108-784109,784111,784117-784120,784124,784163,784261,784680,784691,784696,784760,784824,785112,785116,785157,785169,785209,785492,785517,785519,785529,785533,785535,785539-785540,785545,785580,785589-785590,785594,785597,785602,785627,785629,785631,785635,785668,785711,785725,785777,785863,785981,786003,786019,786028,786062,786075,786089-786090,786093-786094,786144,786146-786147,786149,786167,786280,786295,786319,786329-786330,786336,786409,786419,786423,786480,786485,786492,786513,786562,786565,786680,786685,787183,787219,787241,787942,787952,787964,787996,788002,788012-788013,788350-788351,788443,788446,788450,789245,789257,789269-789270,789279,789307,789312,789324,789338,789347,789485,
 789629,789809,789986,790054,790056,790065-790066,790068,790070-790071,790118,790127,790153,790235-790236,790528,790537,790541,790557-790558,790568,790590,790600,790603,790629,790814,790826,790834,790887,790892,790901,790930,790939,791180,791253,791255,791438-791439,791441,791452,791457,791475,791505,791520,791527,791737,791832,791884,791906,792102,792118,792138,792152,792155-792156,792160,792167-792168,792175,792180-792181,792211,792214,792218,792437,792453,792464,792467,792469,792485,792488,792496,792498,792509,792547-792548,792588-792589,793012-793013,793015-793016,793018,793046-793047,793072,793180,793238,793243,793283,793484-793485,793507,793559,793571,793830,793836,793840,794162,794190,794193,794253,794278,794293-794294,794304,794323,794329,794600,794617,794633,794641,794644,794652,794674,794702,794718,794743,794783,794994,795046,795049,795082,795096,795136,795138,795841-795842,795854,796586,796757,796845,796855,796876,796899,796955,796957,797094,797139,797158,797386,79
 7399,797410,797414,797416-797417,797424,797470,797484,797488-797489,797539,797549,797634,797662,797836,798141,798183,798196,798209,798306,798834,798844,798847-798848,798889-798890,798940,798958,799188,799284,799550,799595,799599,799610,800269,800464,800466,800478,800483,800715,800807,800829,800854,800862-800863,801104

Modified: jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java?rev=801232&r1=801231&r2=801232&view=diff
==============================================================================
--- jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java (original)
+++ jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java Wed Aug  5 13:58:31 2009
@@ -218,13 +218,16 @@
         }
 
         // deal with all additional ItemInfos that may be present.
-        NodeEntry parentEntry = nodeState.getNodeEntry();
+        // Assuming locality of the itemInfos, we keep an estimate of a parent entry.
+        // This reduces the part of the hierarchy to traverse. For large batches this
+        // optimization results in about 25% speed up.
+        NodeEntry approxParentEntry = nodeState.getNodeEntry();
         while (infos.hasNext()) {
             ItemInfo info = (ItemInfo) infos.next();
             if (info.denotesNode()) {
-                createDeepNodeState((NodeInfo) info, parentEntry, infos);
+                approxParentEntry = createDeepNodeState((NodeInfo) info, approxParentEntry, infos).getNodeEntry();
             } else {
-                createDeepPropertyState((PropertyInfo) info, parentEntry, infos);
+                createDeepPropertyState((PropertyInfo) info, approxParentEntry, infos);
             }
         }
         return nodeState;
@@ -360,9 +363,18 @@
 
             NodeEntry entry = anyParent;
             for (int i = 0; i < missingElems.length; i++) {
-                Name name = missingElems[i].getName();
-                int index = missingElems[i].getNormalizedIndex();
-                entry = createIntermediateNodeEntry(entry, name, index, infos);
+                if (missingElems[i].denotesParent()) {
+                    // Walk up the hierarchy for 'negative' paths
+                    // until the smallest common root is found
+                    entry = entry.getParent();
+                }
+                else if (missingElems[i].denotesName()) {
+                    // Add missing elements starting from the smallest common root
+                    Name name = missingElems[i].getName();
+                    int index = missingElems[i].getNormalizedIndex();
+                    entry = createIntermediateNodeEntry(entry, name, index, infos);
+                }
+                // else denotesCurrent -> ignore
             }
             if (entry == anyParent) {
                 throw new RepositoryException("Internal error while getting deep itemState");
@@ -401,9 +413,18 @@
             int i = 0;
             // NodeEntries except for the very last 'missingElem'
             while (i < missingElems.length - 1) {
-                Name name = missingElems[i].getName();
-                int index = missingElems[i].getNormalizedIndex();
-                entry = createIntermediateNodeEntry(entry, name, index, infos);
+                if (missingElems[i].denotesParent()) {
+                    // Walk up the hierarchy for 'negative' paths
+                    // until the smallest common root is found
+                    entry = entry.getParent();
+                }
+                else if (missingElems[i].denotesName()) {
+                    // Add missing elements starting from the smallest common root
+                    Name name = missingElems[i].getName();
+                    int index = missingElems[i].getNormalizedIndex();
+                    entry = createIntermediateNodeEntry(entry, name, index, infos);
+                }
+                // else denotesCurrent -> ignore
                 i++;
             }
             // create PropertyEntry for the last element if not existing yet
@@ -474,8 +495,8 @@
     }
 
     /**
-     * Returns true if the given <code>missingElems</code> start with a parent (..),
-     * a current (.) or the root element, in which case the info is not within
+     * Returns true if the given <code>missingElems</code> start with
+     * the root element, in which case the info is not within
      * the tree as it is expected.
      * See also #JCR-1797 for the corresponding enhancement request.
      *
@@ -484,7 +505,7 @@
      */
     private static boolean startsWithIllegalElement(Path.Element[] missingElems) {
         if (missingElems.length > 0) {
-            return !missingElems[0].denotesName();
+            return missingElems[0].denotesRoot();
         }
         return false;
     }

Copied: jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java (from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java?p2=jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java&p1=jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java&r1=794012&r2=801232&rev=801232&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java (original)
+++ jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java Wed Aug  5 13:58:31 2009
@@ -241,6 +241,15 @@
         return repositoryService.lock(sessionInfo, nodeId, deep, sessionScoped);
     }
 
+    public LockInfo lock(
+            SessionInfo sessionInfo, NodeId nodeId,
+            boolean deep, boolean sessionScoped,
+            long timeoutHint, String ownerHint)
+            throws RepositoryException {
+        return repositoryService.lock(
+            sessionInfo, nodeId, deep, sessionScoped, timeoutHint, ownerHint);
+    }
+
     public void refreshLock(SessionInfo sessionInfo, NodeId nodeId)
             throws RepositoryException {
 

Copied: jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java (from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java)
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java?p2=jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java&p1=jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java&r1=794012&r2=801232&rev=801232&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java (original)
+++ jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractRepositoryService.java Wed Aug  5 13:58:31 2009
@@ -310,6 +310,14 @@
         throw new UnsupportedRepositoryOperationException("Locking not supported");
     }
 
+    public LockInfo lock(
+            SessionInfo sessionInfo, NodeId nodeId,
+            boolean deep, boolean sessionScoped,
+            long timeoutHint, String ownerHint)
+            throws RepositoryException {
+        throw new UnsupportedRepositoryOperationException("Locking not supported");
+    }
+
     public void refreshLock(SessionInfo sessionInfo, NodeId nodeId)
             throws RepositoryException {
 

Copied: jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java (from r794012, jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java?p2=jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java&p1=jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java&r1=794012&r2=801232&rev=801232&view=diff
==============================================================================
--- jackrabbit/branches/1.5/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java (original)
+++ jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/GetItemsTest.java Wed Aug  5 13:58:31 2009
@@ -1,3 +1,19 @@
+/*
+ * 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.jcr2spi;
 
 import java.util.ArrayList;
@@ -83,39 +99,23 @@
     private Iterable itemInfosProvider;
 
     /**
-     * Check whether we can traverse the hierarchy when the item infos are returned in their
-     * canonical order.
-     * @throws RepositoryException
-     */
-    public void testGetItemInfos() throws RepositoryException {
-        itemInfosProvider = new Iterable() {
-            public Iterator iterator() {
-                return itemInfos.iterator();
-            }
-        };
-
-        checkHierarchy();
-    }
-
-    /**
      * Check whether we can traverse the hierarchy when the item info for root is
-     * returned first.
+     * retrieved first.
      * @throws RepositoryException
      */
     public void testGetItemInfosRootFirst() throws RepositoryException {
         itemInfosProvider = new Iterable() {
+            Predicate isRoot = new Predicate() {
+                public boolean evaluate(Object object) {
+                    ItemInfo itemInfo = (ItemInfo) object;
+                    return itemInfo.getPath().denotesRoot();
+                }
+            };
 
             public Iterator iterator() {
-                Predicate isRoot = new Predicate() {
-                    public boolean evaluate(Object object) {
-                        ItemInfo itemInfo = (ItemInfo) object;
-                        return itemInfo.getPath().denotesRoot();
-                    }
-                };
-
                 return new IteratorChain(
-                    new FilterIterator(itemInfos.iterator(), isRoot),
-                    new FilterIterator(itemInfos.iterator(), NotPredicate.getInstance(isRoot)));
+                        new FilterIterator(itemInfos.iterator(), isRoot),
+                        new FilterIterator(itemInfos.iterator(), NotPredicate.getInstance(isRoot)));
             }
         };
 
@@ -124,28 +124,29 @@
     }
 
     /**
-     * Check whether we can traverse the hierarchy when the item info for root is
-     * returned last.
+     * Check whether we can traverse the hierarchy when the item info for a deep item
+     * is retrieved first.
      * @throws RepositoryException
      */
-    public void testGetItemInfosRootLast() throws RepositoryException {
+    public void testGetItemInfosDeepFirst() throws RepositoryException {
+        final String targetPath = "/node2/node21/node211/node2111/node21111/node211111/node2111111";
+
         itemInfosProvider = new Iterable() {
+            Predicate isTarget = new Predicate() {
+                public boolean evaluate(Object object) {
+                    ItemInfo itemInfo = (ItemInfo) object;
+                    return targetPath.equals(toJCRPath(itemInfo.getPath()));
+                }
+            };
 
             public Iterator iterator() {
-                Predicate isRoot = new Predicate() {
-                    public boolean evaluate(Object object) {
-                        ItemInfo itemInfo = (ItemInfo) object;
-                        return itemInfo.getPath().denotesRoot();
-                    }
-                };
-
                 return new IteratorChain(
-                    new FilterIterator(itemInfos.iterator(), NotPredicate.getInstance(isRoot)),
-                    new FilterIterator(itemInfos.iterator(), isRoot));
+                        new FilterIterator(itemInfos.iterator(), isTarget),
+                        new FilterIterator(itemInfos.iterator(), NotPredicate.getInstance(isTarget)));
             }
         };
 
-        assertTrue(session.getRootNode().getDepth() == 0);
+        assertEquals(targetPath, session.getItem(targetPath).getPath());
         checkHierarchy();
     }
 

Modified: jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java?rev=801232&r1=801231&r2=801232&view=diff
==============================================================================
--- jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java (original)
+++ jackrabbit/branches/1.x/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/TestAll.java Wed Aug  5 13:58:31 2009
@@ -19,6 +19,7 @@
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,6 +35,7 @@
         TestSuite suite = new TestSuite("jcr2spi tests");
 
         suite.addTestSuite(AccessByRelativePathTest.class);
+        suite.addTestSuite(GetItemsTest.class);
 
         // get node(s)
         suite.addTestSuite(SNSIndexTest.class);
@@ -85,7 +87,7 @@
         suite.addTestSuite(ReorderNewAndSavedTest.class);
         suite.addTestSuite(ReorderMixedTest.class);
         suite.addTestSuite(ReorderMoveTest.class);
-        
+
         // update
         suite.addTestSuite(UpdateTest.class);
 
@@ -98,7 +100,7 @@
 
         // repository
         suite.addTestSuite(LoginTest.class);
-        
+
         return suite;
     }
 }
\ No newline at end of file

Modified: jackrabbit/branches/1.x/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.x/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java?rev=801232&r1=801231&r2=801232&view=diff
==============================================================================
--- jackrabbit/branches/1.x/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java (original)
+++ jackrabbit/branches/1.x/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java Wed Aug  5 13:58:31 2009
@@ -264,8 +264,7 @@
      * Method used to 'batch-read' from the persistent storage. It returns the
      * <code>NodeInfo</code> for the given <code>NodeId</code> as the first
      * element in the <code>Iterator</code>. In addition the iterator may contain
-     * child <code>ItemInfo</code>s down to a certain depth. The configuration
-     * process however is left to the implementation.
+     * arbitrary <code>ItemInfo</code>s.
      *
      * @param sessionInfo
      * @param nodeId
@@ -273,8 +272,7 @@
      * at least a single element: the <code>NodeInfo</code> that represents
      * the Node identified by the given <code>NodeId</code>. If the Iterator
      * contains multiple elements, the first is expected to represent the Node
-     * identified by the given <code>NodeId</code> and all subsequent elements
-     * must represent children of that <code>Node</code>.
+     * identified by the given <code>NodeId</code>.
      * @throws javax.jcr.ItemNotFoundException
      * @throws javax.jcr.RepositoryException
      * @see javax.jcr.Session#getItem(String)