Author: mreutegg
Date: Thu Jan 30 08:29:58 2014
New Revision: 1562722

URL: http://svn.apache.org/r1562722
Log:
OAK-1366: Implement DocumentNodeState.getChildNodeCount(long)

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java?rev=1562722&r1=1562721&r2=1562722&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeState.java
 Thu Jan 30 08:29:58 2014
@@ -39,6 +39,7 @@ import org.apache.jackrabbit.oak.spi.sta
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Iterators;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
@@ -165,6 +166,24 @@ final class DocumentNodeState extends Ab
         }
     }
 
+    @Override
+    public long getChildNodeCount(long max) {
+        if (node.hasNoChildren()) {
+            return 0;
+        }
+        if (max > DocumentNodeStore.NUM_CHILDREN_CACHE_LIMIT) {
+            // count all
+            return Iterators.size(new ChildNodeEntryIterator());
+        }
+        Node.Children c = store.getChildren(node, null, (int) max);
+        if (c.hasMore) {
+            return Long.MAX_VALUE;
+        } else {
+            // we know the exact value
+            return c.children.size();
+        }
+    }
+
     @Nonnull
     @Override
     public Iterable<? extends ChildNodeEntry> getChildNodeEntries() {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1562722&r1=1562721&r2=1562722&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
 Thu Jan 30 08:29:58 2014
@@ -93,7 +93,7 @@ public final class DocumentNodeStore
     /**
      * Do not cache more than this number of children for a document.
      */
-    private static final int NUM_CHILDREN_CACHE_LIMIT = 
Integer.getInteger("oak.documentMK.childrenCacheLimit", 16 * 1024);
+    static final int NUM_CHILDREN_CACHE_LIMIT = 
Integer.getInteger("oak.documentMK.childrenCacheLimit", 16 * 1024);
 
     /**
      * When trying to access revisions that are older than this many


Reply via email to