public static Predicate buildPredicate()

in data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/PostgresqlJsonHelper.java [43:89]


    public static Predicate buildPredicate(AttributeFilter<?> filter, Root<?> root,
            CriteriaBuilder builder) {
        boolean isString;
        List<Object> values;
        switch (filter.getCondition()) {
            case EQUAL:
                isString = filter.getValue() instanceof String;
                return builder.equal(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
            case GT:
                isString = filter.getValue() instanceof String;
                return builder.greaterThan(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
            case GTE:
                isString = filter.getValue() instanceof String;
                return builder.greaterThanOrEqualTo(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
            case LT:
                isString = filter.getValue() instanceof String;
                return builder.lessThan(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
            case LTE:
                isString = filter.getValue() instanceof String;
                return builder
                        .lessThanOrEqualTo(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, filter.getValue(), isString));
            case LIKE:
                return builder.like(buildPathExpression(builder, root, filter.getAttribute(), true),
                        filter.getValue().toString().replaceAll("\\*", "%"));
            case IS_NULL:
                return builder.isNull(buildPathExpression(builder, root, filter.getAttribute(), false));
            case NOT_NULL:
                return builder.isNotNull(buildPathExpression(builder, root, filter.getAttribute(), false));
            case BETWEEN:
                values = (List<Object>) filter.getValue();
                isString = values.get(0) instanceof String;
                return builder.between(buildPathExpression(builder, root, filter.getAttribute(), isString), buildObjectExpression(builder, values.get(0), isString),
                        buildObjectExpression(builder, values.get(1), isString));
            case IN:
                values = (List<Object>) filter.getValue();
                isString = values.get(0) instanceof String;
                return buildPathExpression(builder, root, filter.getAttribute(), isString).in(values.stream().map(o -> buildObjectExpression(builder, o, isString)).collect(Collectors.toList()));
            case CONTAINS:
                return builder.isTrue(
                        builder.function(ContainsSQLFunction.CONTAINS_NAME, Boolean.class, buildPathExpression(builder, root, filter.getAttribute(), false), builder.literal(filter.getValue())));
            case CONTAINS_ANY:
                return containsPredicate(filter, root, builder, ContainsSQLFunction.CONTAINS_ANY_NAME);
            case CONTAINS_ALL:
                return containsPredicate(filter, root, builder, ContainsSQLFunction.CONTAINS_ALL_NAME);
        }
        throw new UnsupportedOperationException("Filter " + filter + " is not supported");
    }