Skip to content

Commit c9bf8ef

Browse files
Sebastian JustSebastian Just
Sebastian Just
authored and
Sebastian Just
committed
Started unit tests
1 parent 369259c commit c9bf8ef

File tree

12 files changed

+515
-223
lines changed

12 files changed

+515
-223
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
[![codecov.io](https://codecov.io/github/derjust/spring-data-dynamodb/coverage.svg?branch=master)](https://codecov.io/github/derjust/spring-data-dynamodb?branch=master) [![Build Status](https://travis-ci.org/derjust/spring-data-dynamodb.svg?branch=master)](https://travis-ci.org/derjust/spring-data-dynamodb)
2+
13
# Spring Data DynamoDB ( Work in Progress ) #
24

35
The primary goal of the [Spring Data](http://www.springsource.org/spring-data) project is to make it easier to build Spring-powered applications that use data access technologies. This module deals with enhanced support for Amazon DynamoDB based data access layers.

checkstyle.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<property name="format" value="\.printStackTrace"/>
3737
</module>
3838
<!-- Deprecated DynamoDB paramters -->
39+
<!--
3940
<module name="RegexpSinglelineJava">
4041
<property name="format" value="setKeyConditions"/>
4142
</module>
@@ -54,6 +55,6 @@
5455
<module name="RegexpSinglelineJava">
5556
<property name="format" value="withScanFilter"/>
5657
</module>
57-
58+
-->
5859
</module>
5960
</module>

pom.xml

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3-
43
<modelVersion>4.0.0</modelVersion>
54
<groupId>com.github.derjust</groupId>
65
<artifactId>spring-data-dynamodb</artifactId>
@@ -19,12 +18,12 @@
1918
<properties>
2019
<spring.version>4.2.0.RELEASE</spring.version>
2120
<hibernate-validator.version>5.2.2.Final</hibernate-validator.version>
22-
<aws-java-sdk.version>1.10.39</aws-java-sdk.version>
21+
<aws-java-sdk.version>1.10.43</aws-java-sdk.version>
2322
<mockito.version>1.10.19</mockito.version>
24-
<maven.cobertura.plugin.version>2.7</maven.cobertura.plugin.version>
2523

2624
<cdi>1.2</cdi>
2725
<commons.lang>3.4</commons.lang>
26+
<logback>1.1.3</logback>
2827

2928
<maven.compiler.source>1.7</maven.compiler.source>
3029
<maven.compiler.target>1.7</maven.compiler.target>
@@ -134,25 +133,36 @@
134133
<artifactId>mockito-core</artifactId>
135134
<scope>test</scope>
136135
</dependency>
136+
137+
<dependency>
138+
<groupId>ch.qos.logback</groupId>
139+
<artifactId>logback-classic</artifactId>
140+
<version>${logback}</version>
141+
<scope>test</scope>
142+
</dependency>
143+
137144
</dependencies>
138145

139146
<build>
140147
<plugins>
141148
<plugin>
142-
<groupId>org.codehaus.mojo</groupId>
143-
<artifactId>cobertura-maven-plugin</artifactId>
144-
<version>${maven.cobertura.plugin.version}</version>
145-
<configuration>
146-
<formats>
147-
<format>xml</format>
148-
<format>html</format>
149-
</formats>
150-
<check>
151-
<totalBranchRate>85</totalBranchRate>
152-
<totalLineRate>91</totalLineRate>
153-
<haltOnFailure>true</haltOnFailure>
154-
</check>
155-
</configuration>
149+
<groupId>org.jacoco</groupId>
150+
<artifactId>jacoco-maven-plugin</artifactId>
151+
<version>0.7.5.201505241946</version>
152+
<executions>
153+
<execution>
154+
<goals>
155+
<goal>prepare-agent</goal>
156+
</goals>
157+
</execution>
158+
<execution>
159+
<id>report</id>
160+
<phase>test</phase>
161+
<goals>
162+
<goal>report</goal>
163+
</goals>
164+
</execution>
165+
</executions>
156166
</plugin>
157167
<plugin>
158168
<groupId>org.apache.maven.plugins</groupId>

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

Lines changed: 47 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.socialsignin.spring.data.dynamodb.mapping.event.BeforeDeleteEvent;
1212
import org.socialsignin.spring.data.dynamodb.mapping.event.BeforeSaveEvent;
1313
import org.socialsignin.spring.data.dynamodb.mapping.event.DynamoDBMappingEvent;
14-
import org.springframework.beans.BeansException;
1514
import org.springframework.context.ApplicationContext;
1615
import org.springframework.context.ApplicationContextAware;
1716
import org.springframework.context.ApplicationEventPublisher;
@@ -28,63 +27,64 @@
2827
import com.amazonaws.services.dynamodbv2.model.QueryResult;
2928
import 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
}

src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/DynamoDBMappingEvent.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,31 @@ public DynamoDBMappingEvent(T source) {
3434
public T getSource() {
3535
return (T) super.getSource();
3636
}
37+
38+
@Override
39+
public int hashCode() {
40+
final int prime = 31;
41+
int result = 1;
42+
result = prime * result + ((source == null) ? 0 : source.hashCode());
43+
return result;
44+
}
45+
46+
@Override
47+
public boolean equals(Object obj) {
48+
if (this == obj)
49+
return true;
50+
if (obj == null)
51+
return false;
52+
if (getClass() != obj.getClass())
53+
return false;
54+
DynamoDBMappingEvent<T> other = (DynamoDBMappingEvent) obj;
55+
if (source == null) {
56+
if (other.source != null)
57+
return false;
58+
} else if (!source.equals(other.source))
59+
return false;
60+
return true;
61+
}
62+
63+
3764
}

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

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

0 commit comments

Comments
 (0)