Java tutorial
/** * 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; } }