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