diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 18795796..1cb3dd67 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -33,6 +33,9 @@
Opened constructor and fixed NPE in case of missing DynamoDBConfig
+
+ Added basic support for Pageable
+
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 9a024886..857e874d 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
@@ -29,6 +29,7 @@
import org.socialsignin.spring.data.dynamodb.marshaller.Instant2IsoDynamoDBMarshaller;
import org.socialsignin.spring.data.dynamodb.query.Query;
import org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBEntityInformation;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
@@ -66,6 +67,7 @@ public abstract class AbstractDynamoDBQueryCriteria implements DynamoDBQu
protected Object hashKeyPropertyValue;
protected String globalSecondaryIndexName;
protected Sort sort;
+ protected Pageable pageable;
public abstract boolean isApplicableForLoad();
@@ -132,9 +134,16 @@ protected QueryRequest buildQueryRequest(String tableName, String theIndexName,
queryRequest.setSelect(Select.ALL_PROJECTED_ATTRIBUTES);
applySortIfSpecified(queryRequest, new ArrayList(new HashSet(allowedSortProperties)));
}
+ applyPageableIfSpecified(queryRequest);
return queryRequest;
}
+ private void applyPageableIfSpecified(QueryRequest queryRequest) {
+ if (pageable.isPaged()) {
+ queryRequest.setLimit(pageable.getPageSize());
+ }
+ }
+
protected void applySortIfSpecified(DynamoDBQueryExpression queryExpression, List permittedPropertyNames) {
if (permittedPropertyNames.size() > 1) {
throw new UnsupportedOperationException("Can only sort by at most a single range or index range key");
@@ -688,4 +697,10 @@ public DynamoDBQueryCriteria withSort(Sort sort) {
return this;
}
+ @Override
+ public DynamoDBQueryCriteria withPageable(Pageable pageable) {
+ this.pageable = pageable;
+ return this;
+ }
+
}
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 fc52cd4d..b99cfd17 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
@@ -18,16 +18,20 @@
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;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.query.ParameterAccessor;
import org.springframework.data.repository.query.parser.PartTree;
public class DynamoDBQueryCreator extends AbstractDynamoDBQueryCreator {
+ private final Pageable pageable;
+
public DynamoDBQueryCreator(PartTree tree,
DynamoDBEntityInformation entityMetadata,
DynamoDBOperations dynamoDBOperations) {
super(tree, entityMetadata, dynamoDBOperations);
+ pageable = Pageable.unpaged();
}
public DynamoDBQueryCreator(PartTree tree,
@@ -35,14 +39,17 @@ public DynamoDBQueryCreator(PartTree tree,
DynamoDBEntityInformation entityMetadata,
DynamoDBOperations dynamoDBOperations) {
super(tree, parameterAccessor, entityMetadata, dynamoDBOperations);
+ pageable = parameterAccessor.getPageable();
}
-
+
@Override
protected Query complete(DynamoDBQueryCriteria criteria, Sort sort) {
if (sort != null) {
criteria.withSort(sort);
}
+ criteria.withPageable(pageable);
+
return criteria.buildQuery(dynamoDBOperations);
}
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 1fe0e183..587667d8 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
@@ -18,6 +18,7 @@
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.Pageable;
import org.springframework.data.domain.Sort;
/**
@@ -37,7 +38,9 @@ DynamoDBQueryCriteria withSingleValueCriteria(String propertyName, Compar
DynamoDBQueryCriteria withPropertyBetween(String segment, Object value1, Object value2, Class> type);
DynamoDBQueryCriteria withSort(Sort sort);
-
+
+ DynamoDBQueryCriteria withPageable(Pageable pageable);
+
Query buildQuery(DynamoDBOperations dynamoDBOperations);
Query buildCountQuery(DynamoDBOperations dynamoDBOperations, boolean pageQuery);