You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2015/09/16 21:25:12 UTC

svn commit: r1703453 - in /sling/trunk/contrib/nosql: couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/ generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/ generic/src/test/java/org/apache/...

Author: sseifert
Date: Wed Sep 16 19:25:11 2015
New Revision: 1703453

URL: http://svn.apache.org/r1703453
Log:
SLING-4381/SLING-5024 fix root node child listing

Modified:
    sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java
    sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/PathUtil.java
    sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/org/apache/sling/nosql/mongodb/resourceprovider/impl/MongoDBNoSqlAdapter.java

Modified: sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java?rev=1703453&r1=1703452&r2=1703453&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java (original)
+++ sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java Wed Sep 16 19:25:11 2015
@@ -97,7 +97,7 @@ public final class CouchbaseNoSqlAdapter
     public Iterator<NoSqlData> getChildren(String parentPath) {
         Bucket bucket = couchbaseClient.getBucket();
         // fetch all direct children of this path
-        Pattern directChildren = Pattern.compile("^" + parentPath + "/[^/]+$");
+        Pattern directChildren = Pattern.compile("^" + StringUtils.removeEnd(parentPath, "/") + "/[^/]+$");
         N1qlQuery query = N1qlQuery.simple(select("*")
                 .from(couchbaseClient.getBucketName())
                 .where("REGEXP_LIKE(`" + PN_PATH + "`, '" + directChildren.pattern() + "')"),

Modified: sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/PathUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/PathUtil.java?rev=1703453&r1=1703452&r2=1703453&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/PathUtil.java (original)
+++ sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/PathUtil.java Wed Sep 16 19:25:11 2015
@@ -20,6 +20,8 @@ package org.apache.sling.nosql.generic.r
 
 import java.util.regex.Pattern;
 
+import org.apache.commons.lang3.StringUtils;
+
 /**
  * Helper functions for handling paths.
  */
@@ -35,7 +37,7 @@ public final class PathUtil {
      * @return Regex pattern
      */
     public static Pattern getChildPathPattern(String parentPath) {
-        return Pattern.compile("^" + Pattern.quote(parentPath) + "/[^/]+$");
+        return Pattern.compile("^" + Pattern.quote(StringUtils.removeEnd(parentPath,  "/")) + "/[^/]+$");
     }
     
     /**

Modified: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java?rev=1703453&r1=1703452&r2=1703453&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java (original)
+++ sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java Wed Sep 16 19:25:11 2015
@@ -18,9 +18,14 @@
  */
 package org.apache.sling.nosql.generic.resource.impl;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.PersistenceException;
@@ -34,6 +39,7 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 
 /**
  * Test monting NoSqlResourceProvider as root resource provider.
@@ -77,6 +83,34 @@ public abstract class AbstractNoSqlResou
         context.resourceResolver().delete(test);
     }
     
+    @Test
+    public void testListChildren_RootNode() throws IOException {
+        Resource testResource = ResourceUtil.getOrCreateResource(context.resourceResolver(), "/test",
+                ImmutableMap.<String, Object>of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED),
+                JcrConstants.NT_UNSTRUCTURED, true);
+
+        Resource root = context.resourceResolver().getResource("/");
+
+        List<Resource> children = Lists.newArrayList(root.listChildren());
+        assertFalse(children.isEmpty());
+        assertTrue(containsResource(children, testResource));
+
+        children = Lists.newArrayList(root.getChildren());
+        assertFalse(children.isEmpty());
+        assertTrue(containsResource(children, testResource));
+
+        context.resourceResolver().delete(testResource);
+    }
+
+    private boolean containsResource(List<Resource> children, Resource resource) {
+        for (Resource child : children) {
+            if (StringUtils.equals(child.getPath(), resource.getPath())) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
     @Test(expected = PersistenceException.class)
     public void testDeleteRootPath() throws PersistenceException {
         Resource root = context.resourceResolver().getResource("/");

Modified: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/org/apache/sling/nosql/mongodb/resourceprovider/impl/MongoDBNoSqlAdapter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/org/apache/sling/nosql/mongodb/resourceprovider/impl/MongoDBNoSqlAdapter.java?rev=1703453&r1=1703452&r2=1703453&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/org/apache/sling/nosql/mongodb/resourceprovider/impl/MongoDBNoSqlAdapter.java (original)
+++ sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/org/apache/sling/nosql/mongodb/resourceprovider/impl/MongoDBNoSqlAdapter.java Wed Sep 16 19:25:11 2015
@@ -23,6 +23,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.regex.Pattern;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.nosql.generic.adapter.AbstractNoSqlAdapter;
 import org.apache.sling.nosql.generic.adapter.MultiValueMode;
 import org.apache.sling.nosql.generic.adapter.NoSqlData;
@@ -72,7 +73,7 @@ public final class MongoDBNoSqlAdapter e
     @Override
     public Iterator<NoSqlData> getChildren(String parentPath) {
         List<NoSqlData> children = new ArrayList<>();
-        Pattern directChildren = Pattern.compile("^" + Pattern.quote(parentPath) + "/[^/]+$");
+        Pattern directChildren = Pattern.compile("^" + Pattern.quote(StringUtils.removeEnd(parentPath, "/")) + "/[^/]+$");
         FindIterable<Document> result = collection.find(Filters.regex(ID_PROPERTY, directChildren));
         try (MongoCursor<Document> wrappers = result.iterator()) {
             while (wrappers.hasNext()) {