use of org.molgenis.api.model.Query.Operator in project molgenis by molgenis.
the class QueryMapper method map.
private void map(Query query, QueryImpl<? extends Entity> entityQuery, EntityType entityType) {
Operator operator = query.getOperator();
switch(operator) {
case EQUALS:
entityQuery.eq(query.getItem(), mapValue(query, entityType));
break;
case NOT_EQUALS:
entityQuery.not().eq(query.getItem(), mapValue(query, entityType));
break;
case IN:
entityQuery.in(query.getItem(), (Iterable<?>) mapValue(query, entityType));
break;
case NOT_IN:
entityQuery.not().in(query.getItem(), (Iterable<?>) mapValue(query, entityType));
break;
case MATCHES:
entityQuery.search(query.getItem(), (String) mapValue(query, entityType));
break;
case SEARCH_QUERY:
entityQuery.searchQuery(query.getItem(), (String) mapValue(query, entityType));
break;
case CONTAINS:
entityQuery.like(query.getItem(), (String) mapValue(query, entityType));
break;
case LESS_THAN:
entityQuery.lt(query.getItem(), mapValue(query, entityType));
break;
case LESS_THAN_OR_EQUAL_TO:
entityQuery.le(query.getItem(), mapValue(query, entityType));
break;
case GREATER_THAN:
entityQuery.gt(query.getItem(), mapValue(query, entityType));
break;
case GREATER_THAN_OR_EQUAL_TO:
entityQuery.ge(query.getItem(), mapValue(query, entityType));
break;
case AND:
List<Query> subAndQueries = query.getQueryListValue();
entityQuery.nest();
for (Iterator<Query> it = subAndQueries.iterator(); it.hasNext(); ) {
map(it.next(), entityQuery, entityType);
if (it.hasNext()) {
entityQuery.and();
}
}
entityQuery.unnest();
break;
case OR:
List<Query> subOrQueries = query.getQueryListValue();
entityQuery.nest();
for (Iterator<Query> it = subOrQueries.iterator(); it.hasNext(); ) {
map(it.next(), entityQuery, entityType);
if (it.hasNext()) {
entityQuery.or();
}
}
entityQuery.unnest();
break;
default:
throw new UnexpectedEnumException(operator);
}
}
use of org.molgenis.api.model.Query.Operator in project molgenis by molgenis.
the class QueryMapper method mapValue.
private Object mapValue(Query query, EntityType entityType) {
Object mappedValue;
Operator operator = query.getOperator();
switch(operator) {
case EQUALS:
case NOT_EQUALS:
mappedValue = rsqlValueParser.parse(query.getStringValue(), getAttribute(query.getItem(), entityType));
break;
case MATCHES:
case SEARCH_QUERY:
case CONTAINS:
mappedValue = query.getStringValue();
break;
case IN:
case NOT_IN:
Attribute attribute = getAttribute(query.getItem(), entityType);
mappedValue = query.getStringListValue().stream().map(value -> rsqlValueParser.parse(value, attribute)).collect(toList());
break;
case LESS_THAN:
case LESS_THAN_OR_EQUAL_TO:
case GREATER_THAN:
case GREATER_THAN_OR_EQUAL_TO:
Attribute compareAttribute = getAttribute(query.getItem(), entityType);
switch(compareAttribute.getDataType()) {
case DATE:
case DATE_TIME:
case DECIMAL:
case INT:
case LONG:
break;
default:
throw new UnexpectedEnumException(compareAttribute.getDataType());
}
mappedValue = rsqlValueParser.parse(query.getStringValue(), compareAttribute);
break;
case AND:
case OR:
default:
throw new UnexpectedEnumException(operator);
}
return mappedValue;
}
use of org.molgenis.api.model.Query.Operator in project molgenis by molgenis.
the class QueryRsqlVisitor method visit.
@Override
public Query visit(ComparisonNode node) {
String item = toItem(node);
Operator operator = toOperator(node);
Object value = toValue(node, operator);
return Query.builder().setItem(item).setOperator(operator).setValue(value).build();
}
use of org.molgenis.api.model.Query.Operator in project molgenis by molgenis.
the class QueryRsqlVisitor method toOperator.
private static Operator toOperator(ComparisonNode node) {
Operator operator;
String symbol = node.getOperator().getSymbol();
switch(symbol) {
case "==":
operator = EQUALS;
break;
case "!=":
operator = NOT_EQUALS;
break;
case "=in=":
operator = IN;
break;
case "=out=":
operator = NOT_IN;
break;
case "=lt=":
case "<":
operator = LESS_THAN;
break;
case "=le=":
case "<=":
operator = LESS_THAN_OR_EQUAL_TO;
break;
case "=gt=":
case ">":
operator = GREATER_THAN;
break;
case "=ge=":
case ">=":
operator = GREATER_THAN_OR_EQUAL_TO;
break;
case "=like=":
operator = CONTAINS;
break;
case "=q=":
operator = MATCHES;
break;
case "=sq=":
operator = SEARCH_QUERY;
break;
default:
throw new IllegalStateException("Unknown RSQL query operator [" + symbol + "]");
}
return operator;
}
Aggregations