use of com.peterphi.std.guice.restclient.jaxb.webquery.WQGroup 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));
}
}
Aggregations