diff --git a/.project b/.project index 3764216a6..a8d7bc1ca 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - datastore-document + spring-datastore-document diff --git a/src/main/java/org/springframework/datastore/document/mongodb/query/FieldSpecification.java b/src/main/java/org/springframework/datastore/document/mongodb/query/FieldSpecification.java new file mode 100644 index 000000000..746927d09 --- /dev/null +++ b/src/main/java/org/springframework/datastore/document/mongodb/query/FieldSpecification.java @@ -0,0 +1,14 @@ +package org.springframework.datastore.document.mongodb.query; + + +public class FieldSpecification { + + public FieldSpecification include(String key) { + return this; + } + + public FieldSpecification exclude(String key) { + return this; + } + +} diff --git a/src/main/java/org/springframework/datastore/document/mongodb/query/Query.java b/src/main/java/org/springframework/datastore/document/mongodb/query/Query.java new file mode 100644 index 000000000..2dafdb450 --- /dev/null +++ b/src/main/java/org/springframework/datastore/document/mongodb/query/Query.java @@ -0,0 +1,10 @@ +package org.springframework.datastore.document.mongodb.query; + +import com.mongodb.DBObject; + + +public interface Query { + + DBObject getQueryObject(); + +} diff --git a/src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java b/src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java new file mode 100644 index 000000000..afba5f3fc --- /dev/null +++ b/src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java @@ -0,0 +1,51 @@ +package org.springframework.datastore.document.mongodb.query; + +import java.util.LinkedHashMap; + +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; + +public class QueryBuilder implements Query { + + private LinkedHashMap criteria = new LinkedHashMap(); + + public QueryCriterion find(String key) { + QueryCriterion c = new QueryCriterion(this); + this.criteria.put(key, c); + return c; + } + + public void or(Query... queries) { + } + + public FieldSpecification fields() { + return new FieldSpecification(); + } + + public SliceSpecification slice() { + return new SliceSpecification(); + } + + public SortSpecification sort() { + return new SortSpecification(); + } + + public QueryBuilder limit(int limit) { + return this; + } + + public Query build() { + return this; + } + + public DBObject getQueryObject() { + DBObject dbo = new BasicDBObject(); + for (String k : criteria.keySet()) { + QueryCriterion c = criteria.get(k); + DBObject cl = c.getCriteriaObject(k); + dbo.putAll(cl); + } + return dbo; + } + +} diff --git a/src/main/java/org/springframework/datastore/document/mongodb/query/QueryCriterion.java b/src/main/java/org/springframework/datastore/document/mongodb/query/QueryCriterion.java new file mode 100644 index 000000000..59a342f7a --- /dev/null +++ b/src/main/java/org/springframework/datastore/document/mongodb/query/QueryCriterion.java @@ -0,0 +1,138 @@ +package org.springframework.datastore.document.mongodb.query; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + +import org.springframework.datastore.document.InvalidDocumentStoreApiUageException; + +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; + +public class QueryCriterion { + + private QueryBuilder qb = null; + + private LinkedHashMap criteria = new LinkedHashMap(); + + private Object isValue = null; + + + public QueryCriterion(QueryBuilder qb) { + super(); + this.qb = qb; + } + + + public QueryCriterion is(Object o) { + if (isValue != null) { + throw new InvalidDocumentStoreApiUageException("Multiple 'is' values declared."); + } + this.isValue = o; + return this; + } + + public QueryCriterion lt(Object o) { + criteria.put("$lt", o); + return this; + } + + public QueryCriterion lte(Object o) { + criteria.put("$lte", o); + return this; + } + + public QueryCriterion gt(Object o) { + criteria.put("$gt", o); + return this; + } + + public QueryCriterion gte(Object o) { + criteria.put("$gte", o); + return this; + } + + public QueryCriterion in(Object... o) { + criteria.put("$in", o); + return this; + } + + public QueryCriterion nin(Object... o) { + criteria.put("$min", o); + return this; + } + + public QueryCriterion mod(Number value, Number remainder) { + List l = new ArrayList(); + l.add(value); + l.add(remainder); + criteria.put("$mod", l); + return this; + } + + public QueryCriterion all(Object o) { + criteria.put("$is", o); + return this; + } + + public QueryCriterion size(Object o) { + criteria.put("$is", o); + return this; + } + + public QueryCriterion exists(boolean b) { + return this; + } + + public QueryCriterion type(int t) { + return this; + } + + public QueryCriterion not() { + criteria.put("$not", null); + return this; + } + + public QueryCriterion regExp(String re) { + return this; + } + + public void or(List queries) { + criteria.put("$or", queries); + } + + public Query build() { + return qb.build(); + } + + public DBObject getCriteriaObject(String key) { + DBObject dbo = new BasicDBObject(); + boolean not = false; + for (String k : criteria.keySet()) { + if (not) { + DBObject notDbo = new BasicDBObject(); + notDbo.put(k, criteria.get(k)); + dbo.put("$not", notDbo); + not = false; + } + else { + if ("$not".equals(k)) { + not = true; + } + else { + dbo.put(k, criteria.get(k)); + } + } + } + DBObject queryCriteria = new BasicDBObject(); + if (isValue != null) { + queryCriteria.put(key, isValue); + queryCriteria.putAll(dbo); + } + else { + queryCriteria.put(key, dbo); + } + return queryCriteria; + } + +} diff --git a/src/main/java/org/springframework/datastore/document/mongodb/query/SliceSpecification.java b/src/main/java/org/springframework/datastore/document/mongodb/query/SliceSpecification.java new file mode 100644 index 000000000..c5d97c153 --- /dev/null +++ b/src/main/java/org/springframework/datastore/document/mongodb/query/SliceSpecification.java @@ -0,0 +1,10 @@ +package org.springframework.datastore.document.mongodb.query; + + +public class SliceSpecification { + + public SliceSpecification on(String key, int size) { + return this; + } + +} diff --git a/src/main/java/org/springframework/datastore/document/mongodb/query/SortSpecification.java b/src/main/java/org/springframework/datastore/document/mongodb/query/SortSpecification.java new file mode 100644 index 000000000..25e9196f0 --- /dev/null +++ b/src/main/java/org/springframework/datastore/document/mongodb/query/SortSpecification.java @@ -0,0 +1,14 @@ +package org.springframework.datastore.document.mongodb.query; + + +public class SortSpecification { + + public enum SortOrder { + ASCENDING, DESCENDING + } + + public SortSpecification on(String key, SortOrder order) { + return this; + } + +}