Browse Source

added support for $or criteria

pull/1/head
Thomas Risberg 15 years ago
parent
commit
7e8b597108
  1. 25
      src/main/java/org/springframework/datastore/document/mongodb/query/BasicQuery.java
  2. 40
      src/main/java/org/springframework/datastore/document/mongodb/query/Criteria.java
  3. 9
      src/main/java/org/springframework/datastore/document/mongodb/query/CriteriaSpec.java
  4. 31
      src/main/java/org/springframework/datastore/document/mongodb/query/OrCriteria.java
  5. 12
      src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java

25
src/main/java/org/springframework/datastore/document/mongodb/query/BasicQuery.java

@ -0,0 +1,25 @@
package org.springframework.datastore.document.mongodb.query;
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
public class BasicQuery implements Query {
private DBObject dbo = null;
public BasicQuery(String query) {
super();
this.dbo = (DBObject) JSON.parse(query);
}
public BasicQuery(DBObject dbo) {
super();
this.dbo = dbo;
}
public DBObject getQueryObject() {
return dbo;
}
}

40
src/main/java/org/springframework/datastore/document/mongodb/query/QueryCriterion.java → src/main/java/org/springframework/datastore/document/mongodb/query/Criteria.java

@ -9,7 +9,7 @@ import org.springframework.datastore.document.InvalidDocumentStoreApiUageExcepti
import com.mongodb.BasicDBObject; import com.mongodb.BasicDBObject;
import com.mongodb.DBObject; import com.mongodb.DBObject;
public class QueryCriterion { public class Criteria implements CriteriaSpec {
private QueryBuilder qb = null; private QueryBuilder qb = null;
@ -18,13 +18,18 @@ public class QueryCriterion {
private Object isValue = null; private Object isValue = null;
public QueryCriterion(QueryBuilder qb) { public Criteria(QueryBuilder qb) {
super(); super();
this.qb = qb; this.qb = qb;
} }
public QueryCriterion is(Object o) { public Criteria and(String key) {
return qb.find(key);
}
public Criteria is(Object o) {
if (isValue != null) { if (isValue != null) {
throw new InvalidDocumentStoreApiUageException("Multiple 'is' values declared."); throw new InvalidDocumentStoreApiUageException("Multiple 'is' values declared.");
} }
@ -32,37 +37,37 @@ public class QueryCriterion {
return this; return this;
} }
public QueryCriterion lt(Object o) { public Criteria lt(Object o) {
criteria.put("$lt", o); criteria.put("$lt", o);
return this; return this;
} }
public QueryCriterion lte(Object o) { public Criteria lte(Object o) {
criteria.put("$lte", o); criteria.put("$lte", o);
return this; return this;
} }
public QueryCriterion gt(Object o) { public Criteria gt(Object o) {
criteria.put("$gt", o); criteria.put("$gt", o);
return this; return this;
} }
public QueryCriterion gte(Object o) { public Criteria gte(Object o) {
criteria.put("$gte", o); criteria.put("$gte", o);
return this; return this;
} }
public QueryCriterion in(Object... o) { public Criteria in(Object... o) {
criteria.put("$in", o); criteria.put("$in", o);
return this; return this;
} }
public QueryCriterion nin(Object... o) { public Criteria nin(Object... o) {
criteria.put("$min", o); criteria.put("$min", o);
return this; return this;
} }
public QueryCriterion mod(Number value, Number remainder) { public Criteria mod(Number value, Number remainder) {
List<Object> l = new ArrayList<Object>(); List<Object> l = new ArrayList<Object>();
l.add(value); l.add(value);
l.add(remainder); l.add(remainder);
@ -70,30 +75,30 @@ public class QueryCriterion {
return this; return this;
} }
public QueryCriterion all(Object o) { public Criteria all(Object o) {
criteria.put("$is", o); criteria.put("$is", o);
return this; return this;
} }
public QueryCriterion size(Object o) { public Criteria size(Object o) {
criteria.put("$is", o); criteria.put("$is", o);
return this; return this;
} }
public QueryCriterion exists(boolean b) { public Criteria exists(boolean b) {
return this; return this;
} }
public QueryCriterion type(int t) { public Criteria type(int t) {
return this; return this;
} }
public QueryCriterion not() { public Criteria not() {
criteria.put("$not", null); criteria.put("$not", null);
return this; return this;
} }
public QueryCriterion regExp(String re) { public Criteria regExp(String re) {
return this; return this;
} }
@ -105,6 +110,9 @@ public class QueryCriterion {
return qb.build(); return qb.build();
} }
/* (non-Javadoc)
* @see org.springframework.datastore.document.mongodb.query.Criteria#getCriteriaObject(java.lang.String)
*/
public DBObject getCriteriaObject(String key) { public DBObject getCriteriaObject(String key) {
DBObject dbo = new BasicDBObject(); DBObject dbo = new BasicDBObject();
boolean not = false; boolean not = false;

9
src/main/java/org/springframework/datastore/document/mongodb/query/CriteriaSpec.java

@ -0,0 +1,9 @@
package org.springframework.datastore.document.mongodb.query;
import com.mongodb.DBObject;
public interface CriteriaSpec {
DBObject getCriteriaObject(String key);
}

31
src/main/java/org/springframework/datastore/document/mongodb/query/OrCriteria.java

@ -0,0 +1,31 @@
package org.springframework.datastore.document.mongodb.query;
import org.bson.types.BasicBSONList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class OrCriteria implements CriteriaSpec {
Query[] queries = null;
public OrCriteria(Query[] queries) {
super();
this.queries = queries;
}
/* (non-Javadoc)
* @see org.springframework.datastore.document.mongodb.query.Criteria#getCriteriaObject(java.lang.String)
*/
public DBObject getCriteriaObject(String key) {
DBObject dbo = new BasicDBObject();
BasicBSONList l = new BasicBSONList();
for (Query q : queries) {
l.add(q.getQueryObject());
}
dbo.put(key, l);
return dbo;
}
}

12
src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java

@ -7,15 +7,17 @@ import com.mongodb.DBObject;
public class QueryBuilder implements Query { public class QueryBuilder implements Query {
private LinkedHashMap<String, QueryCriterion> criteria = new LinkedHashMap<String, QueryCriterion>(); private LinkedHashMap<String, CriteriaSpec> criteria = new LinkedHashMap<String, CriteriaSpec>();
public QueryCriterion find(String key) { public Criteria find(String key) {
QueryCriterion c = new QueryCriterion(this); Criteria c = new Criteria(this);
this.criteria.put(key, c); this.criteria.put(key, c);
return c; return c;
} }
public void or(Query... queries) { public QueryBuilder or(Query... queries) {
this.criteria.put("$or", new OrCriteria(queries));
return this;
} }
public FieldSpecification fields() { public FieldSpecification fields() {
@ -41,7 +43,7 @@ public class QueryBuilder implements Query {
public DBObject getQueryObject() { public DBObject getQueryObject() {
DBObject dbo = new BasicDBObject(); DBObject dbo = new BasicDBObject();
for (String k : criteria.keySet()) { for (String k : criteria.keySet()) {
QueryCriterion c = criteria.get(k); CriteriaSpec c = criteria.get(k);
DBObject cl = c.getCriteriaObject(k); DBObject cl = c.getCriteriaObject(k);
dbo.putAll(cl); dbo.putAll(cl);
} }

Loading…
Cancel
Save