com.amazonaws.services.dynamodbv2.document.internal.ListTablesPage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aws-java-sdk-dynamodb Show documentation
Show all versions of aws-java-sdk-dynamodb Show documentation
The AWS Java SDK for Amazon DynamoDB module holds the client classes that are used for communicating with Amazon DynamoDB Service
/*
* Copyright 2014-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.amazonaws.services.dynamodbv2.document.internal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.document.Page;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.ListTablesSpec;
import com.amazonaws.services.dynamodbv2.model.ListTablesRequest;
import com.amazonaws.services.dynamodbv2.model.ListTablesResult;
class ListTablesPage extends Page {
private final AmazonDynamoDB client;
private final ListTablesSpec spec;
private final ListTablesRequest request;
private final int index;
private final String lastEvaluatedKey;
public ListTablesPage(
AmazonDynamoDB client,
ListTablesSpec spec,
ListTablesRequest request,
int index,
ListTablesResult result) {
super(Collections.unmodifiableList(
toTableList(client, result.getTableNames())),
result);
this.client = client;
this.spec = spec;
this.request = request;
this.index = index;
Integer max = spec.getMaxResultSize();
if (max != null && (index + result.getTableNames().size()) > max) {
this.lastEvaluatedKey = null;
} else {
this.lastEvaluatedKey = result.getLastEvaluatedTableName();
}
}
@Override
public boolean hasNextPage() {
if (lastEvaluatedKey == null)
return false;
Integer max = spec.getMaxResultSize();
if (max == null)
return true;
return nextRequestLimit(max.intValue()) > 0;
}
private int nextRequestLimit(int max) {
int nextIndex = index + this.size();
return InternalUtils.minimum(
max - nextIndex,
spec.getMaxPageSize());
}
@Override
public Page nextPage() {
if (lastEvaluatedKey == null) {
throw new NoSuchElementException("No more pages");
}
final Integer max = spec.getMaxResultSize();
if (max != null) {
int nextLimit = nextRequestLimit(max.intValue());
if (nextLimit == 0)
throw new NoSuchElementException("No more pages");
request.setLimit(nextLimit);
}
request.setExclusiveStartTableName(lastEvaluatedKey);
ListTablesResult result = client.listTables(request);
final int nextIndex = index + this.size();
return new ListTablesPage(client, spec, request, nextIndex, result);
}
private static List toTableList(AmazonDynamoDB client, List tableNames) {
if (tableNames == null)
return null;
List result = new ArrayList(tableNames.size());
for (String tableName: tableNames)
result.add(new Table(client, tableName));
return result;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy