Search in sources :

Example 1 with Operator

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);
    }
}
Also used : Operator(org.molgenis.api.model.Query.Operator) UnexpectedEnumException(org.molgenis.util.UnexpectedEnumException) Query(org.molgenis.api.model.Query)

Example 2 with 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;
}
Also used : Operator(org.molgenis.api.model.Query.Operator) UnexpectedEnumException(org.molgenis.util.UnexpectedEnumException) Attribute(org.molgenis.data.meta.model.Attribute)

Example 3 with Operator

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();
}
Also used : Operator(org.molgenis.api.model.Query.Operator)

Example 4 with Operator

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;
}
Also used : Operator(org.molgenis.api.model.Query.Operator)

Aggregations

Operator (org.molgenis.api.model.Query.Operator)4 UnexpectedEnumException (org.molgenis.util.UnexpectedEnumException)2 Query (org.molgenis.api.model.Query)1 Attribute (org.molgenis.data.meta.model.Attribute)1