import com.amazonaws.services.dynamodbv2.model.PutItemRequest; //导入方法依赖的package包/类
public List reindex(T instance) throws DataStoreException {
DynamoClassMapping tableInfo = getClassMapping(instance);
log.debug("reindex {}", instance.getClass().getSimpleName());
ScanRequest scanRequest = new ScanRequest();
scanRequest.setTableName(tableInfo.getDynamoTableName());
// TODO: Filter expressions on prefix?
ScanResult scanResponse = dynamoDB.scan(scanRequest);
Map lastEvaluatedKey = scanResponse.getLastEvaluatedKey();
if (lastEvaluatedKey != null) {
throw new UnsupportedOperationException("Multiple page results not implemented");
}
List items = Lists.newArrayList();
List> responseItems = scanResponse.getItems();
for (Map itemData : responseItems) {
if (!tableInfo.matchesType(itemData)) {
continue;
}
T item = tableInfo.mapFromDb(itemData);
Map newItemData = tableInfo.mapToDb(item);
if (DynamoDbHelpers.areEqual(itemData, newItemData)) {
log.debug("No change for item: {}", itemData);
continue;
}
PutItemRequest putRequest = new PutItemRequest();
putRequest.setTableName(tableInfo.getDynamoTableName());
putRequest.setItem(itemData);
dynamoDB.putItem(putRequest);
Map oldKey = extractKey(itemData);
Map newKey = extractKey(newItemData);
if (!DynamoDbHelpers.areEqual(oldKey, newKey)) {
DeleteItemRequest deleteItemRequest = new DeleteItemRequest();
deleteItemRequest.setTableName(tableInfo.getDynamoTableName());
deleteItemRequest.setKey(oldKey);
dynamoDB.deleteItem(deleteItemRequest);
}
}
return items;
}