From ec61fe173658fa463d2e1873faa9412b346f0aa3 Mon Sep 17 00:00:00 2001 From: minborg Date: Mon, 12 Oct 2015 13:20:03 -0700 Subject: [PATCH] Refactor field --- .../java/com/speedment/field/Encoder.java | 158 ------------ .../field/ReferenceComparableField.java | 96 ------- .../ReferenceComparableForeignKeyField.java | 30 --- ...erenceComparableForeignKeyStringField.java | 31 --- .../com/speedment/field/ReferenceField.java | 103 -------- .../operators/StandardComparableOperator.java | 47 ---- .../operators/StandardStringOperator.java | 46 ---- .../com/speedment/field2/ComparableField.java | 37 +++ .../ComparableForeignKeyField.java} | 34 ++- .../java/com/speedment/field2/Inclusion.java | 50 ++++ .../ReferenceField.java} | 20 +- .../ReferenceForeignKeyField.java} | 26 +- .../com/speedment/field2/StringField.java | 36 +++ .../field2/StringForeignKeyField.java | 39 +++ .../speedment/field2/methods/FieldSetter.java | 46 ++++ .../methods/Finder.java} | 17 +- .../{field => field2}/methods/Getter.java | 4 +- .../methods/Referencer.java} | 18 +- .../{field => field2}/methods/Setter.java | 2 +- .../field2/trait/ComparableFieldTrait.java | 195 ++++++++++++++ .../trait/FieldTrait.java} | 13 +- .../field2/trait/ReferenceFieldTrait.java | 100 ++++++++ .../trait/ReferenceForeignKeyFieldTrait.java} | 37 +-- .../trait/StringFieldTrait.java} | 50 +++- .../comparator/SpeedmentComparator.java} | 31 ++- .../comparator/impl/NullOrder.java} | 10 +- .../impl/SpeedmentComparatorImpl.java | 112 +++++++++ .../code/entity/EntityTranslatorSupport.java | 43 ++-- .../field/ReferenceComparableFieldImpl.java | 130 ---------- ...eferenceComparableForeignKeyFieldImpl.java | 54 ---- ...ceComparableForeignKeyStringFieldImpl.java | 51 ---- .../ReferenceComparableStringFieldImpl.java | 67 ----- .../core/field/ReferenceFieldImpl.java | 87 ------- .../field/ReferenceForeignKeyFieldImpl.java | 54 ---- .../field/builders/AbstractBasePredicate.java | 56 ----- .../AbstractCombinedBasePredicate.java | 174 ------------- .../ComparablePredicateBuilderImpl.java | 77 ------ .../builders/StringPredicateBuilderImpl.java | 77 ------ .../builders/UnaryPredicateBuilderImpl.java | 61 ----- .../core/field/encoder/JsonEncoder.java | 238 ------------------ .../core/field2/ComparableFieldImpl.java | 156 ++++++++++++ .../field2/ComparableForeignKeyFieldImpl.java | 167 ++++++++++++ .../FieldSetterImpl.java} | 28 ++- .../core/field2/ReferenceFieldImpl.java | 82 ++++++ .../field2/ReferenceForeignKeyFieldImpl.java | 93 +++++++ .../internal/core/field2/StringFieldImpl.java | 192 ++++++++++++++ .../field2/StringForeignKeyFieldImpl.java | 205 +++++++++++++++ .../core/field2/predicate/PredicateType.java | 51 ++++ .../field2/predicate/iface/HasGetter.java | 30 +++ .../predicate/iface/HasPredicateType.java} | 14 +- .../predicate/iface/SpeedmentPredicate.java | 29 +++ .../predicate/iface/type/BinaryOperation.java | 27 ++ .../iface/type/BinarySetOperation.java | 29 +++ .../type/QuaternaryInclusionOperation.java | 27 ++ .../iface/type/QuaternaryOperation.java | 31 +++ .../iface/type/TernaryOperation.java | 29 +++ .../predicate/iface/type/UnaryOperation.java} | 12 +- .../predicate/impl/AlwaysFalsePredicate.java | 41 +++ .../predicate/impl/AlwaysTruePredicate.java | 41 +++ .../impl/SpeedmentPredicateImpl.java | 57 +++++ .../comparable/BaseComparablePredicate.java | 64 +++++ .../impl/comparable/BetweenPredicate.java | 81 ++++++ .../impl/comparable/EqualPredicate.java | 36 +++ .../comparable/GreaterOrEqualPredicate.java | 48 ++++ .../impl/comparable/GreaterThanPredicate.java | 48 ++++ .../impl/comparable/InPredicate.java | 53 ++++ .../impl/comparable/LessOrEqualPredicate.java | 48 ++++ .../impl/comparable/LessThanPredicate.java | 48 ++++ .../impl/comparable/NotEqualPredicate.java | 37 +++ .../impl/reference/IsNotNullPredicate.java | 42 ++++ .../impl/reference/IsNullPredicate.java | 42 ++++ .../impl/string/BaseStringPredicate.java | 77 ++++++ .../impl/string/ContainsPredicate.java | 36 +++ .../impl/string/EndsWithPredicate.java | 36 +++ .../impl/string/EqualIgnoreCasePredicate.java | 36 +++ .../impl/string/IsEmptyPredicate.java | 42 ++++ .../impl/string/IsNotEmptyPredicate.java | 42 ++++ .../string/NotEqualIgnoreCasePredicate.java | 36 +++ .../impl/string/StartsWithPredicate.java | 36 +++ .../trait/ComparableFieldTraitImpl.java | 218 ++++++++++++++++ .../core/field2/trait/FieldTraitImpl.java | 38 +++ .../field2/trait/ReferenceFieldTraitImpl.java | 78 ++++++ .../ReferenceForeignKeyFieldTraitImpl.java | 40 +++ .../field2/trait/StringFieldTraitImpl.java | 101 ++++++++ .../internal/field/ComparableFieldTest.java | 202 +++++++++++++++ .../com/speedment/internal/field/Entity.java} | 32 ++- .../speedment/internal/field/EntityImpl.java | 60 +++++ .../speedment/internal/field/FieldTest.java | 72 ++++++ .../internal/field/RerferenceFieldTest.java | 65 +++++ .../internal/field/StringFieldTest.java | 109 ++++++++ 90 files changed, 3972 insertions(+), 1829 deletions(-) delete mode 100644 src/main/java/com/speedment/field/Encoder.java delete mode 100644 src/main/java/com/speedment/field/ReferenceComparableField.java delete mode 100644 src/main/java/com/speedment/field/ReferenceComparableForeignKeyField.java delete mode 100644 src/main/java/com/speedment/field/ReferenceComparableForeignKeyStringField.java delete mode 100644 src/main/java/com/speedment/field/ReferenceField.java delete mode 100644 src/main/java/com/speedment/field/operators/StandardComparableOperator.java delete mode 100644 src/main/java/com/speedment/field/operators/StandardStringOperator.java create mode 100644 src/main/java/com/speedment/field2/ComparableField.java rename src/main/java/com/speedment/{field/builders/ComparablePredicateBuilder.java => field2/ComparableForeignKeyField.java} (55%) create mode 100644 src/main/java/com/speedment/field2/Inclusion.java rename src/main/java/com/speedment/{field/builders/UnaryPredicateBuilder.java => field2/ReferenceField.java} (68%) rename src/main/java/com/speedment/{field/builders/StringPredicateBuilder.java => field2/ReferenceForeignKeyField.java} (61%) create mode 100644 src/main/java/com/speedment/field2/StringField.java create mode 100644 src/main/java/com/speedment/field2/StringForeignKeyField.java create mode 100644 src/main/java/com/speedment/field2/methods/FieldSetter.java rename src/main/java/com/speedment/{field/operators/ComparableOperator.java => field2/methods/Finder.java} (72%) rename src/main/java/com/speedment/{field => field2}/methods/Getter.java (93%) rename src/main/java/com/speedment/{field/builders/SetterBuilder.java => field2/methods/Referencer.java} (70%) rename src/main/java/com/speedment/{field => field2}/methods/Setter.java (94%) create mode 100644 src/main/java/com/speedment/field2/trait/ComparableFieldTrait.java rename src/main/java/com/speedment/{field/operators/UnaryOperator.java => field2/trait/FieldTrait.java} (75%) create mode 100644 src/main/java/com/speedment/field2/trait/ReferenceFieldTrait.java rename src/main/java/com/speedment/{field/ReferenceForeignKeyField.java => field2/trait/ReferenceForeignKeyFieldTrait.java} (56%) rename src/main/java/com/speedment/{field/ReferenceComparableStringField.java => field2/trait/StringFieldTrait.java} (69%) rename src/main/java/com/speedment/{field/Field.java => internal/comparator/SpeedmentComparator.java} (56%) rename src/main/java/com/speedment/{field/builders/HasOperand.java => internal/comparator/impl/NullOrder.java} (74%) create mode 100644 src/main/java/com/speedment/internal/comparator/impl/SpeedmentComparatorImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/ReferenceComparableFieldImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyFieldImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyStringFieldImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/ReferenceComparableStringFieldImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/ReferenceFieldImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/ReferenceForeignKeyFieldImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/builders/AbstractBasePredicate.java delete mode 100644 src/main/java/com/speedment/internal/core/field/builders/AbstractCombinedBasePredicate.java delete mode 100644 src/main/java/com/speedment/internal/core/field/builders/ComparablePredicateBuilderImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/builders/StringPredicateBuilderImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/builders/UnaryPredicateBuilderImpl.java delete mode 100644 src/main/java/com/speedment/internal/core/field/encoder/JsonEncoder.java create mode 100644 src/main/java/com/speedment/internal/core/field2/ComparableFieldImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/ComparableForeignKeyFieldImpl.java rename src/main/java/com/speedment/internal/core/{field/builders/SetterBuilderImpl.java => field2/FieldSetterImpl.java} (62%) create mode 100644 src/main/java/com/speedment/internal/core/field2/ReferenceFieldImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/ReferenceForeignKeyFieldImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/StringFieldImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/StringForeignKeyFieldImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/PredicateType.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/iface/HasGetter.java rename src/main/java/com/speedment/{field/operators/StringOperator.java => internal/core/field2/predicate/iface/HasPredicateType.java} (74%) create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/iface/SpeedmentPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinaryOperation.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinarySetOperation.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryInclusionOperation.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryOperation.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/iface/type/TernaryOperation.java rename src/main/java/com/speedment/{field/builders/PredicateBuilder.java => internal/core/field2/predicate/iface/type/UnaryOperation.java} (73%) create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysFalsePredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysTruePredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/SpeedmentPredicateImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BaseComparablePredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BetweenPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/EqualPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterOrEqualPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterThanPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/InPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessOrEqualPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessThanPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/NotEqualPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNotNullPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNullPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/BaseStringPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/ContainsPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EndsWithPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EqualIgnoreCasePredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsEmptyPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsNotEmptyPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/NotEqualIgnoreCasePredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/predicate/impl/string/StartsWithPredicate.java create mode 100644 src/main/java/com/speedment/internal/core/field2/trait/ComparableFieldTraitImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/trait/FieldTraitImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/trait/ReferenceFieldTraitImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/trait/ReferenceForeignKeyFieldTraitImpl.java create mode 100644 src/main/java/com/speedment/internal/core/field2/trait/StringFieldTraitImpl.java create mode 100644 src/test/java/com/speedment/internal/field/ComparableFieldTest.java rename src/{main/java/com/speedment/field/operators/StandardUnaryOperator.java => test/java/com/speedment/internal/field/Entity.java} (50%) create mode 100644 src/test/java/com/speedment/internal/field/EntityImpl.java create mode 100644 src/test/java/com/speedment/internal/field/FieldTest.java create mode 100644 src/test/java/com/speedment/internal/field/RerferenceFieldTest.java create mode 100644 src/test/java/com/speedment/internal/field/StringFieldTest.java diff --git a/src/main/java/com/speedment/field/Encoder.java b/src/main/java/com/speedment/field/Encoder.java deleted file mode 100644 index 89624d9f66..0000000000 --- a/src/main/java/com/speedment/field/Encoder.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.field; - -import com.speedment.annotation.Api; -import java.util.function.Function; -import java.util.stream.Stream; - -/** - * The EntityFormatter can be used to format an Entity into any kind of strings. - * Fields can be added, removed and it is also possible to change the way a - * field is rendered into the resulting String. - *

- * A field can also be rendered using another EntityFormatter when that other - * field is a foreign key or, for that matter, another Field in any Entity. - * - * @author Emil Forslund - * @param Entity type - * @param Type of formatter - * @param Target encoder output type - */ -@Api(version = "2.1") -public interface Encoder, OUTPUT_TYPE> { - - OUTPUT_TYPE apply(ENTITY entity); - - // Fields - /** - * Adds this Field to the output renderer. The field will be rendered using - * its default class renderer. - * - * @param the mapped Java type of the Field - * @param field to add to the renderer - * @return a reference to a resulting Encoder - */ - R put(ReferenceField field); - - // Foreign key fields. - /** - * Adds this ReferenceForeignKeyField to the output renderer. The field will - * be rendered such that the foreign key object will be retrieved and then - * the foreign key object will be rendered using the provided Encoder. - * - * @param the mapped Java type of the Field - * @param the mapped Java type of the foreign key Field - * @param field to add to the renderer - * @param fkFormatter the foreign key encoder - * @return a reference to a resulting Encoder - */ - R put(ReferenceForeignKeyField field, Encoder fkFormatter); - - // Label-and-getter pairs - /** - * Adds a field that corresponds to the label to the output renderer. The - * field will be rendered as an {@code Object} of type T by applying the - * provided getter on the Entity and then feeding the returned value to the - * default class renderer. - * - * @param the mapped Java type of the Field - * @param label the name of the field to add to the output renderer - * @param getter to apply to the Entity - * @return a reference to a resulting Encoder - */ - R put(String label, Function getter); - - // Label-and-getter with custom formatter - /** - * Adds a field that corresponds to the label to the output renderer. The - * field will be rendered such that the foreign key object will be retrieved - * and then the foreign key object will be rendered using the provided - * Encoder. - * - * @param the mapped Java type of an Entity - * @param label the name of the field to add to the output renderer - * @param getter fkFormatter the foreign key encoder - * @param fkFormatter the foreign key encoder - * @return a reference to a resulting Encoder - */ - R put(String label, Function getter, Encoder fkFormatter); - - // Label-and-streamer with custom formatter. - /** - * Adds a field that corresponds to the label to the output renderer. The - * field will be rendered by applying the provided streamer that will - * provide a {@code Stream} of type FK_ENTITY from an ENTITY. Each Stream - * element will then be rendered in a subarray by applying the provided - * fkFormatter. - * - * @param the mapped Java type of an Entity - * @param label the name of the field to add to the output renderer - * @param streamer that can produce a {@code Stream} from an - * {@code ENTITY} - * @param fkFormatter the foreign key encoder - * @return a reference to a resulting Encoder - */ - R putStreamer(String label, Function> streamer, Encoder fkFormatter); - - /** - * Adds a field that corresponds to the label to the output renderer. The - * field will be rendered by applying the provided streamer that will - * provide a {@code Stream} from an ENTITY. Each Stream element - * will then be rendered by the provided custom fkMapper that produces an - * Object that is subsequently rendered using its default class renderer. - * - * @param the mapped Java type of an Entity - * @param label the name of the field to add to the output renderer - * @param streamer that can produce a {@code Stream} from an - * {@code ENTITY} - * @param fkMapper the foreign key encoder - * @return a reference to a resulting Encoder - */ - R putStreamer(String label, Function> streamer, Function fkMapper); - - // Removers by label - /** - * Removes the field that corresponds to the provided label from the output - * renderer. If the provided label does not correspond to a field currently - * existing in the output renderer, the action is silently ignored (no-op). - * - * @param label the name of the field to remove from the output renderer - * @return a reference to a resulting Encoder - */ - R remove(String label); - - /** - * Removes the field that corresponds to the provided label from the output - * renderer. If the provided label does not correspond to a field currently - * existing in the output renderer, the action is silently ignored (no-op). - * - * @param label the name of the field to remove from the output renderer - * @return a reference to a resulting Encoder - */ - /** - * Removes this Field from the output renderer. If the provided Field does - * not correspond to a Field currently existing in the output renderer, the - * action is silently ignored (no-op). - * - * @param the mapped Java type of the Field - * @param field to add to the renderer - * @return a reference to a resulting Encoder - */ - R remove(ReferenceField field); - -} \ No newline at end of file diff --git a/src/main/java/com/speedment/field/ReferenceComparableField.java b/src/main/java/com/speedment/field/ReferenceComparableField.java deleted file mode 100644 index 1ab01c0ca7..0000000000 --- a/src/main/java/com/speedment/field/ReferenceComparableField.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.field; - -import com.speedment.annotation.Api; -import com.speedment.field.builders.ComparablePredicateBuilder; - -/** - * - * @author pemi, Emil Forslund - * @param the entity type - * @param the field value type - */ -@Api(version = "2.1") -public interface ReferenceComparableField> extends ReferenceField { - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is equal to the given - * value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is equal to the given value - */ - ComparablePredicateBuilder equal(V value); - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is not equal to the - * given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is not equal to the given value - */ - ComparablePredicateBuilder notEqual(V value); - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is less than the given - * value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is less than the given value - */ - ComparablePredicateBuilder lessThan(V value); - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is less than or equal - * to the given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is less than or equal to the given value - */ - ComparablePredicateBuilder lessOrEqual(V value); - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is greater than - * the given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is greater than the given value - */ - ComparablePredicateBuilder greaterThan(V value); - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is greater than or equal - * to the given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is greater than or equal to the given value - */ - ComparablePredicateBuilder greaterOrEqual(V value); -} \ No newline at end of file diff --git a/src/main/java/com/speedment/field/ReferenceComparableForeignKeyField.java b/src/main/java/com/speedment/field/ReferenceComparableForeignKeyField.java deleted file mode 100644 index 4688a822d3..0000000000 --- a/src/main/java/com/speedment/field/ReferenceComparableForeignKeyField.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.field; - -import com.speedment.annotation.Api; - -/** - * - * @author pemi, Emil Forslund - * @param the entity type - * @param the field value type - * @param the foreign entity type - */ -@Api(version = "2.1") -public interface ReferenceComparableForeignKeyField, FK> extends - ReferenceComparableField, ReferenceForeignKeyField {} \ No newline at end of file diff --git a/src/main/java/com/speedment/field/ReferenceComparableForeignKeyStringField.java b/src/main/java/com/speedment/field/ReferenceComparableForeignKeyStringField.java deleted file mode 100644 index 86e758aebc..0000000000 --- a/src/main/java/com/speedment/field/ReferenceComparableForeignKeyStringField.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.field; - -import com.speedment.annotation.Api; - -/** - * - * @author pemi, Emil Forslund - * @param the entity type - * @param the foreign entity type - */ -@Api(version = "2.1") -public interface ReferenceComparableForeignKeyStringField extends - ReferenceComparableField, - ReferenceForeignKeyField, - ReferenceComparableStringField {} \ No newline at end of file diff --git a/src/main/java/com/speedment/field/ReferenceField.java b/src/main/java/com/speedment/field/ReferenceField.java deleted file mode 100644 index d6e4cda256..0000000000 --- a/src/main/java/com/speedment/field/ReferenceField.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.field; - -import com.speedment.annotation.Api; -import com.speedment.field.methods.Getter; -import com.speedment.field.methods.Setter; -import com.speedment.field.builders.UnaryPredicateBuilder; -import com.speedment.field.builders.SetterBuilder; -import static java.util.Objects.requireNonNull; - -/** - * - * @author pemi, Emil Forslund - * @param the entity type - * @param the field value type - */ -@Api(version = "2.1") -public interface ReferenceField extends Field { - - /** - * Returns a reference to the setter for this field. - * - * @return the setter - */ - Setter setter(); - - /** - * Returns a reference to the getter of this field. - * - * @return the getter - */ - Getter getter(); - - /** - * Returns a {@link java.util.function.Function} that will set this field - * to a specific value for a entity and return that entity. - * - * @param newValue the value to set - * @return the function builder - */ - SetterBuilder set(V newValue); - - /** - * Returns the value of this field for the specified entity. - * - * @param entity the entity - * @return the value of the field - */ - V get(ENTITY entity); - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is {@code null}. - * - * @return a Predicate that will evaluate to {@code true}, if and - * only if this Field is {@code null} - */ - UnaryPredicateBuilder isNull(); - - /** - * Returns if this Field is {@code null} in the given entity. - * - * @param entity to use - * @return if this Field is {@code null} - */ - default boolean isNullIn(ENTITY entity) { - return isNull().test(requireNonNull(entity)); - } - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is not {@code null}. - * - * @return a Predicate that will evaluate to {@code true}, if and - * only if this Field is not {@code null} - */ - UnaryPredicateBuilder isNotNull(); - - /** - * Returns if this Field is not {@code null} in the given entity. - * - * @param entity to use - * @return if this Field is not {@code null} - */ - default boolean isNotNullIn(ENTITY entity) { - return isNotNull().test(requireNonNull(entity)); - } -} \ No newline at end of file diff --git a/src/main/java/com/speedment/field/operators/StandardComparableOperator.java b/src/main/java/com/speedment/field/operators/StandardComparableOperator.java deleted file mode 100644 index 18d5fcf52c..0000000000 --- a/src/main/java/com/speedment/field/operators/StandardComparableOperator.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.field.operators; - -import com.speedment.annotation.Api; -import java.util.Objects; -import java.util.function.IntPredicate; - -/** - * - * @author pemi - */ -@Api(version = "2.1") -public enum StandardComparableOperator implements ComparableOperator { - - EQUAL(i -> i == 0), - NOT_EQUAL(i -> i != 0), - LESS_THAN(i -> i < 0), - LESS_OR_EQUAL(i -> i <= 0), - GREATER_THAN(i -> i > 0), - GREATER_OR_EQUAL(i -> i >= 0); - - private final IntPredicate comparator; - - StandardComparableOperator(IntPredicate comparator) { - this.comparator = Objects.requireNonNull(comparator); - } - - @Override - public IntPredicate getComparator() { - return comparator; - } -} \ No newline at end of file diff --git a/src/main/java/com/speedment/field/operators/StandardStringOperator.java b/src/main/java/com/speedment/field/operators/StandardStringOperator.java deleted file mode 100644 index 1d3c49446d..0000000000 --- a/src/main/java/com/speedment/field/operators/StandardStringOperator.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.field.operators; - -import com.speedment.annotation.Api; -import java.util.Objects; -import java.util.function.BiPredicate; - -/** - * - * @author pemi - */ -@Api(version = "2.1") -public enum StandardStringOperator implements StringOperator { - - STARTS_WITH(String::startsWith), - ENDS_WITH(String::endsWith), - CONTAINS(String::contains), - EQUAL_IGNORE_CASE(String::equalsIgnoreCase), - NOT_EQUAL_IGNORE_CASE((s0, s1) -> !s0.equalsIgnoreCase(s1)); - - private final BiPredicate biPredicate; - - StandardStringOperator(BiPredicate biPredicate) { - this.biPredicate = Objects.requireNonNull(biPredicate); - } - - @Override - public BiPredicate getStringFilter() { - return biPredicate; - } -} \ No newline at end of file diff --git a/src/main/java/com/speedment/field2/ComparableField.java b/src/main/java/com/speedment/field2/ComparableField.java new file mode 100644 index 0000000000..b31f8af1f8 --- /dev/null +++ b/src/main/java/com/speedment/field2/ComparableField.java @@ -0,0 +1,37 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.field2; + +import com.speedment.annotation.Api; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; + +/** + * A representation of an Entity field that is a reference type (eg Integer and + * not int) and that is {@link Comparable}. + * + * @author pemi, Emil Forslund + * @param the entity type + * @param the field value type + */ +@Api(version = "2.2") +public interface ComparableField> extends + FieldTrait, + ReferenceFieldTrait, + ComparableFieldTrait { +} diff --git a/src/main/java/com/speedment/field/builders/ComparablePredicateBuilder.java b/src/main/java/com/speedment/field2/ComparableForeignKeyField.java similarity index 55% rename from src/main/java/com/speedment/field/builders/ComparablePredicateBuilder.java rename to src/main/java/com/speedment/field2/ComparableForeignKeyField.java index 22b9ee8b0c..6f3c32c4f3 100644 --- a/src/main/java/com/speedment/field/builders/ComparablePredicateBuilder.java +++ b/src/main/java/com/speedment/field2/ComparableForeignKeyField.java @@ -14,31 +14,25 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.builders; +package com.speedment.field2; import com.speedment.annotation.Api; -import com.speedment.field.Field; -import com.speedment.field.ReferenceComparableField; -import java.util.function.Predicate; -import com.speedment.field.operators.ComparableOperator; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.ReferenceForeignKeyFieldTrait; /** * - * @author pemi - * @param The entity type + * @author pemi, Emil Forslund + * @param the entity type * @param the field value type + * @param the foreign entity type */ @Api(version = "2.1") -public interface ComparablePredicateBuilder> extends - PredicateBuilder, - Predicate, - HasOperand { - - ComparableOperator getComparableOperator(); - - @Override - V getOperand(); - - @Override - ReferenceComparableField getField(); -} +public interface ComparableForeignKeyField, FK> extends + FieldTrait, + ReferenceFieldTrait, + ComparableFieldTrait, + ReferenceForeignKeyFieldTrait +{} diff --git a/src/main/java/com/speedment/field2/Inclusion.java b/src/main/java/com/speedment/field2/Inclusion.java new file mode 100644 index 0000000000..77a5a4f49a --- /dev/null +++ b/src/main/java/com/speedment/field2/Inclusion.java @@ -0,0 +1,50 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.speedment.field2; + +/** + * + * @author pemi + */ +public enum Inclusion { + + START_INCLUSIVE_END_INCLUSIVE(true, true), + START_INCLUSIVE_END_EXCLUSIVE(true, false), + START_EXCLUSIVE_END_INCLUSIVE(false, true), + START_EXCLUSIVE_END_EXCLUSIVE(false, false); + + private final boolean startInclusive, endInclusive; + + Inclusion(boolean startInclusive, boolean endInclusive) { + this.startInclusive = startInclusive; + this.endInclusive = endInclusive; + } + + public boolean isStartInclusive() { + return startInclusive; + } + + public boolean isEndInclusive() { + return endInclusive; + } + +} diff --git a/src/main/java/com/speedment/field/builders/UnaryPredicateBuilder.java b/src/main/java/com/speedment/field2/ReferenceField.java similarity index 68% rename from src/main/java/com/speedment/field/builders/UnaryPredicateBuilder.java rename to src/main/java/com/speedment/field2/ReferenceField.java index ce50063a3a..e6e0b062fe 100644 --- a/src/main/java/com/speedment/field/builders/UnaryPredicateBuilder.java +++ b/src/main/java/com/speedment/field2/ReferenceField.java @@ -14,20 +14,20 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.builders; +package com.speedment.field2; import com.speedment.annotation.Api; -import com.speedment.field.operators.UnaryOperator; -import java.util.function.Predicate; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; /** * - * @author pemi + * @author pemi, Emil Forslund * @param the entity type + * @param the field value type */ -@Api(version = "2.1") -public interface UnaryPredicateBuilder - extends PredicateBuilder, Predicate { - - UnaryOperator getUnaryOperator(); -} +@Api(version = "2.2") +public interface ReferenceField extends + FieldTrait, + ReferenceFieldTrait +{} diff --git a/src/main/java/com/speedment/field/builders/StringPredicateBuilder.java b/src/main/java/com/speedment/field2/ReferenceForeignKeyField.java similarity index 61% rename from src/main/java/com/speedment/field/builders/StringPredicateBuilder.java rename to src/main/java/com/speedment/field2/ReferenceForeignKeyField.java index aeeb0b66f2..d5ebd30e71 100644 --- a/src/main/java/com/speedment/field/builders/StringPredicateBuilder.java +++ b/src/main/java/com/speedment/field2/ReferenceForeignKeyField.java @@ -14,25 +14,23 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.builders; +package com.speedment.field2; import com.speedment.annotation.Api; -import com.speedment.field.operators.StringOperator; -import java.util.function.Predicate; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.ReferenceForeignKeyFieldTrait; /** * - * @author pemi + * @author pemi, Emil Forslund * @param the entity type + * @param the field value type + * @param the foreign entity type */ @Api(version = "2.1") -public interface StringPredicateBuilder - extends PredicateBuilder, - Predicate, - HasOperand { - - StringOperator getStringOperator(); - - @Override - String getOperand(); -} +public interface ReferenceForeignKeyField extends + FieldTrait, + ReferenceFieldTrait, + ReferenceForeignKeyFieldTrait +{} diff --git a/src/main/java/com/speedment/field2/StringField.java b/src/main/java/com/speedment/field2/StringField.java new file mode 100644 index 0000000000..ba1a9a802c --- /dev/null +++ b/src/main/java/com/speedment/field2/StringField.java @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.field2; + +import com.speedment.annotation.Api; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.StringFieldTrait; + +/** + * + * @author pemi, Emil Forslund + * @param the entity type + */ +@Api(version = "2.2") +public interface StringField extends + FieldTrait, + ReferenceFieldTrait, + ComparableFieldTrait, + StringFieldTrait +{} diff --git a/src/main/java/com/speedment/field2/StringForeignKeyField.java b/src/main/java/com/speedment/field2/StringForeignKeyField.java new file mode 100644 index 0000000000..d1c561392a --- /dev/null +++ b/src/main/java/com/speedment/field2/StringForeignKeyField.java @@ -0,0 +1,39 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.field2; + +import com.speedment.annotation.Api; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.ReferenceForeignKeyFieldTrait; +import com.speedment.field2.trait.StringFieldTrait; + +/** + * + * @author pemi, Emil Forslund + * @param the entity type + * @param the foreign entity type + */ +@Api(version = "2.2") +public interface StringForeignKeyField extends + FieldTrait, + ReferenceFieldTrait, + ComparableFieldTrait, + StringFieldTrait, + ReferenceForeignKeyFieldTrait +{} diff --git a/src/main/java/com/speedment/field2/methods/FieldSetter.java b/src/main/java/com/speedment/field2/methods/FieldSetter.java new file mode 100644 index 0000000000..51005fe30b --- /dev/null +++ b/src/main/java/com/speedment/field2/methods/FieldSetter.java @@ -0,0 +1,46 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.speedment.field2.methods; + +import com.speedment.field2.trait.FieldTrait; +import java.util.function.UnaryOperator; + +/** + * + * @author pemi + * @param entity type + * @param column value type + */ +public interface FieldSetter extends UnaryOperator { + + FieldTrait getField(); + + V getValue(); + + // Arne::setFoo + + // users.stream() + // .filter(User.NAME.equal("Eric")) + // .map(User.NAME.setTo("Emil")) + // .forEach() + +} diff --git a/src/main/java/com/speedment/field/operators/ComparableOperator.java b/src/main/java/com/speedment/field2/methods/Finder.java similarity index 72% rename from src/main/java/com/speedment/field/operators/ComparableOperator.java rename to src/main/java/com/speedment/field2/methods/Finder.java index a933fa9e83..6a29d729d7 100644 --- a/src/main/java/com/speedment/field/operators/ComparableOperator.java +++ b/src/main/java/com/speedment/field2/methods/Finder.java @@ -14,18 +14,17 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.operators; +package com.speedment.field2.methods; import com.speedment.annotation.Api; -import java.util.function.IntPredicate; +import java.util.function.Function; /** - * Marker interface for a BinaryOperator. A BinaryOperator takes two arguments. - * * @author Emil Forslund + * @param the entity + * @param the type of the foreign key stream */ -@Api(version = "2.1") -public interface ComparableOperator { - - IntPredicate getComparator(); -} \ No newline at end of file +@Api(version = "2.2") +public interface Finder extends Function { + +} diff --git a/src/main/java/com/speedment/field/methods/Getter.java b/src/main/java/com/speedment/field2/methods/Getter.java similarity index 93% rename from src/main/java/com/speedment/field/methods/Getter.java rename to src/main/java/com/speedment/field2/methods/Getter.java index 7b9de5ffc8..764521c7ea 100644 --- a/src/main/java/com/speedment/field/methods/Getter.java +++ b/src/main/java/com/speedment/field2/methods/Getter.java @@ -14,7 +14,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.methods; +package com.speedment.field2.methods; import com.speedment.annotation.Api; import java.util.function.Function; @@ -24,5 +24,5 @@ * @param the entity * @param the type of the value to return */ -@Api(version = "2.1") +@Api(version = "2.2") public interface Getter extends Function {} \ No newline at end of file diff --git a/src/main/java/com/speedment/field/builders/SetterBuilder.java b/src/main/java/com/speedment/field2/methods/Referencer.java similarity index 70% rename from src/main/java/com/speedment/field/builders/SetterBuilder.java rename to src/main/java/com/speedment/field2/methods/Referencer.java index 222c87b108..f18d1b5403 100644 --- a/src/main/java/com/speedment/field/builders/SetterBuilder.java +++ b/src/main/java/com/speedment/field2/methods/Referencer.java @@ -14,22 +14,18 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.builders; +package com.speedment.field2.methods; import com.speedment.annotation.Api; -import com.speedment.field.Field; import java.util.function.Function; +import java.util.stream.Stream; /** - * - * @author pemi - * @param the entity type - * @param the field type + * @author Emil Forslund + * @param the entity + * @param the type of the foreign key stream */ -@Api(version = "2.1") -public interface SetterBuilder extends Function { - - Field getField(); +@Api(version = "2.2") +public interface Referencer extends Function> { - V getValue(); } diff --git a/src/main/java/com/speedment/field/methods/Setter.java b/src/main/java/com/speedment/field2/methods/Setter.java similarity index 94% rename from src/main/java/com/speedment/field/methods/Setter.java rename to src/main/java/com/speedment/field2/methods/Setter.java index 278815c670..60c2887350 100644 --- a/src/main/java/com/speedment/field/methods/Setter.java +++ b/src/main/java/com/speedment/field2/methods/Setter.java @@ -14,7 +14,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.methods; +package com.speedment.field2.methods; import com.speedment.annotation.Api; import java.util.function.BiFunction; diff --git a/src/main/java/com/speedment/field2/trait/ComparableFieldTrait.java b/src/main/java/com/speedment/field2/trait/ComparableFieldTrait.java new file mode 100644 index 0000000000..05f4518981 --- /dev/null +++ b/src/main/java/com/speedment/field2/trait/ComparableFieldTrait.java @@ -0,0 +1,195 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.field2.trait; + +import com.speedment.annotation.Api; +import com.speedment.field2.Inclusion; +import java.util.Comparator; +import java.util.Set; +import java.util.function.Predicate; + +/** + * + * @author pemi, Emil Forslund + * @param the entity type + * @param the field value type + */ +@Api(version = "2.2") +public interface ComparableFieldTrait> { + + /** + * Returns a {@link Comparator} that will compare to this field using this + * fields natural order. + * + * @return a {@link Comparator} that will compare to this field using this + * fields natural order + * @throws NullPointerException if a field is null + */ + Comparator comparator(); + + /** + * Returns a {@link Comparator} that will compare to this field using this + * fields natural order, null fields are sorted first. + * + * @return a {@link Comparator} that will compare to this field using this + * fields natural order, null fields are sorted first + */ + Comparator comparatorNullFieldsFirst(); + + /** + * Returns a {@link Comparator} that will compare to this field using this + * fields natural order, null fields are sorted last. + * + * @return a {@link Comparator} that will compare to this field using this + * fields natural order, null fields are sorted last + */ + Comparator comparatorNullFieldsLast(); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is equal to the given + * value. + * + * @param value to compare + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is equal to the given value + */ + Predicate equal(V value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is not equal to the + * given value. + * + * @param value to compare + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is not equal to the given value + */ + Predicate notEqual(V value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is less than the given + * value. + * + * @param value to compare + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is less than the given value + */ + Predicate lessThan(V value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is less than or equal + * to the given value. + * + * @param value to compare + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is less than or equal to the given value + */ + Predicate lessOrEqual(V value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is greater than + * the given value. + * + * @param value to compare + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is greater than the given value + */ + Predicate greaterThan(V value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is greater than or equal + * to the given value. + * + * @param value to compare + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is greater than or equal to the given value + */ + Predicate greaterOrEqual(V value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is between + * the given values (inclusive the start value but exclusive the end value). + *

+ * N.B. if the start value is greater than the end value, then the returned + * Predicate will always evaluate to {@code false} + * + * @param start to compare as a start value + * @param end to compare as an end value + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is between the given values (inclusive the start + * value but exclusive the end value) + */ + default Predicate between(V start, V end) { + return between(start, end, Inclusion.START_INCLUSIVE_END_EXCLUSIVE); + } + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is between + * the given values and taking the Inclusion parameter into account when + * determining if either of the end points shall be included in the Field + * range or not. + *

+ * N.B. if the start value is greater than the end value, then the returned + * Predicate will always evaluate to {@code false} + * + * @param start to compare as a start value + * @param end to compare as an end value + * @param inclusion determines if the end points is included in the Field + * range. + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is between the given values and taking the Inclusion + * parameter into account when determining if either of the end points shall + * be included in the Field range or not + */ + Predicate between(V start, V end, Inclusion inclusion); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is in the set of given + * values. + *

+ * N.B. if no values are given, then the returned Predicate will always + * evaluate to {@code false} + * + * @param values the set of values to match towards this Field + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is in the set of given values + */ + @SuppressWarnings("unchecked") + Predicate in(V... values); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is in the given Set. + *

+ * N.B. if the Set is empty, then the returned Predicate will always + * evaluate to {@code false} + * + * @param values the set of values to match towards this Field + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is in the given Set + */ + Predicate in(Set values); + +} diff --git a/src/main/java/com/speedment/field/operators/UnaryOperator.java b/src/main/java/com/speedment/field2/trait/FieldTrait.java similarity index 75% rename from src/main/java/com/speedment/field/operators/UnaryOperator.java rename to src/main/java/com/speedment/field2/trait/FieldTrait.java index 74426b3fa0..5df8629214 100644 --- a/src/main/java/com/speedment/field/operators/UnaryOperator.java +++ b/src/main/java/com/speedment/field2/trait/FieldTrait.java @@ -14,16 +14,13 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.operators; - -import com.speedment.annotation.Api; -import java.util.function.Predicate; +package com.speedment.field2.trait; /** * * @author pemi */ -@Api(version = "2.1") -public interface UnaryOperator { - Predicate getUnaryFilter(); -} \ No newline at end of file +public interface FieldTrait { + + String getColumnName(); +} diff --git a/src/main/java/com/speedment/field2/trait/ReferenceFieldTrait.java b/src/main/java/com/speedment/field2/trait/ReferenceFieldTrait.java new file mode 100644 index 0000000000..0c5dd16aa6 --- /dev/null +++ b/src/main/java/com/speedment/field2/trait/ReferenceFieldTrait.java @@ -0,0 +1,100 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.speedment.field2.trait; + +import com.speedment.field2.methods.FieldSetter; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import java.util.function.Predicate; + +/** + * Indicates that an extending interface is related to a reference field. + * + * @param the entity type + * @param the field value type + * + * @author pemi + */ +public interface ReferenceFieldTrait { + + /** + * Returns a reference to the setter for this field. + * + * @return the setter + */ + Setter setter(); + + /** + * Returns a reference to the getter of this field. + * + * @return the getter + */ + Getter getter(); + + /** + * Gets the value form the Entity field. + * + * @param e entity + * @return the field value + */ + default V get(ENTITY e) { + return getter().apply(e); + } + + /** + * Sets the value in the given Entity + * + * @param e entity + * @param value to set + * @return the entity itself + */ + default ENTITY set(ENTITY e, V value) { + return setter().apply(e, value); + } + + /** + * Creates and returns a FieldSetter with a given value. + * + * @param value to set + * @return a FieldSetter with a given value + */ + FieldSetter setTo(V value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is {@code null}. + * + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is {@code null} + */ + Predicate isNull(); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is not {@code null}. + * + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is not {@code null} + */ + Predicate isNotNull(); + +} diff --git a/src/main/java/com/speedment/field/ReferenceForeignKeyField.java b/src/main/java/com/speedment/field2/trait/ReferenceForeignKeyFieldTrait.java similarity index 56% rename from src/main/java/com/speedment/field/ReferenceForeignKeyField.java rename to src/main/java/com/speedment/field2/trait/ReferenceForeignKeyFieldTrait.java index 4a33dc74f8..5a901e20ce 100644 --- a/src/main/java/com/speedment/field/ReferenceForeignKeyField.java +++ b/src/main/java/com/speedment/field2/trait/ReferenceForeignKeyFieldTrait.java @@ -14,33 +14,36 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field; +package com.speedment.field2.trait; import com.speedment.annotation.Api; -import com.speedment.field.methods.Getter; +import com.speedment.field2.methods.Finder; /** * - * @author pemi, Emil Forslund - * @param the entity type - * @param the field value type - * @param the foreign entity type + * @author pemi, Emil Forslund + * @param the entity type + * @param the foreign entity type */ -@Api(version = "2.1") -public interface ReferenceForeignKeyField extends ReferenceField { +@Api(version = "2.2") +public interface ReferenceForeignKeyFieldTrait { + /** * Returns a function that can find a foreign entity pointed out by this * field. - * - * @return the finder + * + * @return the finder */ - Getter finder(); - + Finder finder(); + /** - * Finds and returns the foreign key Entity using the provided Entity. + * Finds the foreign entity associated by this field. * - * @param entity to use when finding the foreign key Entity - * @return the foreign key Entity + * @param e entity + * @return the foreign entity associated by this field */ - FK findFrom(ENTITY entity); -} \ No newline at end of file + default FK findFrom(ENTITY e) { + return finder().apply(e); + } + +} diff --git a/src/main/java/com/speedment/field/ReferenceComparableStringField.java b/src/main/java/com/speedment/field2/trait/StringFieldTrait.java similarity index 69% rename from src/main/java/com/speedment/field/ReferenceComparableStringField.java rename to src/main/java/com/speedment/field2/trait/StringFieldTrait.java index b3b9e32cdd..94ee2633cc 100644 --- a/src/main/java/com/speedment/field/ReferenceComparableStringField.java +++ b/src/main/java/com/speedment/field2/trait/StringFieldTrait.java @@ -14,19 +14,19 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field; +package com.speedment.field2.trait; import com.speedment.annotation.Api; -import com.speedment.field.builders.StringPredicateBuilder; +import java.util.function.Predicate; /** * - * @author pemi, Emil Forslund - * @param the entity type + * @author pemi, Emil Forslund + * @param the entity type */ -@Api(version = "2.1") -public interface ReferenceComparableStringField extends ReferenceComparableField { - +@Api(version = "2.2") +public interface StringFieldTrait { + /** * Returns a {@link java.util.function.Predicate} that will evaluate to * {@code true}, if and only if this Field is equal to the given @@ -39,7 +39,7 @@ public interface ReferenceComparableStringField extends ReferenceCompara * * @see String#compareToIgnoreCase(java.lang.String) */ - StringPredicateBuilder equalIgnoreCase(String value); + Predicate equalIgnoreCase(String value); /** * Returns a {@link java.util.function.Predicate} that will evaluate to @@ -53,7 +53,7 @@ public interface ReferenceComparableStringField extends ReferenceCompara * * @see String#compareToIgnoreCase(java.lang.String) */ - StringPredicateBuilder notEqualIgnoreCase(String value); + Predicate notEqualIgnoreCase(String value); /** * Returns a {@link java.util.function.Predicate} that will evaluate to @@ -66,7 +66,7 @@ public interface ReferenceComparableStringField extends ReferenceCompara * * @see String#startsWith(java.lang.String) */ - StringPredicateBuilder startsWith(String value); + Predicate startsWith(String value); /** * Returns a {@link java.util.function.Predicate} that will evaluate to @@ -79,7 +79,7 @@ public interface ReferenceComparableStringField extends ReferenceCompara * * @see String#endsWith(java.lang.String) */ - StringPredicateBuilder endsWith(String value); + Predicate endsWith(String value); /** * Returns a {@link java.util.function.Predicate} that will evaluate to @@ -92,5 +92,29 @@ public interface ReferenceComparableStringField extends ReferenceCompara * * @see String#endsWith(java.lang.String) */ - StringPredicateBuilder contains(String value); -} \ No newline at end of file + Predicate contains(String value); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is empty. An empty Field + * contains a String with length zero. + * + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is empty + * + * @see String#isEmpty() + */ + Predicate isEmpty(); + + /** + * Returns a {@link java.util.function.Predicate} that will evaluate to + * {@code true}, if and only if this Field is not empty. An empty + * Field contains a String with length zero. + * + * @return a Predicate that will evaluate to {@code true}, if and only if + * this Field is not empty + * + * @see String#isEmpty() + */ + Predicate isNotEmpty(); +} diff --git a/src/main/java/com/speedment/field/Field.java b/src/main/java/com/speedment/internal/comparator/SpeedmentComparator.java similarity index 56% rename from src/main/java/com/speedment/field/Field.java rename to src/main/java/com/speedment/internal/comparator/SpeedmentComparator.java index f0a652e52c..932b8a00bd 100644 --- a/src/main/java/com/speedment/field/Field.java +++ b/src/main/java/com/speedment/internal/comparator/SpeedmentComparator.java @@ -14,26 +14,31 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field; +package com.speedment.internal.comparator; -import com.speedment.annotation.Api; +import com.speedment.field2.trait.FieldTrait; +import java.util.Comparator; /** - * A Field is the most basic representation of an Entity field. Because Field - * has a generic type of its Entity, we can prevent applications from applying a - * field from another Entity type. * - * @author pemi, Emil Forslund - * @param The entity type + * @author pemi + * @param entity type + * @param value type */ -@Api(version = "2.1") -public interface Field { +public interface SpeedmentComparator extends Comparator { /** - * Returns the column name that corresponds to this Field. + * Gets the column name. * - * @return the name + * @return the column name */ - String getColumnName(); + FieldTrait getField(); -} \ No newline at end of file + /** + * Returns if this Comparator is reversed. + * + * @return if this Comparator is reversed + */ + boolean isReversed(); + +} diff --git a/src/main/java/com/speedment/field/builders/HasOperand.java b/src/main/java/com/speedment/internal/comparator/impl/NullOrder.java similarity index 74% rename from src/main/java/com/speedment/field/builders/HasOperand.java rename to src/main/java/com/speedment/internal/comparator/impl/NullOrder.java index 41b84e45a9..f8e8ff4d1d 100644 --- a/src/main/java/com/speedment/field/builders/HasOperand.java +++ b/src/main/java/com/speedment/internal/comparator/impl/NullOrder.java @@ -14,16 +14,14 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.builders; +package com.speedment.internal.comparator.impl; /** - * Indicates that a certain interface has a value that can be obtained using a - * getValue() method. * * @author pemi - * @param the value type */ -public interface HasOperand { +public enum NullOrder { + + NONE, FIRST, LAST; - T getOperand(); } diff --git a/src/main/java/com/speedment/internal/comparator/impl/SpeedmentComparatorImpl.java b/src/main/java/com/speedment/internal/comparator/impl/SpeedmentComparatorImpl.java new file mode 100644 index 0000000000..c17450fbf8 --- /dev/null +++ b/src/main/java/com/speedment/internal/comparator/impl/SpeedmentComparatorImpl.java @@ -0,0 +1,112 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.comparator.impl; + +import com.speedment.field2.methods.Getter; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.internal.comparator.SpeedmentComparator; +import java.util.Comparator; +import static java.util.Objects.requireNonNull; + +/** + * + * @author pemi + * @param entity type + * @param value type + */ +public class SpeedmentComparatorImpl> implements SpeedmentComparator { + + private final FieldTrait field; + private final Getter getter; + private final NullOrder nullOrder; + private boolean reversed; + + public SpeedmentComparatorImpl(FieldTrait field, Getter getter, NullOrder nullOrder) { + this.field = field; + this.getter = getter; + this.nullOrder = nullOrder; + } + + @Override + public FieldTrait getField() { + return field; + } + + @Override + public boolean isReversed() { + return reversed; + } + + @Override + public Comparator reversed() { + reversed = !reversed; + return this; + } + + @Override + public int compare(ENTITY o1, ENTITY o2) { + final V o1Value = getter.apply(requireNonNull(o1)); + final V o2Value = getter.apply(requireNonNull(o2)); + if (o1Value == null && o2Value == null) { + if (NullOrder.NONE == nullOrder) { + throw new NullPointerException("Both fields were null and null fields not allowed"); + } + return 0; + } + if (o1Value == null) { + switch (nullOrder) { + case NONE: { + throw new NullPointerException("A field was null and null fields not allowed"); + } + case FIRST: { + return applyReversed(-1); + } + case LAST: { + return applyReversed(1); + } + } + } + if (o2Value == null) { + switch (nullOrder) { + case NONE: { + throw new NullPointerException("A field was null and null fields not allowed"); + } + case FIRST: { + return applyReversed(1); + } + case LAST: { + return applyReversed(-1); + } + } + } + return applyReversed(o1Value.compareTo(o2Value)); + } + + private int applyReversed(int compare) { + if (!reversed) { + return compare; + } + if (compare == 0) { + return 0; + } else if (compare > 0) { + return -1; + } else { + return 1; + } + } + +} diff --git a/src/main/java/com/speedment/internal/core/code/entity/EntityTranslatorSupport.java b/src/main/java/com/speedment/internal/core/code/entity/EntityTranslatorSupport.java index eac8b1ecd6..79e4abec63 100644 --- a/src/main/java/com/speedment/internal/core/code/entity/EntityTranslatorSupport.java +++ b/src/main/java/com/speedment/internal/core/code/entity/EntityTranslatorSupport.java @@ -33,31 +33,28 @@ import com.speedment.config.ForeignKeyColumn; import com.speedment.config.Project; import com.speedment.config.Table; -import com.speedment.field.ReferenceComparableField; -import com.speedment.field.ReferenceComparableForeignKeyField; -import com.speedment.field.ReferenceComparableForeignKeyStringField; -import com.speedment.field.ReferenceComparableStringField; -import com.speedment.field.ReferenceField; -import com.speedment.field.ReferenceForeignKeyField; +import com.speedment.field2.ComparableField; +import com.speedment.field2.ComparableForeignKeyField; +import com.speedment.field2.StringForeignKeyField; +import com.speedment.field2.StringField; +import com.speedment.field2.ReferenceField; +import com.speedment.field2.ReferenceForeignKeyField; import com.speedment.exception.SpeedmentException; -import com.speedment.internal.core.field.ReferenceComparableFieldImpl; -import com.speedment.internal.core.field.ReferenceComparableForeignKeyFieldImpl; -import com.speedment.internal.core.field.ReferenceComparableForeignKeyStringFieldImpl; -import com.speedment.internal.core.field.ReferenceComparableStringFieldImpl; -import com.speedment.internal.core.field.ReferenceFieldImpl; -import com.speedment.internal.core.field.ReferenceForeignKeyFieldImpl; +import com.speedment.internal.core.field2.ComparableFieldImpl; +import com.speedment.internal.core.field2.ComparableForeignKeyFieldImpl; +import com.speedment.internal.core.field2.StringForeignKeyFieldImpl; +import com.speedment.internal.core.field2.StringFieldImpl; +import com.speedment.internal.core.field2.ReferenceFieldImpl; +import com.speedment.internal.core.field2.ReferenceForeignKeyFieldImpl; import com.speedment.internal.core.field.encoder.JsonEncoder; import com.speedment.db.MetaResult; import com.speedment.internal.util.Pluralis; import static com.speedment.internal.util.StaticClassUtil.instanceNotAllowed; import com.speedment.internal.util.JavaLanguage; import static com.speedment.internal.util.JavaLanguage.javaTypeName; -import static java.util.Objects.requireNonNull; import java.util.Optional; import java.util.function.Consumer; import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNull; /** * @@ -110,20 +107,20 @@ public static ReferenceFieldType getReferenceFieldType(File file, Table table, C file.add(Import.of(fkType)); if (String.class.equals(mapping)) { - type = Type.of(ReferenceComparableForeignKeyStringField.class) + type = Type.of(StringForeignKeyField.class) .add(Generic.of().add(entityType)) .add(Generic.of().add(fkType)); - implType = Type.of(ReferenceComparableForeignKeyStringFieldImpl.class) + implType = Type.of(StringForeignKeyFieldImpl.class) .add(Generic.of().add(entityType)) .add(Generic.of().add(fkType)); } else if (Comparable.class.isAssignableFrom(mapping)) { - type = Type.of(ReferenceComparableForeignKeyField.class) + type = Type.of(ComparableForeignKeyField.class) .add(Generic.of().add(entityType)) .add(Generic.of().add(Type.of(mapping))) .add(Generic.of().add(fkType)); - implType = Type.of(ReferenceComparableForeignKeyFieldImpl.class) + implType = Type.of(ComparableForeignKeyFieldImpl.class) .add(Generic.of().add(entityType)) .add(Generic.of().add(Type.of(mapping))) .add(Generic.of().add(fkType)); @@ -146,17 +143,17 @@ public static ReferenceFieldType getReferenceFieldType(File file, Table table, C final Type type, implType; if (String.class.equals(mapping)) { - type = Type.of(ReferenceComparableStringField.class) + type = Type.of(StringField.class) .add(Generic.of().add(entityType)); - implType = Type.of(ReferenceComparableStringFieldImpl.class) + implType = Type.of(StringFieldImpl.class) .add(Generic.of().add(entityType)); } else if (Comparable.class.isAssignableFrom(mapping)) { - type = Type.of(ReferenceComparableField.class) + type = Type.of(ComparableField.class) .add(Generic.of().add(entityType)) .add(Generic.of().add(Type.of(mapping))); - implType = Type.of(ReferenceComparableFieldImpl.class) + implType = Type.of(ComparableFieldImpl.class) .add(Generic.of().add(entityType)) .add(Generic.of().add(Type.of(mapping))); } else { diff --git a/src/main/java/com/speedment/internal/core/field/ReferenceComparableFieldImpl.java b/src/main/java/com/speedment/internal/core/field/ReferenceComparableFieldImpl.java deleted file mode 100644 index 6f179edfd1..0000000000 --- a/src/main/java/com/speedment/internal/core/field/ReferenceComparableFieldImpl.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field; - -import com.speedment.field.methods.Getter; -import com.speedment.field.methods.Setter; -import com.speedment.field.operators.StandardComparableOperator; -import com.speedment.field.ReferenceComparableField; -import com.speedment.internal.core.field.builders.ComparablePredicateBuilderImpl; -import java.util.Comparator; -import com.speedment.field.builders.ComparablePredicateBuilder; - -/** - * This class represents a Comparable Reference Field. A Reference Field is - * something that extends {@link Comparable}. - * - * @author pemi - * @param The entity type - * @param The value type - */ -public class ReferenceComparableFieldImpl> - extends ReferenceFieldImpl - implements ReferenceComparableField { - - public ReferenceComparableFieldImpl(String columnName, Getter getter, Setter setter) { - super(columnName, getter, setter); - } - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is equal to the given - * value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is equal to the given value - */ - @Override - public ComparablePredicateBuilder equal(V value) { - return newBinary(value, StandardComparableOperator.EQUAL); - } - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is not equal to the - * given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is not equal to the given value - */ - @Override - public ComparablePredicateBuilder notEqual(V value) { - return newBinary(value, StandardComparableOperator.NOT_EQUAL); - } - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is less than the given - * value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is less than the given value - */ - @Override - public ComparablePredicateBuilder lessThan(V value) { - return newBinary(value, StandardComparableOperator.LESS_THAN); - } - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is less than or equal - * to the given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is less than or equal to the given value - */ - @Override - public ComparablePredicateBuilder lessOrEqual(V value) { - return newBinary(value, StandardComparableOperator.LESS_OR_EQUAL); - } - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is greater than - * the given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is greater than the given value - */ - @Override - public ComparablePredicateBuilder greaterThan(V value) { - return newBinary(value, StandardComparableOperator.GREATER_THAN); - } - - /** - * Returns a {@link java.util.function.Predicate} that will evaluate to - * {@code true}, if and only if this Field is greater than or equal - * to the given value. - * - * @param value to compare - * @return a Predicate that will evaluate to {@code true}, if and only if - * this Field is greater than or equal to the given value - */ - @Override - public ComparablePredicateBuilder greaterOrEqual(V value) { - return newBinary(value, StandardComparableOperator.GREATER_OR_EQUAL); - } - - protected ComparablePredicateBuilder newBinary(V value, StandardComparableOperator binaryOperator) { - return new ComparablePredicateBuilderImpl<>(this, value, binaryOperator, Comparator.naturalOrder()); - } -} \ No newline at end of file diff --git a/src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyFieldImpl.java b/src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyFieldImpl.java deleted file mode 100644 index 1f2561deaa..0000000000 --- a/src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyFieldImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field; - -import com.speedment.field.ReferenceComparableForeignKeyField; -import com.speedment.field.methods.Getter; -import com.speedment.field.methods.Setter; -import static java.util.Objects.requireNonNull; - -/** - * This class represents a Reference Field that is a Foreign key to another - * table/column. A Reference Field is something that extends {@link Object}. - * - * @author pemi - * @param The entity type - * @param The value type - * @param The foreign entity type - */ -public class ReferenceComparableForeignKeyFieldImpl, FK> - extends ReferenceComparableFieldImpl - implements ReferenceComparableForeignKeyField { - - private final Getter finder; - - public ReferenceComparableForeignKeyFieldImpl(String columnName, Getter getter, Setter setter, Getter finder) { - super(columnName, getter, setter); - this.finder = requireNonNull(finder); - } - - @Override - public FK findFrom(ENTITY entity) { - requireNonNull(entity); - return finder.apply(entity); - } - - @Override - public Getter finder() { - return finder; - } -} diff --git a/src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyStringFieldImpl.java b/src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyStringFieldImpl.java deleted file mode 100644 index a2dd3efced..0000000000 --- a/src/main/java/com/speedment/internal/core/field/ReferenceComparableForeignKeyStringFieldImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field; - -import com.speedment.field.ReferenceComparableForeignKeyStringField; -import com.speedment.field.methods.Getter; -import com.speedment.field.methods.Setter; -import static java.util.Objects.requireNonNull; - -/** - * - * @author pemi - * @param the entity type - * @param the foreign entity type - */ -public class ReferenceComparableForeignKeyStringFieldImpl - extends ReferenceComparableStringFieldImpl - implements ReferenceComparableForeignKeyStringField { - - private final Getter finder; - - public ReferenceComparableForeignKeyStringFieldImpl(String columnName, Getter getter, Setter setter, Getter finder) { - super(columnName, getter, setter); - this.finder = requireNonNull(finder); - } - - @Override - public Getter finder() { - return finder; - } - - @Override - public FK findFrom(ENTITY entity) { - requireNonNull(entity); - return finder.apply(entity); - } -} diff --git a/src/main/java/com/speedment/internal/core/field/ReferenceComparableStringFieldImpl.java b/src/main/java/com/speedment/internal/core/field/ReferenceComparableStringFieldImpl.java deleted file mode 100644 index eebc008a17..0000000000 --- a/src/main/java/com/speedment/internal/core/field/ReferenceComparableStringFieldImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field; - -import com.speedment.field.ReferenceComparableStringField; -import com.speedment.field.methods.Getter; -import com.speedment.field.methods.Setter; -import com.speedment.field.operators.StandardStringOperator; -import com.speedment.internal.core.field.builders.StringPredicateBuilderImpl; -import com.speedment.field.builders.StringPredicateBuilder; - -/** - * - * @author pemi - * @param the entity type - */ -public class ReferenceComparableStringFieldImpl - extends ReferenceComparableFieldImpl - implements ReferenceComparableStringField { - - public ReferenceComparableStringFieldImpl(String columnName, Getter getter, Setter setter) { - super(columnName, getter, setter); - } - - @Override - public StringPredicateBuilder equalIgnoreCase(String value) { - return newBinary(value, StandardStringOperator.EQUAL_IGNORE_CASE); - } - - @Override - public StringPredicateBuilder notEqualIgnoreCase(String value) { - return newBinary(value, StandardStringOperator.NOT_EQUAL_IGNORE_CASE); - } - - @Override - public StringPredicateBuilder startsWith(String value) { - return newBinary(value, StandardStringOperator.STARTS_WITH); - } - - @Override - public StringPredicateBuilder endsWith(String value) { - return newBinary(value, StandardStringOperator.ENDS_WITH); - } - - @Override - public StringPredicateBuilder contains(String value) { - return newBinary(value, StandardStringOperator.CONTAINS); - } - - protected StringPredicateBuilder newBinary(String value, StandardStringOperator binaryOperator) { - return new StringPredicateBuilderImpl<>(this, value, binaryOperator); - } -} \ No newline at end of file diff --git a/src/main/java/com/speedment/internal/core/field/ReferenceFieldImpl.java b/src/main/java/com/speedment/internal/core/field/ReferenceFieldImpl.java deleted file mode 100644 index acdffff365..0000000000 --- a/src/main/java/com/speedment/internal/core/field/ReferenceFieldImpl.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field; - -import com.speedment.field.methods.Getter; -import com.speedment.field.methods.Setter; -import com.speedment.field.ReferenceField; -import com.speedment.field.operators.StandardUnaryOperator; -import com.speedment.field.builders.UnaryPredicateBuilder; -import com.speedment.internal.core.field.builders.SetterBuilderImpl; -import com.speedment.internal.core.field.builders.UnaryPredicateBuilderImpl; -import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNull; -import com.speedment.field.builders.SetterBuilder; -import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNull; - -/** - * This class represents a Reference Field. A Reference Field is something that - * extends {@link Object}. - * - * @author pemi - * @param The entity type - * @param The value type - */ -public class ReferenceFieldImpl implements ReferenceField { - - private final String columnName; - private final Getter getter; - private final Setter setter; - - public ReferenceFieldImpl(String columnName, Getter getter, Setter setter) { - this.columnName = requireNonNull(columnName); - this.getter = requireNonNull(getter); - this.setter = requireNonNull(setter); - } - - @Override - public String getColumnName() { - return columnName; - } - - @Override - public UnaryPredicateBuilder isNull() { - return new UnaryPredicateBuilderImpl<>(this, StandardUnaryOperator.IS_NULL); - } - - @Override - public UnaryPredicateBuilder isNotNull() { - return new UnaryPredicateBuilderImpl<>(this, StandardUnaryOperator.IS_NOT_NULL); - } - - @Override - public Setter setter() { - return setter; - } - - @Override - public Getter getter() { - return getter; - } - - @Override - public SetterBuilder set(V newValue) { - return new SetterBuilderImpl<>(this, newValue); - } - - @Override - public V get(ENTITY entity) { - requireNonNull(entity); - return getter().apply(entity); - } -} diff --git a/src/main/java/com/speedment/internal/core/field/ReferenceForeignKeyFieldImpl.java b/src/main/java/com/speedment/internal/core/field/ReferenceForeignKeyFieldImpl.java deleted file mode 100644 index 54c21a4007..0000000000 --- a/src/main/java/com/speedment/internal/core/field/ReferenceForeignKeyFieldImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field; - -import com.speedment.field.methods.Getter; -import com.speedment.field.methods.Setter; -import com.speedment.field.ReferenceForeignKeyField; -import static java.util.Objects.requireNonNull; - -/** - * This class represents a Reference Field that is a Foreign key to another - * table/column. A Reference Field is something that extends {@link Object}. - * - * @author pemi - * @param The entity type - * @param The value type - * @param The foreign entity type - */ -public class ReferenceForeignKeyFieldImpl - extends ReferenceFieldImpl - implements ReferenceForeignKeyField { - - private final Getter finder; - - public ReferenceForeignKeyFieldImpl(String columnName, Getter getter, Setter setter, Getter finder) { - super(columnName, getter, setter); - this.finder = requireNonNull(finder); - } - - @Override - public FK findFrom(ENTITY entity) { - requireNonNull(entity); - return finder.apply(entity); - } - - @Override - public Getter finder() { - return finder; - } -} diff --git a/src/main/java/com/speedment/internal/core/field/builders/AbstractBasePredicate.java b/src/main/java/com/speedment/internal/core/field/builders/AbstractBasePredicate.java deleted file mode 100644 index 60702e080b..0000000000 --- a/src/main/java/com/speedment/internal/core/field/builders/AbstractBasePredicate.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field.builders; - -import com.speedment.internal.core.field.builders.AbstractCombinedBasePredicate.AndCombinedBasePredicate; -import com.speedment.internal.core.field.builders.AbstractCombinedBasePredicate.OrCombinedBasePredicate; -import static java.util.Objects.requireNonNull; -import java.util.function.Predicate; - -/** - * This class represents a BasePredicate that is used to build up higher orders - * of predicates. - * - * @author pemi - * @param Type - */ -public abstract class AbstractBasePredicate implements Predicate { - - private boolean negated; - - public AbstractBasePredicate() { - negated = false; - } - - @Override - public Predicate and(Predicate other) { - requireNonNull(other); - return new AndCombinedBasePredicate<>(this, other); - } - - @Override - public Predicate or(Predicate other) { - requireNonNull(other); - return new OrCombinedBasePredicate<>(this, other); - } - - @Override - public AbstractBasePredicate negate() { - negated = !negated; - return this; - } -} diff --git a/src/main/java/com/speedment/internal/core/field/builders/AbstractCombinedBasePredicate.java b/src/main/java/com/speedment/internal/core/field/builders/AbstractCombinedBasePredicate.java deleted file mode 100644 index f9e89ab5c3..0000000000 --- a/src/main/java/com/speedment/internal/core/field/builders/AbstractCombinedBasePredicate.java +++ /dev/null @@ -1,174 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field.builders; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Stream; -import static java.util.Objects.requireNonNull; - -/** - * Aggregation of a number of {@link Predicate Predicates} of the same type - * (e.g. AND or OR) that can be applied in combination. - * - * @author pemi - * @param the Entity type - */ -public abstract class AbstractCombinedBasePredicate extends AbstractBasePredicate { - - /** - * This enum list all the different types of concrete implementation of the - * abstract CombinedBasePredicate - */ - public enum Type { - AND, OR - } - - private final List> predicates; - private final Type type; - - private AbstractCombinedBasePredicate(Type type, Predicate first, Predicate second) { - this.type = requireNonNull(type); - this.predicates = new ArrayList<>(); - add(requireNonNull(first)); - add(requireNonNull(second)); - } - - /** - * Adds the provided Predicate to this CombinedBasePredicate. - * - * @param the Type of CombinedBasePredicate (AndCombinedBasePredicate or - * OrCombinedBasePredicate) - * @param predicate to add - * @return a reference to a CombinedPredicate after the method has been - * applied - */ - protected final > R add(Predicate predicate) { - requireNonNull(predicate); - if (getClass().equals(predicate.getClass())) { - @SuppressWarnings("unchecked") - final AbstractCombinedBasePredicate cbp = getClass().cast(predicate); - cbp.stream().forEachOrdered(predicates::add); - } else { - predicates.add(predicate); - } - - @SuppressWarnings("unchecked") - final R self = (R) this; - return self; - } - - /** - * Removes the provided Predicate from this CombinedBasePredicate. - * - * @param predicate to remove - * @return a reference to a CombinedPredicate after the method has been - * applied - */ - protected AbstractCombinedBasePredicate remove(Predicate predicate) { - requireNonNull(predicate); - predicates.remove(predicate); - 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 - */ - public Stream> stream() { - return predicates.stream(); - } - - /** - * Returns the number of predicates that this CombinedBasePredicate holds - * - * @return the number of predicates that this CombinedBasePredicate holds - */ - public int size() { - return predicates.size(); - } - - /** - * Returns the {@link Type} of this CombinedBasePredicate - * - * @return the {@link Type} of this CombinedBasePredicate - */ - public Type getType() { - return type; - } - - @Override - public abstract AndCombinedBasePredicate and(Predicate other); - - @Override - public abstract OrCombinedBasePredicate or(Predicate other); - - public static class AndCombinedBasePredicate extends AbstractCombinedBasePredicate { - - public AndCombinedBasePredicate(Predicate first, Predicate second) { - super(Type.AND, first, second); - } - - @Override - public boolean test(ENTITY t) { - requireNonNull(t); - return stream().allMatch(p -> p.test(t)); - } - - @Override - public AndCombinedBasePredicate and(Predicate other) { - requireNonNull(other); - return add(other); - } - - @Override - public OrCombinedBasePredicate or(Predicate other) { - requireNonNull(other); - return new OrCombinedBasePredicate<>(this, other); - } - } - - public static class OrCombinedBasePredicate extends AbstractCombinedBasePredicate { - - public OrCombinedBasePredicate(Predicate first, Predicate second) { - super(Type.OR, first, second); - } - - @Override - public boolean test(ENTITY t) { - requireNonNull(t); - return stream().anyMatch(p -> p.test(t)); - } - - @Override - public AndCombinedBasePredicate and(Predicate other) { - requireNonNull(other); - return new AndCombinedBasePredicate<>(this, other); - } - - @Override - public OrCombinedBasePredicate or(Predicate other) { - requireNonNull(other); - return add(other); - } - } - -} diff --git a/src/main/java/com/speedment/internal/core/field/builders/ComparablePredicateBuilderImpl.java b/src/main/java/com/speedment/internal/core/field/builders/ComparablePredicateBuilderImpl.java deleted file mode 100644 index e9c5df1041..0000000000 --- a/src/main/java/com/speedment/internal/core/field/builders/ComparablePredicateBuilderImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field.builders; - -import com.speedment.field.ReferenceComparableField; -import java.util.Comparator; -import java.util.Objects; -import com.speedment.field.builders.ComparablePredicateBuilder; -import com.speedment.field.operators.ComparableOperator; -import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNull; - -/** - * - * @author pemi - * @param Entity type - * @param Value type - */ -public final class ComparablePredicateBuilderImpl> - extends AbstractBasePredicate - implements ComparablePredicateBuilder { - - private final ReferenceComparableField field; - private final V value; - private final ComparableOperator operator; - private final Comparator entityComparator; - - public ComparablePredicateBuilderImpl( - final ReferenceComparableField field, - final V value, - final ComparableOperator operator, - final Comparator entityComparator - ) { - this.field = requireNonNull(field); - this.value = value; - this.entityComparator = requireNonNull(entityComparator); - this.operator = requireNonNull(operator); - } - - @Override - public boolean test(final ENTITY entity) { - return test(Objects.compare(field.get(entity), getOperand(), entityComparator)); - } - - public boolean test(final int compare) { - return operator.getComparator().test(compare); - } - - @Override - public ComparableOperator getComparableOperator() { - return operator; - } - - @Override - public V getOperand() { - return value; - } - - @Override - public ReferenceComparableField getField() { - return field; - } -} \ No newline at end of file diff --git a/src/main/java/com/speedment/internal/core/field/builders/StringPredicateBuilderImpl.java b/src/main/java/com/speedment/internal/core/field/builders/StringPredicateBuilderImpl.java deleted file mode 100644 index d08a16d9c2..0000000000 --- a/src/main/java/com/speedment/internal/core/field/builders/StringPredicateBuilderImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field.builders; - -import com.speedment.field.ReferenceComparableStringField; -import java.util.Objects; -import com.speedment.field.builders.StringPredicateBuilder; -import com.speedment.field.operators.StringOperator; -import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNull; - -/** - * - * @author pemi - * @param Entity type - * - */ -public final class StringPredicateBuilderImpl - extends AbstractBasePredicate - implements StringPredicateBuilder { - - private final ReferenceComparableStringField field; - private final String value; - private final StringOperator operator; - - public StringPredicateBuilderImpl( - final ReferenceComparableStringField field, - final String value, - final StringOperator operator - ) { - this.field = requireNonNull(field); - this.value = value; - this.operator = Objects.requireNonNull(operator); - } - - @Override - public boolean test(ENTITY entity) { - requireNonNull(entity); - final String columnValue = field.get(entity); - - if (columnValue == null || value == null) { - return false; - } else { - return operator.getStringFilter().test(columnValue, value); - } - } - - @Override - public ReferenceComparableStringField getField() { - return field; - } - - @Override - public String getOperand() { - return value; - } - - @Override - public StringOperator getStringOperator() { - return operator; - } - -} diff --git a/src/main/java/com/speedment/internal/core/field/builders/UnaryPredicateBuilderImpl.java b/src/main/java/com/speedment/internal/core/field/builders/UnaryPredicateBuilderImpl.java deleted file mode 100644 index 41ef966216..0000000000 --- a/src/main/java/com/speedment/internal/core/field/builders/UnaryPredicateBuilderImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field.builders; - -import com.speedment.internal.core.field.ReferenceFieldImpl; -import com.speedment.field.builders.UnaryPredicateBuilder; -import com.speedment.field.operators.UnaryOperator; - -import static java.util.Objects.requireNonNull; - -/** - * - * @author pemi - * @param Entity type - * @param Value type - */ -public final class UnaryPredicateBuilderImpl - extends AbstractBasePredicate - implements UnaryPredicateBuilder { - - private final ReferenceFieldImpl field; - private final UnaryOperator operator; - - public UnaryPredicateBuilderImpl( - final ReferenceFieldImpl field, - final UnaryOperator operator - ) { - this.field = requireNonNull(field); - this.operator = requireNonNull(operator); - } - - @Override - public boolean test(ENTITY entity) { - requireNonNull(entity); - return operator.getUnaryFilter().test(field.get(entity)); - } - - @Override - public ReferenceFieldImpl getField() { - return field; - } - - @Override - public UnaryOperator getUnaryOperator() { - return operator; - } -} diff --git a/src/main/java/com/speedment/internal/core/field/encoder/JsonEncoder.java b/src/main/java/com/speedment/internal/core/field/encoder/JsonEncoder.java deleted file mode 100644 index 355e59abfb..0000000000 --- a/src/main/java/com/speedment/internal/core/field/encoder/JsonEncoder.java +++ /dev/null @@ -1,238 +0,0 @@ -/** - * - * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); You may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.speedment.internal.core.field.encoder; - -import com.speedment.field.Encoder; -import com.speedment.config.Column; -import com.speedment.config.Table; -import com.speedment.field.Field; -import com.speedment.Manager; -import com.speedment.field.ReferenceField; -import com.speedment.field.ReferenceForeignKeyField; -import static com.speedment.internal.util.NullUtil.requireNonNulls; -import static com.speedment.internal.util.JavaLanguage.javaVariableName; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Stream; -import static java.util.stream.Collectors.toSet; -import static java.util.Objects.requireNonNull; -import static java.util.stream.Collectors.joining; - -/** - * - * @author Emil Forslund - * @param Entity type - */ -public final class JsonEncoder implements Encoder, String> { - - protected final Map> getters; - - /** - * Constructs an empty JsonEncoder with no fields added to the output - * renderer. - */ - public JsonEncoder() { - this.getters = new LinkedHashMap<>(); - } - - // Fields - @Override - public JsonEncoder put(ReferenceField field) { - requireNonNull(field); - return put(jsonField(field), field::get); - } - - // Foreign key fields. - @Override - public JsonEncoder put(ReferenceForeignKeyField field, Encoder builder) { - requireNonNull(field); - requireNonNull(builder); - return put(jsonField(field), field::findFrom, builder); - } - - // Label-and-getter pairs - @Override - public JsonEncoder put(String label, Function getter) { - requireNonNull(label); - requireNonNull(getter); - getters.put(label, e -> "\"" + label + "\":" + jsonValue(getter.apply(e))); - return this; - } - - // Label-and-getter with custom formatter - @Override - public JsonEncoder put(String label, Function getter, Encoder builder) { - requireNonNull(label); - requireNonNull(getter); - requireNonNull(builder); - getters.put(label, e -> "\"" + label + "\":" + builder.apply(getter.apply(e))); - return this; - } - - // Label-and-streamer with custom formatter. - @Override - public JsonEncoder putStreamer(String label, Function> streamer, Encoder builder) { - requireNonNull(label); - requireNonNull(streamer); - requireNonNull(builder); - getters.put(label, e -> "\"" + label + "\":[" + streamer.apply(e).map(builder::apply).collect(joining(",")) + "]"); - return this; - } - - @Override - public JsonEncoder putStreamer(String label, Function> streamer, Function encoder) { - requireNonNull(label); - requireNonNull(streamer); - requireNonNull(encoder); - getters.put(label, e -> "\"" + label + "\":[" + streamer.apply(e).map(encoder).collect(joining(",")) + "]"); - return this; - } - - // Removers by label - @Override - public JsonEncoder remove(String label) { - requireNonNull(label); - getters.remove(label); - return this; - } - - @Override - public JsonEncoder remove(ReferenceField field) { - requireNonNull(field); - getters.remove(jsonField(field)); - return this; - } - - @Override - public String apply(ENTITY entity) { - requireNonNull(entity); - return "{" - + getters.values().stream() - .map(g -> g.apply(entity)) - .collect(joining(",")) - + "}"; - } - - protected static String jsonField(Field field) { - requireNonNull(field); - return javaVariableName(field.getColumnName()); - } - - protected static String jsonValue(Object in) { - // in is nullable, a field can certainly be null - final String value; - - if (in instanceof Optional) { - final Optional o = (Optional) in; - return o.map(JsonEncoder::jsonValue).orElse("null"); - } else if (in == null) { - value = "null"; - } else if (in instanceof Byte - || in instanceof Short - || in instanceof Integer - || in instanceof Long - || in instanceof Boolean - || in instanceof Float - || in instanceof Double) { - value = String.valueOf(in); - } else { - value = "\"" + String.valueOf(in).replace("\"", "\\\"") + "\""; - } - - return value; - } - - /** - * Creates and return a new JsonEncoder with no fields added to the - * renderer. - * - * @param the Entity type - * @param manager of the entity - * @return a new JsonEncoder with no fields added to the renderer - */ - public static JsonEncoder noneOf(Manager manager) { - requireNonNull(manager); - return new JsonEncoder<>(); - } - - /** - * Creates and return a new JsonEncoder with all the Entity fields added - * to the renderer. The field(s) will be rendered using their default class - * renderer. - * - * @param the Entity type - * @param manager of the entity - * @return a new JsonEncoder with all the Entity fields added to the - * renderer - */ - public static JsonEncoder allOf(Manager manager) { - requireNonNull(manager); - - final JsonEncoder formatter = noneOf(manager); - - final Table table = manager.getTable(); - - table - .streamOf(Column.class) - .forEachOrdered(c - -> formatter.put( - javaVariableName(c.getName()), - entity -> manager.get(entity, c) - ) - ); - - return formatter; - } - - /** - * Creates and return a new JsonEncoder with the provided Entity field(s) - * added to the renderer. The field(s) will be rendered using their default - * class renderer. - * - * @param the Entity type - * @param manager of the ENTITY - * @param fields to add to the output renderer - * @return a new JsonEncoder with the specified fields added to the - * renderer - */ - @SafeVarargs - @SuppressWarnings("varargs") // Using the array in a Stream.of() is safe - public static JsonEncoder of(Manager manager, Field... fields) { - requireNonNull(manager); - requireNonNulls(fields); - final JsonEncoder formatter = noneOf(manager); - - final Set fieldNames = Stream.of(fields).map(Field::getColumnName).collect(toSet()); - final Table table = manager.getTable(); - - table - .streamOf(Column.class) - .filter(c -> fieldNames.contains(c.getName())) - .forEachOrdered(c - -> formatter.put( - javaVariableName(c.getName()), - entity -> manager.get(entity, c) - ) - ); - - return formatter; - } - -} diff --git a/src/main/java/com/speedment/internal/core/field2/ComparableFieldImpl.java b/src/main/java/com/speedment/internal/core/field2/ComparableFieldImpl.java new file mode 100644 index 0000000000..80659acff5 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/ComparableFieldImpl.java @@ -0,0 +1,156 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2; + +import com.speedment.field2.Inclusion; +import com.speedment.internal.core.field2.trait.ComparableFieldTraitImpl; +import com.speedment.internal.core.field2.trait.FieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceFieldTraitImpl; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import java.util.Set; +import java.util.function.Predicate; +import com.speedment.field2.ComparableField; +import com.speedment.field2.methods.FieldSetter; +import java.util.Comparator; +import static java.util.Objects.requireNonNull; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; + +/** + * This class represents a Comparable Reference Field. A Reference Field is + * something that extends {@link Comparable}. + * + * @author pemi + * @param The entity type + * @param The value type + */ +public class ComparableFieldImpl> implements ComparableField { + + private final FieldTrait field; + private final ReferenceFieldTrait referenceField; + private final ComparableFieldTrait comparableField; + + public ComparableFieldImpl( + String columnName, + Getter getter, + Setter setter + ) { + field = new FieldTraitImpl(requireNonNull(columnName)); + referenceField = new ReferenceFieldTraitImpl<>(field, requireNonNull(getter), requireNonNull(setter)); + comparableField = new ComparableFieldTraitImpl<>(field, requireNonNull(getter)); + } + + @Override + public String getColumnName() { + return field.getColumnName(); + } + + @Override + public Setter setter() { + return referenceField.setter(); + } + + @Override + public Getter getter() { + return referenceField.getter(); + } + + @Override + public FieldSetter setTo(V value) { + return referenceField.setTo(value); + } + + @Override + public Predicate isNull() { + return referenceField.isNull(); + } + + @Override + public Predicate isNotNull() { + return referenceField.isNotNull(); + } + + @Override + public Comparator comparator() { + return comparableField.comparator(); + } + + @Override + public Comparator comparatorNullFieldsFirst() { + return comparableField.comparatorNullFieldsFirst(); + } + + @Override + public Comparator comparatorNullFieldsLast() { + return comparableField.comparatorNullFieldsLast(); + } + + @Override + public Predicate equal(V value) { + return comparableField.equal(value); + } + + @Override + public Predicate notEqual(V value) { + return comparableField.notEqual(value); + } + + @Override + public Predicate lessThan(V value) { + return comparableField.lessThan(value); + } + + @Override + public Predicate lessOrEqual(V value) { + return comparableField.lessOrEqual(value); + } + + @Override + public Predicate greaterThan(V value) { + return comparableField.greaterThan(value); + } + + @Override + public Predicate greaterOrEqual(V value) { + return comparableField.greaterOrEqual(value); + } + + @Override + public Predicate between(V start, V end) { + return comparableField.between(start, end); + } + + @Override + public Predicate between(V start, V end, Inclusion inclusion) { + return comparableField.between(start, end, inclusion); + } + + @SafeVarargs + @SuppressWarnings("varargs") // delegator is safe + @Override + public final Predicate in(V... values) { + return comparableField.in(values); + } + + @Override + public Predicate in(Set values) { + return comparableField.in(values); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/ComparableForeignKeyFieldImpl.java b/src/main/java/com/speedment/internal/core/field2/ComparableForeignKeyFieldImpl.java new file mode 100644 index 0000000000..cd5d731cce --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/ComparableForeignKeyFieldImpl.java @@ -0,0 +1,167 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2; + +import com.speedment.field2.ComparableForeignKeyField; +import com.speedment.field2.Inclusion; +import com.speedment.field2.methods.FieldSetter; +import com.speedment.internal.core.field2.trait.ComparableFieldTraitImpl; +import com.speedment.internal.core.field2.trait.FieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceFieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceForeignKeyFieldTraitImpl; +import com.speedment.field2.methods.Finder; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import java.util.Comparator; +import static java.util.Objects.requireNonNull; +import java.util.Set; +import java.util.function.Predicate; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.ReferenceForeignKeyFieldTrait; + +/** + * This class represents a Reference Field. A Reference Field is something that + * extends {@link Object}. + * + * @author pemi + * @param The entity type + * @param The value type + */ +public class ComparableForeignKeyFieldImpl, FK> implements ComparableForeignKeyField { + + private final FieldTrait field; + private final ReferenceFieldTrait referenceField; + private final ComparableFieldTrait comparableField; + private final ReferenceForeignKeyFieldTrait referenceForeignKeyField; + + public ComparableForeignKeyFieldImpl( + String columnName, + Getter getter, + Setter setter, + Finder finder + ) { + field = new FieldTraitImpl(requireNonNull(columnName)); + referenceField = new ReferenceFieldTraitImpl<>(field, requireNonNull(getter), requireNonNull(setter)); + comparableField = new ComparableFieldTraitImpl<>(field, requireNonNull(getter)); + referenceForeignKeyField = new ReferenceForeignKeyFieldTraitImpl<>(requireNonNull(finder)); + } + + @Override + public String getColumnName() { + return field.getColumnName(); + } + + @Override + public Setter setter() { + return referenceField.setter(); + } + + @Override + public Getter getter() { + return referenceField.getter(); + } + + @Override + public FieldSetter setTo(V value) { + return referenceField.setTo(value); + } + + @Override + public Predicate isNull() { + return referenceField.isNull(); + } + + @Override + public Predicate isNotNull() { + return referenceField.isNotNull(); + } + + @Override + public Comparator comparator() { + return comparableField.comparator(); + } + + @Override + public Comparator comparatorNullFieldsFirst() { + return comparableField.comparatorNullFieldsFirst(); + } + + @Override + public Comparator comparatorNullFieldsLast() { + return comparableField.comparatorNullFieldsLast(); + } + + @Override + public Predicate equal(V value) { + return comparableField.equal(value); + } + + @Override + public Predicate notEqual(V value) { + return comparableField.notEqual(value); + } + + @Override + public Predicate lessThan(V value) { + return comparableField.lessThan(value); + } + + @Override + public Predicate lessOrEqual(V value) { + return comparableField.lessOrEqual(value); + } + + @Override + public Predicate greaterThan(V value) { + return comparableField.greaterThan(value); + } + + @Override + public Predicate greaterOrEqual(V value) { + return comparableField.greaterOrEqual(value); + } + + @Override + public Predicate between(V start, V end) { + return comparableField.between(start, end); + } + + @Override + public Predicate between(V start, V end, Inclusion inclusion) { + return comparableField.between(start, end, inclusion); + } + + @SafeVarargs + @SuppressWarnings("varargs") // delegator is safe + @Override + public final Predicate in(V... values) { + return comparableField.in(values); + } + + @Override + public Predicate in(Set values) { + return comparableField.in(values); + } + + @Override + public Finder finder() { + return referenceForeignKeyField.finder(); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field/builders/SetterBuilderImpl.java b/src/main/java/com/speedment/internal/core/field2/FieldSetterImpl.java similarity index 62% rename from src/main/java/com/speedment/internal/core/field/builders/SetterBuilderImpl.java rename to src/main/java/com/speedment/internal/core/field2/FieldSetterImpl.java index ab5a51bdf8..d545cbe24c 100644 --- a/src/main/java/com/speedment/internal/core/field/builders/SetterBuilderImpl.java +++ b/src/main/java/com/speedment/internal/core/field2/FieldSetterImpl.java @@ -14,30 +14,33 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.internal.core.field.builders; +package com.speedment.internal.core.field2; -import com.speedment.field.Field; -import com.speedment.field.ReferenceField; -import com.speedment.field.builders.SetterBuilder; +import com.speedment.field2.methods.FieldSetter; +import com.speedment.field2.methods.Setter; +import com.speedment.field2.trait.FieldTrait; import static java.util.Objects.requireNonNull; /** - * @author Emil Forslund - * @param the entity - * @param the value type + * + * @author pemi + * @param entity type + * @param value type */ -public final class SetterBuilderImpl implements SetterBuilder { +public final class FieldSetterImpl implements FieldSetter { - private final ReferenceField field; + private final FieldTrait field; + private final Setter setter; private final V newValue; - public SetterBuilderImpl(ReferenceField field, V newValue) { + public FieldSetterImpl(FieldTrait field, Setter setter, V newValue) { this.field = requireNonNull(field); + this.setter = setter; this.newValue = requireNonNull(newValue); } @Override - public Field getField() { + public FieldTrait getField() { return field; } @@ -49,6 +52,7 @@ public V getValue() { @Override public ENTITY apply(ENTITY entity) { requireNonNull(entity); - return field.setter().apply(entity, newValue); + return setter.apply(entity, newValue); } + } diff --git a/src/main/java/com/speedment/internal/core/field2/ReferenceFieldImpl.java b/src/main/java/com/speedment/internal/core/field2/ReferenceFieldImpl.java new file mode 100644 index 0000000000..467216d67c --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/ReferenceFieldImpl.java @@ -0,0 +1,82 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2; + +import com.speedment.field2.ReferenceField; +import com.speedment.field2.methods.FieldSetter; +import com.speedment.internal.core.field2.trait.FieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceFieldTraitImpl; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import java.util.function.Predicate; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import static java.util.Objects.requireNonNull; + +/** + * This class represents a Reference Field. A Reference Field is something that + * extends {@link Object}. + * + * @author pemi + * @param The entity type + * @param The value type + */ +public class ReferenceFieldImpl implements ReferenceField { + + private final FieldTrait field; + private final ReferenceFieldTrait referenceField; + + public ReferenceFieldImpl( + String columnName, + Getter getter, + Setter setter + ) { + field = new FieldTraitImpl(requireNonNull(columnName)); + referenceField = new ReferenceFieldTraitImpl<>(field, requireNonNull(getter), requireNonNull(setter)); + } + + @Override + public String getColumnName() { + return field.getColumnName(); + } + + @Override + public Setter setter() { + return referenceField.setter(); + } + + @Override + public Getter getter() { + return referenceField.getter(); + } + + @Override + public FieldSetter setTo(V value) { + return referenceField.setTo(value); + } + + @Override + public Predicate isNull() { + return referenceField.isNull(); + } + + @Override + public Predicate isNotNull() { + return referenceField.isNotNull(); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/ReferenceForeignKeyFieldImpl.java b/src/main/java/com/speedment/internal/core/field2/ReferenceForeignKeyFieldImpl.java new file mode 100644 index 0000000000..29b72f6c6e --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/ReferenceForeignKeyFieldImpl.java @@ -0,0 +1,93 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2; + +import com.speedment.field2.ReferenceForeignKeyField; +import com.speedment.field2.methods.FieldSetter; +import com.speedment.internal.core.field2.trait.FieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceFieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceForeignKeyFieldTraitImpl; +import com.speedment.field2.methods.Finder; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import java.util.function.Predicate; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.ReferenceForeignKeyFieldTrait; +import static java.util.Objects.requireNonNull; + +/** + * This class represents a Reference Field. A Reference Field is something that + * extends {@link Object}. + * + * @author pemi + * @param The entity type + * @param The value type + */ +public class ReferenceForeignKeyFieldImpl implements ReferenceForeignKeyField { + + private final FieldTrait field; + private final ReferenceFieldTrait referenceField; + private final ReferenceForeignKeyFieldTrait referenceForeignKeyField; + + public ReferenceForeignKeyFieldImpl( + String columnName, + Getter getter, + Setter setter, + Finder finder + ) { + field = new FieldTraitImpl(requireNonNull(columnName)); + referenceField = new ReferenceFieldTraitImpl<>(field, requireNonNull(getter), requireNonNull(setter)); + referenceForeignKeyField = new ReferenceForeignKeyFieldTraitImpl<>(requireNonNull(finder)); + } + + @Override + public String getColumnName() { + return field.getColumnName(); + } + + @Override + public Setter setter() { + return referenceField.setter(); + } + + @Override + public Getter getter() { + return referenceField.getter(); + } + + @Override + public FieldSetter setTo(V value) { + return referenceField.setTo(value); + } + + @Override + public Predicate isNull() { + return referenceField.isNull(); + } + + @Override + public Predicate isNotNull() { + return referenceField.isNotNull(); + } + + @Override + public Finder finder() { + return referenceForeignKeyField.finder(); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/StringFieldImpl.java b/src/main/java/com/speedment/internal/core/field2/StringFieldImpl.java new file mode 100644 index 0000000000..854aee7ea7 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/StringFieldImpl.java @@ -0,0 +1,192 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2; + +import com.speedment.field2.Inclusion; +import com.speedment.internal.core.field2.trait.ComparableFieldTraitImpl; +import com.speedment.internal.core.field2.trait.FieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceFieldTraitImpl; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import java.util.Set; +import java.util.function.Predicate; +import com.speedment.field2.StringField; +import com.speedment.field2.methods.FieldSetter; +import com.speedment.internal.core.field2.trait.StringFieldTraitImpl; +import java.util.Comparator; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.StringFieldTrait; +import static java.util.Objects.requireNonNull; + +/** + * This class represents a Comparable Reference Field. A Reference Field is + * something that extends {@link Comparable}. + * + * @author pemi + * @param The entity type + */ +public class StringFieldImpl implements StringField { + + private final FieldTrait field; + private final ReferenceFieldTrait referenceField; + private final ComparableFieldTrait comparableField; + private final StringFieldTrait stringField; + + public StringFieldImpl( + String columnName, + Getter getter, + Setter setter + ) { + field = new FieldTraitImpl(requireNonNull(columnName)); + referenceField = new ReferenceFieldTraitImpl<>(field, requireNonNull(getter), requireNonNull(setter)); + comparableField = new ComparableFieldTraitImpl<>(field, requireNonNull(getter)); + stringField = new StringFieldTraitImpl<>(requireNonNull(getter)); + } + + @Override + public String getColumnName() { + return field.getColumnName(); + } + + @Override + public Setter setter() { + return referenceField.setter(); + } + + @Override + public Getter getter() { + return referenceField.getter(); + } + + @Override + public FieldSetter setTo(String value) { + return referenceField.setTo(value); + } + + @Override + public Comparator comparator() { + return comparableField.comparator(); + } + + @Override + public Comparator comparatorNullFieldsFirst() { + return comparableField.comparatorNullFieldsFirst(); + } + + @Override + public Comparator comparatorNullFieldsLast() { + return comparableField.comparatorNullFieldsLast(); + } + + @Override + public Predicate isNull() { + return referenceField.isNull(); + } + + @Override + public Predicate isNotNull() { + return referenceField.isNotNull(); + } + + @Override + public Predicate equal(String value) { + return comparableField.equal(value); + } + + @Override + public Predicate notEqual(String value) { + return comparableField.notEqual(value); + } + + @Override + public Predicate lessThan(String value) { + return comparableField.lessThan(value); + } + + @Override + public Predicate lessOrEqual(String value) { + return comparableField.lessOrEqual(value); + } + + @Override + public Predicate greaterThan(String value) { + return comparableField.greaterThan(value); + } + + @Override + public Predicate greaterOrEqual(String value) { + return comparableField.greaterOrEqual(value); + } + + @Override + public Predicate between(String start, String end) { + return comparableField.between(start, end); + } + + @Override + public Predicate between(String start, String end, Inclusion inclusion) { + return comparableField.between(start, end, inclusion); + } + + @Override + public Predicate in(String... values) { + return comparableField.in(values); + } + + @Override + public Predicate in(Set values) { + return comparableField.in(values); + } + + @Override + public Predicate equalIgnoreCase(String value) { + return stringField.equalIgnoreCase(value); + } + + @Override + public Predicate notEqualIgnoreCase(String value) { + return stringField.notEqualIgnoreCase(value); + } + + @Override + public Predicate startsWith(String value) { + return stringField.startsWith(value); + } + + @Override + public Predicate endsWith(String value) { + return stringField.endsWith(value); + } + + @Override + public Predicate contains(String value) { + return stringField.contains(value); + } + + @Override + public Predicate isEmpty() { + return stringField.isEmpty(); + } + + @Override + public Predicate isNotEmpty() { + return stringField.isNotEmpty(); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/StringForeignKeyFieldImpl.java b/src/main/java/com/speedment/internal/core/field2/StringForeignKeyFieldImpl.java new file mode 100644 index 0000000000..4da233a0d3 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/StringForeignKeyFieldImpl.java @@ -0,0 +1,205 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2; + +import com.speedment.field2.Inclusion; +import com.speedment.field2.StringForeignKeyField; +import com.speedment.field2.methods.FieldSetter; +import com.speedment.internal.core.field2.trait.ComparableFieldTraitImpl; +import com.speedment.internal.core.field2.trait.FieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceFieldTraitImpl; +import com.speedment.internal.core.field2.trait.ReferenceForeignKeyFieldTraitImpl; +import com.speedment.internal.core.field2.trait.StringFieldTraitImpl; +import com.speedment.field2.methods.Finder; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.field2.trait.ReferenceForeignKeyFieldTrait; +import com.speedment.field2.trait.StringFieldTrait; +import java.util.Comparator; +import static java.util.Objects.requireNonNull; +import java.util.Set; +import java.util.function.Predicate; + +/** + * This class represents a Reference Field. A Reference Field is something that + * extends {@link Object}. + * + * @author pemi + * @param The entity type + * @param Foreign Key type + */ +public class StringForeignKeyFieldImpl implements StringForeignKeyField { + + private final FieldTrait field; + private final ReferenceFieldTrait referenceField; + private final ComparableFieldTrait comparableField; + private final StringFieldTrait stringField; + private final ReferenceForeignKeyFieldTrait referenceForeignKeyField; + + public StringForeignKeyFieldImpl( + String columnName, + Getter getter, + Setter setter, + Finder finder + ) { + + field = new FieldTraitImpl(requireNonNull(columnName)); + referenceField = new ReferenceFieldTraitImpl<>(field, requireNonNull(getter), requireNonNull(setter)); + comparableField = new ComparableFieldTraitImpl<>(field, requireNonNull(getter)); + stringField = new StringFieldTraitImpl<>(requireNonNull(getter)); + referenceForeignKeyField = new ReferenceForeignKeyFieldTraitImpl<>(requireNonNull(finder)); + } + + @Override + public String getColumnName() { + return field.getColumnName(); + } + + @Override + public Setter setter() { + return referenceField.setter(); + } + + @Override + public Getter getter() { + return referenceField.getter(); + } + + @Override + public FieldSetter setTo(String value) { + return referenceField.setTo(value); + } + + @Override + public Predicate isNull() { + return referenceField.isNull(); + } + + @Override + public Predicate isNotNull() { + return referenceField.isNotNull(); + } + + @Override + public Comparator comparator() { + return comparableField.comparator(); + } + + @Override + public Comparator comparatorNullFieldsFirst() { + return comparableField.comparatorNullFieldsFirst(); + } + + @Override + public Comparator comparatorNullFieldsLast() { + return comparableField.comparatorNullFieldsLast(); + } + + @Override + public Predicate equal(String value) { + return comparableField.equal(value); + } + + @Override + public Predicate notEqual(String value) { + return comparableField.notEqual(value); + } + + @Override + public Predicate lessThan(String value) { + return comparableField.lessThan(value); + } + + @Override + public Predicate lessOrEqual(String value) { + return comparableField.lessOrEqual(value); + } + + @Override + public Predicate greaterThan(String value) { + return comparableField.greaterThan(value); + } + + @Override + public Predicate greaterOrEqual(String value) { + return comparableField.greaterOrEqual(value); + } + + @Override + public Predicate between(String start, String end) { + return comparableField.between(start, end); + } + + @Override + public Predicate between(String start, String end, Inclusion inclusion) { + return comparableField.between(start, end, inclusion); + } + + @Override + public Predicate in(String... values) { + return comparableField.in(values); + } + + @Override + public Predicate in(Set values) { + return comparableField.in(values); + } + + @Override + public Predicate equalIgnoreCase(String value) { + return stringField.equalIgnoreCase(value); + } + + @Override + public Predicate notEqualIgnoreCase(String value) { + return stringField.notEqualIgnoreCase(value); + } + + @Override + public Predicate startsWith(String value) { + return stringField.startsWith(value); + } + + @Override + public Predicate endsWith(String value) { + return stringField.endsWith(value); + } + + @Override + public Predicate contains(String value) { + return stringField.contains(value); + } + + @Override + public Predicate isEmpty() { + return stringField.isEmpty(); + } + + @Override + public Predicate isNotEmpty() { + return stringField.isNotEmpty(); + } + + @Override + public Finder finder() { + return referenceForeignKeyField.finder(); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/PredicateType.java b/src/main/java/com/speedment/internal/core/field2/predicate/PredicateType.java new file mode 100644 index 0000000000..c5fb70eb69 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/PredicateType.java @@ -0,0 +1,51 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate; + +/** + * + * @author pemi + */ +public enum PredicateType { + + // Constants + ALWAYS_TRUE, + ALWAYS_FALSE, + // Reference + IS_NULL, + IS_NOT_NULL, + // Comparable + EQUAL, + NOT_EQUAL, + GREATER_THAN, + GREATER_OR_EQUAL, + LESS_THAN, + LESS_OR_EQUAL, + BETWEEN, + IN, + // String + EQUAL_IGNORE_CASE, + NOT_EQUAL_IGNORE_CASE, + STARTS_WITH, + ENDS_WITH, + CONTAINS, + IS_EMPTY, + IS_NOT_EMPTY; + +; + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/iface/HasGetter.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/HasGetter.java new file mode 100644 index 0000000000..b337cfc4d5 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/HasGetter.java @@ -0,0 +1,30 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.iface; + +import com.speedment.field2.methods.Getter; + +/** + * + * @author pemi + * @param entity type + * @param value type + */ +public interface HasGetter { + + Getter getter(); +} diff --git a/src/main/java/com/speedment/field/operators/StringOperator.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/HasPredicateType.java similarity index 74% rename from src/main/java/com/speedment/field/operators/StringOperator.java rename to src/main/java/com/speedment/internal/core/field2/predicate/iface/HasPredicateType.java index 8bd90fb386..1c12cc401f 100644 --- a/src/main/java/com/speedment/field/operators/StringOperator.java +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/HasPredicateType.java @@ -14,16 +14,16 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.operators; +package com.speedment.internal.core.field2.predicate.iface; -import com.speedment.annotation.Api; -import java.util.function.BiPredicate; +import com.speedment.internal.core.field2.predicate.PredicateType; /** * * @author pemi */ -@Api(version = "2.1") -public interface StringOperator { - BiPredicate getStringFilter(); -} \ No newline at end of file +public interface HasPredicateType { + + PredicateType getPredicateType(); + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/iface/SpeedmentPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/SpeedmentPredicate.java new file mode 100644 index 0000000000..40ce24922f --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/SpeedmentPredicate.java @@ -0,0 +1,29 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.iface; + +import java.util.function.Predicate; + +/** + * + * @author pemi + * @param Entity type + * @param Value type + */ +public interface SpeedmentPredicate extends HasGetter, HasPredicateType, Predicate { + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinaryOperation.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinaryOperation.java new file mode 100644 index 0000000000..315596ace4 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinaryOperation.java @@ -0,0 +1,27 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.iface.type; + +/** + * + * @author pemi + */ +public interface BinaryOperation { + + T0 getOperand0(); + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinarySetOperation.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinarySetOperation.java new file mode 100644 index 0000000000..7ce2837cde --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/BinarySetOperation.java @@ -0,0 +1,29 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.iface.type; + +import java.util.Set; + +/** + * + * @author pemi + */ +public interface BinarySetOperation { + + Set getOperand0(); + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryInclusionOperation.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryInclusionOperation.java new file mode 100644 index 0000000000..10abba8811 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryInclusionOperation.java @@ -0,0 +1,27 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.iface.type; + +import com.speedment.field2.Inclusion; + +/** + * + * @author pemi + */ +public interface QuaternaryInclusionOperation extends QuaternaryOperation { + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryOperation.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryOperation.java new file mode 100644 index 0000000000..1466805eb1 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/QuaternaryOperation.java @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.iface.type; + +/** + * + * @author pemi + */ +public interface QuaternaryOperation { + + T0 getOperand0(); + + T1 getOperand1(); + + T2 getOperand2(); + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/TernaryOperation.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/TernaryOperation.java new file mode 100644 index 0000000000..0c9d83a3d2 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/TernaryOperation.java @@ -0,0 +1,29 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.iface.type; + +/** + * + * @author pemi + */ +public interface TernaryOperation { + + T0 getOperand0(); + + T1 getOperand1(); + +} diff --git a/src/main/java/com/speedment/field/builders/PredicateBuilder.java b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/UnaryOperation.java similarity index 73% rename from src/main/java/com/speedment/field/builders/PredicateBuilder.java rename to src/main/java/com/speedment/internal/core/field2/predicate/iface/type/UnaryOperation.java index 6277200c3c..01c89bc4be 100644 --- a/src/main/java/com/speedment/field/builders/PredicateBuilder.java +++ b/src/main/java/com/speedment/internal/core/field2/predicate/iface/type/UnaryOperation.java @@ -14,18 +14,12 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.builders; - -import com.speedment.annotation.Api; -import com.speedment.field.Field; +package com.speedment.internal.core.field2.predicate.iface.type; /** * * @author pemi - * @param the entity type */ -@Api(version = "2.1") -public interface PredicateBuilder { +public interface UnaryOperation { - Field getField(); -} \ No newline at end of file +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysFalsePredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysFalsePredicate.java new file mode 100644 index 0000000000..3dea90f216 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysFalsePredicate.java @@ -0,0 +1,41 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl; + +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.field2.methods.Getter; +import static com.speedment.internal.core.field2.predicate.PredicateType.ALWAYS_TRUE; +import com.speedment.internal.core.field2.predicate.iface.type.UnaryOperation; + +/** + * + * @author pemi + * @param entity type + * @param value type + */ +public class AlwaysFalsePredicate extends SpeedmentPredicateImpl implements SpeedmentPredicate, UnaryOperation { + + public AlwaysFalsePredicate(Getter getter) { + super(ALWAYS_TRUE, getter); + } + + @Override + public boolean testField(V fieldValue) { + return false; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysTruePredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysTruePredicate.java new file mode 100644 index 0000000000..349d788428 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/AlwaysTruePredicate.java @@ -0,0 +1,41 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl; + +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.field2.methods.Getter; +import static com.speedment.internal.core.field2.predicate.PredicateType.ALWAYS_TRUE; +import com.speedment.internal.core.field2.predicate.iface.type.UnaryOperation; + +/** + * + * @author pemi + * @param entity type + * @param value type + */ +public class AlwaysTruePredicate extends SpeedmentPredicateImpl implements SpeedmentPredicate, UnaryOperation { + + public AlwaysTruePredicate(Getter getter) { + super(ALWAYS_TRUE, getter); + } + + @Override + public boolean testField(V fieldValue) { + return true; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/SpeedmentPredicateImpl.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/SpeedmentPredicateImpl.java new file mode 100644 index 0000000000..ed1f0728f8 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/SpeedmentPredicateImpl.java @@ -0,0 +1,57 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl; + +import com.speedment.internal.core.field2.predicate.PredicateType; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.field2.methods.Getter; + +/** + * + * @author pemi + * @param entity type + * @param value type + */ +public abstract class SpeedmentPredicateImpl implements SpeedmentPredicate { + + private final PredicateType predicateType; + private final Getter getter; +// private final Predicate fieldPredicate; + + public SpeedmentPredicateImpl(PredicateType predicateType, Getter getter/*, Predicate fieldPredicate*/) { + this.predicateType = predicateType; + this.getter = getter; +// this.fieldPredicate = fieldPredicate; + } + + @Override + public PredicateType getPredicateType() { + return predicateType; + } + + @Override + public Getter getter() { + return getter; + } + + public abstract boolean testField(V fieldValue); + + @Override + public boolean test(ENTITY t) { + return testField(getter.apply(t)); + } +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BaseComparablePredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BaseComparablePredicate.java new file mode 100644 index 0000000000..d3bd81c3d4 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BaseComparablePredicate.java @@ -0,0 +1,64 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import com.speedment.internal.core.field2.predicate.PredicateType; +import static com.speedment.internal.core.field2.predicate.PredicateType.EQUAL; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class BaseComparablePredicate extends SpeedmentPredicateImpl implements SpeedmentPredicate, BinaryOperation { + + private final V operand0; + private final BiPredicate innerPredicate; + + public BaseComparablePredicate( + PredicateType predicateType, + Getter getter, + V operand0, + BiPredicate innerPredicate + ) { + super(EQUAL, getter); + this.operand0 = operand0; + this.innerPredicate = innerPredicate; + } + + @Override + public V getOperand0() { + return operand0; + } + + @Override + public boolean testField(V fieldValue) { + return innerPredicate.test(operand0, fieldValue); + } + + @FunctionalInterface + protected interface BiPredicate { + + boolean test(T s0, T s1); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BetweenPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BetweenPredicate.java new file mode 100644 index 0000000000..ce0324dc08 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/BetweenPredicate.java @@ -0,0 +1,81 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import com.speedment.field2.Inclusion; +import static com.speedment.internal.core.field2.predicate.PredicateType.BETWEEN; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.QuaternaryInclusionOperation; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class BetweenPredicate> + extends SpeedmentPredicateImpl + implements SpeedmentPredicate, QuaternaryInclusionOperation { + + private final V operand0; + private final V operand1; + private final Inclusion operand2; + + public BetweenPredicate(Getter getter, V start, V end, Inclusion inclusion) { + super(BETWEEN, getter); + this.operand0 = start; + this.operand1 = end; + this.operand2 = inclusion; + } + + @Override + public V getOperand0() { + return operand0; + } + + @Override + public V getOperand1() { + return operand1; + } + + @Override + public Inclusion getOperand2() { + return operand2; + } + + @Override + public boolean testField(V fieldValue) { + switch (operand2) { + case START_EXCLUSIVE_END_EXCLUSIVE: { + return (operand0.compareTo(fieldValue) < 0 && operand1.compareTo(fieldValue) > 0); + } + case START_EXCLUSIVE_END_INCLUSIVE: { + return (operand0.compareTo(fieldValue) < 0 && operand1.compareTo(fieldValue) >= 0); + } + case START_INCLUSIVE_END_EXCLUSIVE: { + return (operand0.compareTo(fieldValue) <= 0 && operand1.compareTo(fieldValue) > 0); + } + case START_INCLUSIVE_END_INCLUSIVE: { + return (operand0.compareTo(fieldValue) <= 0 && operand1.compareTo(fieldValue) >= 0); + } + } + throw new IllegalStateException("Inclusion unknown: " + operand2); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/EqualPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/EqualPredicate.java new file mode 100644 index 0000000000..1c2d2a3c82 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/EqualPredicate.java @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import static com.speedment.internal.core.field2.predicate.PredicateType.EQUAL; +import com.speedment.field2.methods.Getter; +import java.util.Objects; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class EqualPredicate extends BaseComparablePredicate implements SpeedmentPredicate, BinaryOperation { + + public EqualPredicate(Getter getter, V operand0) { + super(EQUAL, getter, operand0, (a, b) -> Objects.equals(a, b)); + } +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterOrEqualPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterOrEqualPredicate.java new file mode 100644 index 0000000000..b487497c64 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterOrEqualPredicate.java @@ -0,0 +1,48 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import static com.speedment.internal.core.field2.predicate.PredicateType.GREATER_OR_EQUAL; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class GreaterOrEqualPredicate> + extends BaseComparablePredicate + implements SpeedmentPredicate, BinaryOperation { + + public GreaterOrEqualPredicate(Getter getter, V operand0) { + super(GREATER_OR_EQUAL, getter, operand0, GreaterOrEqualPredicate::test); + } + + private static > boolean test(V a, V b) { + if (a == null && b == null) { + return true; + } + if (a == null || b == null) { + return false; + } + return a.compareTo(b) <= 0; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterThanPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterThanPredicate.java new file mode 100644 index 0000000000..6b237eb64b --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/GreaterThanPredicate.java @@ -0,0 +1,48 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import static com.speedment.internal.core.field2.predicate.PredicateType.GREATER_THAN; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class GreaterThanPredicate> + extends BaseComparablePredicate + implements SpeedmentPredicate, BinaryOperation { + + public GreaterThanPredicate(Getter getter, V operand0) { + super(GREATER_THAN, getter, operand0, GreaterThanPredicate::test); + } + + private static > boolean test(V a, V b) { + if (a == null && b == null) { + return true; + } + if (a == null || b == null) { + return false; + } + return a.compareTo(b) < 0; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/InPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/InPredicate.java new file mode 100644 index 0000000000..d3a096db93 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/InPredicate.java @@ -0,0 +1,53 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import static com.speedment.internal.core.field2.predicate.PredicateType.IN; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; +import java.util.Set; +import com.speedment.internal.core.field2.predicate.iface.type.BinarySetOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class InPredicate> + extends SpeedmentPredicateImpl + implements SpeedmentPredicate, BinarySetOperation { + + private final Set operand0; + + public InPredicate(Getter getter, Set values) { + super(IN, getter); + this.operand0 = values; + } + + @Override + public Set getOperand0() { + return operand0; + } + + @Override + public boolean testField(V fieldValue) { + return operand0.contains(fieldValue); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessOrEqualPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessOrEqualPredicate.java new file mode 100644 index 0000000000..3ecd03b9af --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessOrEqualPredicate.java @@ -0,0 +1,48 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import static com.speedment.internal.core.field2.predicate.PredicateType.LESS_OR_EQUAL; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class LessOrEqualPredicate> + extends BaseComparablePredicate + implements SpeedmentPredicate, BinaryOperation { + + public LessOrEqualPredicate(Getter getter, V operand0) { + super(LESS_OR_EQUAL, getter, operand0, LessOrEqualPredicate::test); + } + + private static > boolean test(V a, V b) { + if (a == null && b == null) { + return true; + } + if (a == null || b == null) { + return false; + } + return a.compareTo(b) >= 0; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessThanPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessThanPredicate.java new file mode 100644 index 0000000000..0b57af8315 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/LessThanPredicate.java @@ -0,0 +1,48 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import static com.speedment.internal.core.field2.predicate.PredicateType.LESS_THAN; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class LessThanPredicate> + extends BaseComparablePredicate + implements SpeedmentPredicate, BinaryOperation { + + public LessThanPredicate(Getter getter, V operand0) { + super(LESS_THAN, getter, operand0, LessThanPredicate::test); + } + + private static > boolean test(V a, V b) { + if (a == null && b == null) { + return true; + } + if (a == null || b == null) { + return false; + } + return a.compareTo(b) > 0; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/NotEqualPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/NotEqualPredicate.java new file mode 100644 index 0000000000..0f0b5faad9 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/comparable/NotEqualPredicate.java @@ -0,0 +1,37 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.comparable; + +import static com.speedment.internal.core.field2.predicate.PredicateType.NOT_EQUAL; +import com.speedment.field2.methods.Getter; +import java.util.Objects; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + * @param value type + */ +public class NotEqualPredicate extends BaseComparablePredicate implements SpeedmentPredicate, BinaryOperation { + + public NotEqualPredicate(Getter getter, V operand0) { + super(NOT_EQUAL, getter, operand0, (a, b) -> !Objects.equals(a, b)); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNotNullPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNotNullPredicate.java new file mode 100644 index 0000000000..d147c1b046 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNotNullPredicate.java @@ -0,0 +1,42 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.reference; + +import static com.speedment.internal.core.field2.predicate.PredicateType.IS_NOT_NULL; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.field2.methods.Getter; +import java.util.Objects; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; +import com.speedment.internal.core.field2.predicate.iface.type.UnaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class IsNotNullPredicate extends SpeedmentPredicateImpl implements SpeedmentPredicate, UnaryOperation { + + public IsNotNullPredicate(Getter getter) { + super(IS_NOT_NULL, getter); + } + + @Override + public boolean testField(V fieldValue) { + return !Objects.isNull(fieldValue); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNullPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNullPredicate.java new file mode 100644 index 0000000000..6e6e95c024 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/reference/IsNullPredicate.java @@ -0,0 +1,42 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.reference; + +import static com.speedment.internal.core.field2.predicate.PredicateType.IS_NULL; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.field2.methods.Getter; +import java.util.Objects; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; +import com.speedment.internal.core.field2.predicate.iface.type.UnaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class IsNullPredicate extends SpeedmentPredicateImpl implements SpeedmentPredicate, UnaryOperation { + + public IsNullPredicate(Getter getter) { + super(IS_NULL, getter); + } + + @Override + public boolean testField(V fieldValue) { + return Objects.isNull(fieldValue); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/BaseStringPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/BaseStringPredicate.java new file mode 100644 index 0000000000..af9e2f1735 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/BaseStringPredicate.java @@ -0,0 +1,77 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import com.speedment.internal.core.field2.predicate.PredicateType; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class BaseStringPredicate extends SpeedmentPredicateImpl + implements SpeedmentPredicate, BinaryOperation { + + private final String operand0; + private final BiStringPredicate innerPredicate; + + public BaseStringPredicate(PredicateType predicateType, + Getter getter, + String operand0, + BiStringPredicate innerPredicate + ) { + super(predicateType, getter); + this.operand0 = operand0; + this.innerPredicate = innerPredicate; + } + + @Override + public String getOperand0() { + return operand0; + } + + @Override + public boolean testField(String fieldValue) { + return innerPredicate.test(fieldValue, operand0); + } + + @FunctionalInterface + public interface BiStringPredicate { + + boolean test(String s0, String s1); + } + + public static final BiStringPredicate EQUALS_IGNORE_CASE_PREDICATE + = (s0, s1) -> (s0 == s1) || (s0 != null && s0.equalsIgnoreCase(s1)); + + public static final BiStringPredicate NOT_EQUALS_IGNORE_CASE_PREDICATE + = (s0, s1) -> !EQUALS_IGNORE_CASE_PREDICATE.test(s0, s1); + + public static final BiStringPredicate STARTS_WITH_PREDICATE + = (s0, s1) ->(s0 != null && s1 != null) && (s0.startsWith(s1)); + + public static final BiStringPredicate ENDS_WITH_PREDICATE + = (s0, s1) -> (s0 != null && s1 != null) && (s0.endsWith(s1)); + + public static final BiStringPredicate CONTAINS_PREDICATE + = (s0, s1) -> (s0 != null && s1 != null) && (s0.contains(s1)); + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/ContainsPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/ContainsPredicate.java new file mode 100644 index 0000000000..0658159b72 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/ContainsPredicate.java @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import static com.speedment.internal.core.field2.predicate.PredicateType.CONTAINS; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class ContainsPredicate extends BaseStringPredicate + implements SpeedmentPredicate, BinaryOperation { + + public ContainsPredicate(Getter getter, String operand0) { + super(CONTAINS, getter, operand0, CONTAINS_PREDICATE); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EndsWithPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EndsWithPredicate.java new file mode 100644 index 0000000000..a4b8c741bb --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EndsWithPredicate.java @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import static com.speedment.internal.core.field2.predicate.PredicateType.ENDS_WITH; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class EndsWithPredicate extends BaseStringPredicate + implements SpeedmentPredicate, BinaryOperation { + + public EndsWithPredicate(Getter getter, String operand0) { + super(ENDS_WITH, getter, operand0, ENDS_WITH_PREDICATE); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EqualIgnoreCasePredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EqualIgnoreCasePredicate.java new file mode 100644 index 0000000000..815665f3a1 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/EqualIgnoreCasePredicate.java @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import static com.speedment.internal.core.field2.predicate.PredicateType.EQUAL_IGNORE_CASE; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class EqualIgnoreCasePredicate extends BaseStringPredicate + implements SpeedmentPredicate, BinaryOperation { + + public EqualIgnoreCasePredicate(Getter getter, String operand0) { + super(EQUAL_IGNORE_CASE, getter, operand0, EQUALS_IGNORE_CASE_PREDICATE); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsEmptyPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsEmptyPredicate.java new file mode 100644 index 0000000000..f5d201005e --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsEmptyPredicate.java @@ -0,0 +1,42 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import static com.speedment.internal.core.field2.predicate.PredicateType.IS_EMPTY; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; +import com.speedment.internal.core.field2.predicate.iface.type.UnaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class IsEmptyPredicate extends SpeedmentPredicateImpl + implements SpeedmentPredicate, UnaryOperation { + + public IsEmptyPredicate(Getter getter) { + super(IS_EMPTY, getter); + } + + @Override + public boolean testField(String fieldValue) { + return (fieldValue != null) && fieldValue.isEmpty(); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsNotEmptyPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsNotEmptyPredicate.java new file mode 100644 index 0000000000..29084a85ac --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/IsNotEmptyPredicate.java @@ -0,0 +1,42 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import static com.speedment.internal.core.field2.predicate.PredicateType.IS_NOT_EMPTY; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.impl.SpeedmentPredicateImpl; +import com.speedment.internal.core.field2.predicate.iface.type.UnaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class IsNotEmptyPredicate extends SpeedmentPredicateImpl + implements SpeedmentPredicate, UnaryOperation { + + public IsNotEmptyPredicate(Getter getter) { + super(IS_NOT_EMPTY, getter); + } + + @Override + public boolean testField(String fieldValue) { + return (fieldValue != null) && !fieldValue.isEmpty(); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/NotEqualIgnoreCasePredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/NotEqualIgnoreCasePredicate.java new file mode 100644 index 0000000000..e9fe6bdaa8 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/NotEqualIgnoreCasePredicate.java @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import static com.speedment.internal.core.field2.predicate.PredicateType.NOT_EQUAL_IGNORE_CASE; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class NotEqualIgnoreCasePredicate extends BaseStringPredicate + implements SpeedmentPredicate, BinaryOperation { + + public NotEqualIgnoreCasePredicate(Getter getter, String operand0) { + super(NOT_EQUAL_IGNORE_CASE, getter, operand0, NOT_EQUALS_IGNORE_CASE_PREDICATE); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/StartsWithPredicate.java b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/StartsWithPredicate.java new file mode 100644 index 0000000000..2b14699402 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/predicate/impl/string/StartsWithPredicate.java @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.predicate.impl.string; + +import static com.speedment.internal.core.field2.predicate.PredicateType.STARTS_WITH; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.core.field2.predicate.iface.SpeedmentPredicate; +import com.speedment.internal.core.field2.predicate.iface.type.BinaryOperation; + +/** + * + * @author pemi + * @param the entity type + */ +public class StartsWithPredicate extends BaseStringPredicate + implements SpeedmentPredicate, BinaryOperation { + + public StartsWithPredicate(Getter getter, String operand0) { + super(STARTS_WITH, getter, operand0, STARTS_WITH_PREDICATE); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/trait/ComparableFieldTraitImpl.java b/src/main/java/com/speedment/internal/core/field2/trait/ComparableFieldTraitImpl.java new file mode 100644 index 0000000000..168537c2be --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/trait/ComparableFieldTraitImpl.java @@ -0,0 +1,218 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.trait; + +import com.speedment.field2.Inclusion; +import com.speedment.internal.core.field2.predicate.impl.AlwaysFalsePredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.BetweenPredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.EqualPredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.GreaterOrEqualPredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.GreaterThanPredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.InPredicate; +import com.speedment.internal.core.field2.predicate.impl.reference.IsNotNullPredicate; +import com.speedment.internal.core.field2.predicate.impl.reference.IsNullPredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.LessOrEqualPredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.LessThanPredicate; +import com.speedment.internal.core.field2.predicate.impl.comparable.NotEqualPredicate; +import com.speedment.field2.methods.Getter; +import com.speedment.internal.comparator.impl.NullOrder; +import com.speedment.internal.comparator.impl.SpeedmentComparatorImpl; +import java.util.Comparator; +import java.util.Set; +import java.util.function.Predicate; +import static java.util.stream.Collectors.toSet; +import java.util.stream.Stream; +import com.speedment.field2.trait.ComparableFieldTrait; +import com.speedment.field2.trait.FieldTrait; + +/** + * @param the entity type + * @param the field value type + * @author pemi + */ +public class ComparableFieldTraitImpl> implements ComparableFieldTrait { + + private final FieldTrait field; + private final Getter getter; + private final AlwaysFalsePredicate alwaysFalsePredicate; + private final IsNullPredicate isNullPredicate; + private final IsNotNullPredicate isNotNullPredicate; + + public ComparableFieldTraitImpl(FieldTrait field, Getter getter) { + this.field = field; + this.getter = getter; + this.alwaysFalsePredicate = new AlwaysFalsePredicate<>(getter); + this.isNullPredicate = new IsNullPredicate<>(getter); + this.isNotNullPredicate = new IsNotNullPredicate<>(getter); + } + + @Override + public Comparator comparator() { + return new SpeedmentComparatorImpl<>(field, getter, NullOrder.NONE); + } + + @Override + public Comparator comparatorNullFieldsFirst() { + return new SpeedmentComparatorImpl<>(field, getter, NullOrder.FIRST); + } + + @Override + public Comparator comparatorNullFieldsLast() { + return new SpeedmentComparatorImpl<>(field, getter, NullOrder.LAST); + } + + @Override + public Predicate equal(V value) { + if (value == null) { + return isNullPredicate; + } + return new EqualPredicate<>(getter, value); + } + + @Override + public Predicate notEqual(V value) { + if (value == null) { + return isNotNullPredicate; + } + return new NotEqualPredicate<>(getter, value); + } + + @Override + public Predicate lessThan(V value) { + if (value == null) { + return alwaysFalsePredicate; + } + return new LessThanPredicate<>(getter, value); + } + + @Override + public Predicate lessOrEqual(V value) { + if (value == null) { + return isNullPredicate; + } + return new LessOrEqualPredicate<>(getter, value); + } + + @Override + public Predicate greaterThan(V value) { + if (value == null) { + return alwaysFalsePredicate; + } + return new GreaterThanPredicate<>(getter, value); + } + + @Override + public Predicate greaterOrEqual(V value) { + if (value == null) { + return isNullPredicate; + } + return new GreaterOrEqualPredicate<>(getter, value); + } + + @Override + public Predicate between(V start, V end, Inclusion inclusion) { + // First, take a look at the case when either or both start or/and end are null + if (start == null || end == null) { + switch (inclusion) { + case START_EXCLUSIVE_END_EXCLUSIVE: { + return alwaysFalsePredicate; + } + case START_EXCLUSIVE_END_INCLUSIVE: { + if (end == null) { + return isNullPredicate; + } + return alwaysFalsePredicate; + } + case START_INCLUSIVE_END_EXCLUSIVE: { + if (end == null) { + return isNullPredicate; + } + return alwaysFalsePredicate; + } + case START_INCLUSIVE_END_INCLUSIVE: { + return isNullPredicate; + } + } + } + // Secondly, take a look at the case when neither start nor end end is null + // We need to make sure that start < end or posibly start <= end + final int comparison = end.compareTo(start); + switch (inclusion) { + case START_EXCLUSIVE_END_EXCLUSIVE: { + if (comparison <= 0) { + return alwaysFalsePredicate; + } + break; + } + case START_EXCLUSIVE_END_INCLUSIVE: { + if (comparison == 0) { + return new EqualPredicate<>(getter, end); + } + if (comparison < 0) { + return alwaysFalsePredicate; + } + break; + } + + case START_INCLUSIVE_END_EXCLUSIVE: { + if (comparison == 0) { + return new EqualPredicate<>(getter, start); + } + if (comparison < 0) { + return alwaysFalsePredicate; + } + break; + } + case START_INCLUSIVE_END_INCLUSIVE: { + if (comparison == 0) { + return new EqualPredicate<>(getter, start); + } + if (comparison < 0) { + return alwaysFalsePredicate; + } + break; + } + } + // Normal case: + return new BetweenPredicate<>(getter, start, end, inclusion); + } + + @SafeVarargs + @SuppressWarnings("varargs") // Creating a stream from an array is safe + @Override + public final Predicate in(V... values) { + if (values.length == 0) { + return alwaysFalsePredicate; + } + if (values.length == 1) { + return new EqualPredicate<>(getter, values[0]); + } + return in(Stream.of(values).collect(toSet())); + } + + @Override + public Predicate in(Set values) { + if (values.isEmpty()) { + return alwaysFalsePredicate; + } + if (values.size() == 1) { + return new EqualPredicate<>(getter, values.stream().findAny().get()); + } + return new InPredicate<>(getter, values); + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/trait/FieldTraitImpl.java b/src/main/java/com/speedment/internal/core/field2/trait/FieldTraitImpl.java new file mode 100644 index 0000000000..448ec75ed1 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/trait/FieldTraitImpl.java @@ -0,0 +1,38 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.trait; + +import com.speedment.field2.trait.FieldTrait; + +/** + * + * @author pemi + */ +public class FieldTraitImpl implements FieldTrait { + + private final String columnName; + + public FieldTraitImpl(String columnName) { + this.columnName = columnName; + } + + @Override + public String getColumnName() { + return columnName; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/trait/ReferenceFieldTraitImpl.java b/src/main/java/com/speedment/internal/core/field2/trait/ReferenceFieldTraitImpl.java new file mode 100644 index 0000000000..9cbdd9c286 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/trait/ReferenceFieldTraitImpl.java @@ -0,0 +1,78 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.trait; + +import com.speedment.field2.methods.FieldSetter; +import com.speedment.internal.core.field2.predicate.impl.reference.IsNotNullPredicate; +import com.speedment.internal.core.field2.predicate.impl.reference.IsNullPredicate; +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import com.speedment.field2.trait.FieldTrait; +import java.util.function.Predicate; +import com.speedment.field2.trait.ReferenceFieldTrait; +import com.speedment.internal.core.field2.FieldSetterImpl; +import static java.util.Objects.requireNonNull; + +/** + * @param the entity type + * @param the field value type + * @author pemi + */ +public class ReferenceFieldTraitImpl implements ReferenceFieldTrait { + + private final FieldTrait field; + private final Getter getter; + private final Setter setter; + + // These are UnaryPredicate and thus, do not change + private final Predicate isNullPredicate; + private final Predicate isNotNullPredicate; + + public ReferenceFieldTraitImpl(FieldTrait field, Getter getter, Setter setter) { + this.field = requireNonNull(field); + this.getter = requireNonNull(getter); + this.setter = requireNonNull(setter); + this.isNullPredicate = new IsNullPredicate<>(getter); + this.isNotNullPredicate = new IsNotNullPredicate<>(getter); + } + + @Override + public Setter setter() { + return setter; + } + + @Override + public Getter getter() { + return getter; + } + + @Override + public FieldSetter setTo(V value) { + return new FieldSetterImpl<>(field, setter, value); + } + + @Override + public Predicate isNull() { + return isNullPredicate; + } + + @Override + public Predicate isNotNull() { + return isNotNullPredicate; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/trait/ReferenceForeignKeyFieldTraitImpl.java b/src/main/java/com/speedment/internal/core/field2/trait/ReferenceForeignKeyFieldTraitImpl.java new file mode 100644 index 0000000000..029a0e408f --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/trait/ReferenceForeignKeyFieldTraitImpl.java @@ -0,0 +1,40 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.trait; + +import com.speedment.field2.methods.Finder; +import com.speedment.field2.trait.ReferenceForeignKeyFieldTrait; + +/** + * @param the entity type + * @param the foreign entity type + * @author pemi + */ +public class ReferenceForeignKeyFieldTraitImpl implements ReferenceForeignKeyFieldTrait { + + private final Finder finder; + + public ReferenceForeignKeyFieldTraitImpl(Finder finder) { + this.finder = finder; + } + + @Override + public Finder finder() { + return finder; + } + +} diff --git a/src/main/java/com/speedment/internal/core/field2/trait/StringFieldTraitImpl.java b/src/main/java/com/speedment/internal/core/field2/trait/StringFieldTraitImpl.java new file mode 100644 index 0000000000..e5bb9ced68 --- /dev/null +++ b/src/main/java/com/speedment/internal/core/field2/trait/StringFieldTraitImpl.java @@ -0,0 +1,101 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.core.field2.trait; + +import com.speedment.internal.core.field2.predicate.impl.AlwaysFalsePredicate; +import com.speedment.internal.core.field2.predicate.impl.reference.IsNotNullPredicate; +import com.speedment.internal.core.field2.predicate.impl.reference.IsNullPredicate; +import com.speedment.internal.core.field2.predicate.impl.string.ContainsPredicate; +import com.speedment.internal.core.field2.predicate.impl.string.EndsWithPredicate; +import com.speedment.internal.core.field2.predicate.impl.string.EqualIgnoreCasePredicate; +import com.speedment.internal.core.field2.predicate.impl.string.IsEmptyPredicate; +import com.speedment.internal.core.field2.predicate.impl.string.IsNotEmptyPredicate; +import com.speedment.internal.core.field2.predicate.impl.string.NotEqualIgnoreCasePredicate; +import com.speedment.internal.core.field2.predicate.impl.string.StartsWithPredicate; +import com.speedment.field2.methods.Getter; +import java.util.function.Predicate; +import com.speedment.field2.trait.StringFieldTrait; + +/** + * @param the entity type + * @author pemi + */ +public class StringFieldTraitImpl implements StringFieldTrait { + + private final Getter getter; + private final AlwaysFalsePredicate alwaysFalsePredicate; + private final IsNullPredicate isNullPredicate; + private final IsNotNullPredicate isNotNullPredicate; + + public StringFieldTraitImpl(Getter getter) { + this.getter = getter; + this.alwaysFalsePredicate = new AlwaysFalsePredicate<>(getter); + this.isNullPredicate = new IsNullPredicate<>(getter); + this.isNotNullPredicate = new IsNotNullPredicate<>(getter); + } + + @Override + public Predicate equalIgnoreCase(String value) { + if (value == null) { + return isNullPredicate; + } + return new EqualIgnoreCasePredicate<>(getter, value); + } + + @Override + public Predicate notEqualIgnoreCase(String value) { + if (value == null) { + return isNotNullPredicate; + } + return new NotEqualIgnoreCasePredicate<>(getter, value); + } + + @Override + public Predicate startsWith(String value) { + if (value == null) { + return alwaysFalsePredicate; + } + return new StartsWithPredicate<>(getter, value); + } + + @Override + public Predicate endsWith(String value) { + if (value == null) { + return alwaysFalsePredicate; + } + return new EndsWithPredicate<>(getter, value); + } + + @Override + public Predicate contains(String value) { + if (value == null) { + return alwaysFalsePredicate; + } + return new ContainsPredicate<>(getter, value); + } + + @Override + public Predicate isEmpty() { + return new IsEmptyPredicate<>(getter); + } + + @Override + public Predicate isNotEmpty() { + return new IsNotEmptyPredicate<>(getter); + } + +} diff --git a/src/test/java/com/speedment/internal/field/ComparableFieldTest.java b/src/test/java/com/speedment/internal/field/ComparableFieldTest.java new file mode 100644 index 0000000000..d25b11904a --- /dev/null +++ b/src/test/java/com/speedment/internal/field/ComparableFieldTest.java @@ -0,0 +1,202 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.field; + +import static com.speedment.field2.Inclusion.START_EXCLUSIVE_END_EXCLUSIVE; +import static com.speedment.field2.Inclusion.START_EXCLUSIVE_END_INCLUSIVE; +import static com.speedment.field2.Inclusion.START_INCLUSIVE_END_INCLUSIVE; +import static com.speedment.internal.field.Entity.ID; +import static com.speedment.internal.field.Entity.NAME; +import static java.util.Comparator.nullsFirst; +import java.util.List; +import static java.util.stream.Collectors.toList; +import org.junit.Test; +import static java.util.Comparator.nullsLast; +import static org.junit.Assert.assertEquals; +import static java.util.Comparator.comparing; +import java.util.Set; +import static java.util.stream.Collectors.toSet; +import java.util.stream.Stream; + +/** + * + * @author pemi + */ +public class ComparableFieldTest extends FieldTest { + + @Test + public void testReferenceFieldComparatorNullFieldsFirst() throws Exception { + final List result = entities.stream().sorted(NAME.comparatorNullFieldsFirst().thenComparing(ID.comparator())).collect(toList()); + final List expected = entities.stream() + .sorted( + comparing(Entity::getName, nullsFirst(String::compareTo)) + .thenComparing(comparing(Entity::getId, nullsFirst(Integer::compareTo))) + ) + .collect(toList()); + + assertEquals(expected, result); + } + + @Test + public void testReferenceFieldComparatorNullFieldsLast() throws Exception { + final List result = entities.stream().sorted(NAME.comparatorNullFieldsLast().thenComparing(ID.comparator())).collect(toList()); + final List expected = entities.stream() + .sorted( + comparing(Entity::getName, nullsLast(String::compareTo)) + .thenComparing(comparing(Entity::getId, nullsLast(Integer::compareTo))) + ) + .collect(toList()); + + assertEquals(expected, result); + } + + @Test + public void testEqual() throws Exception { + assertEquals(collect(e -> "a".equals(e.getName())).size(), collect(NAME.equal("a")).size()); + assertEquals(collect(e -> e.getName() == null).size(), collect(NAME.equal(null)).size()); + } + + @Test + public void testNotEqual() throws Exception { + assertEquals(collect(e -> !"a".equals(e.getName())).size(), collect(NAME.notEqual("a")).size()); + assertEquals(collect(e -> e.getName() != null).size(), collect(NAME.notEqual(null)).size()); + } + + @Test + public void lessThan() throws Exception { + assertEquals( + collect(e -> e.getName() != null && "f".compareTo(e.getName()) > 0), + collect(NAME.lessThan("f")) + ); + assertEquals(0, collect(NAME.lessThan(null)).size()); + } + + @Test + public void lessOrEqual() throws Exception { + assertEquals( + collect(e -> e.getName() != null && "f".compareTo(e.getName()) >= 0), + collect(NAME.lessOrEqual("f")) + ); + assertEquals(collect(e -> e.getName() == null).size(), collect(NAME.lessOrEqual(null)).size()); + } + + @Test + public void greaterThan() throws Exception { + assertEquals( + collect(e -> e.getName() != null && "f".compareTo(e.getName()) < 0), + collect(NAME.greaterThan("f")) + ); + assertEquals(0, collect(NAME.lessThan(null)).size()); + } + + @Test + public void greaterOrEqual() throws Exception { + assertEquals( + collect(e -> e.getName() != null && "f".compareTo(e.getName()) <= 0), + collect(NAME.greaterOrEqual("f")) + ); + assertEquals(collect(e -> e.getName() == null).size(), collect(NAME.greaterOrEqual(null)).size()); + } + + @Test + public void between2Arg() throws Exception { + + final List expected = collect(e -> e.getId() != null && e.getId() >= 2 && e.getId() < 6); + final List result = collect(ID.between(2, 6)); + + assertEquals( + expected, + result + ); + assertEquals(0, collect(ID.between(2, null)).size()); + assertEquals(0, collect(ID.between(null, 6)).size()); + assertEquals(0, collect(ID.between(6, 2)).size()); + assertEquals(1, collect(ID.between(2, 2)).size()); + + } + + @Test + public void between3ArgInclIncl() throws Exception { + + final List expected = collect(e -> e.getId() != null && e.getId() >= 2 && e.getId() <= 6); + final List result = collect(ID.between(2, 6, START_INCLUSIVE_END_INCLUSIVE)); + + assertEquals( + expected, + result + ); + assertEquals(0, collect(ID.between(2, null, START_INCLUSIVE_END_INCLUSIVE)).size()); + assertEquals(0, collect(ID.between(null, 6, START_INCLUSIVE_END_INCLUSIVE)).size()); + assertEquals(0, collect(ID.between(6, 2, START_INCLUSIVE_END_INCLUSIVE)).size()); + assertEquals(1, collect(ID.between(2, 2, START_INCLUSIVE_END_INCLUSIVE)).size()); + + } + + @Test + public void between3ArgExclIncl() throws Exception { + + final List expected = collect(e -> e.getId() != null && e.getId() > 2 && e.getId() <= 6); + final List result = collect(ID.between(2, 6, START_EXCLUSIVE_END_INCLUSIVE)); + + assertEquals( + expected, + result + ); + assertEquals(0, collect(ID.between(2, null, START_EXCLUSIVE_END_INCLUSIVE)).size()); + assertEquals(0, collect(ID.between(null, 6, START_EXCLUSIVE_END_INCLUSIVE)).size()); + assertEquals(0, collect(ID.between(6, 2, START_EXCLUSIVE_END_INCLUSIVE)).size()); + assertEquals(1, collect(ID.between(2, 2, START_EXCLUSIVE_END_INCLUSIVE)).size()); + + } + + @Test + public void between3ArgExclExcl() throws Exception { + + final List expected = collect(e -> e.getId() != null && e.getId() > 2 && e.getId() < 6); + final List result = collect(ID.between(2, 6, START_EXCLUSIVE_END_EXCLUSIVE)); + + System.out.println("Expected"); + expected.forEach(System.out::println); + System.out.println("Result"); + result.forEach(System.out::println); + + assertEquals( + expected, + result + ); + assertEquals(0, collect(ID.between(2, null, START_EXCLUSIVE_END_EXCLUSIVE)).size()); + assertEquals(0, collect(ID.between(null, 6, START_EXCLUSIVE_END_EXCLUSIVE)).size()); + assertEquals(0, collect(ID.between(6, 2, START_EXCLUSIVE_END_EXCLUSIVE)).size()); + assertEquals(0, collect(ID.between(2, 2, START_EXCLUSIVE_END_EXCLUSIVE)).size()); + } + + @Test + public void in() throws Exception { + + final Integer[] ints = {2, 3, 5, 7, 11, 13, 16}; + final Set intSet = Stream.of(ints).collect(toSet()); + final List expected = collect(e -> intSet.contains(e.getId())); + + assertEquals(expected, collect(ID.in(intSet))); + assertEquals(expected, collect(ID.in(ints))); + + assertEquals(0, collect(ID.in()).size()); + assertEquals(1, collect(ID.in(1)).size()); + assertEquals(0, collect(ID.in((Integer) null)).size()); + } + +} diff --git a/src/main/java/com/speedment/field/operators/StandardUnaryOperator.java b/src/test/java/com/speedment/internal/field/Entity.java similarity index 50% rename from src/main/java/com/speedment/field/operators/StandardUnaryOperator.java rename to src/test/java/com/speedment/internal/field/Entity.java index 2f59668fba..123d68f9f7 100644 --- a/src/main/java/com/speedment/field/operators/StandardUnaryOperator.java +++ b/src/test/java/com/speedment/internal/field/Entity.java @@ -14,30 +14,28 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.speedment.field.operators; +package com.speedment.internal.field; -import com.speedment.annotation.Api; -import java.util.Objects; -import java.util.function.Predicate; +import com.speedment.field2.ComparableField; +import com.speedment.field2.StringField; +import com.speedment.internal.core.field2.ComparableFieldImpl; +import com.speedment.internal.core.field2.StringFieldImpl; /** * * @author pemi */ -@Api(version = "2.1") -public enum StandardUnaryOperator implements UnaryOperator { +public interface Entity { - IS_NULL(Objects::isNull), - IS_NOT_NULL(Objects::nonNull); + public final static ComparableField ID = new ComparableFieldImpl<>("id", Entity::getId, Entity::setId); + public final static StringField NAME = new StringFieldImpl<>("name", Entity::getName, Entity::setName); - private final Predicate predicate; + public Integer getId(); - StandardUnaryOperator(Predicate predicate) { - this.predicate = Objects.requireNonNull(predicate); - } + public String getName(); - @Override - public Predicate getUnaryFilter() { - return predicate; - } -} \ No newline at end of file + public Entity setId(Integer id); + + public Entity setName(String name); + +} diff --git a/src/test/java/com/speedment/internal/field/EntityImpl.java b/src/test/java/com/speedment/internal/field/EntityImpl.java new file mode 100644 index 0000000000..d388e996c6 --- /dev/null +++ b/src/test/java/com/speedment/internal/field/EntityImpl.java @@ -0,0 +1,60 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.field; + +/** + * + * @author pemi + */ +public class EntityImpl implements Entity { + + private Integer id; + private String name; + + public EntityImpl(Integer id, String name) { + this.id = id; + this.name = name; + } + + @Override + public Integer getId() { + return id; + } + + @Override + public String getName() { + return name; + } + + @Override + public Entity setId(Integer id) { + this.id = id; + return this; + } + + @Override + public Entity setName(String name) { + this.name = name; + return this; + } + + @Override + public String toString() { + return EntityImpl.class.getSimpleName() + " { id: " + id + ", name: \"" + name + "\"}"; + } + +} diff --git a/src/test/java/com/speedment/internal/field/FieldTest.java b/src/test/java/com/speedment/internal/field/FieldTest.java new file mode 100644 index 0000000000..363c29636d --- /dev/null +++ b/src/test/java/com/speedment/internal/field/FieldTest.java @@ -0,0 +1,72 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.field; + +import static com.speedment.internal.field.Entity.ID; +import static com.speedment.internal.field.Entity.NAME; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Predicate; +import static java.util.stream.Collectors.toList; +import java.util.stream.Stream; +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +/** + * + * @author pemi + */ +public class FieldTest { + + protected List names; + protected List entities; + + public FieldTest() { + } + + @Before + public void setUp() { + names = Stream.of(null, "a", "a", "a", null, "b", "c", "d", "e", "f", "g", "h", null, "i", "j", null, + "ab", "abc", "abcd", "abcde", "abcdef", "abcdefg", + "Ab", "AbC", "AbCd", "AbCdE", "AbCdEf", "AbCdEfG", + "" + ).collect(toList()); + + final AtomicInteger id = new AtomicInteger(); + entities = names.stream().map(name -> new EntityImpl(id.getAndIncrement(), name)).collect(toList()); + } + + @Test + public void testField() throws Exception { + assertEquals("id", ID.getColumnName()); + assertEquals("name", NAME.getColumnName()); + } + + protected List collect(Predicate predicate) { + return entities.stream() + .filter(predicate) + .sorted(ID.comparator().thenComparing(NAME.comparatorNullFieldsFirst())) + .collect(toList()); + } + + protected void printList(String header, List list) { + System.out.println("*** " + header + " ***"); + list.forEach(System.out::println); + } + +} diff --git a/src/test/java/com/speedment/internal/field/RerferenceFieldTest.java b/src/test/java/com/speedment/internal/field/RerferenceFieldTest.java new file mode 100644 index 0000000000..aa3a5746fc --- /dev/null +++ b/src/test/java/com/speedment/internal/field/RerferenceFieldTest.java @@ -0,0 +1,65 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.field; + +import com.speedment.field2.methods.Getter; +import com.speedment.field2.methods.Setter; +import static com.speedment.internal.field.Entity.NAME; +import java.util.List; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertEquals; + +/** + * + * @author pemi + */ +public class RerferenceFieldTest extends FieldTest { + + @Test + public void testGetter() throws Exception { + final Getter result = NAME.getter(); + final Getter expected = (Entity e) -> e.getName(); + final Entity e = new EntityImpl(45, "Arne"); + assertEquals(expected.apply(e), result.apply(e)); + } + + @Test + public void testSetter() throws Exception { + final Setter result = NAME.setter(); + final Entity e = new EntityImpl(45, "Arne"); + result.apply(e, "Tryggve"); + assertEquals("Tryggve", e.getName()); + } + + @Test + public void testIsNull() throws Exception { + final List result = collect(NAME.isNull()); + final List expected = collect(e -> e.getName() == null); + assertEquals(expected, result); + } + + @Test + public void testIsNotNull() throws Exception { + final List result = collect(NAME.isNotNull()); + final List expected = collect(e -> e.getName() != null); + assertEquals(expected, result); + } + +} diff --git a/src/test/java/com/speedment/internal/field/StringFieldTest.java b/src/test/java/com/speedment/internal/field/StringFieldTest.java new file mode 100644 index 0000000000..58ef5cef38 --- /dev/null +++ b/src/test/java/com/speedment/internal/field/StringFieldTest.java @@ -0,0 +1,109 @@ +/** + * + * Copyright (c) 2006-2015, Speedment, Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); You may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.speedment.internal.field; + +import static com.speedment.internal.core.field2.predicate.impl.string.BaseStringPredicate.ENDS_WITH_PREDICATE; +import static com.speedment.internal.core.field2.predicate.impl.string.BaseStringPredicate.STARTS_WITH_PREDICATE; +import static com.speedment.internal.field.Entity.NAME; +import java.util.List; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * + * @author pemi + */ +public class StringFieldTest extends FieldTest { + + @Test + public void equalIgnoreCase() throws Exception { + final List expected = collect(e -> e.getName() != null && e.getName().equalsIgnoreCase("abcdef")); + final List result = collect(NAME.equalIgnoreCase("abcdef")); + + assertEquals(expected, result); + assertEquals(4, collect(NAME.equalIgnoreCase(null)).size()); + } + + @Test + public void notEqualIgnoreCase() throws Exception { + final List expected = collect(e -> e.getName() == null || !e.getName().equalsIgnoreCase("abcdef")); + final List result = collect(NAME.notEqualIgnoreCase("abcdef")); + + assertEquals(expected, result); + assertEquals(4, collect(NAME.equalIgnoreCase(null)).size()); + } + + @Test + public void startsWith() throws Exception { + + assertTrue(STARTS_WITH_PREDICATE.test("abc", "ab")); + + final List expected = collect(e -> e.getName() != null && e.getName().startsWith("abc")); + //final List result = collect(e -> e.getName() != null && STARTS_WITH_PREDICATE.test(e.getName(), "abc")); + final List result = collect(NAME.startsWith("abc")); + + printList("startswith expected", expected); + printList("startswith result", result); + + assertEquals(expected, result); + assertEquals(0, collect(NAME.startsWith(null)).size()); + } + + @Test + public void endsWith() throws Exception { + + assertTrue(ENDS_WITH_PREDICATE.test("abcdEf", "f")); + + final List expected = collect(e -> e.getName() != null && e.getName().endsWith("f")); + final List result = collect(NAME.endsWith("f")); + + printList("endswith expected", expected); + printList("endswith result", result); + + assertEquals(expected, result); + assertEquals(0, collect(NAME.endsWith(null)).size()); + } + + @Test + public void contains() throws Exception { + + final List expected = collect(e -> e.getName() != null && e.getName().contains("a")); + final List result = collect(NAME.contains("a")); + + printList("contains expected", expected); + printList("contains result", result); + + assertEquals(expected, result); + assertEquals(0, collect(NAME.contains(null)).size()); + } + + @Test + public void isEmpty() throws Exception { + final List expected = collect(e -> e.getName() != null && e.getName().isEmpty()); + final List result = collect(NAME.isEmpty()); + assertEquals(expected, result); + } + + @Test + public void isNotEmpty() throws Exception { + final List expected = collect(e -> e.getName() != null && !e.getName().isEmpty()); + final List result = collect(NAME.isNotEmpty()); + assertEquals(expected, result); + } + +}