summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorIlia Motornyi <elmot@vaadin.com>2018-06-04 10:25:17 +0300
committerTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>2018-06-04 10:25:17 +0300
commit080fcba26ad6571e191c816ae535449ab8f9d657 (patch)
treeef81e6f893bfa3818b61cbd2f19f7e4988fa7e04 /server
parentb2a02c46362f70c86eaa88c63abd5282cc2ddb47 (diff)
downloadvaadin-framework-080fcba26ad6571e191c816ae535449ab8f9d657.tar.gz
vaadin-framework-080fcba26ad6571e191c816ae535449ab8f9d657.zip
Implement serializable predicate helper methods (#10952)
Diffstat (limited to 'server')
-rw-r--r--server/src/main/java/com/vaadin/server/SerializablePredicate.java82
1 files changed, 81 insertions, 1 deletions
diff --git a/server/src/main/java/com/vaadin/server/SerializablePredicate.java b/server/src/main/java/com/vaadin/server/SerializablePredicate.java
index 1bce65769d..495fdb2c9f 100644
--- a/server/src/main/java/com/vaadin/server/SerializablePredicate.java
+++ b/server/src/main/java/com/vaadin/server/SerializablePredicate.java
@@ -16,6 +16,7 @@
package com.vaadin.server;
import java.io.Serializable;
+import java.util.Objects;
import java.util.function.Predicate;
/**
@@ -28,5 +29,84 @@ import java.util.function.Predicate;
*
*/
public interface SerializablePredicate<T> extends Predicate<T>, Serializable {
- // Only method inherited from Predicate
+ /**
+ * Returns a composed predicate that represents a short-circuiting logical
+ * AND of this predicate and another. When evaluating the composed
+ * predicate, if this predicate is {@code false}, then the {@code other}
+ * predicate is not evaluated.
+ *
+ * <p>
+ * Any exceptions thrown during evaluation of either predicate are relayed
+ * to the caller; if evaluation of this predicate throws an exception, the
+ * {@code other} predicate will not be evaluated.
+ *
+ * @param other
+ * a predicate that will be logically-ANDed with this predicate
+ * @return a composed predicate that represents the short-circuiting logical
+ * AND of this predicate and the {@code other} predicate
+ * @throws NullPointerException
+ * if other is null
+ * @since
+ */
+ default SerializablePredicate<T> and(
+ SerializablePredicate<? super T> other) {
+ Objects.requireNonNull(other);
+ return t -> test(t) && other.test(t);
+ }
+
+ /**
+ * Returns a predicate that represents the logical negation of this
+ * predicate.
+ *
+ * @return a predicate that represents the logical negation of this
+ * predicate
+ * @since
+ */
+ default SerializablePredicate<T> negate() {
+ return t -> !test(t);
+ }
+
+ /**
+ * Returns a composed predicate that represents a short-circuiting logical
+ * OR of this predicate and another. When evaluating the composed predicate,
+ * if this predicate is {@code true}, then the {@code other} predicate is
+ * not evaluated.
+ *
+ * <p>
+ * Any exceptions thrown during evaluation of either predicate are relayed
+ * to the caller; if evaluation of this predicate throws an exception, the
+ * {@code other} predicate will not be evaluated.
+ *
+ * @param other
+ * a predicate that will be logically-ORed with this predicate
+ * @return a composed predicate that represents the short-circuiting logical
+ * OR of this predicate and the {@code other} predicate
+ * @throws NullPointerException
+ * if other is null
+ * @since
+ */
+ default SerializablePredicate<T> or(
+ SerializablePredicate<? super T> other) {
+ Objects.requireNonNull(other);
+ return t -> test(t) || other.test(t);
+ }
+
+ /**
+ * Returns a predicate that tests if two arguments are equal according to
+ * {@link Objects#equals(Object, Object)}.
+ *
+ * @param <T>
+ * the type of arguments to the predicate
+ * @param targetRef
+ * the object reference with which to compare for equality, which
+ * may be {@code null}
+ * @return a predicate that tests if two arguments are equal according to
+ * {@link Objects#equals(Object, Object)}
+ * @since
+ */
+ static <T> SerializablePredicate<T> isEqual(Serializable targetRef) {
+ return (null == targetRef) ? Objects::isNull
+ : object -> targetRef.equals(object);
+ }
+
}