package com.arangodb.blueprints;
import com.arangodb.blueprints.client.ArangoDBPropertyFilter;
import com.tinkerpop.blueprints.Contains;
import com.tinkerpop.blueprints.Predicate;
import com.tinkerpop.blueprints.Query.Compare;
public class ArangoDBQuery {
protected final ArangoDBGraph graph;
protected Long limit = null;
protected ArangoDBPropertyFilter propertyFilter = new ArangoDBPropertyFilter();
protected boolean count;
/**
* Creates a graph query for a ArangoDB graph
*
* @param graph
* the ArangoDB graph
*/
public ArangoDBQuery(final ArangoDBGraph graph) {
this.graph = graph;
this.count = false;
}
public <T extends Comparable<T>> ArangoDBQuery has(final String key, final T value, final Compare compare) {
switch (compare) {
case EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.EQUAL);
break;
case NOT_EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.NOT_EQUAL);
break;
case GREATER_THAN:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.GREATER_THAN);
break;
case LESS_THAN:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.LESS_THAN);
break;
case GREATER_THAN_EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.GREATER_THAN_EQUAL);
break;
case LESS_THAN_EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.LESS_THAN_EQUAL);
break;
default:
// do nothing
}
return this;
}
public ArangoDBQuery has(String key) {
propertyFilter.has(key, null, ArangoDBPropertyFilter.Compare.HAS);
return this;
}
public ArangoDBQuery hasNot(String key) {
propertyFilter.has(key, null, ArangoDBPropertyFilter.Compare.HAS_NOT);
return this;
}
public ArangoDBQuery has(String key, Object value) {
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.EQUAL);
return this;
}
public ArangoDBQuery hasNot(String key, Object value) {
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.NOT_EQUAL);
return this;
}
public ArangoDBQuery has(String key, Predicate prdct, Object value) {
if (prdct instanceof com.tinkerpop.blueprints.Compare) {
com.tinkerpop.blueprints.Compare compare = (com.tinkerpop.blueprints.Compare) prdct;
hasCompare(key, value, compare);
} else if (prdct instanceof com.tinkerpop.blueprints.Contains) {
com.tinkerpop.blueprints.Contains contains = (com.tinkerpop.blueprints.Contains) prdct;
hasContains(key, contains, value);
}
return this;
}
private void hasContains(String key, com.tinkerpop.blueprints.Contains contains, Object value) {
if (contains == Contains.IN) {
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.IN);
} else if (contains == Contains.NOT_IN) {
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.NOT_IN);
}
}
private void hasCompare(String key, Object value, com.tinkerpop.blueprints.Compare compare) {
switch (compare) {
case EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.EQUAL);
break;
case NOT_EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.NOT_EQUAL);
break;
case GREATER_THAN:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.GREATER_THAN);
break;
case LESS_THAN:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.LESS_THAN);
break;
case GREATER_THAN_EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.GREATER_THAN_EQUAL);
break;
case LESS_THAN_EQUAL:
propertyFilter.has(key, value, ArangoDBPropertyFilter.Compare.LESS_THAN_EQUAL);
break;
default:
// do nothing
}
}
public <T extends Comparable<?>> ArangoDBQuery interval(String key, T startValue, T endValue) {
propertyFilter.has(key, startValue, ArangoDBPropertyFilter.Compare.GREATER_THAN_EQUAL);
propertyFilter.has(key, endValue, ArangoDBPropertyFilter.Compare.LESS_THAN);
return this;
}
public ArangoDBQuery limit(int limit) {
this.limit = new Long(limit);
return this;
}
}