From 7d6a61217d26f260c2cc5a6cd1cc86b2247022c5 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Fri, 16 Oct 2020 09:56:43 +0200 Subject: [PATCH] Fix bug: Programmatic filter() was ignored for empty filter expression * Execute filter() also when the provided String-based filter is empty * Make getFilterPredicate() private: Subclasses should override filter() and getFilterExpression() instead * Note: Keeping explicit filterValue argument of filter() - It is initialized using getFilterExpression() in getFilterPredicate()) - This allows to change the filter expression when filter() invokes itself recursively (e.g., when filtering trees) Issue-Ref: 4071 Issue-Url: https://af3-developer.fortiss.org/issues/4071 Signed-off-by: Simon Barner <barner@fortiss.org> --- .../ui/javafx/control/treetableview/.ratings | 2 +- .../DynamicTreeContentProviderBase.java | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings index 8968633b3..13a4027b5 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings @@ -1,7 +1,7 @@ DynamicList.java 786300e2e914826da239329d190abea1710478ea GREEN DynamicListContentProvider.java 817cba44f246a361207a88ef9a4e1869215803f7 GREEN DynamicStreamContentProvider.java f46e91400609cba54793dd240be0fe2aa0d5cced GREEN -DynamicTreeContentProviderBase.java 0f6e0a6894752d135847608bc45efa504972bb28 GREEN +DynamicTreeContentProviderBase.java e1c46ba3eb7c74c114c8528608e3e6a2ee5c2041 YELLOW DynamicTreeItem.java 7486071d20e896d6ca9a9101bf105caccf3656d0 GREEN DynamicTreeItemBase.java d883066ecc181120302ca32f328538de7a45b093 GREEN DynamicTreeTableUIProviderBase.java 1078bd28a6bce5a5a2c60500f2aa1d8b1fdd341b GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java index 0f6e0a689..e1c46ba3e 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeContentProviderBase.java @@ -47,17 +47,14 @@ public abstract class DynamicTreeContentProviderBase<T> { } /** - * Returns the filter predicate for the given filter value. The default checks if the object's - * toString() contains the filter value. Sub-classes may override or implement - * {@link #filter(Object, String)}. + * Creates a filter predicate for the filter expression returned by + * {@link #getFilterExpression()}. To customize the filter, subclasses may override + * {@link #getFilterExpression()} and {@link #filter(Object, String)}. */ - protected Predicate<T> getFilterPredicate() { - if(getFilterExpression() != null && !"".equals(getFilterExpression().trim())) { - return (o) -> { - return filter(o, getFilterExpression()); - }; - } - return (o) -> true; + private Predicate<T> getFilterPredicate() { + return (o) -> { + return filter(o, getFilterExpression()); + }; } /** Sub-classes may override to implement simple filter behavior. */ @@ -65,7 +62,7 @@ public abstract class DynamicTreeContentProviderBase<T> { if(element == null) { return false; } - if(filterValue == null || "".equals(filterValue)) { + if(filterValue == null || "".equals(filterValue.trim())) { return true; } return element.toString().toLowerCase().contains(filterValue.toLowerCase()); -- GitLab