Browse Source

beginning of a simple query builder

pull/1/head
Thomas Risberg 15 years ago
parent
commit
fc180f071f
  1. 2
      .project
  2. 14
      src/main/java/org/springframework/datastore/document/mongodb/query/FieldSpecification.java
  3. 10
      src/main/java/org/springframework/datastore/document/mongodb/query/Query.java
  4. 51
      src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java
  5. 138
      src/main/java/org/springframework/datastore/document/mongodb/query/QueryCriterion.java
  6. 10
      src/main/java/org/springframework/datastore/document/mongodb/query/SliceSpecification.java
  7. 14
      src/main/java/org/springframework/datastore/document/mongodb/query/SortSpecification.java

2
.project

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>datastore-document</name>
<name>spring-datastore-document</name>
<comment></comment>
<projects>
</projects>

14
src/main/java/org/springframework/datastore/document/mongodb/query/FieldSpecification.java

@ -0,0 +1,14 @@ @@ -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;
}
}

10
src/main/java/org/springframework/datastore/document/mongodb/query/Query.java

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
package org.springframework.datastore.document.mongodb.query;
import com.mongodb.DBObject;
public interface Query {
DBObject getQueryObject();
}

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

@ -0,0 +1,51 @@ @@ -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<String, QueryCriterion> criteria = new LinkedHashMap<String, QueryCriterion>();
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;
}
}

138
src/main/java/org/springframework/datastore/document/mongodb/query/QueryCriterion.java

@ -0,0 +1,138 @@ @@ -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<String, Object> criteria = new LinkedHashMap<String, Object>();
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<Object> l = new ArrayList<Object>();
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<Query> 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;
}
}

10
src/main/java/org/springframework/datastore/document/mongodb/query/SliceSpecification.java

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
package org.springframework.datastore.document.mongodb.query;
public class SliceSpecification {
public SliceSpecification on(String key, int size) {
return this;
}
}

14
src/main/java/org/springframework/datastore/document/mongodb/query/SortSpecification.java

@ -0,0 +1,14 @@ @@ -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;
}
}
Loading…
Cancel
Save