private Map addFilters()

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