org.apache.gora.dynamodb.GoraDynamoDBTestDriver.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.gora.dynamodb.GoraDynamoDBTestDriver.java

Source

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License 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 org.apache.gora.dynamodb;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.gora.GoraTestDriver;
import org.apache.gora.dynamodb.query.DynamoDBKey;
import org.apache.gora.dynamodb.store.DynamoDBStore;
import org.apache.gora.examples.generated.person;
import org.apache.gora.persistency.Persistent;
import org.apache.gora.store.DataStore;
import org.apache.gora.store.ws.impl.WSDataStoreFactory;
import org.apache.gora.util.GoraException;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.dynamodb.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodb.model.DescribeTableRequest;
import com.amazonaws.services.dynamodb.model.ResourceNotFoundException;
import com.amazonaws.services.dynamodb.model.TableDescription;

/**
 * Helper class for third part tests using gora-dynamodb backend. 
 * @see GoraTestDriver
 */
public class GoraDynamoDBTestDriver extends GoraTestDriver {

    /**
     * Data store to be used within the test driver
     */
    private static DynamoDBStore<DynamoDBKey, person> personStore;

    /**
     * DynamoDB client to be used from the test driver
     */
    static AmazonDynamoDBClient dynamoDBClient;

    /**
     * Credentials file name
     */
    static String awsCredentialsFile = "AwsCredentials.properties";

    /**
     * Test credential paths
     */
    static String awsCredentialsPath = "target/test-classes/";

    /**
     * Authentication object
     */
    protected Object auth;

    /**
     * Default constructor
     */
    public GoraDynamoDBTestDriver() {
        super(DynamoDBStore.class);
        try {
            AWSCredentials credentials;
            File file = new File(awsCredentialsPath + awsCredentialsFile);
            credentials = new PropertiesCredentials(file);
            auth = credentials;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Sets up the class
     */
    @Override
    public void setUpClass() throws Exception {
        super.setUpClass();
        log.info("Initializing DynamoDB.");
        createDataStore();
    }

    /**
     * Sets up the data store by creating the schema
     */
    @Override
    public void setUp() throws Exception {
        personStore.createSchema();
    }

    /**
     * Creates the DynamoDB store and returns an specific object
     * @return
     * @throws IOException
     */
    @SuppressWarnings("unchecked")
    protected DataStore<DynamoDBKey, person> createDataStore() throws IOException {
        if (personStore == null)
            personStore = WSDataStoreFactory.createDataStore(DynamoDBStore.class, DynamoDBKey.class, person.class,
                    auth);
        return personStore;
    }

    /**
     * Creates the DynamoDB store but returns a generic object
     */
    @SuppressWarnings("unchecked")
    public <K, T extends Persistent> DataStore<K, T> createDataStore(Class<K> keyClass, Class<T> persistentClass)
            throws GoraException {
        personStore = (DynamoDBStore<DynamoDBKey, person>) WSDataStoreFactory.createDataStore(
                (Class<? extends DataStore<K, T>>) dataStoreClass, keyClass, persistentClass, auth);
        dataStores.add(personStore);
        return (DataStore<K, T>) personStore;
    }

    /**
     * Gets or create the DynamoDB data store
     * @return
     */
    public DataStore<DynamoDBKey, person> getDataStore() {
        try {
            if (personStore != null)
                return personStore;
            else
                return createDataStore();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Tears down the class
     */
    @Override
    public void tearDownClass() throws Exception {
        log.info("Finished DynamoDB driver.");
    }

    /**
     * Tears down objects created
     */
    @Override
    public void tearDown() throws Exception {
        super.tearDown();
    }

    /**
     * Gets authentication object
     * @return
     */
    public Object getAuth() {
        return auth;
    }

    /**
     * Gets DynamoDBClient to be used
     * @return
     */
    public AmazonDynamoDBClient getDynamoDBClient() {
        return dynamoDBClient;
    }

    /**
     * Checks if a resource exists or not
     * @param tableName   Table name to be checked
     * @return
     */
    public TableDescription checkResource(String tableName) {
        TableDescription tableDescription = null;

        try {
            DescribeTableRequest describeTableRequest = new DescribeTableRequest().withTableName(tableName);
            tableDescription = dynamoDBClient.describeTable(describeTableRequest).getTable();
        } catch (ResourceNotFoundException e) {
            tableDescription = null;
        }

        return tableDescription;
    }
}