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) {