From 317c18ab4adfa7d22ed495d5f6bfc0c0e931ee35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per-=C3=85ke=20Minborg?= Date: Tue, 25 Apr 2017 10:11:13 -0700 Subject: [PATCH] runtime-field: Introduce new CombinedPredicate interface --- .../predicate/AbstractCombinedPredicate.java | 54 +++++----------- .../internal/predicate/AbstractPredicate.java | 7 +-- .../field/predicate/CombinedPredicate.java | 62 +++++++++++++++++++ 3 files changed, 82 insertions(+), 41 deletions(-) create mode 100644 runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/predicate/CombinedPredicate.java diff --git a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractCombinedPredicate.java b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractCombinedPredicate.java index f6c64d0cea..84e03ed442 100644 --- a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractCombinedPredicate.java +++ b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractCombinedPredicate.java @@ -16,6 +16,7 @@ */ package com.speedment.runtime.field.internal.predicate; +import com.speedment.runtime.field.predicate.CombinedPredicate; import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; @@ -27,27 +28,20 @@ * Aggregation of a number of {@link Predicate Predicates} of the same type * (e.g. AND or OR) that can be applied in combination. * - * @param the entity type - * - * @author Per Minborg - * @author Emil Forslund - * @since 2.2.0 + * @param the entity type + * + * @author Per Minborg + * @author Emil Forslund + * @since 2.2.0 */ -public abstract class AbstractCombinedPredicate extends AbstractPredicate { - - /** - * This enum list all the different types of concrete implementation of the - * abstract CombinedBasePredicate - */ - public enum Type { - AND, OR - } +public abstract class AbstractCombinedPredicate extends AbstractPredicate + implements CombinedPredicate { private final List> predicates; private final Type type; private AbstractCombinedPredicate(Type type, Predicate first, Predicate second) { - + this.type = requireNonNull(type); this.predicates = new ArrayList<>(); add(requireNonNull(first)); @@ -91,31 +85,17 @@ protected AbstractCombinedPredicate remove(Predicate pre return this; } - /** - * Creates and returns a {link Stream} of all predicates that this - * CombinedBasePredicate holds. - * - * @return a {link Stream} of all predicates that this CombinedBasePredicate - * holds - */ + @Override public Stream> stream() { return predicates.stream(); } - /** - * Returns the number of predicates that this CombinedBasePredicate holds - * - * @return the number of predicates that this CombinedBasePredicate holds - */ + @Override public int size() { return predicates.size(); } - /** - * Returns the {@link Type} of this CombinedBasePredicate - * - * @return the {@link Type} of this CombinedBasePredicate - */ + @Override public Type getType() { return type; } @@ -178,10 +158,10 @@ public OrCombinedBasePredicate or(Predicate other) { @Override public String toString() { - return "{type=" + - type.name() + - ", predicates=" + - predicates.toString() + - "}"; + return "{type=" + + type.name() + + ", predicates=" + + predicates.toString() + + "}"; } } diff --git a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractPredicate.java b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractPredicate.java index 51d55959b7..bccb366998 100644 --- a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractPredicate.java +++ b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/predicate/AbstractPredicate.java @@ -16,8 +16,7 @@ */ package com.speedment.runtime.field.internal.predicate; -import com.speedment.runtime.field.internal.predicate.AbstractCombinedPredicate.AndCombinedBasePredicate; -import com.speedment.runtime.field.internal.predicate.AbstractCombinedPredicate.OrCombinedBasePredicate; +import com.speedment.runtime.field.predicate.CombinedPredicate; import com.speedment.runtime.field.predicate.trait.HasNegated; import static java.util.Objects.requireNonNull; import java.util.function.Predicate; @@ -42,13 +41,13 @@ abstract class AbstractPredicate implements HasNegated, Predicate { @Override public Predicate and(Predicate other) { requireNonNull(other); - return new AndCombinedBasePredicate<>(this, other); + return CombinedPredicate.and(this, other); } @Override public Predicate or(Predicate other) { requireNonNull(other); - return new OrCombinedBasePredicate<>(this, other); + return CombinedPredicate.or(this, other); } @Override diff --git a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/predicate/CombinedPredicate.java b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/predicate/CombinedPredicate.java new file mode 100644 index 0000000000..548b1cedf8 --- /dev/null +++ b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/predicate/CombinedPredicate.java @@ -0,0 +1,62 @@ +package com.speedment.runtime.field.predicate; + +import com.speedment.runtime.field.internal.predicate.AbstractCombinedPredicate; +import java.util.function.Predicate; +import java.util.stream.Stream; + +/** + * Aggregation of a number of {@link Predicate Predicates} of the same type + * (e.g. AND or OR) that can be applied in combination. + * + * @param the entity type + * + * @author Per Minborg + */ +public interface CombinedPredicate extends Predicate { + + /** + * This enum list all the different types of combinations + */ + public enum Type { + AND, OR + } + + /** + * Creates and returns a {link Stream} of all predicates that this + * CombinedPredicate holds. + * + * @return a {link Stream} of all predicates that this CombinedPredicate + * holds + */ + Stream> stream(); + + /** + * Returns the number of predicates that this CombinedBasePredicate holds + * + * @return the number of predicates that this CombinedBasePredicate holds + */ + int size(); + + /** + * Returns the {@link Type} of this CombinedBasePredicate + * + * @return the {@link Type} of this CombinedBasePredicate + */ + Type getType(); + + @Override + public CombinedPredicate and(Predicate other); + + @Override + public CombinedPredicate or(Predicate other); + + + static CombinedPredicate and(Predicate first, Predicate second) { + return new AbstractCombinedPredicate.AndCombinedBasePredicate<>(first, second); + } + + static CombinedPredicate or(Predicate first, Predicate second) { + return new AbstractCombinedPredicate.OrCombinedBasePredicate<>(first, second); + } + +}