protected final Predicate buildPredicateFunction()

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;
        }

    }