Example usage for com.amazonaws.services.dynamodbv2.document.spec ScanSpec withExclusiveStartKey

List of usage examples for com.amazonaws.services.dynamodbv2.document.spec ScanSpec withExclusiveStartKey

Introduction

In this page you can find the example usage for com.amazonaws.services.dynamodbv2.document.spec ScanSpec withExclusiveStartKey.

Prototype

public ScanSpec withExclusiveStartKey(PrimaryKey exclusiveStartKey) 

Source Link

Usage

From source file:jp.classmethod.aws.dynamodb.DynamoDbRepository.java

License:Open Source License

@Override
public Chunk<E> findAll(Chunkable chunkable) {
    Preconditions.checkNotNull(chunkable);
    Preconditions.checkArgument(Sort.Direction.DESC != chunkable.getDirection(),
            "DynamoDB only supports scanning forwards");
    ScanSpec spec = new ScanSpec();
    if (false == Strings.isNullOrEmpty(chunkable.getPaginationToken())) {
        spec.withExclusiveStartKey(new PrimaryKey(hashKeyName, chunkable.getPaginationToken()));
    }/*from w  w w.j a v  a2s  . co  m*/
    spec.withMaxPageSize(chunkable.getMaxPageSize()).withMaxResultSize(chunkable.getMaxPageSize());

    final ItemCollection<ScanOutcome> results = table.scan(spec);

    final List<Item> itemList;
    try {
        itemList = Lists.newArrayList(results.iterator());
    } catch (AmazonClientException e) {
        throw convertDynamoDBException(e, "scan", null /* conditionMessage */);
    }
    final List<E> entities = itemList.stream().map(this::convertItemToDomain) //O(n)
            .collect(Collectors.toList()); //O(n)
    final Map<String, AttributeValue> lastEvaluatedKey = results.getLastLowLevelResult() == null ? null
            : results.getLastLowLevelResult().getScanResult().getLastEvaluatedKey();
    final String paginationToken = lastEvaluatedKey == null ? null : lastEvaluatedKey.get(hashKeyName).getS();
    return new ChunkImpl<>(entities, paginationToken, chunkable);
}