11
11
import org .socialsignin .spring .data .dynamodb .mapping .event .BeforeDeleteEvent ;
12
12
import org .socialsignin .spring .data .dynamodb .mapping .event .BeforeSaveEvent ;
13
13
import org .socialsignin .spring .data .dynamodb .mapping .event .DynamoDBMappingEvent ;
14
- import org .springframework .beans .BeansException ;
15
14
import org .springframework .context .ApplicationContext ;
16
15
import org .springframework .context .ApplicationContextAware ;
17
16
import org .springframework .context .ApplicationEventPublisher ;
28
27
import com .amazonaws .services .dynamodbv2 .model .QueryResult ;
29
28
import com .amazonaws .services .dynamodbv2 .model .Select ;
30
29
31
- public class DynamoDBTemplate implements DynamoDBOperations ,ApplicationContextAware {
30
+ public class DynamoDBTemplate implements DynamoDBOperations , ApplicationContextAware {
32
31
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 ;
36
35
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 ) {
46
44
this .amazonDynamoDB = amazonDynamoDB ;
47
- setDynamoDBMapperConfig (null );
45
+ this .dynamoDBMapperConfig = dynamoDBMapperConfig ;
46
+ this .dynamoDBMapper = new DynamoDBMapper (amazonDynamoDB , dynamoDBMapperConfig );
48
47
}
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
+
50
55
@ Override
51
- public void setApplicationContext (ApplicationContext applicationContext )
52
- throws BeansException {
56
+ public void setApplicationContext (ApplicationContext applicationContext ) {
53
57
this .eventPublisher = applicationContext ;
54
58
}
55
59
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
-
68
60
@ Override
69
61
public <T > int count (Class <T > domainClass ,
70
62
DynamoDBQueryExpression <T > queryExpression ) {
71
63
return dynamoDBMapper .count (domainClass , queryExpression );
72
64
}
73
65
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
-
82
66
@ Override
83
67
public <T > int count (Class <T > domainClass ,
84
68
DynamoDBScanExpression scanExpression ) {
85
69
return dynamoDBMapper .count (domainClass , scanExpression );
86
70
}
87
71
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
+
88
88
@ Override
89
89
public <T > T load (Class <T > domainClass , Object hashKey , Object rangeKey ) {
90
90
T entity = dynamoDBMapper .load (domainClass , hashKey ,rangeKey );
@@ -166,7 +166,6 @@ public void batchDelete(List<?> entities) {
166
166
{
167
167
maybeEmitEvent (new AfterDeleteEvent <Object >(entity ));
168
168
}
169
-
170
169
}
171
170
172
171
@ Override
@@ -177,21 +176,13 @@ public <T> PaginatedQueryList<T> query(Class<T> clazz,
177
176
dynamoDBMapperConfig .getPaginationLoadingStrategy (), dynamoDBMapperConfig );
178
177
}
179
178
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
+ }
195
186
196
187
@ Override
197
188
public String getOverriddenTableName (String tableName ) {
@@ -205,12 +196,12 @@ public String getOverriddenTableName(String tableName) {
205
196
206
197
return tableName ;
207
198
}
208
-
199
+
209
200
protected <T > void maybeEmitEvent (DynamoDBMappingEvent <T > event ) {
210
201
if (null != eventPublisher ) {
211
202
eventPublisher .publishEvent (event );
212
203
}
213
204
}
214
205
215
-
206
+
216
207
}
0 commit comments