From 3e040d283bfe60127da97b792264fcc3b1e9865d Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 15 May 2018 10:36:18 +0200 Subject: [PATCH] DATAMONGO-1976 - Adapt to SpEL extension API changes in Spring Data Commons. Related tickets: DATACMNS-1260. --- .../ExpressionEvaluatingParameterBinder.java | 6 ++-- .../query/ReactiveStringBasedMongoQuery.java | 7 ++-- .../query/StringBasedMongoQuery.java | 11 +++--- .../support/MongoRepositoryFactory.java | 9 ++--- .../ReactiveMongoRepositoryFactory.java | 6 ++-- .../ReactiveMongoRepositoryTests.java | 35 ++++++++----------- .../SimpleReactiveMongoRepositoryTests.java | 4 +-- ...eactiveStringBasedMongoQueryUnitTests.java | 6 ++-- .../query/StringBasedMongoQueryUnitTests.java | 4 +-- ...rsonRepositoryIntegrationTests-context.xml | 8 ++--- 10 files changed, 46 insertions(+), 50 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ExpressionEvaluatingParameterBinder.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ExpressionEvaluatingParameterBinder.java index a371eabce..4241c3fec 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ExpressionEvaluatingParameterBinder.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ExpressionEvaluatingParameterBinder.java @@ -39,7 +39,7 @@ import org.bson.json.JsonWriter; import org.bson.types.Binary; import org.springframework.data.mongodb.CodecRegistryProvider; import org.springframework.data.mongodb.repository.query.StringBasedMongoQuery.ParameterBinding; -import org.springframework.data.repository.query.EvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.spel.standard.SpelExpressionParser; @@ -65,7 +65,7 @@ import com.mongodb.util.JSON; class ExpressionEvaluatingParameterBinder { private final SpelExpressionParser expressionParser; - private final EvaluationContextProvider evaluationContextProvider; + private final QueryMethodEvaluationContextProvider evaluationContextProvider; private final CodecRegistryProvider codecRegistryProvider; /** @@ -75,7 +75,7 @@ class ExpressionEvaluatingParameterBinder { * @param evaluationContextProvider must not be {@literal null}. */ public ExpressionEvaluatingParameterBinder(SpelExpressionParser expressionParser, - EvaluationContextProvider evaluationContextProvider) { + QueryMethodEvaluationContextProvider evaluationContextProvider) { Assert.notNull(expressionParser, "ExpressionParser must not be null!"); Assert.notNull(evaluationContextProvider, "EvaluationContextProvider must not be null!"); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java index 32495f41d..18b7ddaac 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQuery.java @@ -27,7 +27,8 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.repository.query.ExpressionEvaluatingParameterBinder.BindingContext; import org.springframework.data.mongodb.repository.query.StringBasedMongoQuery.ParameterBinding; import org.springframework.data.mongodb.repository.query.StringBasedMongoQuery.ParameterBindingParser; -import org.springframework.data.repository.query.EvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.spel.EvaluationContextProvider; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.util.Assert; @@ -62,7 +63,7 @@ public class ReactiveStringBasedMongoQuery extends AbstractReactiveMongoQuery { * @param evaluationContextProvider must not be {@literal null}. */ public ReactiveStringBasedMongoQuery(ReactiveMongoQueryMethod method, ReactiveMongoOperations mongoOperations, - SpelExpressionParser expressionParser, EvaluationContextProvider evaluationContextProvider) { + SpelExpressionParser expressionParser, QueryMethodEvaluationContextProvider evaluationContextProvider) { this(method.getAnnotatedQuery(), method, mongoOperations, expressionParser, evaluationContextProvider); } @@ -77,7 +78,7 @@ public class ReactiveStringBasedMongoQuery extends AbstractReactiveMongoQuery { */ public ReactiveStringBasedMongoQuery(String query, ReactiveMongoQueryMethod method, ReactiveMongoOperations mongoOperations, SpelExpressionParser expressionParser, - EvaluationContextProvider evaluationContextProvider) { + QueryMethodEvaluationContextProvider evaluationContextProvider) { super(method, mongoOperations); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java index 2a48d74ff..fb2898f02 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java @@ -28,7 +28,7 @@ import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.repository.query.ExpressionEvaluatingParameterBinder.BindingContext; -import org.springframework.data.repository.query.EvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -62,7 +62,8 @@ public class StringBasedMongoQuery extends AbstractMongoQuery { private final ExpressionEvaluatingParameterBinder parameterBinder; /** - * Creates a new {@link StringBasedMongoQuery} for the given {@link MongoQueryMethod} and {@link MongoOperations}. + * Creates a new {@link StringBasedMongoQuery} for the given {@link MongoQueryMethod}, {@link MongoOperations}, + * {@link SpelExpressionParser} and {@link QueryMethodEvaluationContextProvider}. * * @param method must not be {@literal null}. * @param mongoOperations must not be {@literal null}. @@ -70,13 +71,13 @@ public class StringBasedMongoQuery extends AbstractMongoQuery { * @param evaluationContextProvider must not be {@literal null}. */ public StringBasedMongoQuery(MongoQueryMethod method, MongoOperations mongoOperations, - SpelExpressionParser expressionParser, EvaluationContextProvider evaluationContextProvider) { + SpelExpressionParser expressionParser, QueryMethodEvaluationContextProvider evaluationContextProvider) { this(method.getAnnotatedQuery(), method, mongoOperations, expressionParser, evaluationContextProvider); } /** * Creates a new {@link StringBasedMongoQuery} for the given {@link String}, {@link MongoQueryMethod}, - * {@link MongoOperations}, {@link SpelExpressionParser} and {@link EvaluationContextProvider}. + * {@link MongoOperations}, {@link SpelExpressionParser} and {@link QueryMethodEvaluationContextProvider}. * * @param query must not be {@literal null}. * @param method must not be {@literal null}. @@ -84,7 +85,7 @@ public class StringBasedMongoQuery extends AbstractMongoQuery { * @param expressionParser must not be {@literal null}. */ public StringBasedMongoQuery(String query, MongoQueryMethod method, MongoOperations mongoOperations, - SpelExpressionParser expressionParser, EvaluationContextProvider evaluationContextProvider) { + SpelExpressionParser expressionParser, QueryMethodEvaluationContextProvider evaluationContextProvider) { super(method, mongoOperations); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java index 009022745..c2e1b05d0 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java @@ -39,9 +39,9 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryComposition.RepositoryFragments; import org.springframework.data.repository.core.support.RepositoryFactorySupport; import org.springframework.data.repository.core.support.RepositoryFragment; -import org.springframework.data.repository.query.EvaluationContextProvider; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.lang.Nullable; @@ -131,7 +131,7 @@ public class MongoRepositoryFactory extends RepositoryFactorySupport { */ @Override protected Optional getQueryLookupStrategy(@Nullable Key key, - EvaluationContextProvider evaluationContextProvider) { + QueryMethodEvaluationContextProvider evaluationContextProvider) { return Optional.of(new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext)); } @@ -160,10 +160,11 @@ public class MongoRepositoryFactory extends RepositoryFactorySupport { private static class MongoQueryLookupStrategy implements QueryLookupStrategy { private final MongoOperations operations; - private final EvaluationContextProvider evaluationContextProvider; + private final QueryMethodEvaluationContextProvider evaluationContextProvider; MappingContext, MongoPersistentProperty> mappingContext; - public MongoQueryLookupStrategy(MongoOperations operations, EvaluationContextProvider evaluationContextProvider, + public MongoQueryLookupStrategy(MongoOperations operations, + QueryMethodEvaluationContextProvider evaluationContextProvider, MappingContext, MongoPersistentProperty> mappingContext) { this.operations = operations; diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java index d5f234df3..401bf37e6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java @@ -36,9 +36,9 @@ import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.ReactiveRepositoryFactorySupport; -import org.springframework.data.repository.query.EvaluationContextProvider; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.lang.Nullable; @@ -99,7 +99,7 @@ public class ReactiveMongoRepositoryFactory extends ReactiveRepositoryFactorySup */ @Override protected Optional getQueryLookupStrategy(@Nullable Key key, - EvaluationContextProvider evaluationContextProvider) { + QueryMethodEvaluationContextProvider evaluationContextProvider) { return Optional.of(new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext)); } @@ -130,7 +130,7 @@ public class ReactiveMongoRepositoryFactory extends ReactiveRepositoryFactorySup private static class MongoQueryLookupStrategy implements QueryLookupStrategy { private final ReactiveMongoOperations operations; - private final EvaluationContextProvider evaluationContextProvider; + private final QueryMethodEvaluationContextProvider evaluationContextProvider; private final MappingContext, MongoPersistentProperty> mappingContext; /* diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java index 78481e682..3f6948dc0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java @@ -55,7 +55,7 @@ import org.springframework.data.mongodb.repository.Person.Sex; import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory; import org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository; import org.springframework.data.repository.Repository; -import org.springframework.data.repository.query.DefaultEvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.ClassUtils; @@ -97,7 +97,7 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF factory.setRepositoryBaseClass(SimpleReactiveMongoRepository.class); factory.setBeanClassLoader(classLoader); factory.setBeanFactory(beanFactory); - factory.setEvaluationContextProvider(DefaultEvaluationContextProvider.INSTANCE); + factory.setEvaluationContextProvider(QueryMethodEvaluationContextProvider.DEFAULT); repository = factory.getRepository(ReactivePersonRepository.class); cappedRepository = factory.getRepository(ReactiveCappedCollectionRepository.class); @@ -174,10 +174,9 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF @Test // DATAMONGO-1444 public void shouldUseTailableCursor() throws Exception { - StepVerifier - .create(template.dropCollection(Capped.class) // - .then(template.createCollection(Capped.class, // - CollectionOptions.empty().size(1000).maxDocuments(100).capped()))) // + StepVerifier.create(template.dropCollection(Capped.class) // + .then(template.createCollection(Capped.class, // + CollectionOptions.empty().size(1000).maxDocuments(100).capped()))) // .expectNextCount(1) // .verifyComplete(); @@ -199,10 +198,9 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF @Test // DATAMONGO-1444 public void shouldUseTailableCursorWithProjection() throws Exception { - StepVerifier - .create(template.dropCollection(Capped.class) // - .then(template.createCollection(Capped.class, // - CollectionOptions.empty().size(1000).maxDocuments(100).capped()))) // + StepVerifier.create(template.dropCollection(Capped.class) // + .then(template.createCollection(Capped.class, // + CollectionOptions.empty().size(1000).maxDocuments(100).capped()))) // .expectNextCount(1) // .verifyComplete(); @@ -246,9 +244,8 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF dave.setLocation(point); StepVerifier.create(repository.save(dave)).expectNextCount(1).verifyComplete(); - StepVerifier - .create(repository.findByLocationWithin(new Circle(-78.99171, 45.738868, 170), // - PageRequest.of(0, 10))) // + StepVerifier.create(repository.findByLocationWithin(new Circle(-78.99171, 45.738868, 170), // + PageRequest.of(0, 10))) // .expectNext(dave) // .verifyComplete(); } @@ -276,10 +273,9 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF dave.setLocation(point); StepVerifier.create(repository.save(dave)).expectNextCount(1).verifyComplete(); - StepVerifier - .create(repository.findByLocationNear(new Point(-73.99, 40.73), // - new Distance(2000, Metrics.KILOMETERS), // - PageRequest.of(0, 10))) // + StepVerifier.create(repository.findByLocationNear(new Point(-73.99, 40.73), // + new Distance(2000, Metrics.KILOMETERS), // + PageRequest.of(0, 10))) // .consumeNextWith(actual -> { assertThat(actual.getDistance().getValue(), is(closeTo(1, 1))); @@ -294,9 +290,8 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF dave.setLocation(point); StepVerifier.create(repository.save(dave)).expectNextCount(1).verifyComplete(); - StepVerifier - .create(repository.findPersonByLocationNear(new Point(-73.99, 40.73), // - new Distance(2000, Metrics.KILOMETERS))) // + StepVerifier.create(repository.findPersonByLocationNear(new Point(-73.99, 40.73), // + new Distance(2000, Metrics.KILOMETERS))) // .expectNext(dave) // .verifyComplete(); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/SimpleReactiveMongoRepositoryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/SimpleReactiveMongoRepositoryTests.java index 9da351d62..404f6cba9 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/SimpleReactiveMongoRepositoryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/SimpleReactiveMongoRepositoryTests.java @@ -44,7 +44,7 @@ import org.springframework.data.domain.Sort.Order; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory; import org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository; -import org.springframework.data.repository.query.DefaultEvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.ClassUtils; @@ -86,7 +86,7 @@ public class SimpleReactiveMongoRepositoryTests implements BeanClassLoaderAware, factory.setRepositoryBaseClass(SimpleReactiveMongoRepository.class); factory.setBeanClassLoader(classLoader); factory.setBeanFactory(beanFactory); - factory.setEvaluationContextProvider(DefaultEvaluationContextProvider.INSTANCE); + factory.setEvaluationContextProvider(QueryMethodEvaluationContextProvider.DEFAULT); repository = factory.getRepository(ReactivePersonRepostitory.class); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java index c640b25d3..1f51f9f86 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ReactiveStringBasedMongoQueryUnitTests.java @@ -17,8 +17,8 @@ package org.springframework.data.mongodb.repository.query; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; -import static org.mockito.Mockito.any; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -51,7 +51,7 @@ import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.projection.SpelAwareProxyProjectionFactory; import org.springframework.data.repository.Repository; import org.springframework.data.repository.core.support.DefaultRepositoryMetadata; -import org.springframework.data.repository.query.DefaultEvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.expression.spel.standard.SpelExpressionParser; /** @@ -223,7 +223,7 @@ public class ReactiveStringBasedMongoQueryUnitTests { ReactiveMongoQueryMethod queryMethod = new ReactiveMongoQueryMethod(method, new DefaultRepositoryMetadata(SampleRepository.class), factory, converter.getMappingContext()); return new ReactiveStringBasedMongoQuery(queryMethod, operations, PARSER, - DefaultEvaluationContextProvider.INSTANCE); + QueryMethodEvaluationContextProvider.DEFAULT); } private interface SampleRepository extends Repository { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java index 6e6a53bbe..690553c03 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQueryUnitTests.java @@ -53,7 +53,7 @@ import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.projection.SpelAwareProxyProjectionFactory; import org.springframework.data.repository.Repository; import org.springframework.data.repository.core.support.DefaultRepositoryMetadata; -import org.springframework.data.repository.query.DefaultEvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.expression.spel.standard.SpelExpressionParser; /** @@ -565,7 +565,7 @@ public class StringBasedMongoQueryUnitTests { ProjectionFactory factory = new SpelAwareProxyProjectionFactory(); MongoQueryMethod queryMethod = new MongoQueryMethod(method, new DefaultRepositoryMetadata(SampleRepository.class), factory, converter.getMappingContext()); - return new StringBasedMongoQuery(queryMethod, operations, PARSER, DefaultEvaluationContextProvider.INSTANCE); + return new StringBasedMongoQuery(queryMethod, operations, PARSER, QueryMethodEvaluationContextProvider.DEFAULT); } catch (Exception e) { throw new IllegalArgumentException(e.getMessage(), e); diff --git a/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/repository/PersonRepositoryIntegrationTests-context.xml b/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/repository/PersonRepositoryIntegrationTests-context.xml index 119940c35..0b139d1eb 100644 --- a/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/repository/PersonRepositoryIntegrationTests-context.xml +++ b/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/repository/PersonRepositoryIntegrationTests-context.xml @@ -29,10 +29,8 @@ - - - - - + + +