1111import org .socialsignin .spring .data .dynamodb .mapping .event .BeforeDeleteEvent ;
1212import org .socialsignin .spring .data .dynamodb .mapping .event .BeforeSaveEvent ;
1313import org .socialsignin .spring .data .dynamodb .mapping .event .DynamoDBMappingEvent ;
14- import org .springframework .beans .BeansException ;
1514import org .springframework .context .ApplicationContext ;
1615import org .springframework .context .ApplicationContextAware ;
1716import org .springframework .context .ApplicationEventPublisher ;
2827import com .amazonaws .services .dynamodbv2 .model .QueryResult ;
2928import com .amazonaws .services .dynamodbv2 .model .Select ;
3029
31- public class DynamoDBTemplate implements DynamoDBOperations ,ApplicationContextAware {
30+ public class DynamoDBTemplate implements DynamoDBOperations , ApplicationContextAware {
3231
33- protected DynamoDBMapper dynamoDBMapper ;
34- private AmazonDynamoDB amazonDynamoDB ;
35- private DynamoDBMapperConfig dynamoDBMapperConfig ;
32+ private final DynamoDBMapper dynamoDBMapper ;
33+ private final AmazonDynamoDB amazonDynamoDB ;
34+ private final DynamoDBMapperConfig dynamoDBMapperConfig ;
3635 private ApplicationEventPublisher eventPublisher ;
37-
38- public DynamoDBTemplate (AmazonDynamoDB amazonDynamoDB ,DynamoDBMapperConfig dynamoDBMapperConfig )
39- {
40- this .amazonDynamoDB = amazonDynamoDB ;
41- setDynamoDBMapperConfig (dynamoDBMapperConfig );
42- }
43-
44- public DynamoDBTemplate (AmazonDynamoDB amazonDynamoDB )
45- {
46- this .amazonDynamoDB = amazonDynamoDB ;
47- setDynamoDBMapperConfig (null );
36+
37+ public DynamoDBTemplate (AmazonDynamoDB amazonDynamoDB ) {
38+ this (amazonDynamoDB , DynamoDBMapperConfig .DEFAULT );
39+ }
40+
41+ public DynamoDBTemplate (AmazonDynamoDB amazonDynamoDB ,DynamoDBMapperConfig dynamoDBMapperConfig ) {
42+ this (new DynamoDBMapper (amazonDynamoDB , dynamoDBMapperConfig ), amazonDynamoDB , dynamoDBMapperConfig );
4843 }
49-
44+
45+ protected DynamoDBTemplate (DynamoDBMapper dynamoDBMapper , AmazonDynamoDB amazonDynamoDB ,DynamoDBMapperConfig dynamoDBMapperConfig ) {
46+ this .dynamoDBMapper = dynamoDBMapper ;
47+ this .amazonDynamoDB = amazonDynamoDB ;
48+ this .dynamoDBMapperConfig = dynamoDBMapperConfig ;
49+ }
50+
5051 @ Override
51- public void setApplicationContext (ApplicationContext applicationContext )
52- throws BeansException {
52+ public void setApplicationContext (ApplicationContext applicationContext ) {
5353 this .eventPublisher = applicationContext ;
5454 }
5555
56-
57- public void setDynamoDBMapperConfig (DynamoDBMapperConfig dynamoDBMapperConfig )
58- {
59- this .dynamoDBMapperConfig = dynamoDBMapperConfig ;
60- dynamoDBMapper = dynamoDBMapperConfig == null ? new DynamoDBMapper (amazonDynamoDB ) : new DynamoDBMapper (
61- amazonDynamoDB , dynamoDBMapperConfig );
62- if (dynamoDBMapperConfig == null )
63- {
64- this .dynamoDBMapperConfig = DynamoDBMapperConfig .DEFAULT ;
65- }
66- }
67-
6856 @ Override
6957 public <T > int count (Class <T > domainClass ,
7058 DynamoDBQueryExpression <T > queryExpression ) {
7159 return dynamoDBMapper .count (domainClass , queryExpression );
7260 }
7361
74- @ Override
75- public <T > PaginatedQueryList <T > query (Class <T > domainClass ,
76- DynamoDBQueryExpression <T > queryExpression ) {
77- PaginatedQueryList <T > results = dynamoDBMapper .query (domainClass , queryExpression );
78- maybeEmitEvent (new AfterQueryEvent <T >(results ));
79- return results ;
80- }
81-
8262 @ Override
8363 public <T > int count (Class <T > domainClass ,
8464 DynamoDBScanExpression scanExpression ) {
8565 return dynamoDBMapper .count (domainClass , scanExpression );
8666 }
8767
68+ @ Override
69+ public <T > int count (Class <T > clazz , QueryRequest mutableQueryRequest ) {
70+ mutableQueryRequest .setSelect (Select .COUNT );
71+
72+ // Count queries can also be truncated for large datasets
73+ int count = 0 ;
74+ QueryResult queryResult = null ;
75+ do {
76+ queryResult = amazonDynamoDB .query (mutableQueryRequest );
77+ count += queryResult .getCount ();
78+ mutableQueryRequest .setExclusiveStartKey (queryResult .getLastEvaluatedKey ());
79+ } while (queryResult .getLastEvaluatedKey () != null );
80+
81+ return count ;
82+ }
83+
8884 @ Override
8985 public <T > T load (Class <T > domainClass , Object hashKey , Object rangeKey ) {
9086 T entity = dynamoDBMapper .load (domainClass , hashKey ,rangeKey );
@@ -166,7 +162,6 @@ public void batchDelete(List<?> entities) {
166162 {
167163 maybeEmitEvent (new AfterDeleteEvent <Object >(entity ));
168164 }
169-
170165 }
171166
172167 @ Override
@@ -177,21 +172,13 @@ public <T> PaginatedQueryList<T> query(Class<T> clazz,
177172 dynamoDBMapperConfig .getPaginationLoadingStrategy (), dynamoDBMapperConfig );
178173 }
179174
180- @ Override
181- public <T > int count (Class <T > clazz , QueryRequest mutableQueryRequest ) {
182- mutableQueryRequest .setSelect (Select .COUNT );
183-
184- // Count queries can also be truncated for large datasets
185- int count = 0 ;
186- QueryResult queryResult = null ;
187- do {
188- queryResult = amazonDynamoDB .query (mutableQueryRequest );
189- count += queryResult .getCount ();
190- mutableQueryRequest .setExclusiveStartKey (queryResult .getLastEvaluatedKey ());
191- } while (queryResult .getLastEvaluatedKey () != null );
192-
193- return count ;
194- }
175+ @ Override
176+ public <T > PaginatedQueryList <T > query (Class <T > domainClass ,
177+ DynamoDBQueryExpression <T > queryExpression ) {
178+ PaginatedQueryList <T > results = dynamoDBMapper .query (domainClass , queryExpression );
179+ maybeEmitEvent (new AfterQueryEvent <T >(results ));
180+ return results ;
181+ }
195182
196183 @ Override
197184 public String getOverriddenTableName (String tableName ) {
@@ -205,12 +192,12 @@ public String getOverriddenTableName(String tableName) {
205192
206193 return tableName ;
207194 }
208-
195+
209196 protected <T > void maybeEmitEvent (DynamoDBMappingEvent <T > event ) {
210197 if (null != eventPublisher ) {
211198 eventPublisher .publishEvent (event );
212199 }
213200}
214201
215-
202+
216203}
0 commit comments