From 1f780374b912b6910bd1b34aa4a40a55597810d4 Mon Sep 17 00:00:00 2001 From: Reto Breitenmoser Date: Fri, 31 Aug 2018 14:45:56 +0200 Subject: [PATCH] [New] added listContains predicate --- .../li/strolch/search/ExpressionBuilder.java | 4 ++++ .../li/strolch/search/PredicatesSupport.java | 4 ++++ .../predicates/ListContainsPredicate.java | 20 +++++++++++++++++++ .../li/strolch/search/StrolchSearchTest.java | 4 ++++ 4 files changed, 32 insertions(+) create mode 100644 li.strolch.agent/src/main/java/li/strolch/search/predicates/ListContainsPredicate.java diff --git a/li.strolch.agent/src/main/java/li/strolch/search/ExpressionBuilder.java b/li.strolch.agent/src/main/java/li/strolch/search/ExpressionBuilder.java index c09873042..e3a023c67 100644 --- a/li.strolch.agent/src/main/java/li/strolch/search/ExpressionBuilder.java +++ b/li.strolch.agent/src/main/java/li/strolch/search/ExpressionBuilder.java @@ -51,6 +51,10 @@ public interface ExpressionBuilder { default SearchExpression contains(Object right) { return element -> PredicatesSupport.contains(right).matches(extract(element)); } + + default SearchExpression listContains(Object right) { + return element -> PredicatesSupport.listContains(right).matches(extract(element)); + } default SearchExpression containsIgnoreCase(Object right) { return element -> PredicatesSupport.containsIgnoreCase(right).matches(extract(element)); diff --git a/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java b/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java index 71f1c799d..605d118e6 100644 --- a/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java +++ b/li.strolch.agent/src/main/java/li/strolch/search/PredicatesSupport.java @@ -43,6 +43,10 @@ public class PredicatesSupport { public static SearchPredicate contains(Object right) { return new ContainsPredicate(right, false); } + + public static SearchPredicate listContains(Object right) { + return new ListContainsPredicate(right, false); + } public static SearchPredicate containsIgnoreCase(Object right) { return new ContainsPredicate(right, true); diff --git a/li.strolch.agent/src/main/java/li/strolch/search/predicates/ListContainsPredicate.java b/li.strolch.agent/src/main/java/li/strolch/search/predicates/ListContainsPredicate.java new file mode 100644 index 000000000..50d8faff7 --- /dev/null +++ b/li.strolch.agent/src/main/java/li/strolch/search/predicates/ListContainsPredicate.java @@ -0,0 +1,20 @@ +package li.strolch.search.predicates; + +import li.strolch.utils.ObjectHelper; + +/** + * Implements the contains predicate, delegating to {@link ObjectHelper#isIn(Object, Object, boolean)} + */ +public class ListContainsPredicate extends AbstractSearchPredicate { + private boolean ignoreCase; + + public ListContainsPredicate(Object right, boolean ignoreCase) { + super(right); + this.ignoreCase = ignoreCase; + } + + @Override + public boolean matches(Object left) { + return ObjectHelper.isIn(this.right, left, this.ignoreCase); + } +} diff --git a/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java b/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java index 5932deddb..f7ee8b95a 100644 --- a/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java +++ b/li.strolch.agent/src/test/java/li/strolch/search/StrolchSearchTest.java @@ -407,6 +407,10 @@ public class StrolchSearchTest { .and(param(BAG_ID, PARAM_LIST_STRING_ID, isIn(asList("Hello", "World")))) .and(param(BAG_ID, PARAM_LIST_STRING_ID, isIn(asList("Hello", "World", "Extra")))) .and(param(BAG_ID, PARAM_LIST_STRING_ID, isIn(asList("Extra", "Sauce")).not())) + .and(param(BAG_ID, PARAM_LIST_STRING_ID, listContains("Hello"))) + .and(param(BAG_ID, PARAM_LIST_STRING_ID, listContains("Hello1")).not()) + .and(param(BAG_ID, PARAM_LIST_STRING_ID, listContains("World"))) + .and(param(BAG_ID, PARAM_LIST_STRING_ID, listContains("World1")).not()) .and(paramNull(BAG_ID, "non-existant")) //