From c71a89b75a898eaef18bb7ecb54abe16a70ede29 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Tue, 21 Nov 2017 03:06:07 -0500 Subject: [PATCH 01/18] Support for Spring 5 / Spring-Data Kay This is a first slap at supporting Sprint 5 with Spring-Data Kay-SR1. It mainly fixed the compile errors and made all tests run green again. Also added some syntactical sugar here and there due to increased JDK8 support. Note: Methods might not yet fully support the Sprint5/Spring-Data 2 usage of `Optional` and such. --- README.md | 11 ++-- pom.xml | 12 ++-- .../dynamodb/core/DynamoDBOperations.java | 38 ++++++------- .../data/dynamodb/core/DynamoDBTemplate.java | 31 +++++------ .../AbstractDynamoDBDateMarshaller.java | 4 +- .../mapping/DynamoDBMappingContext.java | 21 ++++--- .../mapping/DynamoDBPersistentEntityImpl.java | 6 +- .../DynamoDBPersistentPropertyImpl.java | 32 ++++------- .../ValidatingDynamoDBEventListener.java | 15 +++-- .../marshaller/DateDynamoDBMarshaller.java | 7 +-- .../Instant2EpocheDynamoDBMarshaller.java | 5 +- .../Instant2IsoDynamoDBMarshaller.java | 7 +-- .../query/AbstractMultipleEntityQuery.java | 4 +- .../query/AbstractSingleEntityQuery.java | 4 +- .../MultipleEntityQueryExpressionQuery.java | 5 +- .../MultipleEntityQueryRequestQuery.java | 5 +- .../MultipleEntityScanExpressionQuery.java | 5 +- .../query/QueryExpressionCountQuery.java | 3 +- .../query/QueryRequestCountQuery.java | 3 +- .../query/ScanExpressionCountQuery.java | 3 +- .../repository/DynamoDBCrudRepository.java | 4 +- .../repository/DynamoDBHashAndRangeKey.java | 4 +- .../DynamoDBPagingAndSortingRepository.java | 4 +- .../cdi/DynamoDBRepositoryBean.java | 18 +++--- .../cdi/DynamoDBRepositoryExtension.java | 30 +++++----- .../config/DynamoDBRepositoriesRegistrar.java | 4 +- .../DynamoDBRepositoryConfigExtension.java | 2 +- .../config/EnableDynamoDBRepositories.java | 10 ++-- .../query/AbstractDynamoDBQuery.java | 28 +++++----- .../query/AbstractDynamoDBQueryCreator.java | 14 ++--- .../query/DynamoDBCountQueryCreator.java | 4 +- .../query/DynamoDBQueryCreator.java | 4 +- .../query/DynamoDBQueryCriteria.java | 23 ++++---- .../query/DynamoDBQueryLookupStrategy.java | 13 ++--- .../repository/query/DynamoDBQueryMethod.java | 7 +-- .../query/PartTreeDynamoDBQuery.java | 8 +-- .../CompositeIdHashAndRangeKeyExtractor.java | 7 +-- .../support/DynamoDBEntityInformation.java | 4 +- .../DynamoDBEntityMetadataSupport.java | 34 ++++++------ ...shAndRangeKeyExtractingEntityMetadata.java | 3 +- ...dRangeKeyExtractingEntityMetadataImpl.java | 16 +++--- ...ynamoDBHashAndRangeKeyMethodExtractor.java | 4 +- ...oDBHashAndRangeKeyMethodExtractorImpl.java | 9 ++- ...namoDBHashKeyExtractingEntityMetadata.java | 5 +- ...BIdIsHashAndRangeKeyEntityInformation.java | 4 +- ...sHashAndRangeKeyEntityInformationImpl.java | 10 ++-- ...amoDBIdIsHashKeyEntityInformationImpl.java | 10 ++-- .../support/DynamoDBRepositoryFactory.java | 20 ++++--- .../DynamoDBRepositoryFactoryBean.java | 7 +-- .../EnableScanAnnotationPermissions.java | 4 +- ...dAndGetterReflectionEntityInformation.java | 37 +++++-------- .../support/HashAndRangeKeyExtractor.java | 4 +- .../repository/support/HashKeyExtractor.java | 6 +- .../support/HashKeyIsIdHashKeyExtractor.java | 4 +- .../support/SimpleDynamoDBCrudRepository.java | 53 ++++++++++-------- ...pleDynamoDBPagingAndSortingRepository.java | 23 ++++---- .../repository/config/spring-dynamodb-1.0.xsd | 11 ++-- .../data/dynamodb/core/ConfigurationTI.java | 7 +-- .../data/dynamodb/core/CustomerHistoryIT.java | 8 +-- .../dynamodb/core/DynamoDBTemplateIT.java | 5 +- .../core/DynamoDBTemplateUnitTest.java | 13 ++--- .../domain/sample/CustomerHistory.java | 3 +- .../domain/sample/CustomerHistoryId.java | 4 +- .../domain/sample/DynamoDBYearMarshaller.java | 4 +- .../data/dynamodb/domain/sample/FeedUser.java | 8 +-- .../domain/sample/FeedUserRepository.java | 4 +- .../GlobalSecondaryIndexWithRangeKeyIT.java | 19 +++---- .../domain/sample/HashRangeKeyIT.java | 25 +++++---- .../dynamodb/domain/sample/Installation.java | 1 + .../domain/sample/InstallationRepository.java | 3 +- .../data/dynamodb/domain/sample/Jdk8IT.java | 17 +++--- .../data/dynamodb/domain/sample/Playlist.java | 3 +- .../dynamodb/domain/sample/PlaylistId.java | 4 +- .../data/dynamodb/domain/sample/User.java | 11 ++-- .../domain/sample/UserRepository.java | 6 +- .../DynamoDBMappingContextUnitTest.java | 8 +-- ...ynamoDBPersistentPropertyImplUnitTest.java | 13 ++--- .../Date2EpocheDynamoDBMarshallerTest.java | 8 +-- .../Date2IsoDynamoDBMarshallerTest.java | 8 +-- .../Instant2EpocheDynamoDBMarshallerTest.java | 8 +-- .../Instant2IsoDynamoDBMarshallerTest.java | 8 +-- ...AbstractDynamoDBQueryCriteriaUnitTest.java | 9 ++- ...EntityWithHashKeyOnlyCriteriaUnitTest.java | 4 +- .../query/PartTreeDynamoDBQueryUnitTest.java | 55 +++++++++---------- ...DynamoDBEntityMetadataSupportUnitTest.java | 5 -- ...ndRangeKeyMethodExtractorImplUnitTest.java | 7 +-- ...RangeKeyEntityInformationImplUnitTest.java | 3 +- ...sHashKeyEntityInformationImplUnitTest.java | 3 +- .../SimpleDynamoDBCrudRepositoryUnitTest.java | 20 ++++--- ...oDBPagingAndSortingRepositoryUnitTest.java | 20 ++++--- 90 files changed, 457 insertions(+), 540 deletions(-) diff --git a/README.md b/README.md index 11ac0c5c..3a61b025 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,10 @@ API changes will follow SEMVER and loosly the Spring Framework releases. | ------------------------------- | ------------------------------ | ------------------------- | | 1.0.x | >= 3.1 && < 4.2 | | | 4.2.x | >= 4.2 && < 4.3 | Gosling-SR1 | -| 4.3.x | >= 4.3 | Gosling-SR1 | -| 4.4.x | >= 4.3 | Hopper-SR2 | -| 4.5.x | >= 4.3 | Ingalls | +| 4.3.x | >= 4.3 && < 5.0 | Gosling-SR1 | +| 4.4.x | >= 4.3 && < 5.0 | Hopper-SR2 | +| 4.5.x | >= 4.3 && < 5.0 | Ingalls | +| 5.0.x | >= 5.0 | Kay-SR1 | `spring-data-dynamodb` depends directly on `spring-data` as also `spring-context`, `spring-data` and `spring-tx`. @@ -44,7 +45,7 @@ Download the JAR though [Maven](http://mvnrepository.com/artifact/com.github.der com.github.derjust spring-data-dynamodb - 4.5.0 + 5.0.0 ``` @@ -58,7 +59,7 @@ repositories { dependencies { compile group: 'com.github.derjust', name: 'spring-data-dynamodb', - version: '4.5.0' + version: '5.0.0' } ``` diff --git a/pom.xml b/pom.xml index 6f34f93e..f0dc52be 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 4.5.2-SNAPSHOT + 5.0.0-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -16,8 +16,8 @@ - 4.3.6.RELEASE - Ingalls-RELEASE + 5.0.1.RELEASE + Kay-SR1 5.2.4.Final 1.11.93 4.12 @@ -28,8 +28,8 @@ UTF-8 UTF-8 - 1.7 - 1.7 + 1.8 + 1.8 @@ -193,7 +193,7 @@ org.jacoco jacoco-maven-plugin - 0.7.5.201505241946 + 0.7.9 diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java index 37c99a83..6464d41c 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java @@ -1,8 +1,5 @@ package org.socialsignin.spring.data.dynamodb.core; -import java.util.List; -import java.util.Map; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; @@ -11,30 +8,33 @@ import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import java.util.List; +import java.util.Map; + public interface DynamoDBOperations { - public int count(Class domainClass,DynamoDBQueryExpression queryExpression); - public int count(Class domainClass,DynamoDBScanExpression scanExpression); - public int count(Class clazz, QueryRequest mutableQueryRequest); + int count(Class domainClass,DynamoDBQueryExpression queryExpression); + int count(Class domainClass,DynamoDBScanExpression scanExpression); + int count(Class clazz, QueryRequest mutableQueryRequest); - public PaginatedQueryList query(Class clazz, QueryRequest queryRequest); - public PaginatedQueryList query(Class domainClass,DynamoDBQueryExpression queryExpression); - public PaginatedScanList scan(Class domainClass,DynamoDBScanExpression scanExpression); + PaginatedQueryList query(Class clazz, QueryRequest queryRequest); + PaginatedQueryList query(Class domainClass, DynamoDBQueryExpression queryExpression); + PaginatedScanList scan(Class domainClass, DynamoDBScanExpression scanExpression); - public T load(Class domainClass,Object hashKey,Object rangeKey); - public T load(Class domainClass,Object hashKey); - public Map> batchLoad(Map, List> itemsToGet); + T load(Class domainClass,Object hashKey, Object rangeKey); + T load(Class domainClass,Object hashKey); + Map> batchLoad(Map, List> itemsToGet); - public void save(Object entity); - public void batchSave(List entities); - public void batchSave(Iterable entities); + void save(Object entity); + void batchSave(List entities); + void batchSave(Iterable entities); - public void delete(Object entity); - public void batchDelete(List entities); - public void batchDelete(Iterable entities); + void delete(Object entity); + void batchDelete(List entities); + void batchDelete(Iterable entities); - public String getOverriddenTableName(Class domainClass, String tableName); + String getOverriddenTableName(Class domainClass, String tableName); /** * Provides access to the DynamoDB mapper table model of the underlying domain type. diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java index fa3a83c9..c844775a 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java @@ -1,9 +1,17 @@ package org.socialsignin.spring.data.dynamodb.core; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; +import com.amazonaws.services.dynamodbv2.datamodeling.KeyPair; +import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList; +import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; +import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import com.amazonaws.services.dynamodbv2.model.QueryResult; +import com.amazonaws.services.dynamodbv2.model.Select; import org.socialsignin.spring.data.dynamodb.mapping.event.AfterDeleteEvent; import org.socialsignin.spring.data.dynamodb.mapping.event.AfterLoadEvent; import org.socialsignin.spring.data.dynamodb.mapping.event.AfterQueryEvent; @@ -17,18 +25,9 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEventPublisher; -import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; -import com.amazonaws.services.dynamodbv2.datamodeling.KeyPair; -import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList; -import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; -import com.amazonaws.services.dynamodbv2.model.QueryRequest; -import com.amazonaws.services.dynamodbv2.model.QueryResult; -import com.amazonaws.services.dynamodbv2.model.Select; +import java.util.Iterator; +import java.util.List; +import java.util.Map; public class DynamoDBTemplate implements DynamoDBOperations,ApplicationContextAware { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java index c0558c14..7bb93ec2 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java @@ -15,12 +15,12 @@ */ package org.socialsignin.spring.data.dynamodb.mapping; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; + import java.text.DateFormat; import java.text.ParseException; import java.util.Date; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; - /** * @author Michael Lavelle * @deprecated According to {@code com.amazonaws.services.dynamodbv2.datamodeling.marshallers.CustomMarshaller.marshall(Object)} diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContext.java b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContext.java index 6e26b861..5ebcc783 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContext.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContext.java @@ -15,17 +15,16 @@ */ package org.socialsignin.spring.data.dynamodb.mapping; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; import org.springframework.data.mapping.context.AbstractMappingContext; +import org.springframework.data.mapping.model.Property; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.util.TypeInformation; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; +import java.lang.reflect.Field; +import java.lang.reflect.Method; /** * Default implementation of a {@link org.springframework.data.mapping.context.MappingContext} for DynamoDB using @@ -57,11 +56,11 @@ protected DynamoDBPersistentEntityImpl createPersistentEntity(TypeInforma * org.springframework.data.mapping.MutablePersistentEntity, * org.springframework.data.mapping.SimpleTypeHolder) */ - @Override - protected DynamoDBPersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, - DynamoDBPersistentEntityImpl owner, SimpleTypeHolder simpleTypeHolder) { - return new DynamoDBPersistentPropertyImpl(field, descriptor, owner, simpleTypeHolder); + @Override + protected DynamoDBPersistentProperty createPersistentProperty(Property property, + DynamoDBPersistentEntityImpl owner, SimpleTypeHolder simpleTypeHolder) { + return new DynamoDBPersistentPropertyImpl(property, owner, simpleTypeHolder); } /* diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentEntityImpl.java b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentEntityImpl.java index 63ab6c84..97470eeb 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentEntityImpl.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentEntityImpl.java @@ -15,12 +15,12 @@ */ package org.socialsignin.spring.data.dynamodb.mapping; -import java.util.Comparator; - +import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.model.BasicPersistentEntity; -import org.springframework.data.mapping.model.MappingException; import org.springframework.data.util.TypeInformation; +import java.util.Comparator; + /** * DynamoDB specific {@link DynamoDBPersistentEntity} implementation * diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImpl.java b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImpl.java index a646ced6..d59e5e86 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImpl.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImpl.java @@ -15,25 +15,22 @@ */ package org.socialsignin.spring.data.dynamodb.mapping; -import java.beans.PropertyDescriptor; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBVersionAttribute; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Reference; import org.springframework.data.annotation.Transient; import org.springframework.data.mapping.Association; -import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.model.AnnotationBasedPersistentProperty; +import org.springframework.data.mapping.model.Property; import org.springframework.data.mapping.model.SimpleTypeHolder; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBVersionAttribute; +import java.lang.annotation.Annotation; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; /** * {@link DynamoDBPersistentProperty} implementation @@ -62,22 +59,17 @@ class DynamoDBPersistentPropertyImpl extends AnnotationBasedPersistentProperty owner, SimpleTypeHolder simpleTypeHolder) { - super(field, propertyDescriptor, owner, simpleTypeHolder); + public DynamoDBPersistentPropertyImpl(Property property, DynamoDBPersistentEntityImpl owner, SimpleTypeHolder simpleTypeHolder) { + super(property, owner, simpleTypeHolder); } - - @Override public boolean isWritable() { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java index d333e1dd..2b2ad0a9 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java @@ -15,18 +15,17 @@ * limitations under the License. */ -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Assert; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import javax.validation.Validator; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.Assert; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/DateDynamoDBMarshaller.java b/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/DateDynamoDBMarshaller.java index 10d12838..5f5d4628 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/DateDynamoDBMarshaller.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/DateDynamoDBMarshaller.java @@ -1,13 +1,12 @@ package org.socialsignin.spring.data.dynamodb.marshaller; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import org.springframework.util.StringUtils; + import java.text.DateFormat; import java.text.ParseException; import java.util.Date; -import org.springframework.util.StringUtils; - -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; - public abstract class DateDynamoDBMarshaller implements DynamoDBMarshaller { public abstract DateFormat getDateFormat(); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshaller.java b/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshaller.java index b030a625..015d7b1d 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshaller.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshaller.java @@ -1,10 +1,9 @@ package org.socialsignin.spring.data.dynamodb.marshaller; -import java.time.Instant; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; import org.springframework.util.StringUtils; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import java.time.Instant; public class Instant2EpocheDynamoDBMarshaller implements DynamoDBMarshaller { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshaller.java b/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshaller.java index 524861cf..b65363c1 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshaller.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshaller.java @@ -1,13 +1,12 @@ package org.socialsignin.spring.data.dynamodb.marshaller; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import org.springframework.util.StringUtils; + import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; -import org.springframework.util.StringUtils; - -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; - public class Instant2IsoDynamoDBMarshaller implements DynamoDBMarshaller { private static final String PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractMultipleEntityQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractMultipleEntityQuery.java index 5c821112..30260c08 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractMultipleEntityQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractMultipleEntityQuery.java @@ -15,11 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.query; -import java.util.List; - import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.springframework.dao.IncorrectResultSizeDataAccessException; +import java.util.List; + /** * * @author Michael Lavelle diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractSingleEntityQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractSingleEntityQuery.java index 32626a5f..39affec0 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractSingleEntityQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractSingleEntityQuery.java @@ -15,11 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.query; +import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; + import java.util.Arrays; import java.util.List; -import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; - public abstract class AbstractSingleEntityQuery extends AbstractQuery implements Query { public AbstractSingleEntityQuery(DynamoDBOperations dynamoDBOperations,Class clazz) { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryExpressionQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryExpressionQuery.java index dc7db799..f38a8a8c 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryExpressionQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryExpressionQuery.java @@ -15,11 +15,10 @@ */ package org.socialsignin.spring.data.dynamodb.query; -import java.util.List; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; +import java.util.List; /** * @author Michael Lavelle diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryRequestQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryRequestQuery.java index 352bf1be..0e8734c8 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryRequestQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityQueryRequestQuery.java @@ -15,11 +15,10 @@ */ package org.socialsignin.spring.data.dynamodb.query; -import java.util.List; - +import com.amazonaws.services.dynamodbv2.model.QueryRequest; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; -import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import java.util.List; public class MultipleEntityQueryRequestQuery extends AbstractMultipleEntityQuery { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityScanExpressionQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityScanExpressionQuery.java index 76031580..d3cde313 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityScanExpressionQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/MultipleEntityScanExpressionQuery.java @@ -15,12 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.query; -import java.util.List; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.springframework.util.Assert; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; +import java.util.List; public class MultipleEntityScanExpressionQuery extends AbstractMultipleEntityQuery { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryExpressionCountQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryExpressionCountQuery.java index 52149121..a444b569 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryExpressionCountQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryExpressionCountQuery.java @@ -15,9 +15,8 @@ */ package org.socialsignin.spring.data.dynamodb.query; -import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; +import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; /** * @author Michael Lavelle diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryRequestCountQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryRequestCountQuery.java index b92ec1f1..1582594e 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryRequestCountQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/QueryRequestCountQuery.java @@ -15,9 +15,8 @@ */ package org.socialsignin.spring.data.dynamodb.query; -import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; - import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; public class QueryRequestCountQuery extends AbstractSingleEntityQuery { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/query/ScanExpressionCountQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/query/ScanExpressionCountQuery.java index d33aced8..f6ebf859 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/query/ScanExpressionCountQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/query/ScanExpressionCountQuery.java @@ -15,11 +15,10 @@ */ package org.socialsignin.spring.data.dynamodb.query; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.springframework.util.Assert; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; - public class ScanExpressionCountQuery extends AbstractSingleEntityQuery implements Query{ private DynamoDBScanExpression scanExpression; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBCrudRepository.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBCrudRepository.java index 30abf0ee..9c4b8fa0 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBCrudRepository.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBCrudRepository.java @@ -15,8 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository; -import java.io.Serializable; - import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.NoRepositoryBean; @@ -27,6 +25,6 @@ * @author Michael Lavelle */ @NoRepositoryBean -public interface DynamoDBCrudRepository extends CrudRepository { +public interface DynamoDBCrudRepository extends CrudRepository { } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBHashAndRangeKey.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBHashAndRangeKey.java index 1ceedd37..1287cfef 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBHashAndRangeKey.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBHashAndRangeKey.java @@ -15,11 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.repository; -import java.io.Serializable; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; +import java.io.Serializable; + /** * Default implementation of a DynamoDB composite key, comprising of both a hash * and a range key. diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBPagingAndSortingRepository.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBPagingAndSortingRepository.java index 0cf741fd..9ec14826 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBPagingAndSortingRepository.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/DynamoDBPagingAndSortingRepository.java @@ -15,8 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository; -import java.io.Serializable; - import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.PagingAndSortingRepository; @@ -27,6 +25,6 @@ * @author Michael Lavelle */ @NoRepositoryBean -public interface DynamoDBPagingAndSortingRepository extends PagingAndSortingRepository { +public interface DynamoDBPagingAndSortingRepository extends PagingAndSortingRepository { } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java index bb4ec5ca..36ff354d 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java @@ -15,21 +15,19 @@ */ package org.socialsignin.spring.data.dynamodb.repository.cdi; -import java.lang.annotation.Annotation; -import java.util.Set; - -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.BeanManager; - +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate; import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory; import org.springframework.data.repository.cdi.CdiRepositoryBean; import org.springframework.util.Assert; -import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; +import javax.enterprise.context.spi.CreationalContext; +import javax.enterprise.inject.spi.Bean; +import javax.enterprise.inject.spi.BeanManager; +import java.lang.annotation.Annotation; +import java.util.Set; /** * A bean which represents a DynamoDB repository. @@ -64,7 +62,7 @@ class DynamoDBRepositoryBean extends CdiRepositoryBean { super(qualifiers, repositoryType, beanManager); if (dynamoDBOperationsBean == null) { - Assert.notNull(amazonDynamoDBBean); + Assert.notNull(amazonDynamoDBBean, "amazonDynamoDBBean must not be null!"); } else { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java index 696f5bc8..ceecc974 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java @@ -15,13 +15,13 @@ */ package org.socialsignin.spring.data.dynamodb.repository.cdi; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; +import org.springframework.data.repository.cdi.CdiRepositoryExtensionSupport; import javax.enterprise.event.Observes; import javax.enterprise.inject.UnsatisfiedResolutionException; @@ -29,15 +29,13 @@ import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.ProcessBean; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; -import org.springframework.data.repository.cdi.CdiRepositoryExtensionSupport; - -import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; -import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; /** * A portable CDI extension which registers beans for Spring Data DynamoDB diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoriesRegistrar.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoriesRegistrar.java index 54eabae4..47fb191d 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoriesRegistrar.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoriesRegistrar.java @@ -15,11 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.repository.config; -import java.lang.annotation.Annotation; - import org.springframework.data.repository.config.RepositoryBeanDefinitionRegistrarSupport; import org.springframework.data.repository.config.RepositoryConfigurationExtension; +import java.lang.annotation.Annotation; + /** * @author Michael Lavelle */ diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoryConfigExtension.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoryConfigExtension.java index 811efcf5..292d4ed4 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoryConfigExtension.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBRepositoryConfigExtension.java @@ -41,7 +41,7 @@ public class DynamoDBRepositoryConfigExtension extends RepositoryConfigurationEx private static final String AMAZON_DYNAMODB_REF = "amazon-dynamodb-ref"; @Override - public String getRepositoryFactoryClassName() { + public String getRepositoryFactoryBeanClassName() { return DynamoDBRepositoryFactoryBean.class.getName(); } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java index 8354fba1..6fff501f 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java @@ -15,6 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.repository.config; +import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactoryBean; +import org.springframework.context.annotation.ComponentScan.Filter; +import org.springframework.context.annotation.Import; +import org.springframework.data.repository.query.QueryLookupStrategy.Key; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; @@ -22,11 +27,6 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactoryBean; -import org.springframework.context.annotation.ComponentScan.Filter; -import org.springframework.context.annotation.Import; -import org.springframework.data.repository.query.QueryLookupStrategy.Key; - /** * Annotation to enable DynamoDB repositories. Will scan the package of the * annotated configuration class for Spring Data repositories by default. diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java index 530d3c25..1dc867ca 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java @@ -15,11 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.Query; import org.springframework.data.domain.Page; @@ -32,10 +27,14 @@ import org.springframework.data.repository.query.ParametersParameterAccessor; import org.springframework.data.repository.query.RepositoryQuery; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + /** * @author Michael Lavelle */ -public abstract class AbstractDynamoDBQuery implements RepositoryQuery { +public abstract class AbstractDynamoDBQuery implements RepositoryQuery { protected final DynamoDBOperations dynamoDBOperations; private final DynamoDBQueryMethod method; @@ -85,8 +84,8 @@ protected Query doCreateCountQueryWithPermissions(Object values[],boolean return query; } - private interface QueryExecution { - public Object execute(AbstractDynamoDBQuery query, Object[] values); + private interface QueryExecution { + Object execute(AbstractDynamoDBQuery query, Object[] values); } @@ -129,7 +128,7 @@ public PagedExecution(Parameters parameters) { this.parameters = parameters; } - private int scanThroughResults(Iterator iterator, int resultsToScan) { + private int scanThroughResults(Iterator iterator, long resultsToScan) { int processed = 0; while (iterator.hasNext() && processed < resultsToScan) { iterator.next(); @@ -164,11 +163,10 @@ private Page createPage(List allResults, Pageable pageable,AbstractDynamoD Iterator iterator = allResults.iterator(); - int processedCount = 0; if (pageable.getOffset() > 0) { - processedCount = scanThroughResults(iterator, pageable.getOffset()); + int processedCount = scanThroughResults(iterator, pageable.getOffset()); if (processedCount < pageable.getOffset()) - return new PageImpl(new ArrayList()); + return new PageImpl<>(new ArrayList()); } List results = readPageOfResultsRestrictMaxResultsIfNecessary(iterator, pageable.getPageSize()); @@ -181,7 +179,7 @@ private Page createPage(List allResults, Pageable pageable,AbstractDynamoD count = Math.min(count,getResultsRestrictionIfApplicable()); } - return new PageImpl(results, pageable, count); + return new PageImpl<>(results, pageable, count); } } @@ -195,7 +193,7 @@ public SlicedExecution(Parameters parameters) { this.parameters = parameters; } - private int scanThroughResults(Iterator iterator, int resultsToScan) { + private int scanThroughResults(Iterator iterator, long resultsToScan) { int processed = 0; while (iterator.hasNext() && processed < resultsToScan) { iterator.next(); @@ -208,7 +206,7 @@ private List readPageOfResultsRestrictMaxResultsIfNecessary(Iterator itera int processed = 0; int toProcess = getResultsRestrictionIfApplicable() != null ? Math.min(pageSize,getResultsRestrictionIfApplicable()) : pageSize; - List resultsPage = new ArrayList(); + List resultsPage = new ArrayList<>(); while (iterator.hasNext() && processed < toProcess) { resultsPage.add(iterator.next()); processed++; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java index b4a6c830..4d0c0125 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java @@ -15,10 +15,8 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; -import java.util.Arrays; -import java.util.Iterator; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; +import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.Query; import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityInformation; @@ -33,13 +31,13 @@ import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; -import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; +import java.util.Arrays; +import java.util.Iterator; /** * @author Michael Lavelle */ -public abstract class AbstractDynamoDBQueryCreator extends +public abstract class AbstractDynamoDBQueryCreator extends AbstractQueryCreator, DynamoDBQueryCriteria> { private DynamoDBEntityInformation entityMetadata; @@ -64,7 +62,7 @@ protected DynamoDBQueryCriteria create(Part part, Iterator iterat final DynamoDBMapperTableModel tableModel = dynamoDBOperations.getTableModel(entityMetadata.getJavaType()); DynamoDBQueryCriteria criteria = entityMetadata.isRangeKeyAware() ? new DynamoDBEntityWithHashAndRangeKeyCriteria( (DynamoDBIdIsHashAndRangeKeyEntityInformation) entityMetadata, tableModel) - : new DynamoDBEntityWithHashKeyOnlyCriteria(entityMetadata, tableModel); + : new DynamoDBEntityWithHashKeyOnlyCriteria<>(entityMetadata, tableModel); return addCriteria(criteria, part, iterator); } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBCountQueryCreator.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBCountQueryCreator.java index b6f3a2fd..e5e21c10 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBCountQueryCreator.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBCountQueryCreator.java @@ -1,7 +1,5 @@ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; - import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.Query; import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityInformation; @@ -9,7 +7,7 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.parser.PartTree; -public class DynamoDBCountQueryCreator extends AbstractDynamoDBQueryCreator { +public class DynamoDBCountQueryCreator extends AbstractDynamoDBQueryCreator { private boolean pageQuery; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCreator.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCreator.java index 223f4581..ef8b6e27 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCreator.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCreator.java @@ -1,7 +1,5 @@ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; - import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.Query; import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityInformation; @@ -9,7 +7,7 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.parser.PartTree; -public class DynamoDBQueryCreator extends AbstractDynamoDBQueryCreator { +public class DynamoDBQueryCreator extends AbstractDynamoDBQueryCreator { public DynamoDBQueryCreator(PartTree tree, DynamoDBEntityInformation entityMetadata, diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCriteria.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCriteria.java index bc780476..60ba93fe 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCriteria.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryCriteria.java @@ -15,34 +15,31 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; - +import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.Query; import org.springframework.data.domain.Sort; -import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; - /** * @author Michael Lavelle */ -public interface DynamoDBQueryCriteria { +public interface DynamoDBQueryCriteria { - public DynamoDBQueryCriteria withSingleValueCriteria(String propertyName, ComparisonOperator comparisonOperator, + DynamoDBQueryCriteria withSingleValueCriteria(String propertyName, ComparisonOperator comparisonOperator, Object value, Class type); - public DynamoDBQueryCriteria withNoValuedCriteria(String segment, ComparisonOperator null1); + DynamoDBQueryCriteria withNoValuedCriteria(String segment, ComparisonOperator null1); - public DynamoDBQueryCriteria withPropertyEquals(String segment, Object next, Class type); + DynamoDBQueryCriteria withPropertyEquals(String segment, Object next, Class type); - public DynamoDBQueryCriteria withPropertyIn(String segment, Iterable o, Class type); + DynamoDBQueryCriteria withPropertyIn(String segment, Iterable o, Class type); - public DynamoDBQueryCriteria withPropertyBetween(String segment, Object value1, Object value2, Class type); + DynamoDBQueryCriteria withPropertyBetween(String segment, Object value1, Object value2, Class type); - public DynamoDBQueryCriteria withSort(Sort sort); + DynamoDBQueryCriteria withSort(Sort sort); - public Query buildQuery(DynamoDBOperations dynamoDBOperations); + Query buildQuery(DynamoDBOperations dynamoDBOperations); - public Query buildCountQuery(DynamoDBOperations dynamoDBOperations,boolean pageQuery); + Query buildCountQuery(DynamoDBOperations dynamoDBOperations, boolean pageQuery); } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java index 7aeac86f..55a9a909 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java @@ -15,9 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; -import java.lang.reflect.Method; - import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.NamedQueries; @@ -26,6 +23,8 @@ import org.springframework.data.repository.query.QueryLookupStrategy.Key; import org.springframework.data.repository.query.RepositoryQuery; +import java.lang.reflect.Method; + /** * @author Michael Lavelle @@ -68,7 +67,7 @@ public final RepositoryQuery resolveQuery(Method method, RepositoryMetadata meta return createDynamoDBQuery(method, metadata, factory, metadata.getDomainType(), metadata.getIdType(), namedQueries); } - protected abstract RepositoryQuery createDynamoDBQuery(Method method, + protected abstract RepositoryQuery createDynamoDBQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, Class entityClass, Class idClass, NamedQueries namedQueries); } @@ -85,7 +84,7 @@ public CreateQueryLookupStrategy(DynamoDBOperations dynamoDBOperations) { } @Override - protected RepositoryQuery createDynamoDBQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, + protected RepositoryQuery createDynamoDBQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, Class entityClass, Class idClass, NamedQueries namedQueries) { try { return new PartTreeDynamoDBQuery(dynamoDBOperations, new DynamoDBQueryMethod(method, metadata, factory)); @@ -111,7 +110,7 @@ public DeclaredQueryLookupStrategy(DynamoDBOperations dynamoDBOperations) { } @Override - protected RepositoryQuery createDynamoDBQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, + protected RepositoryQuery createDynamoDBQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, Class entityClass, Class idClass, NamedQueries namedQueries) { throw new UnsupportedOperationException("Declared Queries not supported at this time"); } @@ -138,7 +137,7 @@ public CreateIfNotFoundQueryLookupStrategy(DynamoDBOperations dynamoDBOperations } @Override - protected RepositoryQuery createDynamoDBQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, + protected RepositoryQuery createDynamoDBQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, Class entityClass, Class idClass, NamedQueries namedQueries) { try { return strategy.createDynamoDBQuery(method, metadata, factory, entityClass, idClass, namedQueries); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryMethod.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryMethod.java index 75ed588d..a6f4664f 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryMethod.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryMethod.java @@ -15,9 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; -import java.lang.reflect.Method; - import org.socialsignin.spring.data.dynamodb.repository.EnableScan; import org.socialsignin.spring.data.dynamodb.repository.EnableScanCount; import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityInformation; @@ -26,10 +23,12 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.QueryMethod; +import java.lang.reflect.Method; + /** * @author Michael Lavelle */ -public class DynamoDBQueryMethod extends QueryMethod { +public class DynamoDBQueryMethod extends QueryMethod { private final Method method; private final boolean scanEnabledForRepository; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQuery.java index 9ba12403..fd1e54cc 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQuery.java @@ -15,8 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; - import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.Query; import org.springframework.data.repository.query.Parameters; @@ -27,7 +25,7 @@ /** * @author Michael Lavelle */ -public class PartTreeDynamoDBQuery extends AbstractDynamoDBQuery implements RepositoryQuery { +public class PartTreeDynamoDBQuery extends AbstractDynamoDBQuery implements RepositoryQuery { private DynamoDBQueryMethod queryMethod; private final Parameters parameters; @@ -47,11 +45,11 @@ public PartTree getTree() { } protected DynamoDBQueryCreator createQueryCreator(ParametersParameterAccessor accessor) { - return new DynamoDBQueryCreator(tree, accessor, queryMethod.getEntityInformation(), dynamoDBOperations); + return new DynamoDBQueryCreator<>(tree, accessor, queryMethod.getEntityInformation(), dynamoDBOperations); } protected DynamoDBCountQueryCreator createCountQueryCreator(ParametersParameterAccessor accessor,boolean pageQuery) { - return new DynamoDBCountQueryCreator(tree, accessor, queryMethod.getEntityInformation(), dynamoDBOperations, + return new DynamoDBCountQueryCreator<>(tree, accessor, queryMethod.getEntityInformation(), dynamoDBOperations, pageQuery); } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/CompositeIdHashAndRangeKeyExtractor.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/CompositeIdHashAndRangeKeyExtractor.java index 6ae6df9a..109400d8 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/CompositeIdHashAndRangeKeyExtractor.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/CompositeIdHashAndRangeKeyExtractor.java @@ -15,15 +15,14 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.lang.reflect.Method; - import org.springframework.util.ReflectionUtils; +import java.lang.reflect.Method; + /** * @author Michael Lavelle */ -public class CompositeIdHashAndRangeKeyExtractor implements HashAndRangeKeyExtractor { +public class CompositeIdHashAndRangeKeyExtractor implements HashAndRangeKeyExtractor { private DynamoDBHashAndRangeKeyMethodExtractor hashAndRangeKeyMethodExtractor; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityInformation.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityInformation.java index 5cb2f8d8..2db7f5b9 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityInformation.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityInformation.java @@ -15,8 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; - import org.springframework.data.repository.core.EntityInformation; /** @@ -31,7 +29,7 @@ * * @author Michael Lavelle */ -public interface DynamoDBEntityInformation extends EntityInformation, +public interface DynamoDBEntityInformation extends EntityInformation, DynamoDBHashKeyExtractingEntityMetadata { boolean isRangeKeyAware(); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupport.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupport.java index 9bca270f..e7a7c7bb 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupport.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupport.java @@ -15,21 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.util.Assert; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; -import org.springframework.util.ReflectionUtils.MethodCallback; -import org.springframework.util.StringUtils; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey; @@ -39,11 +24,24 @@ import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBVersionAttribute; +import org.springframework.util.Assert; +import org.springframework.util.ReflectionUtils; +import org.springframework.util.ReflectionUtils.FieldCallback; +import org.springframework.util.ReflectionUtils.MethodCallback; +import org.springframework.util.StringUtils; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author Michael Lavelle */ -public class DynamoDBEntityMetadataSupport implements DynamoDBHashKeyExtractingEntityMetadata { +public class DynamoDBEntityMetadataSupport implements DynamoDBHashKeyExtractingEntityMetadata { private final Class domainType; private boolean hasRangeKey; @@ -123,9 +121,9 @@ public DynamoDBEntityInformation getEntityInformation() { if (hasRangeKey) { DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl metadata = new DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl( domainType); - return new DynamoDBIdIsHashAndRangeKeyEntityInformationImpl(domainType, metadata); + return new DynamoDBIdIsHashAndRangeKeyEntityInformationImpl<>(domainType, metadata); } else { - return new DynamoDBIdIsHashKeyEntityInformationImpl(domainType, this); + return new DynamoDBIdIsHashKeyEntityInformationImpl<>(domainType, this); } } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadata.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadata.java index 2ac528af..2ebe3d9d 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadata.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadata.java @@ -15,7 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; import java.util.Set; /** @@ -23,7 +22,7 @@ * * @author Michael Lavelle */ -public interface DynamoDBHashAndRangeKeyExtractingEntityMetadata extends +public interface DynamoDBHashAndRangeKeyExtractingEntityMetadata extends DynamoDBHashKeyExtractingEntityMetadata { public HashAndRangeKeyExtractor getHashAndRangeKeyExtractor(Class idClass); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.java index af3b8ce4..7c214c18 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl.java @@ -15,25 +15,23 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.HashSet; -import java.util.Set; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey; import org.springframework.data.annotation.Id; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils.FieldCallback; import org.springframework.util.ReflectionUtils.MethodCallback; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashSet; +import java.util.Set; /** * @author Michael Lavelle */ -public class DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl extends +public class DynamoDBHashAndRangeKeyExtractingEntityMetadataImpl extends DynamoDBEntityMetadataSupport implements DynamoDBHashAndRangeKeyExtractingEntityMetadata { private DynamoDBHashAndRangeKeyMethodExtractor hashAndRangeKeyMethodExtractor; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractor.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractor.java index d9758fad..1278c5ad 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractor.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractor.java @@ -15,11 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; +import org.springframework.data.repository.core.EntityMetadata; + import java.lang.reflect.Field; import java.lang.reflect.Method; -import org.springframework.data.repository.core.EntityMetadata; - /** * @author Michael Lavelle */ diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImpl.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImpl.java index 00f1874a..ebe73535 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImpl.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImpl.java @@ -15,16 +15,15 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils.FieldCallback; import org.springframework.util.ReflectionUtils.MethodCallback; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; +import java.lang.reflect.Field; +import java.lang.reflect.Method; /** * @author Michael Lavelle diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashKeyExtractingEntityMetadata.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashKeyExtractingEntityMetadata.java index 99c76788..490da4e8 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashKeyExtractingEntityMetadata.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashKeyExtractingEntityMetadata.java @@ -15,11 +15,10 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.util.Map; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; import org.springframework.data.repository.core.EntityMetadata; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import java.util.Map; /** * Obtains basic hash key-related metadata about a DynamoDBEntity, such as diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformation.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformation.java index 47b1efc6..cd7b4bd8 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformation.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformation.java @@ -15,12 +15,10 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; - /** * @author Michael Lavelle */ -public interface DynamoDBIdIsHashAndRangeKeyEntityInformation extends +public interface DynamoDBIdIsHashAndRangeKeyEntityInformation extends DynamoDBHashAndRangeKeyExtractingEntityMetadata, DynamoDBEntityInformation { } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java index f4c5627f..7948d59a 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImpl.java @@ -15,14 +15,12 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.util.Map; -import java.util.Set; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; import org.springframework.data.annotation.Id; import org.springframework.data.repository.core.support.ReflectionEntityInformation; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import java.util.Map; +import java.util.Set; /** * Encapsulates minimal information needed to load DynamoDB entities that have @@ -33,7 +31,7 @@ * * @author Michael Lavelle */ -public class DynamoDBIdIsHashAndRangeKeyEntityInformationImpl extends +public class DynamoDBIdIsHashAndRangeKeyEntityInformationImpl extends ReflectionEntityInformation implements DynamoDBIdIsHashAndRangeKeyEntityInformation { private DynamoDBHashAndRangeKeyExtractingEntityMetadata metadata; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImpl.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImpl.java index 35163ea1..8ee91ea9 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImpl.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImpl.java @@ -15,13 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.util.Map; - -import org.springframework.util.Assert; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import org.springframework.util.Assert; + +import java.util.Map; /** * Encapsulates minimal information needed to load DynamoDB entities. @@ -39,7 +37,7 @@ * * @author Michael Lavelle */ -public class DynamoDBIdIsHashKeyEntityInformationImpl extends +public class DynamoDBIdIsHashKeyEntityInformationImpl extends FieldAndGetterReflectionEntityInformation implements DynamoDBEntityInformation { private DynamoDBHashKeyExtractingEntityMetadata metadata; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactory.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactory.java index bc31fcfe..06c071fe 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactory.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactory.java @@ -12,20 +12,22 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import static org.springframework.data.querydsl.QueryDslUtils.QUERY_DSL_PRESENT; - -import java.io.Serializable; - import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository; import org.socialsignin.spring.data.dynamodb.repository.query.DynamoDBQueryLookupStrategy; -import org.springframework.data.querydsl.QueryDslPredicateExecutor; +import org.springframework.data.querydsl.QuerydslPredicateExecutor; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; +import org.springframework.data.repository.query.EvaluationContextProvider; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; +import java.io.Serializable; +import java.util.Optional; + +import static org.springframework.data.querydsl.QuerydslUtils.QUERY_DSL_PRESENT; + /** * @author Michael Lavelle */ @@ -39,15 +41,15 @@ public DynamoDBRepositoryFactory(DynamoDBOperations dynamoDBOperations) { } @Override - public DynamoDBEntityInformation getEntityInformation(final Class domainClass) { + public DynamoDBEntityInformation getEntityInformation(final Class domainClass) { final DynamoDBEntityMetadataSupport metadata = new DynamoDBEntityMetadataSupport(domainClass); return metadata.getEntityInformation(); } @Override - protected QueryLookupStrategy getQueryLookupStrategy(Key key) { - return DynamoDBQueryLookupStrategy.create(dynamoDBOperations, key); + protected Optional getQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider) { + return Optional.of(DynamoDBQueryLookupStrategy.create(dynamoDBOperations, key)); } /** @@ -79,7 +81,7 @@ protected Class getRepositoryBaseClass(RepositoryMetadata metadata) { } private static boolean isQueryDslRepository(Class repositoryInterface) { - return QUERY_DSL_PRESENT && QueryDslPredicateExecutor.class.isAssignableFrom(repositoryInterface); + return QUERY_DSL_PRESENT && QuerydslPredicateExecutor.class.isAssignableFrom(repositoryInterface); } @Override diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java index 59d1e8b3..db7a672c 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java @@ -15,8 +15,8 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; - +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate; import org.socialsignin.spring.data.dynamodb.mapping.DynamoDBMappingContext; @@ -24,8 +24,7 @@ import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport; import org.springframework.data.repository.core.support.RepositoryFactorySupport; -import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; +import java.io.Serializable; /** * Special adapter for Springs diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/EnableScanAnnotationPermissions.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/EnableScanAnnotationPermissions.java index 444862bc..8fd51a1b 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/EnableScanAnnotationPermissions.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/EnableScanAnnotationPermissions.java @@ -15,13 +15,13 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.lang.reflect.Method; - import org.socialsignin.spring.data.dynamodb.repository.EnableScan; import org.socialsignin.spring.data.dynamodb.repository.EnableScanCount; import org.springframework.data.domain.Pageable; import org.springframework.util.ReflectionUtils; +import java.lang.reflect.Method; + /** * * @author Michael Lavelle diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/FieldAndGetterReflectionEntityInformation.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/FieldAndGetterReflectionEntityInformation.java index 054021af..809dc5d9 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/FieldAndGetterReflectionEntityInformation.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/FieldAndGetterReflectionEntityInformation.java @@ -15,17 +15,14 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - import org.springframework.data.annotation.Id; import org.springframework.data.repository.core.support.AbstractEntityInformation; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.FieldCallback; -import org.springframework.util.ReflectionUtils.MethodCallback; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.lang.reflect.Method; /** * {@link org.springframework.data.repository.core.EntityInformation} implementation that inspects getters for an @@ -33,7 +30,7 @@ * * @author Michael Lavelle */ -public class FieldAndGetterReflectionEntityInformation extends AbstractEntityInformation { +public class FieldAndGetterReflectionEntityInformation extends AbstractEntityInformation { private static final Class DEFAULT_ID_ANNOTATION = Id.class; @@ -63,27 +60,21 @@ public FieldAndGetterReflectionEntityInformation(Class domainClass) { public FieldAndGetterReflectionEntityInformation(Class domainClass, final Class annotation) { super(domainClass); - Assert.notNull(annotation); + Assert.notNull(annotation, "annotation must not be null!"); - ReflectionUtils.doWithMethods(domainClass, new MethodCallback() { - @Override - public void doWith(Method method) { - if (method.getAnnotation(annotation) != null) { - FieldAndGetterReflectionEntityInformation.this.method = method; - return; - } + ReflectionUtils.doWithMethods(domainClass, (method) -> { + if (method.getAnnotation(annotation) != null) { + FieldAndGetterReflectionEntityInformation.this.method = method; + return; } }); if (method == null) { - ReflectionUtils.doWithFields(domainClass, new FieldCallback() { - @Override - public void doWith(Field field) { - if (field.getAnnotation(annotation) != null) { - FieldAndGetterReflectionEntityInformation.this.field = field; - return; - } + ReflectionUtils.doWithFields(domainClass, (field) -> { + if (field.getAnnotation(annotation) != null) { + FieldAndGetterReflectionEntityInformation.this.field = field; + return; } }); } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashAndRangeKeyExtractor.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashAndRangeKeyExtractor.java index 12dc5ec8..e62fe83f 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashAndRangeKeyExtractor.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashAndRangeKeyExtractor.java @@ -15,12 +15,10 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; - /** * @author Michael Lavelle */ -public interface HashAndRangeKeyExtractor extends HashKeyExtractor { +public interface HashAndRangeKeyExtractor extends HashKeyExtractor { public Object getRangeKey(ID id); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyExtractor.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyExtractor.java index 9d5c7d60..6b4b0a35 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyExtractor.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyExtractor.java @@ -15,12 +15,10 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; - /** * @author Michael Lavelle */ -public interface HashKeyExtractor { +public interface HashKeyExtractor { - public H getHashKey(ID id); + H getHashKey(ID id); } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyIsIdHashKeyExtractor.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyIsIdHashKeyExtractor.java index da79b9ae..3a714627 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyIsIdHashKeyExtractor.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/HashKeyIsIdHashKeyExtractor.java @@ -15,14 +15,12 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; - import org.springframework.util.Assert; /** * @author Michael Lavelle */ -public class HashKeyIsIdHashKeyExtractor implements HashKeyExtractor { +public class HashKeyIsIdHashKeyExtractor implements HashKeyExtractor { private Class idAndHashKeyType; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java index 3a902791..e3f069a5 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java @@ -15,19 +15,18 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; +import com.amazonaws.services.dynamodbv2.datamodeling.KeyPair; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.util.Assert; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; -import com.amazonaws.services.dynamodbv2.datamodeling.KeyPair; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; /** * Default implementation of the @@ -40,7 +39,7 @@ * @param * the type of the entity's identifier */ -public class SimpleDynamoDBCrudRepository +public class SimpleDynamoDBCrudRepository implements DynamoDBCrudRepository { protected DynamoDBEntityInformation entityInformation; @@ -55,8 +54,8 @@ public SimpleDynamoDBCrudRepository( DynamoDBEntityInformation entityInformation, DynamoDBOperations dynamoDBOperations, EnableScanPermissions enableScanPermissions) { - Assert.notNull(entityInformation); - Assert.notNull(dynamoDBOperations); + Assert.notNull(entityInformation, "entityInformation must not be null"); + Assert.notNull(dynamoDBOperations, "dynamoDBOperations must not be null"); this.entityInformation = entityInformation; this.dynamoDBOperations = dynamoDBOperations; @@ -66,21 +65,27 @@ public SimpleDynamoDBCrudRepository( } @Override - public T findOne(ID id) { + public Optional findById(ID id) { + T result; if (entityInformation.isRangeKeyAware()) { - return dynamoDBOperations.load(domainType, + result = dynamoDBOperations.load(domainType, entityInformation.getHashKey(id), entityInformation.getRangeKey(id)); } else { - return dynamoDBOperations.load(domainType, + result = dynamoDBOperations.load(domainType, entityInformation.getHashKey(id)); } + if (result == null) { + return Optional.empty(); + } else { + return Optional.of(result); + } } @SuppressWarnings("unchecked") - public List findAll(Iterable ids) { - Map, List> keyPairsMap = new HashMap, List>(); - List keyPairs = new ArrayList(); + public List findAllById(Iterable ids) { + Map, List> keyPairsMap = new HashMap<>(); + List keyPairs = new ArrayList<>(); for (ID id : ids) { if (entityInformation.isRangeKeyAware()) { keyPairs.add(new KeyPair().withHashKey( @@ -132,16 +137,16 @@ public S save(S entity) { } @Override - public Iterable save(Iterable entities) { + public Iterable saveAll(Iterable entities) { dynamoDBOperations.batchSave(entities); return entities; } @Override - public boolean exists(ID id) { + public boolean existsById(ID id) { Assert.notNull(id, "The given id must not be null!"); - return findOne(id) != null; + return findById(id).isPresent(); } public void assertScanEnabled(boolean scanEnabled, String methodName) { @@ -175,12 +180,12 @@ public long count() { } @Override - public void delete(ID id) { + public void deleteById(ID id) { Assert.notNull(id, "The given id must not be null!"); - T entity = findOne(id); - if (entity == null) { + Optional entity = findById(id); + if (!entity.isPresent()) { throw new EmptyResultDataAccessException(String.format( "No %s entity with id %s exists!", domainType, id), 1); } @@ -194,7 +199,7 @@ public void delete(T entity) { } @Override - public void delete(Iterable entities) { + public void deleteAll(Iterable entities) { Assert.notNull(entities, "The given Iterable of entities not be null!"); dynamoDBOperations.batchDelete(entities); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepository.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepository.java index c16acc63..be0a1338 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepository.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepository.java @@ -15,11 +15,8 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; +import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository; import org.springframework.data.domain.Page; @@ -28,8 +25,9 @@ import org.springframework.data.domain.Sort; import org.springframework.util.Assert; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; -import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; /** * Default implementation of the @@ -54,7 +52,7 @@ * @param * the type of the entity's identifier */ -public class SimpleDynamoDBPagingAndSortingRepository extends SimpleDynamoDBCrudRepository +public class SimpleDynamoDBPagingAndSortingRepository extends SimpleDynamoDBCrudRepository implements DynamoDBPagingAndSortingRepository { public SimpleDynamoDBPagingAndSortingRepository(DynamoDBEntityInformation entityInformation, @@ -78,11 +76,12 @@ public Page findAll(Pageable pageable) { DynamoDBScanExpression scanExpression = new DynamoDBScanExpression(); // Scan to the end of the page after the requested page - int scanTo = pageable.getOffset() + (2 * pageable.getPageSize()); - scanExpression.setLimit(scanTo); + long scanTo = pageable.getOffset() + (2 * pageable.getPageSize()); + //TODO Spring5: Fix downcast + scanExpression.setLimit((int)scanTo); PaginatedScanList paginatedScanList = dynamoDBOperations.scan(domainType, scanExpression); Iterator iterator = paginatedScanList.iterator(); - int processedCount = 0; + long processedCount = 0; if (pageable.getOffset() > 0) { processedCount = scanThroughResults(iterator, pageable.getOffset()); if (processedCount < pageable.getOffset()) @@ -100,7 +99,7 @@ public Page findAll(Pageable pageable) { } - private int scanThroughResults(Iterator paginatedScanListIterator, int resultsToScan) { + private int scanThroughResults(Iterator paginatedScanListIterator, long resultsToScan) { int processed = 0; while (paginatedScanListIterator.hasNext() && processed < resultsToScan) { paginatedScanListIterator.next(); diff --git a/src/main/resources/org/socialsignin/spring/data/dynamodb/repository/config/spring-dynamodb-1.0.xsd b/src/main/resources/org/socialsignin/spring/data/dynamodb/repository/config/spring-dynamodb-1.0.xsd index b70a3083..27b6fc82 100644 --- a/src/main/resources/org/socialsignin/spring/data/dynamodb/repository/config/spring-dynamodb-1.0.xsd +++ b/src/main/resources/org/socialsignin/spring/data/dynamodb/repository/config/spring-dynamodb-1.0.xsd @@ -1,11 +1,10 @@ + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:tool="http://www.springframework.org/schema/tool" + xmlns:repository="http://www.springframework.org/schema/data/repository" + targetNamespace="http://docs.socialsignin.org/schema/data/dynamodb" + elementFormDefault="qualified" attributeFormDefault="unqualified"> diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/core/ConfigurationTI.java b/src/test/java/org/socialsignin/spring/data/dynamodb/core/ConfigurationTI.java index f8a2bd9c..9fc8d65e 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/core/ConfigurationTI.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/core/ConfigurationTI.java @@ -1,12 +1,11 @@ package org.socialsignin.spring.data.dynamodb.core; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.Assert; - import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.Assert; /** * Clue {@link Configuration} class for all integration tests. diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/core/CustomerHistoryIT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/core/CustomerHistoryIT.java index 6a47296f..bd6c4b32 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/core/CustomerHistoryIT.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/core/CustomerHistoryIT.java @@ -1,21 +1,17 @@ package org.socialsignin.spring.data.dynamodb.core; -import static org.junit.Assert.assertEquals; - import org.junit.Test; import org.junit.runner.RunWith; import org.socialsignin.spring.data.dynamodb.domain.sample.CustomerHistory; import org.socialsignin.spring.data.dynamodb.domain.sample.CustomerHistoryRepository; -import org.socialsignin.spring.data.dynamodb.domain.sample.FeedUserRepository; import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; -import org.springframework.data.domain.Sort.Direction; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static org.junit.Assert.assertEquals; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={CustomerHistoryIT.TestAppConfig.class, ConfigurationTI.class}) diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateIT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateIT.java index 4eda2be4..c4065670 100755 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateIT.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateIT.java @@ -1,7 +1,6 @@ package org.socialsignin.spring.data.dynamodb.core; -import java.util.UUID; - +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -10,7 +9,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import java.util.UUID; /** * Integration test that interacts with DynamoDB Local instance. diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateUnitTest.java index 807f8442..4a8ceb9a 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplateUnitTest.java @@ -1,8 +1,9 @@ package org.socialsignin.spring.data.dynamodb.core; -import java.util.ArrayList; -import java.util.List; - +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig.TableNameResolver; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -13,10 +14,8 @@ import org.socialsignin.spring.data.dynamodb.domain.sample.Playlist; import org.socialsignin.spring.data.dynamodb.domain.sample.User; -import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig.TableNameResolver; +import java.util.ArrayList; +import java.util.List; @RunWith(MockitoJUnitRunner.class) public class DynamoDBTemplateUnitTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistory.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistory.java index 24605768..0df98933 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistory.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistory.java @@ -1,11 +1,10 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import org.springframework.data.annotation.Id; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; +import org.springframework.data.annotation.Id; @DynamoDBTable(tableName = "customerhistory") public class CustomerHistory { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistoryId.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistoryId.java index bd4c0be3..9dc1479b 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistoryId.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/CustomerHistoryId.java @@ -1,10 +1,10 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import java.io.Serializable; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; +import java.io.Serializable; + public class CustomerHistoryId implements Serializable { private String customerId; diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/DynamoDBYearMarshaller.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/DynamoDBYearMarshaller.java index 4340bb8b..6441efbb 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/DynamoDBYearMarshaller.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/DynamoDBYearMarshaller.java @@ -15,11 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.domain.sample; +import org.socialsignin.spring.data.dynamodb.marshaller.DateDynamoDBMarshaller; + import java.text.DateFormat; import java.text.SimpleDateFormat; -import org.socialsignin.spring.data.dynamodb.marshaller.DateDynamoDBMarshaller; - public class DynamoDBYearMarshaller extends DateDynamoDBMarshaller { private static final String PATTERN = "yyyy"; diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUser.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUser.java index 9ccd8c7e..e83282df 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUser.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUser.java @@ -1,18 +1,16 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import java.util.Date; - -import org.springframework.data.annotation.Id; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.DynamoDBAttributeType; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBNativeBoolean; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTyped; +import org.springframework.data.annotation.Id; + +import java.util.Date; @DynamoDBTable(tableName = "feed_user") public class FeedUser { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUserRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUserRepository.java index c176db4d..f85152a2 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUserRepository.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedUserRepository.java @@ -1,10 +1,10 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import java.util.List; - import org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository; import org.springframework.data.domain.Pageable; +import java.util.List; + public interface FeedUserRepository extends DynamoDBPagingAndSortingRepository{ public List findByUsrNo(int usrNo, Pageable pageable); public List findByUsrNoAndFeedOpenYn(int usrNo, boolean feedOpenYn, Pageable pageable); diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/GlobalSecondaryIndexWithRangeKeyIT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/GlobalSecondaryIndexWithRangeKeyIT.java index f3402f91..1cbcd66d 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/GlobalSecondaryIndexWithRangeKeyIT.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/GlobalSecondaryIndexWithRangeKeyIT.java @@ -1,17 +1,7 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import static org.junit.Assert.fail; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; - -import java.util.Calendar; -import java.util.Date; -import java.util.List; - import org.junit.Test; import org.junit.runner.RunWith; - import org.socialsignin.spring.data.dynamodb.core.ConfigurationTI; import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +9,15 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + /** * Shows the usage of Hash+Range key combinations with global secondary indexes. diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/HashRangeKeyIT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/HashRangeKeyIT.java index 8fed2d3c..bcfe0560 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/HashRangeKeyIT.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/HashRangeKeyIT.java @@ -1,15 +1,18 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import static org.junit.Assert.*; - -import java.util.UUID; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + /** * Show the usage of Hash+Range key as also how to use * XML based configuration @@ -28,18 +31,18 @@ public void runCrudOperations() { final String playlistName = "playlistName-" + UUID.randomUUID().toString(); PlaylistId id = new PlaylistId(userName, playlistName); - Playlist actual = playlistRepository.findOne(id); - assertNull(actual); + Optional actual = playlistRepository.findById(id); + assertFalse(actual.isPresent()); Playlist playlist = new Playlist(id); playlist.setDisplayName(displayName); playlistRepository.save(playlist); - actual = playlistRepository.findOne(id); - assertNotNull(actual); - assertEquals(displayName, actual.getDisplayName()); - assertEquals(id.getPlaylistName(), actual.getPlaylistName()); - assertEquals(id.getUserName(), actual.getUserName()); + actual = playlistRepository.findById(id); + assertTrue(actual.isPresent()); + assertEquals(displayName, actual.get().getDisplayName()); + assertEquals(id.getPlaylistName(), actual.get().getPlaylistName()); + assertEquals(id.getUserName(), actual.get().getUserName()); } } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Installation.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Installation.java index 0cc7f156..157ebd88 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Installation.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Installation.java @@ -5,6 +5,7 @@ import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; + import java.io.Serializable; import java.util.Date; diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/InstallationRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/InstallationRepository.java index 7c21c4d1..469cc284 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/InstallationRepository.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/InstallationRepository.java @@ -1,8 +1,9 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import java.util.List; import org.springframework.data.repository.CrudRepository; +import java.util.List; + public interface InstallationRepository extends CrudRepository { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java index 92f2a55b..22aeabe2 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java @@ -1,13 +1,5 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; -import static org.junit.Assert.*; - -import java.time.Instant; -import java.util.Date; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - import org.junit.Test; import org.junit.runner.RunWith; import org.socialsignin.spring.data.dynamodb.core.ConfigurationTI; @@ -17,6 +9,15 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.time.Instant; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + /** * Tests JDK8 features of spring-data * @see diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Playlist.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Playlist.java index ad91d2b3..e5f36107 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Playlist.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Playlist.java @@ -15,12 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.domain.sample; -import org.springframework.data.annotation.Id; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; +import org.springframework.data.annotation.Id; @DynamoDBTable(tableName = "playlist") public class Playlist { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/PlaylistId.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/PlaylistId.java index 57713332..89b1661c 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/PlaylistId.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/PlaylistId.java @@ -15,11 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.domain.sample; -import java.io.Serializable; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; +import java.io.Serializable; + /** * Composite Key to support a HASH+RANGE key of DynamoDB in Spring-Data */ diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java index a75edf37..bb99d935 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/User.java @@ -15,15 +15,14 @@ */ package org.socialsignin.spring.data.dynamodb.domain.sample; -import java.time.Instant; -import java.util.Date; -import java.util.Set; - -import org.socialsignin.spring.data.dynamodb.marshaller.Instant2IsoDynamoDBMarshaller; - import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshalling; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; +import org.socialsignin.spring.data.dynamodb.marshaller.Instant2IsoDynamoDBMarshaller; + +import java.time.Instant; +import java.util.Date; +import java.util.Set; @DynamoDBTable(tableName = "user") public class User { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java index 0727b872..f6267e59 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java @@ -1,12 +1,12 @@ package org.socialsignin.spring.data.dynamodb.domain.sample; +import org.socialsignin.spring.data.dynamodb.repository.EnableScan; +import org.springframework.data.repository.Repository; + import java.time.Instant; import java.util.List; import java.util.Optional; -import org.socialsignin.spring.data.dynamodb.repository.EnableScan; -import org.springframework.data.repository.Repository; - public interface UserRepository extends Repository { // CRUD method using Optional diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContextUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContextUnitTest.java index b7dd340d..a7e1f257 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContextUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBMappingContextUnitTest.java @@ -15,16 +15,16 @@ */ package org.socialsignin.spring.data.dynamodb.mapping; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.Assert.assertThat; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import org.socialsignin.spring.data.dynamodb.domain.sample.User; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + /** * Unit tests for {@link DynamoDBMappingContext}. * diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImplUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImplUnitTest.java index d47f7bf9..28d46c28 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImplUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/DynamoDBPersistentPropertyImplUnitTest.java @@ -15,18 +15,17 @@ */ package org.socialsignin.spring.data.dynamodb.mapping; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.CoreMatchers.nullValue; -import static org.junit.Assert.assertThat; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.junit.Assert.assertThat; /** * Unit tests for {@link DynamoDBPersistentPropertyImpl}. diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2EpocheDynamoDBMarshallerTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2EpocheDynamoDBMarshallerTest.java index 5d861f52..3debbe35 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2EpocheDynamoDBMarshallerTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2EpocheDynamoDBMarshallerTest.java @@ -1,12 +1,12 @@ package org.socialsignin.spring.data.dynamodb.marshaller; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import org.junit.Before; +import org.junit.Test; import java.util.Date; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class Date2EpocheDynamoDBMarshallerTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2IsoDynamoDBMarshallerTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2IsoDynamoDBMarshallerTest.java index 06fbcf10..3e7883b0 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2IsoDynamoDBMarshallerTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Date2IsoDynamoDBMarshallerTest.java @@ -1,12 +1,12 @@ package org.socialsignin.spring.data.dynamodb.marshaller; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import org.junit.Before; +import org.junit.Test; import java.util.Date; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class Date2IsoDynamoDBMarshallerTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshallerTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshallerTest.java index 0722eeb4..eff956e2 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshallerTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2EpocheDynamoDBMarshallerTest.java @@ -1,12 +1,12 @@ package org.socialsignin.spring.data.dynamodb.marshaller; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import org.junit.Before; +import org.junit.Test; import java.time.Instant; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class Instant2EpocheDynamoDBMarshallerTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshallerTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshallerTest.java index c2d3dbb9..3a5a5a23 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshallerTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/marshaller/Instant2IsoDynamoDBMarshallerTest.java @@ -1,12 +1,12 @@ package org.socialsignin.spring.data.dynamodb.marshaller; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import org.junit.Before; +import org.junit.Test; import java.time.Instant; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class Instant2IsoDynamoDBMarshallerTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteriaUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteriaUnitTest.java index 3b0ec5b4..06ec8244 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteriaUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteriaUnitTest.java @@ -1,5 +1,9 @@ package org.socialsignin.spring.data.dynamodb.repository.query; +import com.amazonaws.services.dynamodbv2.model.AttributeValue; +import org.junit.Assert; +import org.junit.Test; + import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -8,11 +12,6 @@ import java.util.List; import java.util.TimeZone; -import org.junit.Assert; -import org.junit.Test; - -import com.amazonaws.services.dynamodbv2.model.AttributeValue; - public abstract class AbstractDynamoDBQueryCriteriaUnitTest> { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteriaUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteriaUnitTest.java index 25d061e4..fc215a29 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteriaUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteriaUnitTest.java @@ -1,7 +1,5 @@ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.util.Date; - import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -12,6 +10,8 @@ import org.socialsignin.spring.data.dynamodb.domain.sample.User; import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityInformation; +import java.util.Date; + @RunWith(MockitoJUnitRunner.class) public class DynamoDBEntityWithHashKeyOnlyCriteriaUnitTest extends AbstractDynamoDBQueryCriteriaUnitTest> { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQueryUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQueryUnitTest.java index 3591b24b..71539259 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQueryUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/PartTreeDynamoDBQueryUnitTest.java @@ -1,25 +1,13 @@ package org.socialsignin.spring.data.dynamodb.repository.query; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.io.Serializable; -import java.lang.reflect.Field; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TimeZone; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; +import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList; +import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; +import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; +import com.amazonaws.services.dynamodbv2.model.Condition; +import com.amazonaws.services.dynamodbv2.model.QueryRequest; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -40,14 +28,25 @@ import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.util.ClassUtils; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; -import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedQueryList; -import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; -import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; -import com.amazonaws.services.dynamodbv2.model.Condition; -import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import java.io.Serializable; +import java.lang.reflect.Field; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TimeZone; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; @RunWith(MockitoJUnitRunner.class) public class PartTreeDynamoDBQueryUnitTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupportUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupportUnitTest.java index 493d772a..eced419a 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupportUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBEntityMetadataSupportUnitTest.java @@ -2,14 +2,9 @@ import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; -import org.socialsignin.spring.data.dynamodb.domain.sample.Playlist; -import org.socialsignin.spring.data.dynamodb.domain.sample.PlaylistId; import org.socialsignin.spring.data.dynamodb.domain.sample.User; @RunWith(MockitoJUnitRunner.class) diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImplUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImplUnitTest.java index 16f645cb..f7b58b1c 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImplUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBHashAndRangeKeyMethodExtractorImplUnitTest.java @@ -1,15 +1,14 @@ package org.socialsignin.spring.data.dynamodb.repository.support; -import java.lang.reflect.Method; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import org.socialsignin.spring.data.dynamodb.domain.sample.PlaylistId; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey; +import java.lang.reflect.Method; @RunWith(MockitoJUnitRunner.class) @SuppressWarnings("unused") diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImplUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImplUnitTest.java index 5512aac6..ae49a0d5 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImplUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashAndRangeKeyEntityInformationImplUnitTest.java @@ -1,5 +1,6 @@ package org.socialsignin.spring.data.dynamodb.repository.support; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -11,8 +12,6 @@ import org.socialsignin.spring.data.dynamodb.domain.sample.PlaylistId; import org.socialsignin.spring.data.dynamodb.domain.sample.User; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; - @RunWith(MockitoJUnitRunner.class) @SuppressWarnings("unused") public class DynamoDBIdIsHashAndRangeKeyEntityInformationImplUnitTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImplUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImplUnitTest.java index 13935f22..89217237 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImplUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBIdIsHashKeyEntityInformationImplUnitTest.java @@ -1,5 +1,6 @@ package org.socialsignin.spring.data.dynamodb.repository.support; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -11,8 +12,6 @@ import org.socialsignin.spring.data.dynamodb.domain.sample.PlaylistId; import org.socialsignin.spring.data.dynamodb.domain.sample.User; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; - @RunWith(MockitoJUnitRunner.class) @SuppressWarnings("unused") public class DynamoDBIdIsHashKeyEntityInformationImplUnitTest { diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryUnitTest.java index e90c4d67..e73605f4 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryUnitTest.java @@ -15,9 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,6 +27,11 @@ import org.socialsignin.spring.data.dynamodb.domain.sample.User; import org.springframework.dao.EmptyResultDataAccessException; +import java.util.Optional; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + /** * Unit tests for {@link DynamoDBSimpleIdRepository}. @@ -101,21 +103,21 @@ public void setUp() { @Test(expected = EmptyResultDataAccessException.class) public void throwsExceptionIfEntityOnlyHashKeyToDeleteDoesNotExist() { - repoForEntityWithOnlyHashKey.delete(4711L); + repoForEntityWithOnlyHashKey.deleteById(4711L); } @Test public void findOneEntityWithOnlyHashKey() { - User user = repoForEntityWithOnlyHashKey.findOne(1l); + Optional user = repoForEntityWithOnlyHashKey.findById(1l); Mockito.verify(dynamoDBOperations).load(User.class,1l); - assertEquals(testUser, user); + assertEquals(testUser, user.get()); } @Test public void findOneEntityWithHashAndRangeKey() { - Playlist playlist = repoForEntityWithHashAndRangeKey.findOne(testPlaylistId); - assertEquals(testPlaylist, playlist); + Optional playlist = repoForEntityWithHashAndRangeKey.findById(testPlaylistId); + assertEquals(testPlaylist, playlist.get()); } /** @@ -128,6 +130,6 @@ public void throwsExceptionIfEntityWithHashAndRangeKeyToDeleteDoesNotExist() { playlistId.setUserName("someUser"); playlistId.setPlaylistName("somePlaylistName"); - repoForEntityWithHashAndRangeKey.delete(playlistId); + repoForEntityWithHashAndRangeKey.deleteById(playlistId); } } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepositoryUnitTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepositoryUnitTest.java index 1b062e99..6f88de4e 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepositoryUnitTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBPagingAndSortingRepositoryUnitTest.java @@ -15,9 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.support; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,6 +27,11 @@ import org.socialsignin.spring.data.dynamodb.domain.sample.User; import org.springframework.dao.EmptyResultDataAccessException; +import java.util.Optional; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + /** * Unit tests for {@link DynamoDBSimpleIdRepository}. * @@ -101,21 +103,21 @@ public void setUp() { @Test(expected = EmptyResultDataAccessException.class) public void throwsExceptionIfEntityWithOnlyHashKeyToDeleteDoesNotExist() { - repoForEntityWithOnlyHashKey.delete(4711L); + repoForEntityWithOnlyHashKey.deleteById(4711L); } @Test public void findOneEntityWithOnlyHashKey() { - User user = repoForEntityWithOnlyHashKey.findOne(1l); + Optional user = repoForEntityWithOnlyHashKey.findById(1l); Mockito.verify(dynamoDBOperations).load(User.class,1l); - assertEquals(testUser, user); + assertEquals(testUser, user.get()); } @Test public void findOneEntityWithHashAndRangeKey() { - Playlist playlist = repoForEntityWithHashAndRangeKey.findOne(testPlaylistId); - assertEquals(testPlaylist, playlist); + Optional playlist = repoForEntityWithHashAndRangeKey.findById(testPlaylistId); + assertEquals(testPlaylist, playlist.get()); } /** @@ -128,6 +130,6 @@ public void throwsExceptionIfEntityWithHashAndRangeKeyToDeleteDoesNotExist() { playlistId.setUserName("someUser"); playlistId.setPlaylistName("somePlaylistName"); - repoForEntityWithHashAndRangeKey.delete(playlistId); + repoForEntityWithHashAndRangeKey.deleteById(playlistId); } } From 8c3e139246c4a9617b0d7c22b5a170fb2d42f261 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Tue, 21 Nov 2017 03:07:53 -0500 Subject: [PATCH 02/18] Handle new `Sort.unsorted()` sorting strategy Spring-Data no longer passes in `null` if no sorting order is given by the caller but uses `Sort.unsorted()` which incorrectly causes an Exception. This should also solve #99 --- .../query/AbstractDynamoDBQueryCriteria.java | 53 +++++++++++-------- ...moDBEntityWithHashAndRangeKeyCriteria.java | 49 ++++++++--------- ...DynamoDBEntityWithHashKeyOnlyCriteria.java | 30 +++++------ 3 files changed, 66 insertions(+), 66 deletions(-) diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java index 6ab8a86f..1b3c9e18 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java @@ -15,18 +15,15 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; -import java.time.Instant; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; +import com.amazonaws.services.dynamodbv2.model.AttributeValue; +import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; +import com.amazonaws.services.dynamodbv2.model.Condition; +import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import com.amazonaws.services.dynamodbv2.model.Select; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.marshaller.Date2IsoDynamoDBMarshaller; import org.socialsignin.spring.data.dynamodb.marshaller.Instant2IsoDynamoDBMarshaller; @@ -40,20 +37,21 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; -import com.amazonaws.services.dynamodbv2.model.AttributeValue; -import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; -import com.amazonaws.services.dynamodbv2.model.Condition; -import com.amazonaws.services.dynamodbv2.model.QueryRequest; -import com.amazonaws.services.dynamodbv2.model.Select; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; /** * @author Michael Lavelle */ -public abstract class AbstractDynamoDBQueryCriteria implements DynamoDBQueryCriteria { +public abstract class AbstractDynamoDBQueryCriteria implements DynamoDBQueryCriteria { protected Class clazz; private DynamoDBEntityInformation entityInformation; @@ -71,6 +69,15 @@ public abstract class AbstractDynamoDBQueryCriteria public abstract boolean isApplicableForLoad(); + /** + * @throws UnsupportedOperationException if a {@link #sort} is initalized (non-null && not {@link Sort#unsorted()} + */ + protected void ensureNoSort() throws UnsupportedOperationException { + if (sort != null && sort != Sort.unsorted()) { + throw new UnsupportedOperationException("Sort not supported for scan expressions"); + } + } + protected QueryRequest buildQueryRequest(String tableName, String theIndexName, String hashKeyAttributeName, String rangeKeyAttributeName, String rangeKeyPropertyName, List hashKeyConditions, List rangeKeyConditions) { @@ -656,7 +663,7 @@ protected Condition createCollectionCondition(String propertyName, ComparisonOpe Assert.notNull(o, "Creating conditions on null property values not supported: please specify a value for '" + propertyName + "'"); - List attributeValueList = new ArrayList(); + List attributeValueList = new ArrayList<>(); boolean marshalled = false; for (Object object : o) { Object attributeValue = getPropertyAttributeValue(propertyName, object); diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashAndRangeKeyCriteria.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashAndRangeKeyCriteria.java index 2c9422cd..1b5982cf 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashAndRangeKeyCriteria.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashAndRangeKeyCriteria.java @@ -15,16 +15,12 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; +import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; +import com.amazonaws.services.dynamodbv2.model.Condition; +import com.amazonaws.services.dynamodbv2.model.QueryRequest; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.CountByHashAndRangeKeyQuery; import org.socialsignin.spring.data.dynamodb.query.MultipleEntityQueryExpressionQuery; @@ -38,17 +34,19 @@ import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBIdIsHashAndRangeKeyEntityInformation; import org.springframework.util.Assert; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; -import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; -import com.amazonaws.services.dynamodbv2.model.Condition; -import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; /** * @author Michael Lavelle */ -public class DynamoDBEntityWithHashAndRangeKeyCriteria extends AbstractDynamoDBQueryCriteria { +public class DynamoDBEntityWithHashAndRangeKeyCriteria extends AbstractDynamoDBQueryCriteria { private Object rangeKeyAttributeValue; private Object rangeKeyPropertyValue; @@ -75,14 +73,14 @@ public DynamoDBEntityWithHashAndRangeKeyCriteria( this.rangeKeyPropertyName = entityInformation.getRangeKeyPropertyName(); this.indexRangeKeyPropertyNames = entityInformation.getIndexRangeKeyPropertyNames(); if (indexRangeKeyPropertyNames == null) { - indexRangeKeyPropertyNames = new HashSet(); + indexRangeKeyPropertyNames = new HashSet<>(); } this.entityInformation = entityInformation; } public Set getIndexRangeKeyAttributeNames() { - Set indexRangeKeyAttributeNames = new HashSet(); + Set indexRangeKeyAttributeNames = new HashSet<>(); for (String indexRangeKeyPropertyName : indexRangeKeyPropertyNames) { indexRangeKeyAttributeNames.add(getAttributeName(indexRangeKeyPropertyName)); } @@ -102,12 +100,12 @@ protected boolean isRangeKeySpecified() { } protected Query buildSingleEntityLoadQuery(DynamoDBOperations dynamoDBOperations) { - return new SingleEntityLoadByHashAndRangeKeyQuery(dynamoDBOperations, entityInformation.getJavaType(), + return new SingleEntityLoadByHashAndRangeKeyQuery<>(dynamoDBOperations, entityInformation.getJavaType(), getHashKeyPropertyValue(), getRangeKeyPropertyValue()); } protected Query buildSingleEntityCountQuery(DynamoDBOperations dynamoDBOperations) { - return new CountByHashAndRangeKeyQuery(dynamoDBOperations, entityInformation.getJavaType(), + return new CountByHashAndRangeKeyQuery<>(dynamoDBOperations, entityInformation.getJavaType(), getHashKeyPropertyValue(), getRangeKeyPropertyValue()); } @@ -146,7 +144,7 @@ public DynamoDBQueryExpression buildQueryExpression() { if (isHashKeySpecified()) { T hashKeyPrototype = entityInformation.getHashKeyPropotypeEntityForHashKey(getHashKeyPropertyValue()); queryExpression.withHashKeyValues(hashKeyPrototype); - queryExpression.withRangeKeyConditions(new HashMap()); + queryExpression.withRangeKeyConditions(new HashMap<>()); } if (isRangeKeySpecified() && !isApplicableForGlobalSecondaryIndex()) { @@ -160,7 +158,7 @@ public DynamoDBQueryExpression buildQueryExpression() { Entry> singlePropertyConditions = propertyConditions.entrySet().iterator().next(); - List allowedSortProperties = new ArrayList(); + List allowedSortProperties = new ArrayList<>(); for (Entry> singlePropertyCondition : propertyConditions.entrySet()) { if (entityInformation.getGlobalSecondaryIndexNamesByPropertyName().keySet() .contains(singlePropertyCondition.getKey())) { @@ -332,9 +330,8 @@ public boolean isApplicableForQuery() { public DynamoDBScanExpression buildScanExpression() { - if (sort != null) { - throw new UnsupportedOperationException("Sort not supported for scan expressions"); - } + ensureNoSort(); + DynamoDBScanExpression scanExpression = new DynamoDBScanExpression(); if (isHashKeySpecified()) { scanExpression.addFilterCondition( diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteria.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteria.java index 03744b78..7df82625 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteria.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBEntityWithHashKeyOnlyCriteria.java @@ -15,10 +15,11 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import java.io.Serializable; -import java.util.List; -import java.util.Map; - +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; +import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; +import com.amazonaws.services.dynamodbv2.model.Condition; +import com.amazonaws.services.dynamodbv2.model.QueryRequest; import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.socialsignin.spring.data.dynamodb.query.CountByHashKeyQuery; import org.socialsignin.spring.data.dynamodb.query.MultipleEntityQueryRequestQuery; @@ -29,16 +30,13 @@ import org.socialsignin.spring.data.dynamodb.query.SingleEntityLoadByHashKeyQuery; import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityInformation; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; -import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; -import com.amazonaws.services.dynamodbv2.model.Condition; -import com.amazonaws.services.dynamodbv2.model.QueryRequest; +import java.util.List; +import java.util.Map; /** * @author Michael Lavelle */ -public class DynamoDBEntityWithHashKeyOnlyCriteria extends AbstractDynamoDBQueryCriteria { +public class DynamoDBEntityWithHashKeyOnlyCriteria extends AbstractDynamoDBQueryCriteria { private DynamoDBEntityInformation entityInformation; @@ -61,9 +59,9 @@ protected Query buildFinderQuery(DynamoDBOperations dynamoDBOperations) { List hashKeyConditions = getHashKeyConditions(); QueryRequest queryRequest = buildQueryRequest(dynamoDBOperations.getOverriddenTableName(clazz, entityInformation.getDynamoDBTableName()), getGlobalSecondaryIndexName(), getHashKeyAttributeName(), null, null, hashKeyConditions, null); - return new MultipleEntityQueryRequestQuery(dynamoDBOperations,entityInformation.getJavaType(), queryRequest); + return new MultipleEntityQueryRequestQuery<>(dynamoDBOperations,entityInformation.getJavaType(), queryRequest); } else { - return new MultipleEntityScanExpressionQuery(dynamoDBOperations, clazz, buildScanExpression()); + return new MultipleEntityScanExpressionQuery<>(dynamoDBOperations, clazz, buildScanExpression()); } } @@ -73,10 +71,10 @@ protected Query buildFinderCountQuery(DynamoDBOperations dynamoDBOperation List hashKeyConditions = getHashKeyConditions(); QueryRequest queryRequest = buildQueryRequest(dynamoDBOperations.getOverriddenTableName(clazz, entityInformation.getDynamoDBTableName()), getGlobalSecondaryIndexName(), getHashKeyAttributeName(), null, null, hashKeyConditions, null); - return new QueryRequestCountQuery(dynamoDBOperations, entityInformation.getJavaType(), queryRequest); + return new QueryRequestCountQuery<>(dynamoDBOperations, entityInformation.getJavaType(), queryRequest); } else { - return new ScanExpressionCountQuery(dynamoDBOperations, clazz, buildScanExpression(),pageQuery); + return new ScanExpressionCountQuery<>(dynamoDBOperations, clazz, buildScanExpression(),pageQuery); } } @@ -92,9 +90,7 @@ public boolean isApplicableForLoad() { public DynamoDBScanExpression buildScanExpression() { - if (sort != null) { - throw new UnsupportedOperationException("Sort not supported for scan expressions"); - } + ensureNoSort(); DynamoDBScanExpression scanExpression = new DynamoDBScanExpression(); if (isHashKeySpecified()) { From 5a7ef94a1bc9cdc0d5a3eab8b47c7326fa72dd57 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Tue, 21 Nov 2017 03:39:03 -0500 Subject: [PATCH 03/18] Properly handle `null` IDs `null` arguments passed into the `find`-methods should not cause a NPE down the road but should be actively rejected. Solves #51 --- .../data/dynamodb/core/DynamoDBTemplate.java | 2 +- .../support/SimpleDynamoDBCrudRepository.java | 61 +++++++------------ 2 files changed, 23 insertions(+), 40 deletions(-) diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java index c844775a..7380a03c 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java @@ -29,7 +29,7 @@ import java.util.List; import java.util.Map; -public class DynamoDBTemplate implements DynamoDBOperations,ApplicationContextAware { +public class DynamoDBTemplate implements DynamoDBOperations, ApplicationContextAware { private final DynamoDBMapper dynamoDBMapper; private final AmazonDynamoDB amazonDynamoDB; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java index e3f069a5..e88dc153 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java @@ -22,11 +22,13 @@ import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.util.Assert; -import java.util.ArrayList; -import java.util.HashMap; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; /** * Default implementation of the @@ -66,6 +68,9 @@ public SimpleDynamoDBCrudRepository( @Override public Optional findById(ID id) { + + Assert.notNull(id, "The given id must not be null!"); + T result; if (entityInformation.isRangeKeyAware()) { result = dynamoDBOperations.load(domainType, @@ -84,51 +89,29 @@ public Optional findById(ID id) { @SuppressWarnings("unchecked") public List findAllById(Iterable ids) { - Map, List> keyPairsMap = new HashMap<>(); - List keyPairs = new ArrayList<>(); - for (ID id : ids) { - if (entityInformation.isRangeKeyAware()) { - keyPairs.add(new KeyPair().withHashKey( - entityInformation.getHashKey(id)).withRangeKey( - entityInformation.getRangeKey(id))); - } else { - keyPairs.add(new KeyPair().withHashKey(id)); - } - } - keyPairsMap.put(domainType, keyPairs); - return (List) dynamoDBOperations.batchLoad(keyPairsMap).get(dynamoDBOperations.getOverriddenTableName(domainType, entityInformation.getDynamoDBTableName())); - } - protected T load(ID id) { - if (entityInformation.isRangeKeyAware()) { - return dynamoDBOperations.load(domainType, - entityInformation.getHashKey(id), - entityInformation.getRangeKey(id)); - } else { - return dynamoDBOperations.load(domainType, - entityInformation.getHashKey(id)); - } - } + Assert.notNull(ids, "The given ids must not be null!"); + + // Works only with non-parallel streams! + AtomicInteger idx = new AtomicInteger(); + List keyPairs = StreamSupport.stream(ids.spliterator(), false).map(id -> { + + Assert.notNull(id, "The given id at position " + idx.getAndIncrement() + " must not be null!"); - @SuppressWarnings("unchecked") - protected List loadBatch(Iterable ids) { - Map, List> keyPairsMap = new HashMap, List>(); - List keyPairs = new ArrayList(); - for (ID id : ids) { if (entityInformation.isRangeKeyAware()) { - keyPairs.add(new KeyPair().withHashKey( + return new KeyPair().withHashKey( entityInformation.getHashKey(id)).withRangeKey( - entityInformation.getRangeKey(id))); + entityInformation.getRangeKey(id)); } else { - keyPairs.add(new KeyPair().withHashKey(id)); - + return new KeyPair().withHashKey(id); } - } - keyPairsMap.put(domainType, keyPairs); - return (List) dynamoDBOperations.batchLoad(keyPairsMap).get(domainType); + }).collect(Collectors.toList()); + + Map, List> keyPairsMap = Collections.singletonMap(domainType, keyPairs); + return (List)dynamoDBOperations.batchLoad(keyPairsMap) + .get(dynamoDBOperations.getOverriddenTableName(domainType, entityInformation.getDynamoDBTableName())); } - @Override public S save(S entity) { From b4b5fe0b894fdd33e8f297a27f559d5fd5576c43 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Tue, 21 Nov 2017 19:41:37 -0500 Subject: [PATCH 04/18] Updated AWS SDK --- .gitignore | 2 ++ pom.xml | 2 +- .../data/dynamodb/repository/query/AbstractDynamoDBQuery.java | 4 ++-- .../spring/data/dynamodb/domain/sample/Jdk8IT.java | 4 ++-- .../spring/data/dynamodb/domain/sample/UserRepository.java | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index ded0268f..07c7e193 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ target *.iml .idea +release.properties + # Package Files # *.jar *.war diff --git a/pom.xml b/pom.xml index f0dc52be..7d9bfcd0 100755 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 5.0.1.RELEASE Kay-SR1 5.2.4.Final - 1.11.93 + 1.11.232 4.12 1.10.19 diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java index 1dc867ca..62a13347 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQuery.java @@ -64,7 +64,7 @@ else if (method.isSliceQuery() && !isSingleEntityResultsRestriction()) { } protected abstract Query doCreateQuery(Object[] values); - protected abstract Query doCreateCountQuery(Object[] values,boolean pageQuery); + protected abstract Query doCreateCountQuery(Object[] values, boolean pageQuery); protected abstract boolean isCountQuery(); protected abstract boolean isExistsQuery(); @@ -78,7 +78,7 @@ protected Query doCreateQueryWithPermissions(Object values[]) { return query; } - protected Query doCreateCountQueryWithPermissions(Object values[],boolean pageQuery) { + protected Query doCreateCountQueryWithPermissions(Object values[], boolean pageQuery) { Query query = doCreateCountQuery(values,pageQuery); query.setScanCountEnabled(method.isScanCountEnabled()); return query; diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java index 22aeabe2..f4d9fbdf 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java @@ -39,7 +39,7 @@ public static class TestAppConfig { public void testOptionalKey() { final Date joinDate = new Date(1000); final String id = "testOptionalKey"; - Optional result = userRepository.findOne(id); + Optional result = userRepository.findById(id); assertNotNull(result); assertEquals(result, Optional.empty()); @@ -51,7 +51,7 @@ public void testOptionalKey() { User savedEntity = userRepository.save(newUser); - result = userRepository.findOne(id); + result = userRepository.findById(id); assertNotNull(result); assertEquals(savedEntity, result.get()); assertEquals(joinDate, result.get().getJoinDate()); diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java index f6267e59..69654e7f 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java @@ -10,7 +10,7 @@ public interface UserRepository extends Repository { // CRUD method using Optional - Optional findOne(String id); + Optional findById(String id); @EnableScan List findByLeaveDate(Instant leaveDate); From bb136c4ef319517e02a9b7a1071296edb2fa1629 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 12:50:50 -0500 Subject: [PATCH 05/18] [maven-release-plugin] prepare release spring-data-dynamodb-5.0.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7d9bfcd0..300c49d7 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.0-SNAPSHOT + 5.0.0 Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -366,7 +366,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - HEAD + spring-data-dynamodb-5.0.0 From 53c9d7dd27310a14fc1f9fe40e3e7f7660589d08 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 12:50:54 -0500 Subject: [PATCH 06/18] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 300c49d7..d6c445db 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.0 + 5.0.1-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -366,7 +366,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - spring-data-dynamodb-5.0.0 + HEAD From ad2863506d1283c5f5bf435ee27225acb1458604 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:32:45 -0500 Subject: [PATCH 07/18] [maven-release-plugin] rollback the release of spring-data-dynamodb-5.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d6c445db..7d9bfcd0 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.1-SNAPSHOT + 5.0.0-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb From 6d793bc0957023d017827df9eade4a27e838df46 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:33:13 -0500 Subject: [PATCH 08/18] Fixing Javadoc for JDK9 --- pom.xml | 5 ++-- .../dynamodb/core/DynamoDBOperations.java | 1 + .../config/EnableDynamoDBRepositories.java | 23 +++++++++++-------- .../query/AbstractDynamoDBQueryCriteria.java | 2 +- .../query/DynamoDBQueryLookupStrategy.java | 6 ++--- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 7d9bfcd0..55261fd4 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.0-SNAPSHOT + 5.0.1-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -255,8 +255,9 @@ org.apache.maven.plugins maven-release-plugin - 2.5 + 2.5.3 + v@{project.version} true false release diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java index 6464d41c..729b99c3 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBOperations.java @@ -39,6 +39,7 @@ public interface DynamoDBOperations { /** * Provides access to the DynamoDB mapper table model of the underlying domain type. * + * @param The type of the domain type itself * @param domainClass A domain type * @return Corresponding DynamoDB table model */ diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java index 6fff501f..5c7bf583 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java @@ -45,6 +45,7 @@ * annotation declarations e.g.: * {@code @EnableDynamoDBRepositories("org.my.pkg")} instead of * {@code @EnableDynamoDBaRepositories(basePackages="org.my.pkg")}. + * @return The package name for scanning */ String[] value() default {}; @@ -53,6 +54,7 @@ * alias for (and mutually exclusive with) this attribute. Use * {@link #basePackageClasses()} for a type-safe alternative to String-based * package names. + * @return The package name for scanning */ String[] basePackages() default {}; @@ -62,6 +64,7 @@ * specified will be scanned. Consider creating a special no-op marker class * or interface in each package that serves no purpose other than being * referenced by this attribute. + * @return The class to figure out the base package for scanning */ Class[] basePackageClasses() default {}; @@ -70,11 +73,13 @@ * narrows the set of candidate components from everything in * {@link #basePackages()} to everything in the base packages that matches * the given filter or filters. + * @return All the include filters */ Filter[] includeFilters() default {}; /** * Specifies which types are not eligible for component scanning. + * @return All the exclude filters */ Filter[] excludeFilters() default {}; @@ -82,9 +87,9 @@ * Returns the postfix to be used when looking up custom repository * implementations. Defaults to {@literal Impl}. So for a repository named * {@code PersonRepository} the corresponding implementation class will be - * looked up scanning for {@code PersonRepositoryImpl}. + * looked up scanning for {@code PersonRepositoryImpl}. Defaults to 'Impl'. * - * @return + * @return The implementation postfix that's used */ String repositoryImplementationPostfix() default "Impl"; @@ -93,7 +98,7 @@ * properties file. Will default to * {@code META-INFO/jpa-named-queries.properties}. * - * @return + * @return The location itself */ String namedQueriesLocation() default ""; @@ -101,7 +106,7 @@ * Returns the key of the {@link org.springframework.data.repository.query.QueryLookupStrategy} to be used for lookup * queries for query methods. Defaults to {@link Key#CREATE_IF_NOT_FOUND}. * - * @return + * @return The lookup strategy */ Key queryLookupStrategy() default Key.CREATE_IF_NOT_FOUND; @@ -109,17 +114,17 @@ * Returns the {@link org.springframework.beans.factory.FactoryBean} class to be used for each repository * instance. Defaults to {@link DynamoDBRepositoryFactoryBean}. * - * @return + * @return The repository factory bean cleass */ Class repositoryFactoryBeanClass() default DynamoDBRepositoryFactoryBean.class; - // DynamoDB sepcific configuration + // DynamoDB specific configuration /** * Returns the {@link com.amazonaws.services.dynamodbv2.AmazonDynamoDB } reference to be used for each * repository instance * - * @return + * @return The {@link com.amazonaws.services.dynamodbv2.AmazonDynamoDB} bean name */ String amazonDynamoDBRef() default ""; @@ -127,7 +132,7 @@ * Returns the {@link com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig } reference to be used for to * configure AmazonDynamoDB * - * @return + * @return The {@link com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig} bean name */ String dynamoDBMapperConfigRef() default ""; @@ -135,7 +140,7 @@ * Returns the {@link javax.validation.Validator } reference to be used for to * validate DynamoDB entities * - * @return + * @return The {@link org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations} bean name */ String dynamoDBOperationsRef() default ""; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java index 1b3c9e18..75951fc7 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java @@ -70,7 +70,7 @@ public abstract class AbstractDynamoDBQueryCriteria implements DynamoDBQu public abstract boolean isApplicableForLoad(); /** - * @throws UnsupportedOperationException if a {@link #sort} is initalized (non-null && not {@link Sort#unsorted()} + * @throws UnsupportedOperationException if a {@link #sort} is initalized (non-null && not {@link Sort#unsorted()} */ protected void ensureNoSort() throws UnsupportedOperationException { if (sort != null && sort != Sort.unsorted()) { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java index 55a9a909..4c2e3b44 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/DynamoDBQueryLookupStrategy.java @@ -154,9 +154,9 @@ protected RepositoryQuery createDynamoDBQuery(Method method, RepositoryM * Creates a {@link QueryLookupStrategy} for the given * {@link com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper} and {@link Key}. * - * @param dynamoDBOperations - * @param key - * @return + * @param dynamoDBOperations The current operation + * @param key The key of the entity + * @return The created {@link QueryLookupStrategy} */ public static QueryLookupStrategy create(DynamoDBOperations dynamoDBOperations, Key key) { From ebcc7dda0abbd2aba8f8f10e6c08578ab687f0dc Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:36:04 -0500 Subject: [PATCH 09/18] [maven-release-plugin] prepare release v5.0.1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 55261fd4..b939efd0 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.1-SNAPSHOT + 5.0.1 Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -367,7 +367,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - HEAD + v5.0.1 From 34dba20ed9cec429f32e7a11ba3940febc32f36a Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:36:09 -0500 Subject: [PATCH 10/18] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index b939efd0..d90b192d 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.1 + 5.0.2-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -367,7 +367,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - v5.0.1 + HEAD From ab8e5c9a177dc96507afbd43426f5d7d2aa0f96e Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:40:52 -0500 Subject: [PATCH 11/18] Doing autoclose --- pom.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d90b192d..52f48519 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.2-SNAPSHOT + 5.0.0-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -190,6 +190,17 @@ + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh + https://oss.sonatype.org/ + true + + org.jacoco jacoco-maven-plugin From f93acfaded4acda4567db8ca0047eede4f498019 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:43:13 -0500 Subject: [PATCH 12/18] [maven-release-plugin] prepare release v5.0.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 52f48519..ddad9876 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.0-SNAPSHOT + 5.0.0 Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -378,7 +378,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - HEAD + v5.0.0 From 5c9d3830ca7776b121f8d1003b8ab93c0d7d9577 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:43:18 -0500 Subject: [PATCH 13/18] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ddad9876..1c26aa3b 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.0 + 5.0.1-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -378,7 +378,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - v5.0.0 + HEAD From 0a9d984ea71be11301d8e8c6555cac1aad2dd72f Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:55:54 -0500 Subject: [PATCH 14/18] Fixing autorelease --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1c26aa3b..6f181f7b 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.1-SNAPSHOT + 5.0.3-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -455,6 +455,7 @@ Sebastian Just zeeman@zeeman.de + America/New_York From a061ce18587af0c867f93a10faae0ac16f3abcbb Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:56:41 -0500 Subject: [PATCH 15/18] [maven-release-plugin] prepare release v5.0.3 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6f181f7b..7c96f983 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.3-SNAPSHOT + 5.0.3 Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -378,7 +378,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - HEAD + v5.0.3 From 0186ee9684423ebf791ca4ce346fae4d05149cec Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 13:56:45 -0500 Subject: [PATCH 16/18] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7c96f983..50b6ad70 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.3 + 5.0.4-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb @@ -378,7 +378,7 @@ https://github.com/derjust/spring-data-dynamodb scm:git:ssh://github.com/derjust/spring-data-dynamodb.git scm:git:ssh://git@github.com/derjust/spring-data-dynamodb.git - v5.0.3 + HEAD From ea92c83cf12e2c0c426b721c3628d839b35a2867 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 14:01:41 -0500 Subject: [PATCH 17/18] [maven-release-plugin] rollback the release of v5.0.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 50b6ad70..6f181f7b 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.4-SNAPSHOT + 5.0.3-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb From c0945bdbc01df8a5c6d84d5349c009a4bfbc6720 Mon Sep 17 00:00:00 2001 From: Sebastian J Date: Sun, 26 Nov 2017 14:02:24 -0500 Subject: [PATCH 18/18] Back on having `5.0.1-SNAPSHOT` for next development --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6f181f7b..380df1ca 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.github.derjust spring-data-dynamodb - 5.0.3-SNAPSHOT + 5.0.1-SNAPSHOT Spring Data DynamoDb Spring Data module providing support for DynamoDb repositories. http://github.com/derjust/spring-data-dynamodb