diff --git a/api-java-mixin.raml b/api-java-mixin.raml index add87453279..e14926c1d99 100644 --- a/api-java-mixin.raml +++ b/api-java-mixin.raml @@ -458,6 +458,8 @@ types: (java-extends): 'com.commercetools.api.models.CustomizableDraft' Attribute: (java-query-implements): 'AttributeQueryBuilderMixin' + FieldContainer: + (java-query-implements): 'FieldContainerQueryBuilderMixin' Product: (java-extends): 'ProductMixin, com.commercetools.api.models.DomainResource, com.commercetools.api.models.Referencable, com.commercetools.api.models.ResourceIdentifiable, com.commercetools.api.models.WithKey' (java-mixin): | diff --git a/commercetools/commercetools-sdk-java-api/src/main/java-predicates-generated/com/commercetools/api/predicates/query/type/FieldContainerQueryBuilderDsl.java b/commercetools/commercetools-sdk-java-api/src/main/java-predicates-generated/com/commercetools/api/predicates/query/type/FieldContainerQueryBuilderDsl.java index 1eae8237a08..6dee9e0a157 100644 --- a/commercetools/commercetools-sdk-java-api/src/main/java-predicates-generated/com/commercetools/api/predicates/query/type/FieldContainerQueryBuilderDsl.java +++ b/commercetools/commercetools-sdk-java-api/src/main/java-predicates-generated/com/commercetools/api/predicates/query/type/FieldContainerQueryBuilderDsl.java @@ -3,7 +3,7 @@ import com.commercetools.api.predicates.query.*; -public class FieldContainerQueryBuilderDsl { +public class FieldContainerQueryBuilderDsl implements FieldContainerQueryBuilderMixin { public FieldContainerQueryBuilderDsl() { } diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/predicates/query/type/FieldContainerQueryBuilderMixin.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/predicates/query/type/FieldContainerQueryBuilderMixin.java new file mode 100644 index 00000000000..ef8cfb5cf43 --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/predicates/query/type/FieldContainerQueryBuilderMixin.java @@ -0,0 +1,9 @@ + +package com.commercetools.api.predicates.query.type; + +public interface FieldContainerQueryBuilderMixin { + + default FieldContainerValueQueryBuilderDsl field(final String fieldName) { + return new FieldContainerValueQueryBuilderDsl(fieldName); + } +} diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/predicates/query/type/FieldContainerValueQueryBuilderDsl.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/predicates/query/type/FieldContainerValueQueryBuilderDsl.java new file mode 100644 index 00000000000..4b185f55ee3 --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/predicates/query/type/FieldContainerValueQueryBuilderDsl.java @@ -0,0 +1,68 @@ + +package com.commercetools.api.predicates.query.type; + +import java.util.function.Function; + +import com.commercetools.api.predicates.query.*; +import com.commercetools.api.predicates.query.common.MoneyQueryBuilderDsl; +import com.commercetools.api.predicates.query.common.ReferenceQueryBuilderDsl; + +public class FieldContainerValueQueryBuilderDsl { + + private final String fieldName; + + public FieldContainerValueQueryBuilderDsl(String fieldName) { + this.fieldName = fieldName; + } + + public CombinationQueryPredicate plainEnum( + Function> fn) { + return new CombinationQueryPredicate<>(ContainerQueryPredicate.of() + .parent(new ConstantQueryPredicate(fieldName)) + .inner(fn.apply(CustomFieldEnumValueQueryBuilderDsl.of())), + FieldContainerQueryBuilderDsl::of); + } + + public CombinationQueryPredicate localizedEnum( + Function> fn) { + return new CombinationQueryPredicate<>( + ContainerQueryPredicate.of() + .parent(new ConstantQueryPredicate(fieldName)) + .inner(fn.apply(CustomFieldLocalizedEnumValueQueryBuilderDsl.of())), + FieldContainerQueryBuilderDsl::of); + } + + public CombinationQueryPredicate money( + Function> fn) { + return new CombinationQueryPredicate<>(ContainerQueryPredicate.of() + .parent(new ConstantQueryPredicate(fieldName)) + .inner(fn.apply(MoneyQueryBuilderDsl.of())), + FieldContainerQueryBuilderDsl::of); + } + + public CombinationQueryPredicate reference( + Function> fn) { + return new CombinationQueryPredicate<>(ContainerQueryPredicate.of() + .parent(new ConstantQueryPredicate(fieldName)) + .inner(fn.apply(ReferenceQueryBuilderDsl.of())), + FieldContainerQueryBuilderDsl::of); + } + + public LongComparisonPredicateBuilder longNumber() { + return new LongComparisonPredicateBuilder<>( + BinaryQueryPredicate.of().left(new ConstantQueryPredicate(fieldName)), + p -> new CombinationQueryPredicate<>(p, FieldContainerQueryBuilderDsl::of)); + } + + public DoubleComparisonPredicateBuilder doubleNumber() { + return new DoubleComparisonPredicateBuilder<>( + BinaryQueryPredicate.of().left(new ConstantQueryPredicate(fieldName)), + p -> new CombinationQueryPredicate<>(p, FieldContainerQueryBuilderDsl::of)); + } + + public StringComparisonPredicateBuilder string() { + return new StringComparisonPredicateBuilder<>( + BinaryQueryPredicate.of().left(new ConstantQueryPredicate(fieldName)), + p -> new CombinationQueryPredicate<>(p, FieldContainerQueryBuilderDsl::of)); + } +} diff --git a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/predicates/query/QueryTests.java b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/predicates/query/QueryTests.java index 21c2338c134..2a496da680f 100644 --- a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/predicates/query/QueryTests.java +++ b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/predicates/query/QueryTests.java @@ -14,6 +14,7 @@ import com.commercetools.api.predicates.query.channel.ChannelQueryBuilderDsl; import com.commercetools.api.predicates.query.customer.CustomerQueryBuilderDsl; import com.commercetools.api.predicates.query.message.MessageQueryBuilderDsl; +import com.commercetools.api.predicates.query.order.OrderQueryBuilderDsl; import com.commercetools.api.predicates.query.product.ProductProjectionQueryBuilderDsl; import com.commercetools.api.predicates.query.product.ProductQueryBuilderDsl; import com.commercetools.api.predicates.query.state.StateQueryBuilderDsl; @@ -248,7 +249,29 @@ public static Object[][] predicates() { "resourceTypeIds contains any :foo", }, new Object[] { TypeQueryBuilderDsl.of().resourceTypeIds().containsAllVar("foo"), "resourceTypeIds contains all :foo", }, - - }; + new Object[] { + OrderQueryBuilderDsl.of() + .custom(c -> c.fields(f -> f.field("foo").plainEnum(e -> e.key().is("bar")))), + "custom(fields(foo(key = \"bar\")))", }, + new Object[] { + OrderQueryBuilderDsl.of() + .custom(c -> c.fields(f -> f.field("foo") + .localizedEnum(e -> e.label(l -> l.with(Locale.ENGLISH).is("bar"))))), + "custom(fields(foo(label(en = \"bar\"))))", }, + new Object[] { + OrderQueryBuilderDsl.of() + .custom(c -> c.fields(f -> f.field("foo").money(e -> e.currencyCode().is("EUR")))), + "custom(fields(foo(currencyCode = \"EUR\")))", }, + new Object[] { + OrderQueryBuilderDsl.of() + .custom(c -> c.fields(f -> f.field("foo").reference(e -> e.typeId().is("customer")))), + "custom(fields(foo(typeId = \"customer\")))", }, + new Object[] { OrderQueryBuilderDsl.of().custom(c -> c.fields(f -> f.field("foo").string().is("bar"))), + "custom(fields(foo = \"bar\"))", }, + new Object[] { OrderQueryBuilderDsl.of().custom(c -> c.fields(f -> f.field("foo").longNumber().is(3L))), + "custom(fields(foo = 3))", }, + new Object[] { + OrderQueryBuilderDsl.of().custom(c -> c.fields(f -> f.field("foo").doubleNumber().is(3.1))), + "custom(fields(foo = 3.1))", }, }; } }