Skip to content

Commit

Permalink
add predicate builder for custom fields
Browse files Browse the repository at this point in the history
  • Loading branch information
jenschude committed Dec 5, 2023
1 parent 942951a commit 56a9538
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 3 deletions.
2 changes: 2 additions & 0 deletions api-java-mixin.raml
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,8 @@ types:
(java-extends): 'com.commercetools.api.models.CustomizableDraft<TransactionDraft>'
Attribute:
(java-query-implements): 'AttributeQueryBuilderMixin'
FieldContainer:
(java-query-implements): 'FieldContainerQueryBuilderMixin'
Product:
(java-extends): 'ProductMixin, com.commercetools.api.models.DomainResource<Product>, com.commercetools.api.models.Referencable<Product>, com.commercetools.api.models.ResourceIdentifiable<Product>, com.commercetools.api.models.WithKey'
(java-mixin): |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import com.commercetools.api.predicates.query.*;

public class FieldContainerQueryBuilderDsl {
public class FieldContainerQueryBuilderDsl implements FieldContainerQueryBuilderMixin {
public FieldContainerQueryBuilderDsl() {
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

package com.commercetools.api.predicates.query.type;

public interface FieldContainerQueryBuilderMixin {

default FieldContainerValueQueryBuilderDsl field(final String fieldName) {
return new FieldContainerValueQueryBuilderDsl(fieldName);
}
}
Original file line number Diff line number Diff line change
@@ -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<FieldContainerQueryBuilderDsl> plainEnum(
Function<CustomFieldEnumValueQueryBuilderDsl, CombinationQueryPredicate<CustomFieldEnumValueQueryBuilderDsl>> fn) {
return new CombinationQueryPredicate<>(ContainerQueryPredicate.of()
.parent(new ConstantQueryPredicate(fieldName))
.inner(fn.apply(CustomFieldEnumValueQueryBuilderDsl.of())),
FieldContainerQueryBuilderDsl::of);
}

public CombinationQueryPredicate<FieldContainerQueryBuilderDsl> localizedEnum(
Function<CustomFieldLocalizedEnumValueQueryBuilderDsl, CombinationQueryPredicate<CustomFieldLocalizedEnumValueQueryBuilderDsl>> fn) {
return new CombinationQueryPredicate<>(
ContainerQueryPredicate.of()
.parent(new ConstantQueryPredicate(fieldName))
.inner(fn.apply(CustomFieldLocalizedEnumValueQueryBuilderDsl.of())),
FieldContainerQueryBuilderDsl::of);
}

public CombinationQueryPredicate<FieldContainerQueryBuilderDsl> money(
Function<MoneyQueryBuilderDsl, CombinationQueryPredicate<MoneyQueryBuilderDsl>> fn) {
return new CombinationQueryPredicate<>(ContainerQueryPredicate.of()
.parent(new ConstantQueryPredicate(fieldName))
.inner(fn.apply(MoneyQueryBuilderDsl.of())),
FieldContainerQueryBuilderDsl::of);
}

public CombinationQueryPredicate<FieldContainerQueryBuilderDsl> reference(
Function<ReferenceQueryBuilderDsl, CombinationQueryPredicate<ReferenceQueryBuilderDsl>> fn) {
return new CombinationQueryPredicate<>(ContainerQueryPredicate.of()
.parent(new ConstantQueryPredicate(fieldName))
.inner(fn.apply(ReferenceQueryBuilderDsl.of())),
FieldContainerQueryBuilderDsl::of);
}

public LongComparisonPredicateBuilder<FieldContainerQueryBuilderDsl> longNumber() {
return new LongComparisonPredicateBuilder<>(
BinaryQueryPredicate.of().left(new ConstantQueryPredicate(fieldName)),
p -> new CombinationQueryPredicate<>(p, FieldContainerQueryBuilderDsl::of));
}

public DoubleComparisonPredicateBuilder<FieldContainerQueryBuilderDsl> doubleNumber() {
return new DoubleComparisonPredicateBuilder<>(
BinaryQueryPredicate.of().left(new ConstantQueryPredicate(fieldName)),
p -> new CombinationQueryPredicate<>(p, FieldContainerQueryBuilderDsl::of));
}

public StringComparisonPredicateBuilder<FieldContainerQueryBuilderDsl> string() {
return new StringComparisonPredicateBuilder<>(
BinaryQueryPredicate.of().left(new ConstantQueryPredicate(fieldName)),
p -> new CombinationQueryPredicate<>(p, FieldContainerQueryBuilderDsl::of));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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))", }, };
}
}

0 comments on commit 56a9538

Please sign in to comment.