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