Skip to content

Commit 3d50ceb

Browse files
authored
Merge pull request #5 from derjust/master
Merging before moore
2 parents 42aca61 + 1f6b43d commit 3d50ceb

24 files changed

+138
-35
lines changed
File renamed without changes.
File renamed without changes.

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<spring-data.version>2.1.2.RELEASE</spring-data.version>
4242

4343
<hibernate-validator.version>6.0.9.Final</hibernate-validator.version>
44-
<aws-java-sdk.version>1.11.443</aws-java-sdk.version>
44+
<aws-java-sdk.version>1.11.515</aws-java-sdk.version>
4545
<junit.version>4.12</junit.version>
4646
<mockito.version>2.23.0</mockito.version>
4747
<cdi.version>1.2</cdi.version>
@@ -432,7 +432,7 @@
432432
</executions>
433433
<configuration>
434434
<logViolationsToConsole>true</logViolationsToConsole>
435-
<configLocation>checkstyle.xml</configLocation>
435+
<configLocation>src/checkstyle.xml</configLocation>
436436
</configuration>
437437
</plugin>
438438
<plugin>

src/changes/changes.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@
2323
<author email="zeeman@zeeman.de">derjust</author>
2424
</properties>
2525
<body>
26+
<release version="5.1.1" description="Maintenance release">
27+
<action dev="derjust" issue="235" type="fix" date="2019-03-10">
28+
Upgrading to 5.1.0 results in the error Bean property 'dynamoDBMapperConfig' is not writable or has an invalid setter method
29+
</action>
30+
<action dev="boostschicken" issue="226" type="add" date="2019-03-10">
31+
@Query annotation to support query limiting
32+
</action>
33+
</release>
2634
<release version="5.1.0" date="2019-01-28" description="Spring Boot 2.1 and Spring Data Lovelace-SR1 support">
2735
<action dev="boostschicken" type="add" date="2018-10-28">
2836
Updated all code to work with Spring Boot 2.1 and Lovelace-SR1
File renamed without changes.

src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,15 @@ public List<FailedBatch> batchDelete(Iterable<?> entities) {
180180
@Override
181181
public <T> PaginatedQueryList<T> query(Class<T> clazz, QueryRequest queryRequest) {
182182
QueryResult queryResult = amazonDynamoDB.query(queryRequest);
183+
184+
// If a limit is set, deactivate lazy loading of (matching) items after the
185+
// limit
186+
// via
187+
// com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList.atEndOfResults()
188+
if (queryRequest.getLimit() != null) {
189+
queryResult.setLastEvaluatedKey(null);
190+
}
191+
183192
return new PaginatedQueryList<T>(dynamoDBMapper, clazz, amazonDynamoDB, queryRequest, queryResult,
184193
dynamoDBMapperConfig.getPaginationLoadingStrategy(), dynamoDBMapperConfig);
185194
}

src/main/java/org/socialsignin/spring/data/dynamodb/repository/Query.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.lang.annotation.RetentionPolicy;
2222
import java.lang.annotation.Target;
2323

24+
import static org.socialsignin.spring.data.dynamodb.repository.QueryConstants.QUERY_LIMIT_UNLIMITED;
25+
2426
@Retention(RetentionPolicy.RUNTIME)
2527
@Target(ElementType.METHOD)
2628
@Documented
@@ -36,4 +38,13 @@
3638
* Expressions</a>
3739
*/
3840
String fields() default "";
41+
42+
/**
43+
* An integer to limit the number of elements returned.
44+
*
45+
* @see <a href=
46+
* "https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ProjectionExpressions.html">Projection
47+
* Expressions</a>
48+
*/
49+
int limit() default QUERY_LIMIT_UNLIMITED;
3950
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Copyright © 2018 spring-data-dynamodb (https://github.com/derjust/spring-data-dynamodb)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.socialsignin.spring.data.dynamodb.repository;
17+
18+
public final class QueryConstants {
19+
20+
private QueryConstants() {
21+
}
22+
23+
public static final int QUERY_LIMIT_UNLIMITED = Integer.MIN_VALUE;
24+
25+
}

src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoryConfigExtension.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,16 @@ private void postProcess(BeanDefinitionBuilder builder, String repositoryName, S
129129
.computeIfAbsent(getBeanNameWithModulePrefix("DynamoDBTemplate-" + dynamoDBRef), ref -> {
130130
BeanDefinitionBuilder dynamoDBTemplateBuilder = BeanDefinitionBuilder
131131
.genericBeanDefinition(DynamoDBTemplate.class);
132+
// AmazonDynamoDB amazonDynamoDB, DynamoDBMapper dynamoDBMapper,
133+
// DynamoDBMapperConfig dynamoDBMapperConfig
132134
dynamoDBTemplateBuilder.addConstructorArgReference(dynamoDBRef);
135+
dynamoDBTemplateBuilder.addConstructorArgReference(this.dynamoDBMapperName);
136+
137+
if (StringUtils.hasText(dynamoDBMapperConfigRef)) {
138+
dynamoDBTemplateBuilder.addConstructorArgReference(dynamoDBMapperConfigRef);
139+
} else {
140+
dynamoDBTemplateBuilder.addConstructorArgReference(this.dynamoDBMapperConfigName);
141+
}
133142

134143
registry.registerBeanDefinition(ref, dynamoDBTemplateBuilder.getBeanDefinition());
135144
return ref;
@@ -138,9 +147,6 @@ private void postProcess(BeanDefinitionBuilder builder, String repositoryName, S
138147

139148
builder.addPropertyReference("dynamoDBOperations", dynamoDBOperationsRef);
140149

141-
if (StringUtils.hasText(dynamoDBMapperConfigRef)) {
142-
builder.addPropertyReference("dynamoDBMapperConfig", dynamoDBMapperConfigRef);
143-
}
144150
}
145151

146152
if (!StringUtils.hasText(dynamoDBMappingContextRef)) {
@@ -184,6 +190,10 @@ private String registerEntity2DynamoDBTableSynchronizer(BeanDefinitionRegistry r
184190
}
185191

186192
private final Map<String, String> dynamoDBMappingContextProcessorCache = new ConcurrentHashMap<>();
193+
194+
private String dynamoDBMapperName;
195+
196+
private String dynamoDBMapperConfigName;
187197
private String registerDynamoDBMappingContextProcessor(BeanDefinitionRegistry registry,
188198
String dynamoDBMappingContextRef) {
189199
assert registry != null;
@@ -226,15 +236,17 @@ public void registerBeansForRoot(BeanDefinitionRegistry registry,
226236
// Store for later to be used by #postProcess, too
227237
this.registry = registry;
228238

239+
this.dynamoDBMapperConfigName = getBeanNameWithModulePrefix("DynamoDBMapperConfig");
240+
// TODO only if it doesn't exist
229241
BeanDefinitionBuilder dynamoDBMapperConfigBuiilder = BeanDefinitionBuilder
230242
.genericBeanDefinition(DynamoDBMapperConfigFactory.class);
231-
registry.registerBeanDefinition(getBeanNameWithModulePrefix("DynamoDBMapperConfig"),
243+
registry.registerBeanDefinition(this.dynamoDBMapperConfigName,
232244
dynamoDBMapperConfigBuiilder.getBeanDefinition());
233245

246+
this.dynamoDBMapperName = getBeanNameWithModulePrefix("DynamoDBMapper");
234247
BeanDefinitionBuilder dynamoDBMapperBuilder = BeanDefinitionBuilder
235248
.genericBeanDefinition(DynamoDBMapperFactory.class);
236-
registry.registerBeanDefinition(getBeanNameWithModulePrefix("DynamoDBMapper"),
237-
dynamoDBMapperBuilder.getBeanDefinition());
249+
registry.registerBeanDefinition(this.dynamoDBMapperName, dynamoDBMapperBuilder.getBeanDefinition());
238250
}
239251

240252
protected String getBeanNameWithModulePrefix(String baseBeanName) {

src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,24 @@ public abstract class AbstractDynamoDBQueryCreator<T, ID, R>
4646
protected final DynamoDBEntityInformation<T, ID> entityMetadata;
4747
protected final DynamoDBOperations dynamoDBOperations;
4848
protected final Optional<String> projection;
49+
protected final Optional<Integer> limit;
4950

5051
public AbstractDynamoDBQueryCreator(PartTree tree, DynamoDBEntityInformation<T, ID> entityMetadata,
51-
Optional<String> projection, DynamoDBOperations dynamoDBOperations) {
52+
Optional<String> projection, Optional<Integer> limitResults, DynamoDBOperations dynamoDBOperations) {
5253
super(tree);
5354
this.entityMetadata = entityMetadata;
5455
this.projection = projection;
56+
this.limit = limitResults;
5557
this.dynamoDBOperations = dynamoDBOperations;
5658
}
5759

5860
public AbstractDynamoDBQueryCreator(PartTree tree, ParameterAccessor parameterAccessor,
5961
DynamoDBEntityInformation<T, ID> entityMetadata, Optional<String> projection,
60-
DynamoDBOperations dynamoDBOperations) {
62+
Optional<Integer> limitResults, DynamoDBOperations dynamoDBOperations) {
6163
super(tree, parameterAccessor);
6264
this.entityMetadata = entityMetadata;
6365
this.projection = projection;
66+
this.limit = limitResults;
6467
this.dynamoDBOperations = dynamoDBOperations;
6568
}
6669

@@ -89,7 +92,6 @@ protected DynamoDBQueryCriteria<T, ID> addCriteria(DynamoDBQueryCriteria<T, ID>
8992
}
9093

9194
switch (part.getType()) {
92-
9395
case IN :
9496
Object in = iterator.next();
9597
Assert.notNull(in, "Creating conditions on null parameters not supported: please specify a value for '"

0 commit comments

Comments
 (0)