in persistence-commons/persistence-commons-mongodb/src/main/java/org/kie/kogito/persistence/mongodb/query/QueryUtils.java [51:89]
static Bson generateSingleQuery(AttributeFilter<?> filter, UnaryOperator<String> filterFunction) {
switch (filter.getCondition()) {
case CONTAINS:
case EQUAL:
return eq(filterFunction.apply(filter.getAttribute()), filter.getValue());
case LIKE:
return regex(filterFunction.apply(filter.getAttribute()), ((String) filter.getValue()).replace("*", ".*"));
case IS_NULL:
return exists(filterFunction.apply(filter.getAttribute()), false);
case NOT_NULL:
return exists(filterFunction.apply(filter.getAttribute()), true);
case GT:
return gt(filterFunction.apply(filter.getAttribute()), filter.getValue());
case GTE:
return gte(filterFunction.apply(filter.getAttribute()), filter.getValue());
case LT:
return lt(filterFunction.apply(filter.getAttribute()), filter.getValue());
case LTE:
return lte(filterFunction.apply(filter.getAttribute()), filter.getValue());
case BETWEEN:
List<?> value = (List<?>) filter.getValue();
return and(gte(filterFunction.apply(filter.getAttribute()), value.get(0)),
lte(filterFunction.apply(filter.getAttribute()), value.get(1)));
case IN:
return in(filterFunction.apply(filter.getAttribute()), (List<?>) filter.getValue());
case CONTAINS_ALL:
return all(filterFunction.apply(filter.getAttribute()), (List<?>) filter.getValue());
case CONTAINS_ANY:
return or(((List<?>) filter.getValue()).stream().map(v -> eq(filterFunction.apply(filter.getAttribute()), v)).collect(toList()));
case OR:
return or(((List<AttributeFilter<?>>) filter.getValue()).stream().map(f -> generateSingleQuery(f, filterFunction)).collect(toList()));
case AND:
return and(((List<AttributeFilter<?>>) filter.getValue()).stream().map(f -> generateSingleQuery(f, filterFunction)).collect(toList()));
case NOT:
return not(generateSingleQuery((AttributeFilter<?>) filter.getValue(), filterFunction));
default:
return null;
}
}