[New] added listContains predicate

This commit is contained in:
Reto Breitenmoser 2018-08-31 14:45:56 +02:00
parent 7677d27442
commit 1f780374b9
4 changed files with 32 additions and 0 deletions

View File

@ -51,6 +51,10 @@ public interface ExpressionBuilder<T extends StrolchRootElement> {
default SearchExpression<T> contains(Object right) {
return element -> PredicatesSupport.contains(right).matches(extract(element));
}
default SearchExpression<T> listContains(Object right) {
return element -> PredicatesSupport.listContains(right).matches(extract(element));
}
default SearchExpression<T> containsIgnoreCase(Object right) {
return element -> PredicatesSupport.containsIgnoreCase(right).matches(extract(element));

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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"))
//