From a5f04813567d040aa47d4f2c753b773a78411caf Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Tue, 23 Jan 2024 11:31:44 +0100 Subject: [PATCH] refactor ranges --- .../ProductFacetExpressionBuilder.java | 24 ++++----- .../ProductFilterExpressionBuilder.java | 36 ++++++------- .../products/RangeFacetExpressionBuilder.java | 51 +++++++++++++++++++ .../products/TermFilterExpressionBuilder.java | 4 ++ .../commercetools/api/search/SearchTests.java | 29 ++++++++--- 5 files changed, 106 insertions(+), 38 deletions(-) create mode 100644 commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/RangeFacetExpressionBuilder.java diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFacetExpressionBuilder.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFacetExpressionBuilder.java index e1aed6c1df2..6c9276190a4 100644 --- a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFacetExpressionBuilder.java +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFacetExpressionBuilder.java @@ -145,28 +145,28 @@ public TermFacetExpression ofText(final String name) { return TermFacetExpression.of(expression.add(name), TermFormatter::format); } - public TermFacetExpression ofDate(final String name) { - return TermFacetExpression.of(expression.add(name), TermFormatter::format); + public RangeFacetExpressionBuilder ofDate(final String name) { + return RangeFacetExpressionBuilder.of(expression.add(name), TermFormatter::format); } - public TermFacetExpression ofTime(final String name) { - return TermFacetExpression.of(expression.add(name), TermFormatter::format); + public RangeFacetExpressionBuilder ofTime(final String name) { + return RangeFacetExpressionBuilder.of(expression.add(name), TermFormatter::format); } - public TermFacetExpression ofDatetime(final String name) { - return TermFacetExpression.of(expression.add(name), TermFormatter::format); + public RangeFacetExpressionBuilder ofDatetime(final String name) { + return RangeFacetExpressionBuilder.of(expression.add(name), TermFormatter::format); } public TermFacetExpression ofBool(final String name) { return TermFacetExpression.of(expression.add(name), TermFormatter::format); } - public TermFacetExpression ofNumber(final String name) { - return TermFacetExpression.of(expression.add(name), TermFormatter::format); + public RangeFacetExpressionBuilder ofNumber(final String name) { + return RangeFacetExpressionBuilder.of(expression.add(name), TermFormatter::format); } - public TermFacetExpression ofLong(final String name) { - return TermFacetExpression.of(expression.add(name), TermFormatter::format); + public RangeFacetExpressionBuilder ofLong(final String name) { + return RangeFacetExpressionBuilder.of(expression.add(name), TermFormatter::format); } public TermFacetExpression ofLocalizedString(final String name, final String language) { @@ -213,8 +213,8 @@ public AttributesMoneyFacetExpressionBuilder(final PathExpression expression) { this.expression = expression; } - public TermFacetExpression centAmount() { - return TermFacetExpression.of(expression.add("centAmount"), TermFormatter::format); + public RangeFacetExpressionBuilder centAmount() { + return RangeFacetExpressionBuilder.of(expression.add("centAmount"), TermFormatter::format); } public TermFacetExpression currencyCode() { diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFilterExpressionBuilder.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFilterExpressionBuilder.java index d32dd5396f8..0b0d31c22f0 100644 --- a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFilterExpressionBuilder.java +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/ProductFilterExpressionBuilder.java @@ -159,20 +159,20 @@ public ReviewRatingStatisticsFilterExpressionBuilder() { this.expression = PathExpression.of("reviewRatingStatistics"); } - public TermFilterExpressionBuilder averageRating() { - return TermFilterExpressionBuilder.of(expression.add("averageRating"), TermFormatter::format); + public RangeFilterExpressionBuilder averageRating() { + return RangeFilterExpressionBuilder.of(expression.add("averageRating"), TermFormatter::format); } - public TermFilterExpressionBuilder highestRating() { - return TermFilterExpressionBuilder.of(expression.add("highestRating"), TermFormatter::format); + public RangeFilterExpressionBuilder highestRating() { + return RangeFilterExpressionBuilder.of(expression.add("highestRating"), TermFormatter::format); } - public TermFilterExpressionBuilder lowestRating() { - return TermFilterExpressionBuilder.of(expression.add("lowestRating"), TermFormatter::format); + public RangeFilterExpressionBuilder lowestRating() { + return RangeFilterExpressionBuilder.of(expression.add("lowestRating"), TermFormatter::format); } - public TermFilterExpressionBuilder count() { - return TermFilterExpressionBuilder.of(expression.add("count"), TermFormatter::format); + public RangeFilterExpressionBuilder count() { + return RangeFilterExpressionBuilder.of(expression.add("count"), TermFormatter::format); } } @@ -347,28 +347,28 @@ public TermFilterExpressionBuilder asBoolean() { return new TermFilterExpressionBuilder<>(expression, TermFormatter::format); } - public TermFilterExpressionBuilder asLong() { - return new TermFilterExpressionBuilder<>(expression, TermFormatter::format); + public RangeFilterExpressionBuilder asLong() { + return new RangeFilterExpressionBuilder<>(expression, TermFormatter::format); } - public TermFilterExpressionBuilder asDouble() { - return new TermFilterExpressionBuilder<>(expression, TermFormatter::format); + public RangeFilterExpressionBuilder asDouble() { + return new RangeFilterExpressionBuilder<>(expression, TermFormatter::format); } public TermFilterExpressionBuilder asString() { return new TermFilterExpressionBuilder<>(expression, TermFormatter::format); } - public TermFilterExpressionBuilder asDateTime() { - return new TermFilterExpressionBuilder<>(expression, TermFormatter::format); + public RangeFilterExpressionBuilder asDateTime() { + return new RangeFilterExpressionBuilder<>(expression, TermFormatter::format); } - public TermFilterExpressionBuilder asDate() { - return new TermFilterExpressionBuilder<>(expression, TermFormatter::format); + public RangeFilterExpressionBuilder asDate() { + return new RangeFilterExpressionBuilder<>(expression, TermFormatter::format); } - public TermFilterExpressionBuilder asTime() { - return new TermFilterExpressionBuilder<>(expression, TermFormatter::format); + public RangeFilterExpressionBuilder asTime() { + return new RangeFilterExpressionBuilder<>(expression, TermFormatter::format); } public PriceFilterExpressionBuilder asMoney() { diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/RangeFacetExpressionBuilder.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/RangeFacetExpressionBuilder.java new file mode 100644 index 00000000000..767c98f30f2 --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/RangeFacetExpressionBuilder.java @@ -0,0 +1,51 @@ + +package com.commercetools.api.search.products; + +import java.util.Objects; +import java.util.function.Function; + +public class RangeFacetExpressionBuilder implements FilterExpression { + private final PathExpression expression; + private final Function formatter; + + public RangeFacetExpressionBuilder() { + this.expression = null; + this.formatter = null; + } + + public RangeFacetExpressionBuilder(PathExpression expression, Function formatter) { + this.expression = expression; + this.formatter = formatter; + } + + public TermFacetExpression is(T value) { + return TermFacetExpression.of(expression, formatter).is(value); + } + + public TermFacetExpression isIn(Iterable values) { + return TermFacetExpression.of(expression, formatter).isIn(values); + } + + public RangeFacetExpression rangeFrom(T from) { + return RangeFacetExpression.of(expression, formatter).rangeFrom(from); + } + + public RangeFacetExpression rangeTo(T to) { + return RangeFacetExpression.of(expression, formatter).rangeTo(to); + } + + public RangeFacetExpression range(T from, T to) { + return RangeFacetExpression.of(expression, formatter).range(from, to); + } + + @Override + public String render() { + Objects.requireNonNull(expression); + return expression.render(); + } + + public static RangeFacetExpressionBuilder of(PathExpression expression, + Function formatter) { + return new RangeFacetExpressionBuilder<>(expression, formatter); + } +} diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/TermFilterExpressionBuilder.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/TermFilterExpressionBuilder.java index 7d1c688c5b9..5be9d1b1ee8 100644 --- a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/TermFilterExpressionBuilder.java +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/search/products/TermFilterExpressionBuilder.java @@ -33,6 +33,10 @@ public FilterExpression missing() { return new ExistsTermFilterExpression(expression).missing(); } + public RangeFilterExpression ranges() { + return new RangeFilterExpression<>(expression, null, formatter); + } + public static TermFilterExpressionBuilder of(PathExpression expression, Function formatter) { return new TermFilterExpressionBuilder<>(expression, formatter); diff --git a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/search/SearchTests.java b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/search/SearchTests.java index 393f422c476..af6f2742a2a 100644 --- a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/search/SearchTests.java +++ b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/api/search/SearchTests.java @@ -156,6 +156,9 @@ public static Object[][] filterExpressions() { new Object[] { ProductFilterExpressionBuilder.of().state().missing(), "state: missing" }, new Object[] { ProductFilterExpressionBuilder.of().reviewRatingStatistics().averageRating().is(100L), "reviewRatingStatistics.averageRating: 100" }, + new Object[] { + ProductFilterExpressionBuilder.of().reviewRatingStatistics().averageRating().range(0L, 100L), + "reviewRatingStatistics.averageRating: range (0 to 100)" }, new Object[] { ProductFilterExpressionBuilder.of().reviewRatingStatistics().lowestRating().is(100L), "reviewRatingStatistics.lowestRating: 100" }, new Object[] { ProductFilterExpressionBuilder.of().reviewRatingStatistics().highestRating().is(100L), @@ -233,6 +236,8 @@ public static Object[][] filterExpressions() { "variants.attributes.foo: true" }, new Object[] { ProductFilterExpressionBuilder.of().variants().attribute("foo").asLong().is(100L), "variants.attributes.foo: 100" }, + new Object[] { ProductFilterExpressionBuilder.of().variants().attribute("foo").asLong().range(0L, 100L), + "variants.attributes.foo: range (0 to 100)" }, new Object[] { ProductFilterExpressionBuilder.of().variants().attribute("foo").asDouble().is(100.0), "variants.attributes.foo: 100.0" }, new Object[] { ProductFilterExpressionBuilder.of().variants().attribute("foo").asDouble().is(100.0), @@ -309,15 +314,16 @@ public static Object[][] facetExpressions() { "categories.id: \"foo\", subTree(\"bar\")" }, new Object[] { ProductFacetExpressionBuilder.of().categories().id().is("foo").subTree("bar").is("baz"), "categories.id: \"foo\", subTree(\"bar\"), \"baz\"" }, - new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofText("test"), - "variants.attributes.test" }, - new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofText("test").is("foo"), - "variants.attributes.test: \"foo\"" }, + new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofText("test-text"), + "variants.attributes.test-text" }, + new Object[] { + ProductFacetExpressionBuilder.of().variants().attribute().ofText("test-text-foo").is("foo"), + "variants.attributes.test-text-foo: \"foo\"" }, new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofText("test").is("foo").is("bar"), "variants.attributes.test: \"foo\", \"bar\"" }, - new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofDate("test"), - "variants.attributes.test" }, + new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofDate("test-date"), + "variants.attributes.test-date" }, new Object[] { ProductFacetExpressionBuilder.of() .variants() .attribute() @@ -365,6 +371,15 @@ public static Object[][] facetExpressions() { new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofMoney("test").centAmount().is(100L), "variants.attributes.test.centAmount: 100" }, + new Object[] { + ProductFacetExpressionBuilder.of() + .variants() + .attribute() + .ofMoney("test") + .centAmount() + .range(0L, 100L) + .range(101L, 200L), + "variants.attributes.test.centAmount: range (0 to 100), (101 to 200)" }, new Object[] { ProductFacetExpressionBuilder.of().variants().attribute().ofMoney("test").currencyCode(), "variants.attributes.test.currencyCode" }, new Object[] { ProductFacetExpressionBuilder.of() @@ -383,7 +398,6 @@ public static Object[][] facetExpressions() { .variants() .attribute() .ofLong("test") - .ranges() .range(0L, 100L) .rangeFrom(100L), "variants.attributes.test: range (0 to 100), (100 to *)" }, new Object[] { @@ -391,7 +405,6 @@ public static Object[][] facetExpressions() { .variants() .attribute() .ofLong("test") - .ranges() .range(0L, 100L) .rangeFrom(100L) .alias("range_test")