Author: sseifert
Date: Mon May 18 21:22:09 2015
New Revision: 1680105

URL: http://svn.apache.org/r1680105
Log:
start migration to nosql.generic

Added:
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java
   (with props)
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ChangeableValueMap.java
      - copied, changed from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ChangeableValueMap.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBCollectionResource.java
      - copied, changed from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBCollectionResource.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResource.java
      - copied, changed from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResource.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResourceProvider.java
      - copied, changed from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ReadableValueMap.java
      - copied, changed from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ReadableValueMap.java
    sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/resources/org/
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/resources/org/apache/
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/resources/org/apache/sling/
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/resources/org/apache/sling/mongodb/
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/resources/org/apache/sling/mongodb/impl/
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/resources/org/apache/sling/mongodb/impl/depr/
Removed:
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ChangeableValueMap.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBCollectionResource.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResource.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ReadableValueMap.java
Modified:
    sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/pom.xml
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBContext.java
    
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java

Modified: sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/pom.xml?rev=1680105&r1=1680104&r2=1680105&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/pom.xml (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/pom.xml Mon May 18 
21:22:09 2015
@@ -26,12 +26,11 @@
         <version>22</version>
     </parent>
 
-    <groupId>org.apache.sling</groupId>
-    <artifactId>org.apache.sling.mongodb</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <artifactId>org.apache.sling.nosql.mongodb</artifactId>
+    <version>0.1.0-SNAPSHOT</version>
     <packaging>bundle</packaging>
 
-    <name>Apache Sling MongoDB Resource Provider</name>
+    <name>Apache Sling NoSQL MongoDB Resource Provider</name>
 
     <scm>
         
<connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/mongodb</connection>
@@ -39,6 +38,10 @@
         
<url>http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/mongodb</url>
     </scm>
 
+    <properties>
+        <sling.java.version>7</sling.java.version>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
@@ -49,23 +52,21 @@
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Private-Package>
-                            org.apache.sling.mongodb.impl
-                        </Private-Package>
-                    </instructions>
-                </configuration>
             </plugin>
         </plugins>
     </build>
     
     <dependencies>
         <dependency>
-           <groupId>org.apache.sling</groupId>
-           <artifactId>org.apache.sling.api</artifactId>
-           <version>2.7.0</version>
-           <scope>provided</scope>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.nosql.generic</artifactId>
+            <version>0.1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.api</artifactId>
+            <version>2.7.0</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -74,9 +75,9 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-               <groupId>org.mongodb</groupId>
-               <artifactId>mongo-java-driver</artifactId>
-               <version>2.11.3</version>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongo-java-driver</artifactId>
+            <version>2.11.3</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -84,16 +85,16 @@
             <artifactId>org.osgi.compendium</artifactId>
         </dependency>
         <dependency>
-               <groupId>org.apache.felix</groupId>
-               <artifactId>org.apache.felix.scr.annotations</artifactId>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
         </dependency>
         <dependency>
-               <groupId>org.slf4j</groupId>
-               <artifactId>slf4j-api</artifactId>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
-               <groupId>javax.servlet</groupId>
-               <artifactId>servlet-api</artifactId>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
         </dependency>
     </dependencies>
 </project>

Modified: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBContext.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBContext.java?rev=1680105&r1=1680104&r2=1680105&view=diff
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBContext.java
 (original)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBContext.java
 Mon May 18 21:22:09 2015
@@ -16,15 +16,9 @@
  */
 package org.apache.sling.mongodb.impl;
 
-import java.util.Dictionary;
 import java.util.HashSet;
-import java.util.Hashtable;
 import java.util.Set;
 
-import org.apache.sling.api.SlingConstants;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-
 import com.mongodb.DB;
 
 public class MongoDBContext {
@@ -41,12 +35,9 @@ public class MongoDBContext {
     /** The database to be used. */
     private final DB database;
 
-    private final EventAdmin eventAdmin;
-
     public MongoDBContext(final DB database,
             final String configuredRoot,
-            final String[] configuredFilterCollectionNames,
-            final EventAdmin eventAdmin) {
+            final String[] configuredFilterCollectionNames) {
         this.database = database;
         if ( configuredRoot != null ) {
             final String value = configuredRoot.trim();
@@ -71,7 +62,6 @@ public class MongoDBContext {
                 this.filterCollectionNames.add(name);
             }
         }
-        this.eventAdmin = eventAdmin;
     }
 
     public String getRoot() {
@@ -94,27 +84,4 @@ public class MongoDBContext {
         return this.database;
     }
 
-    public void notifyRemoved(final String[] info) {
-        final Dictionary<String, Object> props = new Hashtable<String, 
Object>();
-        props.put(SlingConstants.PROPERTY_PATH, this.rootWithSlash + info[0] + 
'/' + info[1]);
-        props.put("event.distribute", "");
-        final Event event = new Event(SlingConstants.TOPIC_RESOURCE_REMOVED, 
props);
-        this.eventAdmin.postEvent(event);
-    }
-
-    public void notifyAddeed(final String[] info) {
-        final Dictionary<String, Object> props = new Hashtable<String, 
Object>();
-        props.put(SlingConstants.PROPERTY_PATH, this.rootWithSlash + info[0] + 
'/' + info[1]);
-        props.put("event.distribute", "");
-        final Event event = new Event(SlingConstants.TOPIC_RESOURCE_ADDED, 
props);
-        this.eventAdmin.postEvent(event);
-    }
-
-    public void notifyUpdated(final String[] info) {
-        final Dictionary<String, Object> props = new Hashtable<String, 
Object>();
-        props.put(SlingConstants.PROPERTY_PATH, this.rootWithSlash + info[0] + 
'/' + info[1]);
-        props.put("event.distribute", "");
-        final Event event = new Event(SlingConstants.TOPIC_RESOURCE_CHANGED, 
props);
-        this.eventAdmin.postEvent(event);
-    }    
 }

Added: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java?rev=1680105&view=auto
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java
 (added)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java
 Mon May 18 21:22:09 2015
@@ -0,0 +1,171 @@
+/*
+ * 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.mongodb.impl;
+
+import java.util.Iterator;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import org.apache.sling.nosql.generic.adapter.NoSqlAdapter;
+import org.apache.sling.nosql.generic.adapter.NoSqlData;
+
+import com.mongodb.DBCollection;
+import com.mongodb.DBCursor;
+import com.mongodb.DBObject;
+import com.mongodb.QueryBuilder;
+
+/**
+ * Adaptes the generic NoSQL concept to the MongoDB API.
+ */
+class MongoDBNoSqlAdapter implements NoSqlAdapter {
+    
+    /** The special path property containing the (relative) path of the 
resource in the tree. */
+    private static final String PROP_PATH = "_path";
+
+    /** The id property. */
+    private static final String PROP_ID = "_id";
+    
+    private final MongoDBContext context;
+    
+    public MongoDBNoSqlAdapter(MongoDBContext context) {
+        this.context = context;
+    }
+
+    @Override
+    public boolean validPath(String path) {
+        final String[] info = this.extractResourceInfo(path);
+        return ( info != null && info.length == 2);
+    }
+
+    @Override
+    public NoSqlData get(String path) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Iterator<NoSqlData> getChildren(String parentPath) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public boolean store(NoSqlData data) {
+        final String[] info = this.extractResourceInfo(data.getPath());
+        final DBCollection col = this.getCollection(info[0]);
+
+        // create or update?
+        if (data.getProperties().get(PROP_ID) != null) {
+            
col.update(QueryBuilder.start(PROP_PATH).is(data.getProperties().get(PROP_PATH)).get(),
 data.getProperties());
+            this.context.notifyUpdated(info);
+        } else {
+            // create
+            col.save(changed.getProperties());
+            this.context.notifyUpdated(info);
+        }
+        
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public boolean deleteRecursive(String path) {
+        final String[] info = this.extractResourceInfo(path);
+        
+        final DBCollection col = this.getCollection(info[0]);
+        if (col != null) {
+            final String pattern = "^" + Pattern.quote(info[1]) + "/";
+    
+            final DBObject query = 
QueryBuilder.start(PROP_PATH).regex(Pattern.compile(pattern)).get();
+            final DBObject result = col.findAndRemove(query);
+            return result != null;
+        }
+        else {
+            return false;
+        }
+    }
+
+    @Override
+    public Iterator<NoSqlData> query(String query, String language) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /**
+     * Extract info about collection and path
+     */
+    private String[] extractResourceInfo(final String path) {
+        if ( path.startsWith(this.context.getRootWithSlash()) ) {
+            if ( path.length() == this.context.getRootWithSlash().length() ) {
+                // special resource - show all collections
+                return new String[0];
+            }
+            final String info = 
path.substring(this.context.getRootWithSlash().length());
+            final int slashPos = info.indexOf('/');
+            if ( slashPos != -1 ) {
+                return new String[] {info.substring(0, slashPos), 
info.substring(slashPos + 1)};
+            }
+            // special resource - collection
+            return new String[] {info};
+        }
+
+        if ( path.equals(this.context.getRoot()) ) {
+            // special resource - show all collections
+            return new String[0];
+        }
+
+        return null;
+    }
+
+    private static String propNameToKey(final String name) {
+        if ( name.startsWith("_") ) {
+            return "_" + name;
+        }
+        return name;
+    }
+
+    private static String keyToPropName(final String key) {
+        if ( key.startsWith("__") ) {
+            return key.substring(1);
+        } else if ( key.startsWith("_") ) {
+            return null;
+        }
+        return key;
+    }
+
+    /**
+     * Check if a collection with a given name exists
+     */
+    private boolean hasCollection(final String name) {
+        final Set<String> names = 
this.context.getDatabase().getCollectionNames();
+        return names.contains(name) && 
!this.context.isFilterCollectionName(name);
+    }
+
+
+    /**
+     * Check if a collection with a given name exists and return it
+     */
+    private DBCollection getCollection(final String name) {
+        if ( this.hasCollection(name) ) {
+            return this.context.getDatabase().getCollection(name);
+        }
+        return null;
+    }
+
+}

Propchange: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon May 18 21:22:09 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBNoSqlAdapter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java?rev=1680105&r1=1680104&r2=1680105&view=diff
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java
 (original)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java
 Mon May 18 21:22:09 2015
@@ -26,11 +26,12 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.PropertyUnbounded;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.api.resource.LoginException;
-import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.api.resource.QueriableResourceProvider;
+import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.api.resource.ResourceProviderFactory;
 import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.nosql.generic.adapter.NoSqlAdapter;
+import 
org.apache.sling.nosql.generic.resource.AbstractNoSqlResourceProviderFactory;
 import org.osgi.service.event.EventAdmin;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -54,7 +55,7 @@ metatype=true)
     @Property(name=ResourceProvider.ROOTS, value="/mongo"),
     @Property(name=QueriableResourceProvider.LANGUAGES, value="mongodb")
 })
-public class MongoDBResourceProviderFactory implements ResourceProviderFactory 
{
+public class MongoDBResourceProviderFactory extends 
AbstractNoSqlResourceProviderFactory {
 
     private static final String DEFAULT_HOST = "localhost";
 
@@ -85,8 +86,7 @@ public class MongoDBResourceProviderFact
     /** Logger. */
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
-    /** The global context passed to each resource provider. */
-    private MongoDBContext context;
+    private NoSqlAdapter noSqlAdapter;
 
     @Reference
     private EventAdmin eventAdmin;
@@ -118,29 +118,18 @@ public class MongoDBResourceProviderFact
         final DB database = m.getDB( db );
         logger.info("Connected to database {}", database);
 
-        this.context = new MongoDBContext(database,
-                roots[0],
-                
PropertiesUtil.toStringArray(props.get(PROP_FILTER_COLLECTIONS)),
-                this.eventAdmin);
+        MongoDBContext context = new MongoDBContext(database, roots[0], 
PropertiesUtil.toStringArray(props.get(PROP_FILTER_COLLECTIONS)));
+        noSqlAdapter = new MongoDBNoSqlAdapter(context);
     }
 
-    /**
-     * @see 
org.apache.sling.api.resource.ResourceProviderFactory#getResourceProvider(java.util.Map)
-     */
-    public ResourceProvider getResourceProvider(final Map<String, Object> 
authenticationInfo) throws LoginException {
-        // for now we allow anonymous access
-        return new MongoDBResourceProvider(this.context);
+    @Override
+    protected NoSqlAdapter getNoSqlAdapter() {
+        return noSqlAdapter;
     }
 
-    /**
-     * @see 
org.apache.sling.api.resource.ResourceProviderFactory#getAdministrativeResourceProvider(java.util.Map)
-     */
-    public ResourceProvider getAdministrativeResourceProvider(final 
Map<String, Object> authenticationInfo) throws LoginException {
-        // for now we allow anonymous access
-        return new MongoDBResourceProvider(this.context);
-    }
-    
-    protected MongoDBContext getContext() {
-        return this.context;
+    @Override
+    protected EventAdmin getEventAdmin() {
+        return eventAdmin;
     }
+
 }

Copied: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ChangeableValueMap.java
 (from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ChangeableValueMap.java)
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ChangeableValueMap.java?p2=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ChangeableValueMap.java&p1=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ChangeableValueMap.java&r1=1680068&r2=1680105&rev=1680105&view=diff
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ChangeableValueMap.java
 (original)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ChangeableValueMap.java
 Mon May 18 21:22:09 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.mongodb.impl;
+package org.apache.sling.mongodb.impl.depr;
 
 import java.util.Map;
 

Copied: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBCollectionResource.java
 (from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBCollectionResource.java)
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBCollectionResource.java?p2=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBCollectionResource.java&p1=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBCollectionResource.java&r1=1680068&r2=1680105&rev=1680105&view=diff
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBCollectionResource.java
 (original)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBCollectionResource.java
 Mon May 18 21:22:09 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.mongodb.impl;
+package org.apache.sling.mongodb.impl.depr;
 
 import java.util.Collections;
 import java.util.Map;

Copied: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResource.java
 (from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResource.java)
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResource.java?p2=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResource.java&p1=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResource.java&r1=1680068&r2=1680105&rev=1680105&view=diff
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResource.java
 (original)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResource.java
 Mon May 18 21:22:09 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.mongodb.impl;
+package org.apache.sling.mongodb.impl.depr;
 
 import java.util.Map;
 

Copied: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResourceProvider.java
 (from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java)
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResourceProvider.java?p2=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResourceProvider.java&p1=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java&r1=1680068&r2=1680105&rev=1680105&view=diff
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java
 (original)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/MongoDBResourceProvider.java
 Mon May 18 21:22:09 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.mongodb.impl;
+package org.apache.sling.mongodb.impl.depr;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -32,6 +32,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.mongodb.impl.MongoDBContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,42 +50,6 @@ import com.mongodb.util.JSON;
  */
 public class MongoDBResourceProvider implements ResourceProvider, 
ModifyingResourceProvider, QueriableResourceProvider {
 
-    /** The special path property containing the (relative) path of the 
resource in the tree. */
-    private static final String PROP_PATH = "_path";
-
-    /** The id property. */
-    private static final String PROP_ID = "_id";
-
-    /** Logger. */
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    /** The global context .*/
-    private final MongoDBContext context;
-
-    private final Map<String, MongoDBResource> changedResources = new 
HashMap<String, MongoDBResource>();
-
-    private final Set<String> deletedResources = new HashSet<String>();
-
-    public MongoDBResourceProvider(final MongoDBContext context) {
-        this.context = context;
-    }
-
-    public static String propNameToKey(final String name) {
-        if ( name.startsWith("_") ) {
-            return "_" + name;
-        }
-        return name;
-    }
-
-    public static String keyToPropName(final String key) {
-        if ( key.startsWith("__") ) {
-            return key.substring(1);
-        } else if ( key.startsWith("_") ) {
-            return null;
-        }
-        return key;
-    }
-
     /**
      * @see 
org.apache.sling.api.resource.ModifyingResourceProvider#create(org.apache.sling.api.resource.ResourceResolver,
 java.lang.String, java.util.Map)
      */
@@ -117,80 +82,10 @@ public class MongoDBResourceProvider imp
     }
 
     /**
-     * TODO - we should handle delete different and not put all child 
resources into the
-     * deleted set.
-     * Instead when getting resources, the parents of the resource should be 
checked
-     * first.
-     * This minimizes concurrency issues.
-     * @see 
org.apache.sling.api.resource.ModifyingResourceProvider#delete(org.apache.sling.api.resource.ResourceResolver,
 java.lang.String)
-     */
-    public void delete(final ResourceResolver resolver, final String path)
-            throws PersistenceException {
-        final String[] info = this.extractResourceInfo(path);
-        if ( info != null ) {
-            boolean deletedResource = false;
-            if ( !deletedResources.contains(path) ) {
-                final Resource rsrc = this.getResource(resolver, path, info);
-                if ( rsrc instanceof MongoDBResource ) {
-                    this.deletedResources.add(path);
-                    this.changedResources.remove(path);
-
-                    final DBCollection col = this.getCollection(info[0]);
-                    final String pattern = "^" + Pattern.quote(info[1]) + "/";
-
-                    final DBObject query = 
QueryBuilder.start(getPROP_PATH()).regex(Pattern.compile(pattern)).get();
-                    final DBCursor cur = col.find(query);
-                    while ( cur.hasNext() ) {
-                        final DBObject dbObj = cur.next();
-                        final String childPath = info[0] + '/' + 
dbObj.get(getPROP_PATH());
-                        this.deletedResources.add(childPath);
-                        this.changedResources.remove(childPath);
-                    }
-                    deletedResource = true;
-                }
-            } else {
-                deletedResource = true;
-            }
-            if ( deletedResource ) {
-                final String prefix = path + "/";
-                final Iterator<Map.Entry<String, MongoDBResource>> i = 
this.changedResources.entrySet().iterator();
-                while ( i.hasNext() ) {
-                    final Map.Entry<String, MongoDBResource> entry = i.next();
-                    if ( entry.getKey().startsWith(prefix) ) {
-                        i.remove();
-                    }
-                }
-                return;
-            }
-
-        }
-        throw new PersistenceException("Unable to delete resource at {}" + 
path, null, path, null);
-    }
-
-    /**
-     * @see 
org.apache.sling.api.resource.ModifyingResourceProvider#revert(ResourceResolver)
-     */
-    public void revert(final ResourceResolver resolver) {
-        this.changedResources.clear();
-        this.deletedResources.clear();
-    }
-
-    /**
      * @see 
org.apache.sling.api.resource.ModifyingResourceProvider#commit(ResourceResolver)
      */
     public void commit(final ResourceResolver resolver) throws 
PersistenceException {
         try {
-            for(final String deleted : this.deletedResources) {
-                final String[] info = this.extractResourceInfo(deleted);
-
-                // check if the collection still exists
-                final DBCollection col = this.getCollection(info[0]);
-                if ( col != null ) {
-                    if ( 
col.findAndRemove(QueryBuilder.start(getPROP_PATH()).is(info[1]).get()) != null 
) {
-                        this.context.notifyRemoved(info);
-                    }
-                }
-            }
             for(final MongoDBResource changed : 
this.changedResources.values()) {
 
                 final DBCollection col = 
this.context.getDatabase().getCollection(changed.getCollection());
@@ -217,38 +112,6 @@ public class MongoDBResourceProvider imp
     }
 
     /**
-     * @see 
org.apache.sling.api.resource.ModifyingResourceProvider#hasChanges(ResourceResolver)
-     */
-    public boolean hasChanges(final ResourceResolver resolver) {
-        return this.changedResources.size() > 0 || 
this.deletedResources.size() > 0;
-    }
-
-    /**
-     * @see 
org.apache.sling.api.resource.ResourceProvider#getResource(org.apache.sling.api.resource.ResourceResolver,
 java.lang.String)
-     */
-    public Resource getResource(final ResourceResolver resourceResolver, final 
String path) {
-        if ( this.deletedResources.contains(path) ) {
-            return null;
-        }
-        if ( this.changedResources.containsKey(path) ) {
-            return new MongoDBResource(this.changedResources.get(path));
-        }
-        final String[] info = this.extractResourceInfo(path);
-        if ( info != null ) {
-            return this.getResource(resourceResolver, path, info);
-        }
-        return null;
-    }
-
-    /**
-     * Inform about changes of a resource.
-     */
-    public void changed(final MongoDBResource resource) {
-        this.deletedResources.remove(resource.getPath());
-        this.changedResources.put(resource.getPath(), resource);
-    }
-
-    /**
      * TODO - we have to check for deleted and added resources
      * @see 
org.apache.sling.api.resource.ResourceProvider#listChildren(org.apache.sling.api.resource.Resource)
      */
@@ -323,61 +186,6 @@ public class MongoDBResourceProvider imp
     }
 
     /**
-     * @see 
org.apache.sling.api.resource.ResourceProvider#getResource(org.apache.sling.api.resource.ResourceResolver,
 javax.servlet.http.HttpServletRequest, java.lang.String)
-     */
-    public Resource getResource(final ResourceResolver resourceResolver,
-            final HttpServletRequest request,
-            final String path) {
-        return this.getResource(resourceResolver, path);
-    }
-
-    /**
-     * Extract info about collection and path
-     */
-    protected String[] extractResourceInfo(final String path) {
-        if ( path.startsWith(this.context.getRootWithSlash()) ) {
-            if ( path.length() == this.context.getRootWithSlash().length() ) {
-                // special resource - show all collections
-                return new String[0];
-            }
-            final String info = 
path.substring(this.context.getRootWithSlash().length());
-            final int slashPos = info.indexOf('/');
-            if ( slashPos != -1 ) {
-                return new String[] {info.substring(0, slashPos), 
info.substring(slashPos + 1)};
-            }
-            // special resource - collection
-            return new String[] {info};
-        }
-
-        if ( path.equals(this.context.getRoot()) ) {
-            // special resource - show all collections
-            return new String[0];
-        }
-
-        return null;
-    }
-
-    /**
-     * Check if a collection with a given name exists
-     */
-    protected boolean hasCollection(final String name) {
-        logger.info("Mongo: Getting collection names");
-        final Set<String> names = 
this.context.getDatabase().getCollectionNames();
-        return names.contains(name) && 
!this.context.isFilterCollectionName(name);
-    }
-
-
-    /**
-     * Check if a collection with a given name exists and return it
-     */
-    protected DBCollection getCollection(final String name) {
-        if ( this.hasCollection(name) ) {
-            return this.context.getDatabase().getCollection(name);
-        }
-        return null;
-    }
-
-    /**
      * Get a resource
      */
     protected Resource getResource(final ResourceResolver resourceResolver, 
final String path, final String[] info) {
@@ -431,10 +239,6 @@ public class MongoDBResourceProvider imp
         return this.context;
     }
 
-    protected String getPROP_PATH() {
-        return PROP_PATH;
-    }
-
     public Iterator<Resource> findResources(final ResourceResolver resolver, 
String query, String language) {
         if ( !language.equals( "mongodb") || query == null || query.length() 
== 0 || query.indexOf( ".find(" ) <= 0 )
         {

Copied: 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ReadableValueMap.java
 (from r1680068, 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ReadableValueMap.java)
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ReadableValueMap.java?p2=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ReadableValueMap.java&p1=sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ReadableValueMap.java&r1=1680068&r2=1680105&rev=1680105&view=diff
==============================================================================
--- 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/ReadableValueMap.java
 (original)
+++ 
sling/whiteboard/sseifert/SLING-4381_nosql/mongodb/src/main/java/org/apache/sling/mongodb/impl/depr/ReadableValueMap.java
 Mon May 18 21:22:09 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.mongodb.impl;
+package org.apache.sling.mongodb.impl.depr;
 
 import java.lang.reflect.Array;
 import java.util.Collection;


Reply via email to