From 764d3b50d711033c91ddb31523e65a0fb9237845 Mon Sep 17 00:00:00 2001 From: Andrei Sereda <25229979+asereda-gs@users.noreply.github.com> Date: Fri, 6 Dec 2019 21:59:34 -0500 Subject: [PATCH] Drop interface NamingStrategy --- .../criteria/backend/ContainerNaming.java | 6 ++-- .../criteria/backend/ExpressionNaming.java | 9 +++--- .../criteria/backend/NamingStrategy.java | 32 ------------------- .../criteria/backend/PathNaming.java | 3 +- .../criteria/backend/UniqueCachedNaming.java | 15 +++++---- .../elasticsearch/AggregateQueryBuilder.java | 4 +-- .../criteria/mongo/AggregationQuery.java | 4 +-- .../criteria/mongo/MongoSession.java | 2 +- 8 files changed, 22 insertions(+), 53 deletions(-) delete mode 100644 criteria/common/src/org/immutables/criteria/backend/NamingStrategy.java diff --git a/criteria/common/src/org/immutables/criteria/backend/ContainerNaming.java b/criteria/common/src/org/immutables/criteria/backend/ContainerNaming.java index 532c67d4c..e24009f3f 100644 --- a/criteria/common/src/org/immutables/criteria/backend/ContainerNaming.java +++ b/criteria/common/src/org/immutables/criteria/backend/ContainerNaming.java @@ -22,9 +22,10 @@ import java.util.Objects; /** - * Resolves container name given a class. Container in this context means table, collection, index etc. + * Resolves container name given a class. Container in this context means RDBMS table, + * mongo collection, ElasticSearch index etc. */ -public interface ContainerNaming extends NamingStrategy> { +public interface ContainerNaming { /** * Resolve container name for a particular type. Container in this context means @@ -33,7 +34,6 @@ public interface ContainerNaming extends NamingStrategy> { * @throws UnsupportedOperationException if name can't be derived * @return name of the container (never null) */ - @Override String name(Class type); /** diff --git a/criteria/common/src/org/immutables/criteria/backend/ExpressionNaming.java b/criteria/common/src/org/immutables/criteria/backend/ExpressionNaming.java index a743cf86b..d1530d74b 100644 --- a/criteria/common/src/org/immutables/criteria/backend/ExpressionNaming.java +++ b/criteria/common/src/org/immutables/criteria/backend/ExpressionNaming.java @@ -18,16 +18,17 @@ import org.immutables.criteria.expression.Expression; -public interface ExpressionNaming extends NamingStrategy { +import java.util.function.Function; + +public interface ExpressionNaming { /** * Give a name to a expression */ - @Override String name(Expression expression); - static ExpressionNaming of(NamingStrategy delegate) { - return delegate::name; + static ExpressionNaming from(Function fn) { + return fn::apply; } } diff --git a/criteria/common/src/org/immutables/criteria/backend/NamingStrategy.java b/criteria/common/src/org/immutables/criteria/backend/NamingStrategy.java deleted file mode 100644 index 70fbba005..000000000 --- a/criteria/common/src/org/immutables/criteria/backend/NamingStrategy.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2019 Immutables Authors and Contributors - * - * 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 org.immutables.criteria.backend; - -/** - * Allows to name things like {@code Path}, {@code Container} etc. - * @param type of the instance to name - */ -public interface NamingStrategy { - - /** - * Give a generic or specific name to an entity - * @param toName instance to name - * @return string representation of {@code toName} - */ - String name(T toName); - -} diff --git a/criteria/common/src/org/immutables/criteria/backend/PathNaming.java b/criteria/common/src/org/immutables/criteria/backend/PathNaming.java index f9f36739e..4cef9a788 100644 --- a/criteria/common/src/org/immutables/criteria/backend/PathNaming.java +++ b/criteria/common/src/org/immutables/criteria/backend/PathNaming.java @@ -23,7 +23,7 @@ * * @see org.immutables.criteria.Criteria.Id */ -public interface PathNaming extends NamingStrategy { +public interface PathNaming { /** * Return name of a field (aka {@link Path}) like {@code a.b.c} or {@code _id}. @@ -31,7 +31,6 @@ public interface PathNaming extends NamingStrategy { * @param path path to be converted to string * @return path representation as string */ - @Override String name(Path path); static PathNaming defaultNaming() { diff --git a/criteria/common/src/org/immutables/criteria/backend/UniqueCachedNaming.java b/criteria/common/src/org/immutables/criteria/backend/UniqueCachedNaming.java index 75987febf..9fc241033 100644 --- a/criteria/common/src/org/immutables/criteria/backend/UniqueCachedNaming.java +++ b/criteria/common/src/org/immutables/criteria/backend/UniqueCachedNaming.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.Objects; +import java.util.function.Function; /** * Gives an unique (generated) name to objects so they can be used as identifiers in queries. @@ -32,7 +33,7 @@ * * @param */ -public class UniqueCachedNaming implements NamingStrategy { +public class UniqueCachedNaming implements Function { private static final Suggester PREFIX_SUGGESTER = (first, attempts, size) -> "expr" + size; @@ -82,18 +83,18 @@ public Converter asConverter() { return converter; } + @Override + public String apply(T value) { + return asConverter().convert(value); + } + /** - * Suggest a name for a value + * Suggest new string name for a value */ private interface Suggester { String suggest(T value, int attempts, int size); } - @Override - public String name(T toName) { - return asConverter().convert(toName); - } - public static UniqueCachedNaming of(Iterable iterable) { return new UniqueCachedNaming<>(iterable); } diff --git a/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/AggregateQueryBuilder.java b/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/AggregateQueryBuilder.java index fd2918b15..6c03d3c05 100644 --- a/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/AggregateQueryBuilder.java +++ b/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/AggregateQueryBuilder.java @@ -107,7 +107,7 @@ ObjectNode jsonQuery() { ObjectNode parent = json.with(AGGREGATIONS); for (Expression expr: orderedGroupBy) { final String name = ((Path) expr).toStringPath(); - final String aggName = naming.name(expr); + final String aggName = naming.apply(expr); final ObjectNode section = parent.with(aggName); final ObjectNode terms = section.with("terms"); terms.put("field", name); @@ -133,7 +133,7 @@ ObjectNode jsonQuery() { ObjectNode agg = nodeFactory.objectNode(); String field = ((Path) call.arguments().get(0)).toStringPath(); agg.with(toElasticAggregate(call)).put("field", field); - parent.set(naming.name(call), agg); + parent.set(naming.apply(call), agg); } } diff --git a/criteria/mongo/src/org/immutables/criteria/mongo/AggregationQuery.java b/criteria/mongo/src/org/immutables/criteria/mongo/AggregationQuery.java index 6ddcacaa3..858aa32d8 100644 --- a/criteria/mongo/src/org/immutables/criteria/mongo/AggregationQuery.java +++ b/criteria/mongo/src/org/immutables/criteria/mongo/AggregationQuery.java @@ -70,10 +70,10 @@ class AggregationQuery { .map(AggregationQuery::extractPath).collect(Collectors.toList()); @SuppressWarnings("unchecked") - ExpressionNaming naming = ExpressionNaming.of(UniqueCachedNaming.of(paths.iterator())); + ExpressionNaming naming = ExpressionNaming.from(UniqueCachedNaming.of(paths.iterator())); paths.forEach(p -> biMap.put(p, naming.name(p))); - this.projectionNaming = ExpressionNaming.of(UniqueCachedNaming.of(query.projections())); + this.projectionNaming = ExpressionNaming.from(UniqueCachedNaming.of(query.projections())); this.naming = ImmutableBiMap.copyOf(biMap); this.registry = MongoClientSettings.getDefaultCodecRegistry(); } diff --git a/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java b/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java index 6ecf6c434..f959a502c 100644 --- a/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java +++ b/criteria/mongo/src/org/immutables/criteria/mongo/MongoSession.java @@ -126,7 +126,7 @@ private Publisher query(StandardOperations.Select select) { final boolean hasProjections = query.hasProjections(); boolean useAggregationPipeline = query.hasAggregations() || query.distinct(); - ExpressionNaming expressionNaming = useAggregationPipeline ? ExpressionNaming.of(UniqueCachedNaming.of(query.projections())) : expression -> pathNaming.name((Path) expression); + ExpressionNaming expressionNaming = useAggregationPipeline ? ExpressionNaming.from(UniqueCachedNaming.of(query.projections())) : expression -> pathNaming.name((Path) expression); MongoCollection collection = this.collection; if (hasProjections) {