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