Search in sources :

Example 1 with WQConstraint

use of com.peterphi.std.guice.restclient.jaxb.webquery.WQConstraint in project stdlib by petergeneric.

the class JPAQueryBuilder method parseConstraint.

private Predicate parseConstraint(final WQGroup group) {
    // If we can't optimise this group into an IN criteria...
    if (group.operator == WQGroupType.AND || !shouldBeInCriteria(group)) {
        List<Predicate> contents = parseConstraint(group.constraints);
        if (contents.size() == 1)
            return contents.get(0);
        switch(group.operator) {
            case AND:
                return criteriaBuilder.and(contents.toArray(new Predicate[conditions.size()]));
            case OR:
                return criteriaBuilder.or(contents.toArray(new Predicate[conditions.size()]));
            default:
                throw new IllegalArgumentException("Unknown group operator: " + group.operator);
        }
    } else {
        // We can optimise this group into an IN criteria
        final String field = ((WQConstraint) group.constraints.get(0)).field;
        final Expression property = getProperty(field);
        final List<Object> ids = group.constraints.stream().map(l -> parseValue(property, ((WQConstraint) l).value)).collect(Collectors.toList());
        return property.in(param(ids));
    }
}
Also used : StringUtils(org.apache.commons.lang.StringUtils) Arrays(java.util.Arrays) Criteria(org.hibernate.Criteria) Array(java.lang.reflect.Array) Fetch(javax.persistence.criteria.Fetch) Session(org.hibernate.Session) Selection(javax.persistence.criteria.Selection) HashMap(java.util.HashMap) WQOrder(com.peterphi.std.guice.restclient.jaxb.webquery.WQOrder) QEntity(com.peterphi.std.guice.hibernate.webquery.impl.QEntity) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) WQFunctionType(com.peterphi.std.guice.restclient.jaxb.webquery.WQFunctionType) Logger(org.apache.log4j.Logger) Predicate(javax.persistence.criteria.Predicate) Map(java.util.Map) Query(org.hibernate.query.Query) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) JoinType(javax.persistence.criteria.JoinType) NotImplementedException(com.peterphi.std.NotImplementedException) Expression(javax.persistence.criteria.Expression) WQConstraintLine(com.peterphi.std.guice.restclient.jaxb.webquery.WQConstraintLine) Path(javax.persistence.criteria.Path) Root(javax.persistence.criteria.Root) WQPath(com.peterphi.std.guice.hibernate.webquery.impl.jpa.jpafunctions.WQPath) JPAJoin(com.peterphi.std.guice.hibernate.webquery.impl.jpa.jpafunctions.JPAJoin) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) ParameterExpression(javax.persistence.criteria.ParameterExpression) WQConstraint(com.peterphi.std.guice.restclient.jaxb.webquery.WQConstraint) WebQuery(com.peterphi.std.guice.restclient.jaxb.webquery.WebQuery) Collection(java.util.Collection) Set(java.util.Set) WQGroup(com.peterphi.std.guice.restclient.jaxb.webquery.WQGroup) Collectors(java.util.stream.Collectors) WQGroupType(com.peterphi.std.guice.restclient.jaxb.webquery.WQGroupType) List(java.util.List) Order(javax.persistence.criteria.Order) WQTypeHelper(com.peterphi.std.guice.hibernate.webquery.impl.WQTypeHelper) QRelation(com.peterphi.std.guice.hibernate.webquery.impl.QRelation) Collections(java.util.Collections) WQConstraint(com.peterphi.std.guice.restclient.jaxb.webquery.WQConstraint) Expression(javax.persistence.criteria.Expression) ParameterExpression(javax.persistence.criteria.ParameterExpression) Predicate(javax.persistence.criteria.Predicate)

Aggregations

NotImplementedException (com.peterphi.std.NotImplementedException)1 QEntity (com.peterphi.std.guice.hibernate.webquery.impl.QEntity)1 QRelation (com.peterphi.std.guice.hibernate.webquery.impl.QRelation)1 WQTypeHelper (com.peterphi.std.guice.hibernate.webquery.impl.WQTypeHelper)1 JPAJoin (com.peterphi.std.guice.hibernate.webquery.impl.jpa.jpafunctions.JPAJoin)1 WQPath (com.peterphi.std.guice.hibernate.webquery.impl.jpa.jpafunctions.WQPath)1 WQConstraint (com.peterphi.std.guice.restclient.jaxb.webquery.WQConstraint)1 WQConstraintLine (com.peterphi.std.guice.restclient.jaxb.webquery.WQConstraintLine)1 WQFunctionType (com.peterphi.std.guice.restclient.jaxb.webquery.WQFunctionType)1 WQGroup (com.peterphi.std.guice.restclient.jaxb.webquery.WQGroup)1 WQGroupType (com.peterphi.std.guice.restclient.jaxb.webquery.WQGroupType)1 WQOrder (com.peterphi.std.guice.restclient.jaxb.webquery.WQOrder)1 WebQuery (com.peterphi.std.guice.restclient.jaxb.webquery.WebQuery)1 Array (java.lang.reflect.Array)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1