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(); } }