You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2019/05/01 19:20:38 UTC

[metamodel] 02/02: 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.

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 <a....@quadient.com>
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) {