2018-03-14 08:09:29 +01:00
|
|
|
package li.strolch.search;
|
|
|
|
|
|
|
|
import li.strolch.model.StrolchRootElement;
|
|
|
|
import li.strolch.utils.collections.DateRange;
|
|
|
|
|
2023-08-25 09:47:07 +02:00
|
|
|
import java.time.ZonedDateTime;
|
|
|
|
|
2018-06-22 11:11:15 +02:00
|
|
|
/**
|
|
|
|
* An interface to add search expressions to easily discover the possible search expressions
|
|
|
|
*/
|
2018-10-25 11:22:26 +02:00
|
|
|
public interface ExpressionBuilder {
|
2018-03-14 08:09:29 +01:00
|
|
|
|
|
|
|
Object extract(StrolchRootElement element);
|
|
|
|
|
2018-04-20 20:49:31 +02:00
|
|
|
default ValueCoercer getValueCoercer(StrolchRootElement context) {
|
|
|
|
return e -> e;
|
|
|
|
}
|
|
|
|
|
2020-06-23 13:03:57 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isEmpty() {
|
|
|
|
return element -> PredicatesSupport.isEmpty().matches(extract(element));
|
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isEqualTo(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.isEqualTo(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isNotEqualTo(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.isNotEqualTo(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isEqualToIgnoreCase(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.isEqualToIgnoreCase(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isNotEqualToIgnoreCase(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.isNotEqualToIgnoreCase(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> startsWith(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.startsWith(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> startsWithIgnoreCase(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.startsWithIgnoreCase(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> endsWith(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.endsWith(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> endsWithIgnoreCase(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.endsWithIgnoreCase(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> contains(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.contains(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
2018-10-25 11:22:26 +02:00
|
|
|
|
2019-01-14 14:33:06 +01:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> collectionContains(Object right) {
|
|
|
|
return element -> PredicatesSupport.collectionContains(right).matches(extract(element));
|
2018-08-31 14:45:56 +02:00
|
|
|
}
|
2018-03-14 08:09:29 +01:00
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> containsIgnoreCase(Object right) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.containsIgnoreCase(right).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
2023-12-11 15:00:28 +01:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> containsIgnoreCaseMatchAny(Object right) {
|
|
|
|
return element -> PredicatesSupport.containsIgnoreCaseMatchAny(right).matches(extract(element));
|
|
|
|
}
|
2018-03-14 08:09:29 +01:00
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isIn(Object right) {
|
2018-04-19 18:11:31 +02:00
|
|
|
return element -> PredicatesSupport.isIn(right).matches(extract(element));
|
|
|
|
}
|
2024-01-11 12:33:51 +01:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isIn(Object... right) {
|
|
|
|
return element -> PredicatesSupport.isIn(right).matches(extract(element));
|
|
|
|
}
|
2018-04-19 18:11:31 +02:00
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isInIgnoreCase(Object right) {
|
2018-04-19 18:11:31 +02:00
|
|
|
return element -> PredicatesSupport.isInIgnoreCase(right).matches(extract(element));
|
|
|
|
}
|
|
|
|
|
2018-10-25 11:22:26 +02:00
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> inRange(DateRange range) {
|
2018-03-14 09:04:07 +01:00
|
|
|
return element -> PredicatesSupport.inRange(range).matches(extract(element));
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|
2023-08-25 09:47:07 +02:00
|
|
|
|
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isBefore(ZonedDateTime date, boolean inclusive) {
|
|
|
|
return element -> PredicatesSupport.isBefore(date, inclusive).matches(extract(element));
|
|
|
|
}
|
|
|
|
|
|
|
|
default <T extends StrolchRootElement> SearchExpression<T> isAfter(ZonedDateTime date, boolean inclusive) {
|
|
|
|
return element -> PredicatesSupport.isAfter(date, inclusive).matches(extract(element));
|
|
|
|
}
|
2018-03-14 08:09:29 +01:00
|
|
|
}
|