private AttributeFilter mapJsonArgument()

in data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/query/GraphQLQueryMapper.java [131:171]


    private AttributeFilter<?> mapJsonArgument(String attribute, String key, Object value) {
        StringBuilder sb = new StringBuilder(attribute);
        FilterCondition condition = FilterCondition.fromLabel(key);
        while (condition == null && value instanceof Map) {
            sb.append('.').append(key);
            Map.Entry<String, Object> entry = ((Map<String, Object>) value).entrySet().iterator().next();
            key = entry.getKey();
            value = entry.getValue();
            condition = FilterCondition.fromLabel(key);
        }
        if (condition != null) {
            switch (condition) {
                case GT:
                    return jsonFilter(greaterThan(sb.toString(), value));
                case GTE:
                    return jsonFilter(greaterThanEqual(sb.toString(), value));
                case LT:
                    return jsonFilter(lessThan(sb.toString(), value));
                case LTE:
                    return jsonFilter(lessThanEqual(sb.toString(), value));
                case BETWEEN:
                    return jsonFilter(filterValueMap(value, val -> between(sb.toString(), val.get("from"), val.get("to"))));
                case IN:
                    return jsonFilter(filterValueList(value, val -> in(sb.toString(), val)));
                case IS_NULL:
                    return jsonFilter(Boolean.TRUE.equals(value) ? isNull(sb.toString()) : notNull(sb.toString()));
                case CONTAINS:
                    return jsonFilter(contains(sb.toString(), value));
                case LIKE:
                    return jsonFilter(like(sb.toString(), value.toString()));
                case CONTAINS_ALL:
                    return jsonFilter(filterValueList(value, val -> containsAll(sb.toString(), val)));
                case CONTAINS_ANY:
                    return jsonFilter(filterValueList(value, val -> containsAny(sb.toString(), val)));
                case EQUAL:
                default:
                    return jsonFilter(equalTo(sb.toString(), value));
            }
        }
        return null;
    }