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;