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/14 23:19:30 UTC

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

Author: sseifert
Date: Mon Sep 14 21:19:29 2015
New Revision: 1703061

URL: http://svn.apache.org/r1703061
Log:
SLING-5024 Sling NoSQL Resource Provider for MongoDB (based on nosql.generic)

Added:
    sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MapConverter.java
      - copied, changed from r1703038, sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverter.java
    sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java   (with props)
    sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/adapter/
    sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/adapter/MapConverterTest.java
      - copied, changed from r1703038, sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverterTest.java
    sling/trunk/contrib/nosql/mongodb-resourceprovider/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/README.md
    sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml   (with props)
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js   (with props)
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html   (with props)
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js   (with props)
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html   (with props)
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/org/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/java/org/apache/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/test/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/test/java/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/test/java/org/
    sling/trunk/contrib/nosql/mongodb-resourceprovider/src/test/java/org/apache/
Removed:
    sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverter.java
    sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverterTest.java
Modified:
    sling/trunk/contrib/nosql/couchbase-resourceprovider/pom.xml
    sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java
    sling/trunk/contrib/nosql/generic/pom.xml
    sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlData.java
    sling/trunk/contrib/pom.xml

Modified: sling/trunk/contrib/nosql/couchbase-resourceprovider/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/couchbase-resourceprovider/pom.xml?rev=1703061&r1=1703060&r2=1703061&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/couchbase-resourceprovider/pom.xml (original)
+++ sling/trunk/contrib/nosql/couchbase-resourceprovider/pom.xml Mon Sep 14 21:19:29 2015
@@ -67,18 +67,11 @@
             <version>2.2.2</version>
             <scope>provided</scope>
         </dependency>
-  
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.3.2</version>
-            <scope>provided</scope>
-        </dependency>
-        
+          
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-            <version>1.3.0</version>
+            <version>1.5.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>

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=1703061&r1=1703060&r2=1703061&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 Mon Sep 14 21:19:29 2015
@@ -23,6 +23,7 @@ import java.util.Iterator;
 import org.apache.sling.nosql.couchbase.client.CouchbaseClient;
 import org.apache.sling.nosql.couchbase.client.CouchbaseKey;
 import org.apache.sling.nosql.generic.adapter.AbstractNoSqlAdapter;
+import org.apache.sling.nosql.generic.adapter.MultiValueMode;
 import org.apache.sling.nosql.generic.adapter.NoSqlData;
 
 import com.couchbase.client.java.Bucket;
@@ -79,7 +80,7 @@ public final class CouchbaseNoSqlAdapter
                 return null;
             }
             else {
-                return new NoSqlData(path, MapConverter.mapListToArray(data.toMap()));
+                return new NoSqlData(path, data.toMap(), MultiValueMode.LISTS);
             }
         }
     }
@@ -102,7 +103,7 @@ public final class CouchbaseNoSqlAdapter
                 JsonObject envelope = doc.content();
                 String path = envelope.getString(PN_PATH);
                 JsonObject data = envelope.getObject(PN_DATA);
-                return new NoSqlData(path, MapConverter.mapListToArray(data.toMap()));
+                return new NoSqlData(path, data.toMap(), MultiValueMode.LISTS);
             }
 
             @Override
@@ -119,7 +120,7 @@ public final class CouchbaseNoSqlAdapter
 
         JsonObject envelope = JsonObject.create();
         envelope.put(PN_PATH, data.getPath());
-        envelope.put(PN_DATA, JsonObject.from(MapConverter.mapArrayToList(data.getProperties())));
+        envelope.put(PN_DATA, JsonObject.from(data.getProperties(MultiValueMode.LISTS)));
 
         JsonDocument doc = JsonDocument.create(cacheKey, envelope);
         try {

Modified: sling/trunk/contrib/nosql/generic/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/pom.xml?rev=1703061&r1=1703060&r2=1703061&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/generic/pom.xml (original)
+++ sling/trunk/contrib/nosql/generic/pom.xml Mon Sep 14 21:19:29 2015
@@ -88,6 +88,12 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.3.2</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
             <scope>provided</scope>
@@ -128,7 +134,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-            <version>1.3.0</version>
+            <version>1.5.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>

Copied: sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MapConverter.java (from r1703038, sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverter.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MapConverter.java?p2=sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MapConverter.java&p1=sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverter.java&r1=1703038&r2=1703061&rev=1703061&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/couchbase-resourceprovider/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverter.java (original)
+++ sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MapConverter.java Mon Sep 14 21:19:29 2015
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.nosql.couchbase.resourceprovider.impl;
+package org.apache.sling.nosql.generic.adapter;
 
 import java.lang.reflect.Array;
 import java.util.Arrays;
@@ -29,7 +29,7 @@ import org.apache.commons.lang3.ArrayUti
  * Transforms NoSqlData maps to a valid form for couchbase JSON document.
  * All arrays have to be transformed to lists.
  */
-public final class MapConverter {
+final class MapConverter {
 
     private MapConverter() {
         // static methods only

Added: sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java?rev=1703061&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java (added)
+++ sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java Mon Sep 14 21:19:29 2015
@@ -0,0 +1,36 @@
+/*
+ * 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.sling.nosql.generic.adapter;
+
+/**
+ * Mode for multi-valued field data in {@link NoSqlData properties).
+ */
+public enum MultiValueMode {
+
+    /**
+     * Return multi-valued field values as array (default).
+     */
+    ARRAYS,
+    
+    /**
+     * Return multi-valued field values as lists.
+     */
+    LISTS
+    
+}

Propchange: sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Sep 14 21:19:29 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/MultiValueMode.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlData.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlData.java?rev=1703061&r1=1703060&r2=1703061&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlData.java (original)
+++ sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlData.java Mon Sep 14 21:19:29 2015
@@ -32,8 +32,21 @@ public final class NoSqlData {
     private final Map<String,Object> properties;
     
     public NoSqlData(String path, Map<String, Object> properties) {
+        this(path, properties, MultiValueMode.ARRAYS);
+    }
+
+    public NoSqlData(String path, Map<String, Object> properties, MultiValueMode multiValueMode) {
         this.path = path;
-        this.properties = properties;
+        switch (multiValueMode) {
+            case ARRAYS:
+                this.properties = properties;
+                break;
+            case LISTS:
+                this.properties = MapConverter.mapListToArray(properties);
+                break;
+            default:
+                throw new IllegalArgumentException("Multi value mode not supported: " + multiValueMode);
+        }
     }
 
     public String getPath() {
@@ -41,7 +54,18 @@ public final class NoSqlData {
     }
     
     public Map<String, Object> getProperties() {
-        return properties;
+        return getProperties(MultiValueMode.ARRAYS);
+    }
+    
+    public Map<String, Object> getProperties(MultiValueMode multiValueMode) {
+        switch (multiValueMode) {
+            case ARRAYS:
+                return properties;
+            case LISTS:
+                return MapConverter.mapArrayToList(properties);
+            default:
+                throw new IllegalArgumentException("Multi value mode not supported: " + multiValueMode);
+        }
     }
     
 }

Copied: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/adapter/MapConverterTest.java (from r1703038, sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverterTest.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/adapter/MapConverterTest.java?p2=sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/adapter/MapConverterTest.java&p1=sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverterTest.java&r1=1703038&r2=1703061&rev=1703061&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/MapConverterTest.java (original)
+++ sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/adapter/MapConverterTest.java Mon Sep 14 21:19:29 2015
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.nosql.couchbase.resourceprovider.impl;
+package org.apache.sling.nosql.generic.adapter;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
 import java.util.Map;
 
-import org.apache.sling.nosql.couchbase.resourceprovider.impl.MapConverter;
+import org.apache.sling.nosql.generic.adapter.MapConverter;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;

Added: sling/trunk/contrib/nosql/mongodb-resourceprovider/README.md
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider/README.md?rev=1703061&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/mongodb-resourceprovider/README.md (added)
+++ sling/trunk/contrib/nosql/mongodb-resourceprovider/README.md Mon Sep 14 21:19:29 2015
@@ -0,0 +1,22 @@
+Apache Sling NoSQL MongoDB Resource Provider
+============================================
+
+Sling ResourceProvider implementation that uses [MongoDB](https://www.mongodb.org/) NoSQL database as persistence.
+
+Based on the "Apache Sling NoSQL Generic Resource Provider".
+
+
+Configuration on deployment
+---------------------------
+
+* Create a factory configuration for "Apache Sling NoSQL MongoDB Resource Provider Factory" to define the root of the resource tree that should be stored in MongoDB, and MongoDB connection string, database name and collection name.
+
+
+Run integration tests
+---------------------
+
+To run the integration tests you have to set up a real MongoDB server and run the tests with this command line (inserting the correct parameters):
+
+```
+mvn -Pmongodb-integration-test -DconnectionString=localhost:27017 -Ddatabase=sling -Dcollection=resources integration-test
+```

Added: sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml?rev=1703061&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml (added)
+++ sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml Mon Sep 14 21:19:29 2015
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.sling</groupId>
+        <artifactId>sling</artifactId>
+        <version>24</version>
+        <relativePath/>
+    </parent>
+
+    <artifactId>org.apache.sling.nosql.mongodb-resourceprovider</artifactId>
+    <version>0.5.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+  
+    <name>Apache Sling NoSQL MongoDB Resource Provider</name>
+    <description>Resource Provider with MongoDB Persistence for Apache Sling.</description>
+  
+    <scm>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/nosql/mongodb-resourceprovider</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/nosql/mongodb-resourceprovider</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider</url>
+    </scm>
+
+    <properties>
+        <sling.java.version>7</sling.java.version>
+    </properties>
+  
+    <dependencies>
+  
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.nosql.generic</artifactId>
+            <version>0.5.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+    
+        <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongo-java-driver</artifactId>
+            <version>3.0.4</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.osgi</artifactId>
+            <version>2.2.2</version>
+            <scope>provided</scope>
+        </dependency>
+  
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.sling-mock</artifactId>
+            <version>1.5.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.logging-mock</artifactId>
+            <version>1.0.0</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.nosql.generic</artifactId>
+            <classifier>tests</classifier>
+            <version>0.5.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+      
+        <dependency>
+            <groupId>javax.jcr</groupId>
+            <artifactId>jcr</artifactId>
+            <version>2.0</version>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+  
+    <build>
+        <plugins>
+    
+          <plugin>
+              <groupId>org.apache.felix</groupId>
+              <artifactId>maven-bundle-plugin</artifactId>
+              <extensions>true</extensions>
+          </plugin>
+    
+          <plugin>
+              <groupId>org.apache.felix</groupId>
+              <artifactId>maven-scr-plugin</artifactId>
+          </plugin>
+    
+          <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-surefire-plugin</artifactId>
+              <configuration>
+                  <testFailureIgnore>false</testFailureIgnore>
+                  <includes>
+                      <include>**/*Test.java</include>
+                  </includes>
+                  <excludes>
+                      <exclude>**/*IT.java</exclude>
+                  </excludes>
+              </configuration>
+          </plugin>
+    
+        </plugins>
+    </build>
+    
+    <profiles>
+    
+      <!-- 
+          Profile for Integration tests with a real MongoDB server running.
+          You have to set JVM parameters for MongoDB host and bucket name, e.g.
+          mvn -Pmongodb-integration-test -DmongodbHosts=localhost:8091 -DbucketName=test integration-test
+      -->
+      <profile>
+        <id>mongodb-integration-test</id>
+        <build>
+          <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <includes>
+                        <include>**/*IT.java</include>
+                    </includes>
+                    <excludes>
+                        <exclude>**/*Test.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+    
+          </plugins>
+        </build>
+      </profile>
+
+    </profiles>
+  
+</project>

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Sep 14 21:19:29 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js?rev=1703061&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js (added)
+++ sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js Mon Sep 14 21:19:29 2015
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+/*
+ * Emits for each document the all parent paths - allowing to fetch children and their decendants by path.
+ * Includes the path of the item itself.
+ */
+function(doc, meta) {
+  
+  // handle only sling resource documents with a valid path
+  if (!(meta.id.indexOf("sling-resource:")==0 && doc.path && doc.data)) {
+    return;
+  }
+  var pathParts = doc.path.split("/");
+  if (pathParts.length < 3) {
+    return;
+  }
+  
+  while (pathParts.length >= 2) {
+    // remove last element to get parent path
+    var parentPath = pathParts.join("/");
+    emit(parentPath, null);
+    pathParts.pop();
+  }
+}

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Sep 14 21:19:29 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPath.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html?rev=1703061&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html (added)
+++ sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html Mon Sep 14 21:19:29 2015
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+ * 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.
+-->
+<html>
+  <head>
+    <title>Couchbase View Tester</title>
+    <style>body { font-family: Courier }</style>
+  </head>
+  <body>
+  
+<script>
+
+var emit = function(key, value) {
+  document.write("[" + key + "]" + "<br/>");
+}
+
+var testFunction = function(doc, meta) {
+  
+  // handle only sling resource documents with a valid path
+  if (!(meta.id.indexOf("sling-resource:")==0 && doc.path && doc.data)) {
+    return;
+  }
+  var pathParts = doc.path.split("/");
+  if (pathParts.length < 3) {
+    return;
+  }
+  
+  while (pathParts.length >= 2) {
+    // remove last element to get parent path
+    var parentPath = pathParts.join("/");
+    emit(parentPath, null);
+    pathParts.pop();
+  }
+};
+
+var testInput = [
+	  null,
+    "",
+    "abc",
+    "/",
+    "/content",
+    "/content/node1",
+    "/content/node1/node2",
+    "/content/node1/node2/node3",
+    "/content/node1/node2/node3/node4"
+];
+  
+</script>
+    
+    <table border="1">
+      <tr>
+	      <th>Input</th>
+	      <th>Output</th>
+	    </tr>
+<script>
+for (var i=0; i < testInput.length; i++) {
+  document.write("<tr>")
+  document.write("<td>" + testInput[i] + "</td>")
+  document.write("<td>")
+  testFunction({path: testInput[i], data: {}}, {id: "sling-resource:doc" + i});
+  document.write("</td>")
+  document.write("</tr>")
+}
+</script>
+    </table>
+  
+  </body>
+</html>

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Sep 14 21:19:29 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/ancestorPathTester.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js?rev=1703061&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js (added)
+++ sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js Mon Sep 14 21:19:29 2015
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+/*
+ * Emits for each document the direct parent path - allowing to fetch direct children by path.
+ */
+function(doc, meta) {
+  
+  // handle only sling resource documents with a valid path
+  if (!(meta.id.indexOf("sling-resource:")==0 && doc.path && doc.data)) {
+    return;
+  }
+  var pathParts = doc.path.split("/");
+  if (pathParts.length < 3) {
+    return;
+  }
+  
+  // remove last element to get parent path
+  pathParts.pop();
+  var parentPath = pathParts.join("/");
+  emit(parentPath, null);
+}

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Sep 14 21:19:29 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPath.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html?rev=1703061&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html (added)
+++ sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html Mon Sep 14 21:19:29 2015
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+ * 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.
+-->
+<html>
+  <head>
+    <title>Couchbase View Tester</title>
+    <style>body { font-family: Courier }</style>
+  </head>
+  <body>
+  
+<script>
+
+var emit = function(key, value) {
+  document.write("[" + key + "]" + "<br/>");
+}
+
+var testFunction = function(doc, meta) {
+  
+  // handle only sling resource documents with a valid path
+  if (!(meta.id.indexOf("sling-resource:")==0 && doc.path && doc.data)) {
+    return;
+  }
+  var pathParts = doc.path.split("/");
+  if (pathParts.length < 3) {
+    return;
+  }
+  
+  // remove last element to get parent path
+  pathParts.pop();
+  var parentPath = pathParts.join("/");
+  emit(parentPath, null);
+};
+
+var testInput = [
+	  null,
+    "",
+    "abc",
+    "/",
+    "/content",
+    "/content/node1",
+    "/content/node1/node2",
+    "/content/node1/node2/node3",
+    "/content/node1/node2/node3/node4"
+];
+  
+</script>
+    
+    <table border="1">
+      <tr>
+	      <th>Input</th>
+	      <th>Output</th>
+	    </tr>
+<script>
+for (var i=0; i < testInput.length; i++) {
+  document.write("<tr>")
+  document.write("<td>" + testInput[i] + "</td>")
+  document.write("<td>")
+  testFunction({path: testInput[i], data: {}}, {id: "sling-resource:doc" + i});
+  document.write("</td>")
+  document.write("</tr>")
+}
+</script>
+    </table>
+  
+  </body>
+</html>

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Sep 14 21:19:29 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/contrib/nosql/mongodb-resourceprovider/src/main/couchbase-views/parentPathTester.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: sling/trunk/contrib/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/pom.xml?rev=1703061&r1=1703060&r2=1703061&view=diff
==============================================================================
--- sling/trunk/contrib/pom.xml (original)
+++ sling/trunk/contrib/pom.xml Mon Sep 14 21:19:29 2015
@@ -146,6 +146,7 @@
           <module>nosql/generic</module>
           <module>nosql/couchbase-client</module>
           <module>nosql/couchbase-resourceprovider</module>
+          <module>nosql/mongodb-resourceprovider</module>
 
           <module>launchpad/testing</module>
           <module>launchpad/karaf</module>