This is an automated email from the ASF dual-hosted git repository. kaspersor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/metamodel.git
commit 50044d0bbeb001b8ac84ddfdd423048fa49b53df Author: Arjan Seijkens <[email protected]> AuthorDate: Wed Apr 24 15:13:19 2019 +0200 Refactored logic which gets "applicable" filters, so it gets the SelectItems from compound FilterItems by recursively calling the getSelectItems method when a FilterItem has children. --- .../java/org/apache/metamodel/MetaModelHelper.java | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/apache/metamodel/MetaModelHelper.java b/core/src/main/java/org/apache/metamodel/MetaModelHelper.java index c484736..f633918 100644 --- a/core/src/main/java/org/apache/metamodel/MetaModelHelper.java +++ b/core/src/main/java/org/apache/metamodel/MetaModelHelper.java @@ -253,20 +253,25 @@ public final class MetaModelHelper { */ private static Set<FilterItem> applicableFilters(Collection<FilterItem> filters, Collection<SelectItem> selectItemList) { + final Set<SelectItem> items = new HashSet<>(selectItemList); - Set<SelectItem> items = new HashSet<SelectItem>(selectItemList); + return filters.stream().filter(fi -> items.containsAll(getSelectItems(fi))).collect(Collectors.toSet()); + } - return filters.stream().filter(fi -> { - Collection<SelectItem> fiSelectItems = new ArrayList<>(); - fiSelectItems.add(fi.getSelectItem()); - Object operand = fi.getOperand(); + private static Set<SelectItem> getSelectItems(final FilterItem filterItem) { + final Set<SelectItem> itemsInFilter = new HashSet<>(); + if (filterItem.getChildItemCount() == 0) { + itemsInFilter.add(filterItem.getSelectItem()); + final Object operand = filterItem.getOperand(); if (operand instanceof SelectItem) { - fiSelectItems.add((SelectItem) operand); + itemsInFilter.add((SelectItem) operand); } - - return items.containsAll(fiSelectItems); - - }).collect(Collectors.toSet()); + } else { + for (FilterItem childFilterItem : filterItem.getChildItems()) { + itemsInFilter.addAll(getSelectItems(childFilterItem)); + } + } + return itemsInFilter; } public static DataSet getFiltered(DataSet dataSet, Iterable<FilterItem> filterItems) {
