package cc.nfscan.server.controller.fe;
import cc.nfscan.server.domain.*;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest;
import com.amazonaws.services.dynamodbv2.model.GlobalSecondaryIndex;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import org.junit.Ignore;
import org.springframework.beans.factory.annotation.Autowired;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* Created by pauloalmeida on 1/17/16.
*/
@Ignore
class BaseDatabaseControllerTest extends BaseControllerTest {
/**
* AmazonDynamoDBClient reference to this object
*/
@Autowired
protected AmazonDynamoDBClient amazonDynamoDBClient;
/**
* DynamoDBMapper reference to this object
*/
@Autowired
protected DynamoDBMapper dynamoDBMapper;
@Override
protected void init() {
super.init();
createTable(OCRTransaction.class);
createTable(TaxReceipt.class);
createTable(TaxReceiptArchive.class);
createTable(ElectronicTaxReceipt.class);
createTable(ElectronicTaxReceiptArchive.class);
}
public void createTable(Class<? extends IDomain> domain){
CreateTableRequest tableRequest = dynamoDBMapper.generateCreateTableRequest(domain);
tableRequest = tableRequest.withProvisionedThroughput(new ProvisionedThroughput(5L,5L));
//check whether or not we need to add a provisioning throughput value for GSI
for (Method method : domain.getMethods()) {
if(method.isAnnotationPresent(DynamoDBIndexHashKey.class)){
String tempGSI = method.getAnnotation(DynamoDBIndexHashKey.class).globalSecondaryIndexName();
for (GlobalSecondaryIndex globalSecondaryIndex : tableRequest.getGlobalSecondaryIndexes()) {
if(globalSecondaryIndex.getIndexName().equals(tempGSI)){
globalSecondaryIndex.setProvisionedThroughput(new ProvisionedThroughput(5L,5L));
}
}
}
}
amazonDynamoDBClient.createTable(tableRequest);
}
protected void clean(){
/*
I had to hardcode the DES- prefix due to the fact that DynamoDBMapper doesn't currently have a
generateDeleteTableRequest which takes into account the TableNameOverride settings. I've submited
a PR to aws-sdk-java repository.
https://github.com/aws/aws-sdk-java/pull/606#issuecomment-172940752
As soon as it gets merged I'll remove it
*/
String prefix = "DES-";
amazonDynamoDBClient.deleteTable(new DeleteTableRequest(prefix.concat(extractTableName(OCRTransaction.class))));
amazonDynamoDBClient.deleteTable(new DeleteTableRequest(prefix.concat(extractTableName(TaxReceipt.class))));
amazonDynamoDBClient.deleteTable(new DeleteTableRequest(prefix.concat(extractTableName(TaxReceiptArchive.class))));
amazonDynamoDBClient.deleteTable(new DeleteTableRequest(prefix.concat(extractTableName(ElectronicTaxReceipt.class))));
amazonDynamoDBClient.deleteTable(new DeleteTableRequest(prefix.concat(extractTableName(ElectronicTaxReceiptArchive.class))));
}
private String extractTableName(Class<? extends IDomain> domain){
return domain.getAnnotation(DynamoDBTable.class).tableName();
}
}