You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/10/18 23:25:16 UTC
[sling-org-apache-sling-mongodb] 28/36: SLING-3916 - Add simple
query support to the MongoDBResourceProvider
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-mongodb.git
commit 39d6fdb85b0aa4f17facdceaac0c0b4a9dd08e04
Author: Mike Müller <my...@apache.org>
AuthorDate: Tue Sep 9 06:11:23 2014 +0000
SLING-3916 - Add simple query support to the MongoDBResourceProvider
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1623664 13f79535-47bb-0310-9956-ffa450edef68
---
.../mongodb/impl/MongoDBResourceProvider.java | 50 +++++++++++++++++++++-
.../impl/MongoDBResourceProviderFactory.java | 4 +-
2 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java b/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java
index 55fdb5f..4e73d1f 100644
--- a/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java
+++ b/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java
@@ -37,10 +37,12 @@ import org.slf4j.LoggerFactory;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
+import com.mongodb.CommandResult;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.QueryBuilder;
+import com.mongodb.util.JSON;
/**
* The MongoDB resource provider creates resources based on MongoDB entries.
@@ -435,8 +437,52 @@ public class MongoDBResourceProvider implements ResourceProvider, ModifyingResou
return PROP_PATH;
}
- public Iterator<Resource> findResources(ResourceResolver resolver, String query, String language) {
- return null;
+ public Iterator<Resource> findResources(final ResourceResolver resolver, String query, String language) {
+ if ( !language.equals( "mongodb") || query == null || query.length() == 0 || query.indexOf( ".find(" ) <= 0 )
+ {
+ return null;
+ }
+ Iterator<Resource> returnValue = null;
+ final String collectionName = query.substring( 0, query.indexOf( ".find(" ) );
+ DBCollection col = this.getCollection( collectionName );
+ if ( col != null )
+ {
+ String criteria = query.trim().substring( query.indexOf( ".find(" ) + 6, query.length() - 1 );
+ DBObject dbObject = (DBObject) JSON.parse( criteria );
+ final DBCursor cur = col.find( dbObject );
+ final String rootPath = context.getRootWithSlash();
+
+ return new Iterator<Resource>() {
+
+ public boolean hasNext() {
+ return cur.hasNext();
+ }
+
+ public Resource next() {
+ final DBObject obj = cur.next();
+ final String objPath = obj.get(getPROP_PATH()).toString();
+ final int lastSlash = objPath.lastIndexOf('/');
+ final String name;
+ if (lastSlash == -1) {
+ name = objPath;
+ } else {
+ name = objPath.substring(lastSlash + 1);
+ }
+ return new MongoDBResource(resolver,
+ rootPath + collectionName + "/" + name,
+ collectionName,
+ obj,
+ MongoDBResourceProvider.this);
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("remove");
+ }
+
+ };
+ }
+
+ return returnValue;
}
public Iterator<ValueMap> queryResources(ResourceResolver resolver, String query, String language) {
diff --git a/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java b/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java
index 9bcf562..0f0f670 100644
--- a/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java
+++ b/src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProviderFactory.java
@@ -28,6 +28,7 @@ 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.ResourceProviderFactory;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.osgi.service.event.EventAdmin;
@@ -50,7 +51,8 @@ policy=ConfigurationPolicy.REQUIRE,
metatype=true)
@Service(value=ResourceProviderFactory.class)
@Properties({
- @Property(name=ResourceProvider.ROOTS, value="/mongo")
+ @Property(name=ResourceProvider.ROOTS, value="/mongo"),
+ @Property(name=QueriableResourceProvider.LANGUAGES, value="mongodb")
})
public class MongoDBResourceProviderFactory implements ResourceProviderFactory {
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.