Skip to content

Commit 8d3d27e

Browse files
mp911deschauder
authored andcommitted
Adopt to deprecation removals in Commons.
Closes #609
1 parent a2e0683 commit 8d3d27e

File tree

6 files changed

+49
-46
lines changed

6 files changed

+49
-46
lines changed

src/main/java/org/springframework/data/keyvalue/repository/query/CachingKeyValuePartTreeQuery.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.springframework.data.keyvalue.core.KeyValueOperations;
1919
import org.springframework.data.keyvalue.core.query.KeyValueQuery;
2020
import org.springframework.data.repository.query.QueryMethod;
21-
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
21+
import org.springframework.data.repository.query.ValueExpressionDelegate;
2222
import org.springframework.data.repository.query.parser.AbstractQueryCreator;
2323
import org.springframework.data.repository.query.parser.PartTree;
2424
import org.springframework.lang.Nullable;
@@ -36,9 +36,9 @@ public class CachingKeyValuePartTreeQuery extends KeyValuePartTreeQuery {
3636
private @Nullable KeyValueQuery<?> cachedQuery;
3737

3838
public CachingKeyValuePartTreeQuery(QueryMethod queryMethod,
39-
QueryMethodEvaluationContextProvider evaluationContextProvider, KeyValueOperations keyValueOperations,
39+
ValueExpressionDelegate valueExpressionDelegate, KeyValueOperations keyValueOperations,
4040
Class<? extends AbstractQueryCreator<?, ?>> queryCreator) {
41-
super(queryMethod, evaluationContextProvider, keyValueOperations, queryCreator);
41+
super(queryMethod, valueExpressionDelegate, keyValueOperations, queryCreator);
4242
}
4343

4444
protected KeyValueQuery<?> prepareQuery(Object[] parameters) {

src/main/java/org/springframework/data/keyvalue/repository/query/KeyValuePartTreeQuery.java

+15-13
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,22 @@
2121
import org.springframework.data.domain.PageImpl;
2222
import org.springframework.data.domain.Pageable;
2323
import org.springframework.data.domain.Sort;
24+
import org.springframework.data.expression.ValueEvaluationContext;
25+
import org.springframework.data.expression.ValueEvaluationContextProvider;
2426
import org.springframework.data.keyvalue.core.IterableConverter;
2527
import org.springframework.data.keyvalue.core.KeyValueOperations;
2628
import org.springframework.data.keyvalue.core.SpelCriteria;
2729
import org.springframework.data.keyvalue.core.query.KeyValueQuery;
2830
import org.springframework.data.repository.query.ParameterAccessor;
2931
import org.springframework.data.repository.query.ParametersParameterAccessor;
3032
import org.springframework.data.repository.query.QueryMethod;
31-
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
3233
import org.springframework.data.repository.query.RepositoryQuery;
3334
import org.springframework.data.repository.query.ResultProcessor;
35+
import org.springframework.data.repository.query.ValueExpressionDelegate;
3436
import org.springframework.data.repository.query.parser.AbstractQueryCreator;
3537
import org.springframework.data.repository.query.parser.PartTree;
3638
import org.springframework.data.spel.EvaluationContextProvider;
3739
import org.springframework.data.util.Lazy;
38-
import org.springframework.expression.EvaluationContext;
3940
import org.springframework.expression.spel.standard.SpelExpression;
4041
import org.springframework.lang.Nullable;
4142
import org.springframework.util.Assert;
@@ -54,22 +55,23 @@ public class KeyValuePartTreeQuery implements RepositoryQuery {
5455
private final Lazy<PartTree> partTree;
5556
private final QueryMethod queryMethod;
5657
private final KeyValueOperations keyValueOperations;
57-
private final QueryMethodEvaluationContextProvider evaluationContextProvider;
58+
private final ValueExpressionDelegate valueExpressionDelegate;
5859
private final QueryCreatorFactory<AbstractQueryCreator<KeyValueQuery<?>, ?>> queryCreatorFactory;
60+
private final ValueEvaluationContextProvider evaluationContextProvider;
5961

6062
/**
6163
* Creates a new {@link KeyValuePartTreeQuery} for the given {@link QueryMethod}, {@link EvaluationContextProvider},
6264
* {@link KeyValueOperations} and query creator type.
6365
*
6466
* @param queryMethod must not be {@literal null}.
65-
* @param evaluationContextProvider must not be {@literal null}.
67+
* @param valueExpressionDelegate must not be {@literal null}.
6668
* @param keyValueOperations must not be {@literal null}.
6769
* @param queryCreator must not be {@literal null}.
6870
*/
69-
public KeyValuePartTreeQuery(QueryMethod queryMethod, QueryMethodEvaluationContextProvider evaluationContextProvider,
71+
public KeyValuePartTreeQuery(QueryMethod queryMethod, ValueExpressionDelegate valueExpressionDelegate,
7072
KeyValueOperations keyValueOperations, Class<? extends AbstractQueryCreator<?, ?>> queryCreator) {
7173

72-
this(queryMethod, evaluationContextProvider, keyValueOperations,
74+
this(queryMethod, valueExpressionDelegate, keyValueOperations,
7375
new ConstructorCachingQueryCreatorFactory(queryCreator));
7476
}
7577

@@ -79,26 +81,27 @@ public KeyValuePartTreeQuery(QueryMethod queryMethod, QueryMethodEvaluationConte
7981
* in charge of altering the query.
8082
*
8183
* @param queryMethod must not be {@literal null}.
82-
* @param evaluationContextProvider must not be {@literal null}.
84+
* @param valueExpressionDelegate must not be {@literal null}.
8385
* @param keyValueOperations must not be {@literal null}.
8486
* @param queryCreatorFactory must not be {@literal null}.
8587
* @since 2.0
8688
*/
87-
public KeyValuePartTreeQuery(QueryMethod queryMethod, QueryMethodEvaluationContextProvider evaluationContextProvider,
89+
public KeyValuePartTreeQuery(QueryMethod queryMethod, ValueExpressionDelegate valueExpressionDelegate,
8890
KeyValueOperations keyValueOperations,
8991
QueryCreatorFactory<AbstractQueryCreator<KeyValueQuery<?>, ?>> queryCreatorFactory) {
9092

9193
Assert.notNull(queryMethod, "Query method must not be null");
92-
Assert.notNull(evaluationContextProvider, "EvaluationContextProvider must not be null");
94+
Assert.notNull(valueExpressionDelegate, "ValueExpressionDelegate must not be null");
9395
Assert.notNull(keyValueOperations, "KeyValueOperations must not be null");
9496
Assert.notNull(queryCreatorFactory, "QueryCreatorFactory type must not be null");
9597

9698
this.partTree = Lazy
9799
.of(() -> new PartTree(queryMethod.getName(), queryMethod.getEntityInformation().getJavaType()));
98100
this.queryMethod = queryMethod;
99101
this.keyValueOperations = keyValueOperations;
100-
this.evaluationContextProvider = evaluationContextProvider;
102+
this.valueExpressionDelegate = valueExpressionDelegate;
101103
this.queryCreatorFactory = queryCreatorFactory;
104+
this.evaluationContextProvider = valueExpressionDelegate.createValueContextProvider(queryMethod.getParameters());
102105
}
103106

104107
@Override
@@ -160,9 +163,8 @@ protected KeyValueQuery<?> prepareQuery(KeyValueQuery<?> instance, Object[] para
160163
if (criteria instanceof SpelCriteria || criteria instanceof SpelExpression) {
161164

162165
SpelExpression spelExpression = getSpelExpression(criteria);
163-
EvaluationContext context = this.evaluationContextProvider.getEvaluationContext(getQueryMethod().getParameters(),
164-
parameters);
165-
criteria = new SpelCriteria(spelExpression, context);
166+
ValueEvaluationContext context = this.evaluationContextProvider.getEvaluationContext(parameters);
167+
criteria = new SpelCriteria(spelExpression, context.getRequiredEvaluationContext());
166168
}
167169

168170
KeyValueQuery<?> query = new KeyValueQuery(criteria);

src/main/java/org/springframework/data/keyvalue/repository/support/KeyValueRepositoryFactory.java

+12-13
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
import org.springframework.data.repository.query.QueryLookupStrategy;
4242
import org.springframework.data.repository.query.QueryLookupStrategy.Key;
4343
import org.springframework.data.repository.query.QueryMethod;
44-
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
4544
import org.springframework.data.repository.query.RepositoryQuery;
45+
import org.springframework.data.repository.query.ValueExpressionDelegate;
4646
import org.springframework.data.repository.query.parser.AbstractQueryCreator;
4747
import org.springframework.lang.Nullable;
4848
import org.springframework.util.Assert;
@@ -175,8 +175,8 @@ private static boolean isQueryDslRepository(Class<?> repositoryInterface) {
175175

176176
@Override
177177
protected Optional<QueryLookupStrategy> getQueryLookupStrategy(@Nullable Key key,
178-
QueryMethodEvaluationContextProvider evaluationContextProvider) {
179-
return Optional.of(new KeyValueQueryLookupStrategy(key, evaluationContextProvider, this.keyValueOperations,
178+
ValueExpressionDelegate valueExpressionDelegate) {
179+
return Optional.of(new KeyValueQueryLookupStrategy(key, valueExpressionDelegate, this.keyValueOperations,
180180
this.queryCreator, this.repositoryQueryType));
181181
}
182182

@@ -186,30 +186,29 @@ protected Optional<QueryLookupStrategy> getQueryLookupStrategy(@Nullable Key key
186186
*/
187187
private static class KeyValueQueryLookupStrategy implements QueryLookupStrategy {
188188

189-
private final QueryMethodEvaluationContextProvider evaluationContextProvider;
189+
private final ValueExpressionDelegate valueExpressionDelegate;
190190
private final KeyValueOperations keyValueOperations;
191191

192192
private final Class<? extends AbstractQueryCreator<?, ?>> queryCreator;
193193
private final Class<? extends RepositoryQuery> repositoryQueryType;
194194

195195
/**
196196
* @param key
197-
* @param evaluationContextProvider
197+
* @param valueExpressionDelegate
198198
* @param keyValueOperations
199199
* @param queryCreator
200200
* @since 1.1
201201
*/
202-
public KeyValueQueryLookupStrategy(@Nullable Key key,
203-
QueryMethodEvaluationContextProvider evaluationContextProvider, KeyValueOperations keyValueOperations,
204-
Class<? extends AbstractQueryCreator<?, ?>> queryCreator,
202+
public KeyValueQueryLookupStrategy(@Nullable Key key, ValueExpressionDelegate valueExpressionDelegate,
203+
KeyValueOperations keyValueOperations, Class<? extends AbstractQueryCreator<?, ?>> queryCreator,
205204
Class<? extends RepositoryQuery> repositoryQueryType) {
206205

207-
Assert.notNull(evaluationContextProvider, "EvaluationContextProvider must not be null");
206+
Assert.notNull(valueExpressionDelegate, "ValueExpressionDelegate must not be null");
208207
Assert.notNull(keyValueOperations, "KeyValueOperations must not be null");
209208
Assert.notNull(queryCreator, "Query creator type must not be null");
210209
Assert.notNull(repositoryQueryType, "RepositoryQueryType type must not be null");
211210

212-
this.evaluationContextProvider = evaluationContextProvider;
211+
this.valueExpressionDelegate = valueExpressionDelegate;
213212
this.keyValueOperations = keyValueOperations;
214213
this.queryCreator = queryCreator;
215214
this.repositoryQueryType = repositoryQueryType;
@@ -223,15 +222,15 @@ public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata,
223222
QueryMethod queryMethod = new QueryMethod(method, metadata, factory);
224223

225224
Constructor<? extends KeyValuePartTreeQuery> constructor = (Constructor<? extends KeyValuePartTreeQuery>) ClassUtils
226-
.getConstructorIfAvailable(this.repositoryQueryType, QueryMethod.class,
227-
QueryMethodEvaluationContextProvider.class, KeyValueOperations.class, Class.class);
225+
.getConstructorIfAvailable(this.repositoryQueryType, QueryMethod.class, ValueExpressionDelegate.class,
226+
KeyValueOperations.class, Class.class);
228227

229228
Assert.state(constructor != null,
230229
String.format(
231230
"Constructor %s(QueryMethod, EvaluationContextProvider, KeyValueOperations, Class) not available",
232231
ClassUtils.getShortName(this.repositoryQueryType)));
233232

234-
return BeanUtils.instantiateClass(constructor, queryMethod, evaluationContextProvider, this.keyValueOperations,
233+
return BeanUtils.instantiateClass(constructor, queryMethod, valueExpressionDelegate, this.keyValueOperations,
235234
this.queryCreator);
236235
}
237236
}

src/test/java/org/springframework/data/keyvalue/repository/query/AbstractQueryCreatorTestBase.java

+3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.junit.jupiter.api.extension.ExtendWith;
3030
import org.mockito.Mock;
3131
import org.mockito.junit.jupiter.MockitoExtension;
32+
import org.mockito.junit.jupiter.MockitoSettings;
33+
import org.mockito.quality.Strictness;
3234

3335
import org.springframework.dao.InvalidDataAccessApiUsageException;
3436
import org.springframework.data.annotation.Id;
@@ -48,6 +50,7 @@
4850
* @author Tom Van Wemmel
4951
*/
5052
@ExtendWith(MockitoExtension.class)
53+
@MockitoSettings(strictness = Strictness.LENIENT)
5154
public abstract class AbstractQueryCreatorTestBase<QUERY_CREATOR extends AbstractQueryCreator<KeyValueQuery<CRITERIA>, ?>, CRITERIA> {
5255

5356
static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_ZONED_DATE_TIME;

src/test/java/org/springframework/data/keyvalue/repository/query/CachingKeyValuePartTreeQueryUnitTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import org.springframework.data.projection.ProjectionFactory;
3434
import org.springframework.data.repository.core.RepositoryMetadata;
3535
import org.springframework.data.repository.query.QueryMethod;
36-
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
36+
import org.springframework.data.repository.query.ValueExpressionDelegate;
3737
import org.springframework.data.util.TypeInformation;
3838

3939
/**
@@ -64,8 +64,8 @@ void cachedSpelExpressionShouldBeReusedWithNewContext() throws NoSuchMethodExcep
6464
QueryMethod qm = new QueryMethod(Repo.class.getMethod("findByFirstname", String.class), metadataMock,
6565
projectionFactoryMock);
6666

67-
KeyValuePartTreeQuery query = new CachingKeyValuePartTreeQuery(qm, QueryMethodEvaluationContextProvider.DEFAULT,
68-
kvOpsMock, SpelQueryCreator.class);
67+
KeyValuePartTreeQuery query = new CachingKeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
68+
SpelQueryCreator.class);
6969

7070
Object[] args = new Object[] { "foo" };
7171

src/test/java/org/springframework/data/keyvalue/repository/query/KeyValuePartTreeQueryUnitTests.java

+13-14
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import org.springframework.data.projection.ProjectionFactory;
3636
import org.springframework.data.repository.core.RepositoryMetadata;
3737
import org.springframework.data.repository.query.QueryMethod;
38-
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
38+
import org.springframework.data.repository.query.ValueExpressionDelegate;
3939
import org.springframework.data.util.TypeInformation;
4040

4141
/**
@@ -61,7 +61,7 @@ void spelExpressionAndContextShouldNotBeReused() throws NoSuchMethodException, S
6161
QueryMethod qm = new QueryMethod(Repo.class.getMethod("findByFirstname", String.class), metadataMock,
6262
projectionFactoryMock);
6363

64-
KeyValuePartTreeQuery query = new KeyValuePartTreeQuery(qm, QueryMethodEvaluationContextProvider.DEFAULT, kvOpsMock,
64+
KeyValuePartTreeQuery query = new KeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
6565
SpelQueryCreator.class);
6666

6767
Object[] args = new Object[] { "foo" };
@@ -84,8 +84,8 @@ void shouldApplyPageableParameterToCollectionQuery() throws SecurityException, N
8484
QueryMethod qm = new QueryMethod(Repo.class.getMethod("findBy", Pageable.class), metadataMock,
8585
projectionFactoryMock);
8686

87-
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, QueryMethodEvaluationContextProvider.DEFAULT,
88-
kvOpsMock, SpelQueryCreator.class);
87+
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
88+
SpelQueryCreator.class);
8989

9090
KeyValueQuery<?> query = partTreeQuery.prepareQuery(new Object[] { PageRequest.of(2, 3) });
9191

@@ -102,11 +102,11 @@ void shouldAllowProjectionQueries() throws SecurityException, NoSuchMethodExcept
102102
when(metadataMock.getReturnType(any(Method.class))).thenReturn((TypeInformation) TypeInformation.of(List.class));
103103
when(metadataMock.getReturnedDomainClass(any(Method.class))).thenReturn((Class) Person.class);
104104

105-
QueryMethod qm = new QueryMethod(Repo.class.getMethod("findProjectionByFirstname",String.class), metadataMock,
105+
QueryMethod qm = new QueryMethod(Repo.class.getMethod("findProjectionByFirstname", String.class), metadataMock,
106106
projectionFactoryMock);
107107

108-
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, QueryMethodEvaluationContextProvider.DEFAULT,
109-
kvOpsMock, SpelQueryCreator.class);
108+
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
109+
SpelQueryCreator.class);
110110

111111
KeyValueQuery<?> query = partTreeQuery.prepareQuery(new Object[] { "firstname" });
112112
partTreeQuery.doExecute(new Object[] { "firstname" }, query);
@@ -119,14 +119,13 @@ void shouldAllowProjectionQueries() throws SecurityException, NoSuchMethodExcept
119119
void shouldApplyDerivedMaxResultsToQuery() throws SecurityException, NoSuchMethodException {
120120

121121
when(metadataMock.getDomainType()).thenReturn((Class) Person.class);
122-
when(metadataMock.getDomainTypeInformation()).thenReturn((TypeInformation) TypeInformation.of(Person.class));
123122
when(metadataMock.getReturnType(any(Method.class))).thenReturn((TypeInformation) TypeInformation.of(List.class));
124123
when(metadataMock.getReturnedDomainClass(any(Method.class))).thenReturn((Class) Person.class);
125124

126125
QueryMethod qm = new QueryMethod(Repo.class.getMethod("findTop3By"), metadataMock, projectionFactoryMock);
127126

128-
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, QueryMethodEvaluationContextProvider.DEFAULT,
129-
kvOpsMock, SpelQueryCreator.class);
127+
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
128+
SpelQueryCreator.class);
130129

131130
KeyValueQuery<?> query = partTreeQuery.prepareQuery(new Object[] {});
132131

@@ -145,8 +144,8 @@ void shouldApplyDerivedMaxResultsToQueryWithParameters() throws SecurityExceptio
145144
QueryMethod qm = new QueryMethod(Repo.class.getMethod("findTop3ByFirstname", String.class), metadataMock,
146145
projectionFactoryMock);
147146

148-
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, QueryMethodEvaluationContextProvider.DEFAULT,
149-
kvOpsMock, SpelQueryCreator.class);
147+
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
148+
SpelQueryCreator.class);
150149

151150
KeyValueQuery<?> query = partTreeQuery.prepareQuery(new Object[] { "firstname" });
152151

@@ -167,8 +166,8 @@ void shouldUseCountForExists() throws NoSuchMethodException {
167166
QueryMethod qm = new QueryMethod(Repo.class.getMethod("existsByFirstname", String.class), metadataMock,
168167
projectionFactoryMock);
169168

170-
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, QueryMethodEvaluationContextProvider.DEFAULT,
171-
kvOpsMock, SpelQueryCreator.class);
169+
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
170+
SpelQueryCreator.class);
172171

173172
KeyValueQuery<?> query = partTreeQuery.prepareQuery(new Object[] { "firstname" });
174173
partTreeQuery.doExecute(new Object[] { "firstname" }, query);

0 commit comments

Comments
 (0)