in data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/JPAQuery.java [111:161]
protected final Predicate buildPredicateFunction(AttributeFilter filter, Root<E> root, CriteriaBuilder builder) {
switch (filter.getCondition()) {
case CONTAINS:
return builder.isMember(filter.getValue(), getAttributePath(root, filter.getAttribute()));
case CONTAINS_ALL:
List<Predicate> predicatesAll = (List<Predicate>) ((List) filter.getValue()).stream()
.map(o -> builder.isMember(o, getAttributePath(root, filter.getAttribute()))).collect(toList());
return builder.and(predicatesAll.toArray(new Predicate[] {}));
case CONTAINS_ANY:
List<Predicate> predicatesAny = (List<Predicate>) ((List) filter.getValue()).stream()
.map(o -> builder.isMember(o, getAttributePath(root, filter.getAttribute()))).collect(toList());
return builder.or(predicatesAny.toArray(new Predicate[] {}));
case IN:
return getAttributePath(root, filter.getAttribute()).in((Collection<?>) filter.getValue());
case LIKE:
return builder.like(getAttributePath(root, filter.getAttribute()),
filter.getValue().toString().replaceAll("\\*", "%"));
case EQUAL:
return builder.equal(getAttributePath(root, filter.getAttribute()), filter.getValue());
case IS_NULL:
Path pathNull = getAttributePath(root, filter.getAttribute());
return isPluralAttribute(filter.getAttribute()) ? builder.isEmpty(pathNull) : builder.isNull(pathNull);
case NOT_NULL:
Path pathNotNull = getAttributePath(root, filter.getAttribute());
return isPluralAttribute(filter.getAttribute()) ? builder.isNotEmpty(pathNotNull) : builder.isNotNull(pathNotNull);
case BETWEEN:
List<Object> value = (List<Object>) filter.getValue();
return builder
.between(getAttributePath(root, filter.getAttribute()), (Comparable) value.get(0),
(Comparable) value.get(1));
case GT:
return builder.greaterThan(getAttributePath(root, filter.getAttribute()), (Comparable) filter.getValue());
case GTE:
return builder.greaterThanOrEqualTo(getAttributePath(root, filter.getAttribute()),
(Comparable) filter.getValue());
case LT:
return builder.lessThan(getAttributePath(root, filter.getAttribute()), (Comparable) filter.getValue());
case LTE:
return builder
.lessThanOrEqualTo(getAttributePath(root, filter.getAttribute()), (Comparable) filter.getValue());
case OR:
return builder.or(getRecursivePredicate(filter, root, builder).toArray(new Predicate[] {}));
case AND:
return builder.and(getRecursivePredicate(filter, root, builder).toArray(new Predicate[] {}));
case NOT:
return builder.not(filterPredicateFunction(root, builder).apply((AttributeFilter<?>) filter.getValue()));
default:
return null;
}
}