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- {
36+
37+ public DynamoDBTemplate (AmazonDynamoDB amazonDynamoDB ) {
38+ this .amazonDynamoDB = amazonDynamoDB ;
39+ this .dynamoDBMapperConfig = DynamoDBMapperConfig .DEFAULT ;
40+ this .dynamoDBMapper = new DynamoDBMapper (amazonDynamoDB , dynamoDBMapperConfig );
41+ }
42+
43+ public DynamoDBTemplate (AmazonDynamoDB amazonDynamoDB ,DynamoDBMapperConfig dynamoDBMapperConfig ) {
4644 this .amazonDynamoDB = amazonDynamoDB ;
47- setDynamoDBMapperConfig (null );
45+ this .dynamoDBMapperConfig = dynamoDBMapperConfig ;
46+ this .dynamoDBMapper = new DynamoDBMapper (amazonDynamoDB , dynamoDBMapperConfig );
4847 }
49-
48+
49+ protected DynamoDBTemplate (DynamoDBMapper dynamoDBMapper , AmazonDynamoDB amazonDynamoDB ,DynamoDBMapperConfig dynamoDBMapperConfig ) {
50+ this .dynamoDBMapper = dynamoDBMapper ;
51+ this .amazonDynamoDB = amazonDynamoDB ;
52+ this .dynamoDBMapperConfig = dynamoDBMapperConfig ;
53+ }
54+
5055 @ Override
51- public void setApplicationContext (ApplicationContext applicationContext )
52- throws BeansException {
56+ public void setApplicationContext (ApplicationContext applicationContext ) {
5357 this .eventPublisher = applicationContext ;
5458 }
5559
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-
6860 @ Override
6961 public <T > int count (Class <T > domainClass ,
7062 DynamoDBQueryExpression <T > queryExpression ) {
7163 return dynamoDBMapper .count (domainClass , queryExpression );
7264 }
7365
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-
8266 @ Override
8367 public <T > int count (Class <T > domainClass ,
8468 DynamoDBScanExpression scanExpression ) {
8569 return dynamoDBMapper .count (domainClass , scanExpression );
8670 }
8771
72+ @ Override
73+ public <T > int count (Class <T > clazz , QueryRequest mutableQueryRequest ) {
74+ mutableQueryRequest .setSelect (Select .COUNT );
75+
76+ // Count queries can also be truncated for large datasets
77+ int count = 0 ;
78+ QueryResult queryResult = null ;
79+ do {
80+ queryResult = amazonDynamoDB .query (mutableQueryRequest );
81+ count += queryResult .getCount ();
82+ mutableQueryRequest .setExclusiveStartKey (queryResult .getLastEvaluatedKey ());
83+ } while (queryResult .getLastEvaluatedKey () != null );
84+
85+ return count ;
86+ }
87+
8888 @ Override
8989 public <T > T load (Class <T > domainClass , Object hashKey , Object rangeKey ) {
9090 T entity = dynamoDBMapper .load (domainClass , hashKey ,rangeKey );
@@ -166,7 +166,6 @@ public void batchDelete(List<?> entities) {
166166 {
167167 maybeEmitEvent (new AfterDeleteEvent <Object >(entity ));
168168 }
169-
170169 }
171170
172171 @ Override
@@ -177,21 +176,13 @@ public <T> PaginatedQueryList<T> query(Class<T> clazz,
177176 dynamoDBMapperConfig .getPaginationLoadingStrategy (), dynamoDBMapperConfig );
178177 }
179178
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- }
179+ @ Override
180+ public <T > PaginatedQueryList <T > query (Class <T > domainClass ,
181+ DynamoDBQueryExpression <T > queryExpression ) {
182+ PaginatedQueryList <T > results = dynamoDBMapper .query (domainClass , queryExpression );
183+ maybeEmitEvent (new AfterQueryEvent <T >(results ));
184+ return results ;
185+ }
195186
196187 @ Override
197188 public String getOverriddenTableName (String tableName ) {
@@ -205,12 +196,12 @@ public String getOverriddenTableName(String tableName) {
205196
206197 return tableName ;
207198 }
208-
199+
209200 protected <T > void maybeEmitEvent (DynamoDBMappingEvent <T > event ) {
210201 if (null != eventPublisher ) {
211202 eventPublisher .publishEvent (event );
212203 }
213204}
214205
215-
206+
216207}
0 commit comments