All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.lordofthejars.nosqlunit.dynamodb.DynamoOperation Maven / Gradle / Ivy

The newest version!

package com.lordofthejars.nosqlunit.dynamodb;

import java.io.InputStream;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.lordofthejars.nosqlunit.core.AbstractCustomizableDatabaseOperation;
import com.lordofthejars.nosqlunit.core.NoSqlAssertionError;

public final class DynamoOperation
        extends AbstractCustomizableDatabaseOperation {

    private static Logger LOGGER = LoggerFactory.getLogger(DynamoOperation.class);

    private AmazonDynamoDB dynamo;

    private DynamoDbConfiguration dynamoDbConfiguration;

    protected DynamoOperation(AmazonDynamoDB dynamo, DynamoDbConfiguration dynamoDbConfiguration) {
        this.dynamo = dynamo;
        this.dynamoDbConfiguration = dynamoDbConfiguration;
        this.setInsertionStrategy(new DefaultInsertionStrategy());
        this.setComparisonStrategy(new DefaultComparisonStrategy());
    }

    public DynamoOperation(DynamoDbConfiguration dynamoDbConfiguration) {
        this.dynamo = dynamoDbConfiguration.getDynamo();
        this.dynamoDbConfiguration = dynamoDbConfiguration;
        this.setInsertionStrategy(new DefaultInsertionStrategy());
        this.setComparisonStrategy(new DefaultComparisonStrategy());
    }

    @Override
    public void insert(InputStream contentStream) {
        insertData(contentStream);
    }

    private void insertData(InputStream contentStream) {
        try {

            executeInsertion(() -> dynamo, contentStream);

        } catch (Throwable e) {
            throw new IllegalArgumentException("Unexpected error reading data set file.", e);
        }
    }

    @Override
    public void deleteAll() {
        deleteAllElements(dynamo);
    }

    private void deleteAllElements(AmazonDynamoDB dynamoDb) {
        List tableNames = DynamoDBOperation.getAllTables(dynamoDb);
        DynamoDBOperation.truncateTables(dynamoDb, tableNames);
    }

    @Override
    public boolean databaseIs(InputStream contentStream) {

        return compareData(contentStream);

    }

    private boolean compareData(InputStream contentStream) throws NoSqlAssertionError {
        try {
            executeComparison(() -> dynamo, contentStream);
            return true;
        } catch (NoSqlAssertionError e) {
            throw e;
        } catch (Throwable e) {
            throw new IllegalArgumentException("Unexpected error reading expected data set file.", e);
        }
    }

    @Override
    public AmazonDynamoDB connectionManager() {
        return dynamo;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy