From a43175e6b7d99ae3427772769012d6ba9b0ce2d1 Mon Sep 17 00:00:00 2001 From: Marcos Tischer Vallim Date: Wed, 6 Jan 2021 21:21:20 -0200 Subject: [PATCH 1/2] Add logical operators "and", "or" and "xor" --- .../predicate/LogicalPredicate.java | 85 ++++++++++++++++--- 1 file changed, 74 insertions(+), 11 deletions(-) diff --git a/src/main/java/br/com/fluentvalidator/predicate/LogicalPredicate.java b/src/main/java/br/com/fluentvalidator/predicate/LogicalPredicate.java index cb13315..e18b6c5 100644 --- a/src/main/java/br/com/fluentvalidator/predicate/LogicalPredicate.java +++ b/src/main/java/br/com/fluentvalidator/predicate/LogicalPredicate.java @@ -2,11 +2,78 @@ import static br.com.fluentvalidator.predicate.ObjectPredicate.nullValue; +import java.util.function.BooleanSupplier; import java.util.function.Function; import java.util.function.Predicate; public final class LogicalPredicate { + /** + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate and(final BooleanSupplier left, final BooleanSupplier right) { + return PredicateBuilder.from(not(nullValue())).and(obj -> left.getAsBoolean() && right.getAsBoolean()); + } + + /** + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate and(final Predicate left, final Predicate right) { + return PredicateBuilder.from(not(nullValue())).and(left.and(right)); + } + + /** + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate or(final BooleanSupplier left, final BooleanSupplier right) { + return PredicateBuilder.from(not(nullValue())).and(obj -> left.getAsBoolean() || right.getAsBoolean()); + } + + /** + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate or(final Predicate left, final Predicate right) { + return PredicateBuilder.from(not(nullValue())).and(left.or(right)); + } + + /** + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate xor(final BooleanSupplier left, final BooleanSupplier right) { + return PredicateBuilder.from(not(nullValue())).and(obj -> left.getAsBoolean() ^ right.getAsBoolean()); + } + + /** + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate xor(final Predicate left, final Predicate right) { + return PredicateBuilder.from(not(nullValue())).and(obj -> left.test(obj) ^ right.test(obj)); + } + /** * * @param @@ -18,7 +85,7 @@ static Predicate is(final Predicate predicate) { } /** - * + * * @return */ public static Predicate isFalse() { @@ -26,19 +93,17 @@ public static Predicate isFalse() { } /** - * + * * @param * @param function * @return */ public static Predicate isFalse(final Function function) { - return PredicateBuilder.from(not(nullValue())) - .and(not(nullValue(function))) - .and(not(function::apply)); + return PredicateBuilder.from(not(nullValue())).and(not(nullValue(function))).and(not(function::apply)); } /** - * + * * @return */ public static Predicate isTrue() { @@ -46,17 +111,15 @@ public static Predicate isTrue() { } /** - * + * * @param * @param function * @return */ public static Predicate isTrue(final Function function) { - return PredicateBuilder.from(not(nullValue())) - .and(not(nullValue(function))) - .and(function::apply); + return PredicateBuilder.from(not(nullValue())).and(not(nullValue(function))).and(function::apply); } - + /** * * @param From 8e6686da9c7d726c04a2426deb38309aa57d0881 Mon Sep 17 00:00:00 2001 From: Marcos Tischer Vallim Date: Sat, 30 Jan 2021 14:41:35 -0200 Subject: [PATCH 2/2] Update documentation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3c01b83..9456722 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ public class JavaValidatorBoy extends AbstractValidator { } ``` + Kotlin ```kotlin