Skip to content

Commit e9bfa66

Browse files
Added examples for base value expressions
1 parent 36ce15a commit e9bfa66

File tree

6 files changed

+73
-143
lines changed

6 files changed

+73
-143
lines changed

src/main/java/org/springframework/data/ldap/repository/query/AnnotatedLdapRepositoryQuery.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class AnnotatedLdapRepositoryQuery extends AbstractLdapRepositoryQuery {
4040
private final Query queryAnnotation;
4141
private final ValueExpressionDelegate valueExpressionDelegate;
4242
private final StringBasedQuery stringBasedQuery;
43+
private final StringBasedQuery stringBasedBase;
4344

4445
/**
4546
* Construct a new instance.
@@ -80,9 +81,9 @@ public AnnotatedLdapRepositoryQuery(LdapQueryMethod queryMethod, Class<?> entity
8081
Assert.hasLength(queryMethod.getQueryAnnotation().value(), "Query filter must be specified");
8182

8283
queryAnnotation = queryMethod.getRequiredQueryAnnotation();
83-
String queryValue = queryAnnotation.value();
8484
this.valueExpressionDelegate = valueExpressionDelegate;
85-
stringBasedQuery = new StringBasedQuery(queryValue, queryMethod.getParameters(), valueExpressionDelegate);
85+
stringBasedQuery = new StringBasedQuery(queryAnnotation.value(), queryMethod.getParameters(), valueExpressionDelegate);
86+
stringBasedBase = new StringBasedQuery(queryAnnotation.base(), queryMethod.getParameters(), valueExpressionDelegate);
8687
}
8788

8889
@Override
@@ -91,16 +92,29 @@ protected LdapQuery createQuery(LdapParameterAccessor parameters) {
9192
ValueEvaluationContextProvider valueContextProvider = valueExpressionDelegate
9293
.createValueContextProvider(getQueryMethod().getParameters());
9394

94-
ValueEvaluationContext evaluationContext = valueContextProvider
95-
.getEvaluationContext(parameters.getBindableParameterValues(), stringBasedQuery.getExpressionDependencies());
95+
String boundQuery = boundQuery(parameters, valueContextProvider);
9696

97-
String boundQuery = stringBasedQuery.bindQuery(parameters,
98-
new ContextualValueExpressionEvaluator(valueExpressionDelegate, evaluationContext));
97+
String boundBase = boundBase(parameters, valueContextProvider);
9998

100-
return query().base(queryAnnotation.base()) //
99+
return query().base(boundBase) //
101100
.searchScope(queryAnnotation.searchScope()) //
102101
.countLimit(queryAnnotation.countLimit()) //
103102
.timeLimit(queryAnnotation.timeLimit()) //
104103
.filter(boundQuery);
105104
}
105+
106+
private String boundQuery(LdapParameterAccessor parameters, ValueEvaluationContextProvider valueContextProvider) {
107+
ValueEvaluationContext evaluationContext = valueContextProvider
108+
.getEvaluationContext(parameters.getBindableParameterValues(), stringBasedQuery.getExpressionDependencies());
109+
return stringBasedQuery.bindQuery(parameters,
110+
new ContextualValueExpressionEvaluator(valueExpressionDelegate, evaluationContext));
111+
}
112+
113+
private String boundBase(LdapParameterAccessor parameters, ValueEvaluationContextProvider valueContextProvider) {
114+
ValueEvaluationContext evaluationContext = valueContextProvider
115+
.getEvaluationContext(parameters.getBindableParameterValues(), stringBasedBase.getExpressionDependencies());
116+
return stringBasedBase.bindQuery(parameters,
117+
new ContextualValueExpressionEvaluator(valueExpressionDelegate, evaluationContext));
118+
}
119+
106120
}

src/main/java/org/springframework/data/ldap/repository/query/BindingContext.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.springframework.data.mapping.model.ValueExpressionEvaluator;
2323
import org.springframework.data.repository.query.Parameter;
2424
import org.springframework.data.repository.query.ParameterAccessor;
25+
import org.springframework.data.repository.query.Parameters;
2526
import org.springframework.lang.Nullable;
2627
import org.springframework.util.Assert;
2728

@@ -33,7 +34,7 @@
3334
*/
3435
class BindingContext {
3536

36-
private final LdapParameters parameters;
37+
private final Parameters<?, ?> parameters;
3738

3839
private final ParameterAccessor parameterAccessor;
3940

@@ -44,7 +45,7 @@ class BindingContext {
4445
/**
4546
* Create new {@link BindingContext}.
4647
*/
47-
BindingContext(LdapParameters parameters, ParameterAccessor parameterAccessor,
48+
BindingContext(Parameters<?, ?> parameters, ParameterAccessor parameterAccessor,
4849
List<ParameterBinding> bindings, ValueExpressionEvaluator evaluator) {
4950

5051
this.parameters = parameters;
@@ -100,10 +101,10 @@ private Object getParameterValueForBinding(ParameterBinding binding) {
100101
: parameterAccessor.getBindableValue(binding.getParameterIndex());
101102
}
102103

103-
private int getParameterIndex(LdapParameters parameters, String parameterName) {
104+
private int getParameterIndex(Parameters<?, ?> parameters, String parameterName) {
104105

105106
return parameters.stream() //
106-
.filter(cassandraParameter -> cassandraParameter //
107+
.filter(parameter -> parameter //
107108
.getName().filter(s -> s.equals(parameterName)) //
108109
.isPresent()) //
109110
.mapToInt(Parameter::getIndex) //

src/main/java/org/springframework/data/ldap/repository/query/LdapParameters.java

Lines changed: 0 additions & 119 deletions
This file was deleted.

src/main/java/org/springframework/data/ldap/repository/query/LdapQueryMethod.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,4 @@ Query getRequiredQueryAnnotation() {
8888
throw new IllegalStateException("Required @Query annotation is not present");
8989
}
9090

91-
@Override
92-
public LdapParameters getParameters() {
93-
return (LdapParameters) super.getParameters();
94-
}
95-
96-
@Override
97-
protected Parameters<?, ?> createParameters(ParametersSource parametersSource) {
98-
return new LdapParameters(parametersSource);
99-
}
10091
}

src/main/java/org/springframework/data/ldap/repository/query/StringBasedQuery.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class StringBasedQuery {
4242

4343
private final String query;
4444

45-
private final LdapParameters parameters;
45+
private final Parameters<?, ?> parameters;
4646

4747
private final ValueExpressionDelegate expressionParser;
4848

@@ -57,7 +57,7 @@ class StringBasedQuery {
5757
* @param parameters must not be {@literal null}.
5858
* @param expressionParser must not be {@literal null}.
5959
*/
60-
StringBasedQuery(String query, LdapParameters parameters, ValueExpressionDelegate expressionParser) {
60+
StringBasedQuery(String query, Parameters<?, ?> parameters, ValueExpressionDelegate expressionParser) {
6161

6262
this.query = ParameterBindingParser.INSTANCE.parseAndCollectParameterBindingsFromQueryIntoBindings(query,
6363
this.queryParameterBindings);
@@ -102,7 +102,7 @@ public ExpressionDependencies getExpressionDependencies() {
102102
*/
103103
String bindQuery(LdapParameterAccessor parameterAccessor, ValueExpressionEvaluator evaluator) {
104104

105-
Assert.notNull(parameterAccessor, "CassandraParameterAccessor must not be null");
105+
Assert.notNull(parameterAccessor, "LdapParameterAccessor must not be null");
106106
Assert.notNull(evaluator, "SpELExpressionEvaluator must not be null");
107107

108108
BindingContext bindingContext = new BindingContext(this.parameters, parameterAccessor, this.queryParameterBindings,

src/test/java/org/springframework/data/ldap/repository/query/ValueExpressionLdapRepositoryQueryTests.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
* @author Marcin Grzejszczak
4242
*/
4343
@SpringJUnitConfig
44-
@TestPropertySource(properties = "full.name=John Doe")
44+
@TestPropertySource(properties = { "full.name=John Doe", "dc.name=memorynotfound" })
4545
class ValueExpressionLdapRepositoryQueryTests {
4646

4747
@Autowired private QueryRepository queryRepository;
@@ -86,6 +86,38 @@ void shouldWorkWithPropertyPlaceholders() {
8686
assertThatReturnedObjectIsJohnDoe(objects);
8787
}
8888

89+
@Test
90+
void shouldWorkWithNamedParametersForBase() {
91+
92+
List<SchemaEntry> objects = queryRepository.baseNamedParameters("John Doe", "dc=memorynotfound");
93+
94+
assertThatReturnedObjectIsJohnDoe(objects);
95+
}
96+
97+
@Test
98+
void shouldWorkWithIndexParametersForBase() {
99+
100+
List<SchemaEntry> objects = queryRepository.baseIndexedParameters("John Doe", "memorynotfound");
101+
102+
assertThatReturnedObjectIsJohnDoe(objects);
103+
}
104+
105+
@Test
106+
void shouldWorkWithSpelExpressionsForBase() {
107+
108+
List<SchemaEntry> objects = queryRepository.baseSpelParameters();
109+
110+
assertThatReturnedObjectIsJohnDoe(objects);
111+
}
112+
113+
@Test
114+
void shouldWorkWithPropertyPlaceholdersForBase() {
115+
116+
List<SchemaEntry> objects = queryRepository.basePropertyPlaceholderParameters();
117+
118+
assertThatReturnedObjectIsJohnDoe(objects);
119+
}
120+
89121
private static void assertThatReturnedObjectIsJohnDoe(List<SchemaEntry> objects) {
90122

91123
assertThat(objects).hasSize(1);
@@ -120,5 +152,16 @@ interface QueryRepository extends LdapRepository<SchemaEntry> {
120152
@Query(value = "(cn=?${full.name})")
121153
List<SchemaEntry> propertyPlaceholderParameters();
122154

155+
@Query(base = ":dc", value = "(cn=:fullName)")
156+
List<SchemaEntry> baseNamedParameters(@Param("fullName") String fullName, @Param("dc") String dc);
157+
158+
@Query(base = "dc=?1", value = "(cn=?0)")
159+
List<SchemaEntry> baseIndexedParameters(String fullName, String dc);
160+
161+
@Query(base = "dc=:#{'memory' + 'notfound'}", value = "(cn=:#{'John ' + 'Doe'})")
162+
List<SchemaEntry> baseSpelParameters();
163+
164+
@Query(base = "dc=?${dc.name}", value = "(cn=?${full.name})")
165+
List<SchemaEntry> basePropertyPlaceholderParameters();
123166
}
124167
}

0 commit comments

Comments
 (0)