in persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java [166:214]
private Map<String, JsonField> addFilters(final Map<String, JsonField> fields,
final List<AttributeFilter<?>> filters) {
if (Objects.isNull(filters) || filters.isEmpty()) {
return fields;
}
filters.stream()
.filter(filter -> Objects.nonNull(filter.getAttribute()))
.filter(filter -> !Objects.equals(filter.getCondition(), FilterCondition.NOT))
.filter(filter -> !Objects.equals(filter.getCondition(), FilterCondition.AND))
.filter(filter -> !Objects.equals(filter.getCondition(), FilterCondition.OR))
.filter(filter -> !Objects.equals(filter.getCondition(), FilterCondition.BETWEEN))
.filter(filter -> !fields.containsKey(filter.getAttribute()))
.forEach(filter -> fields.put(filter.getAttribute(),
new JsonField(filter.getAttribute(), filter.getValue())));
//Add Children of NOT conditions
addFilters(fields,
filters.stream()
.filter(filter -> Objects.equals(filter.getCondition(), FilterCondition.NOT))
.map(filter -> (AttributeFilter<?>) filter.getValue())
.collect(Collectors.toList()));
//Add Children of AND conditions
addFilters(fields,
filters.stream()
.filter(filter -> Objects.equals(filter.getCondition(), FilterCondition.AND))
.map(filter -> (List<AttributeFilter<?>>) filter.getValue())
.flatMap(List::stream)
.collect(Collectors.toList()));
//Add Children of OR conditions
addFilters(fields,
filters.stream()
.filter(filter -> Objects.equals(filter.getCondition(), FilterCondition.OR))
.map(filter -> (List<AttributeFilter<?>>) filter.getValue())
.flatMap(List::stream)
.collect(Collectors.toList()));
//Add Children of BETWEEN conditions
filters.stream()
.filter(filter -> Objects.equals(filter.getCondition(), FilterCondition.BETWEEN))
.filter(filter -> !fields.containsKey(filter.getAttribute()))
.forEach(filter -> fields.put(filter.getAttribute(),
new JsonField(filter.getAttribute(),
((List<Object>) filter.getValue()).get(0))));
return fields;
}