You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by le...@apache.org on 2012/08/29 19:31:02 UTC
svn commit: r1378656 - in /gora/branches/goraamazon:
gora-core/src/main/java/org/apache/gora/persistency/ws/impl/
gora-core/src/main/java/org/apache/gora/query/ws/impl/
gora-core/src/main/java/org/apache/gora/store/
gora-core/src/main/java/org/apache/g...
Author: lewismc
Date: Wed Aug 29 17:31:01 2012
New Revision: 1378656
URL: http://svn.apache.org/viewvc?rev=1378656&view=rev
Log:
v5 commit for dynamodb module
Modified:
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/BeanFactoryWSImpl.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/PersistentWSBase.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/StateManagerWSImpl.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/PartitionWSQueryImpl.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/QueryWSBase.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/ResultWSBase.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/DataStore.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/WebServiceBackedDataStore.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/DataStoreBase.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/FileBackedDataStoreBase.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSBackedDataStoreBase.java
gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSDataStoreBase.java
gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java
gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/store/DynamoDBMapping.java
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/BeanFactoryWSImpl.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/BeanFactoryWSImpl.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/BeanFactoryWSImpl.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/BeanFactoryWSImpl.java Wed Aug 29 17:31:01 2012
@@ -31,16 +31,41 @@ import org.apache.gora.util.ReflectionUt
*/
public class BeanFactoryWSImpl<K, T extends Persistent> implements BeanFactory<K, T> {
+ /**
+ * Class of the key to be used
+ */
private Class<K> keyClass;
+
+ /**
+ * Class of the persistent objects to be stored
+ */
private Class<T> persistentClass;
+ /**
+ * Constructor of the key
+ */
private Constructor<K> keyConstructor;
+ /**
+ * Object's key
+ */
private K key;
+
+ /**
+ * Persistent object of class T
+ */
private T persistent;
+ /**
+ * Flag to be used to determine if a key is persistent or not
+ */
private boolean isKeyPersistent = false;
+ /**
+ * Constructor
+ * @param keyClass
+ * @param persistentClass
+ */
public BeanFactoryWSImpl(Class<K> keyClass, Class<T> persistentClass) {
this.keyClass = keyClass;
this.persistentClass = persistentClass;
@@ -60,7 +85,11 @@ public class BeanFactoryWSImpl<K, T exte
@Override
@SuppressWarnings("unchecked")
+ /**
+ * Creates a new key
+ */
public K newKey() throws Exception {
+ // TODO this method should be checked to see how object states will be managed
if(isKeyPersistent)
return (K)((Persistent)key).newInstance(new StateManagerWSImpl());
else if(keyConstructor == null) {
@@ -72,30 +101,49 @@ public class BeanFactoryWSImpl<K, T exte
@SuppressWarnings("unchecked")
@Override
+ /**
+ * Creates a new persistent object
+ */
public T newPersistent() {
return (T) persistent.newInstance(new StateManagerWSImpl());
}
@Override
+ /**
+ * Gets a cached key
+ */
public K getCachedKey() {
return key;
}
@Override
+ /**
+ * Gets a cached persistent object
+ */
public T getCachedPersistent() {
return persistent;
}
@Override
+ /**
+ * Gets the key class
+ */
public Class<K> getKeyClass() {
return keyClass;
}
@Override
+ /**
+ * Gets the persistent object class
+ */
public Class<T> getPersistentClass() {
return persistentClass;
}
+ /**
+ * Returns if a key is an object of a persistent class
+ * @return True if it is or false if it is not
+ */
public boolean isKeyPersistent() {
return isKeyPersistent;
}
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/PersistentWSBase.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/PersistentWSBase.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/PersistentWSBase.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/PersistentWSBase.java Wed Aug 29 17:31:01 2012
@@ -15,6 +15,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+/**
+ * @author Renato Marroquin
+ */
+
package org.apache.gora.persistency.ws.impl;
import java.nio.ByteBuffer;
@@ -25,23 +29,39 @@ import org.apache.gora.persistency.Persi
import org.apache.gora.persistency.StateManager;
/**
- * Base classs implementing common functionality for Persistent
- * classes.
+ * Base classs implementing common functionality for Web services
+ * backed persistent classes.
*/
public abstract class PersistentWSBase implements Persistent {
+ /**
+ * Maps keys to their own classes
+ */
protected static Map<Class<?>, Map<String, Integer>> FIELD_MAP =
new HashMap<Class<?>, Map<String,Integer>>();
+ /**
+ * Maps fields to their own classes
+ */
protected static Map<Class<?>, String[]> FIELDS =
new HashMap<Class<?>, String[]>();
+ /**
+ * Object used to manage the state of fields
+ */
private StateManager stateManager;
+ /**
+ * Constructor
+ */
protected PersistentWSBase() {
this(new StateManagerWSImpl());
}
+ /**
+ * Constructor using a stateManager object
+ * @param stateManager
+ */
protected PersistentWSBase(StateManager stateManager) {
this.stateManager = stateManager;
stateManager.setManagedPersistent(this);
@@ -64,197 +84,220 @@ public abstract class PersistentWSBase i
}
@Override
+ /**
+ * Gets the state manager
+ */
public StateManager getStateManager() {
return stateManager;
}
@Override
+ /**
+ * Gets fields using a specific class
+ */
public String[] getFields() {
return FIELDS.get(getClass());
}
@Override
+ /**
+ * Gets a specific field from the fields map
+ */
public String getField(int index) {
return FIELDS.get(getClass())[index];
}
@Override
+ /**
+ * Gets a field index based on the field name
+ */
public int getFieldIndex(String field) {
return FIELD_MAP.get(getClass()).get(field);
}
@Override
+ /**
+ * Clears maps of fields
+ */
public void clear() {
- /*List<Field> fields = getSchema().getFields();
-
- for(int i=0; i<getFields().length; i++) {
- switch(fields.get(i).schema().getType()) {
- case MAP:
- if(get(i) != null) {
- if (get(i) instanceof StatefulHashMap) {
- ((StatefulHashMap)get(i)).reuse();
- } else {
- ((Map)get(i)).clear();
- }
- }
- break;
- case ARRAY:
- if(get(i) != null) {
- if(get(i) instanceof ListGenericArray) {
- ((ListGenericArray)get(i)).clear();
- } else {
- put(i, new ListGenericArray(fields.get(i).schema()));
- }
- }
- break;
- case RECORD :
- Persistent field = ((Persistent)get(i));
- if(field != null) field.clear();
- break;
- case BOOLEAN: put(i, false); break;
- case INT : put(i, 0); break;
- case DOUBLE : put(i, 0d); break;
- case FLOAT : put(i, 0f); break;
- case LONG : put(i, 0l); break;
- case NULL : break;
- default : put(i, null); break;
- }
- }*/
+ // TODO study the specific cases for other datatypes
clearDirty();
clearReadable();
}
@Override
+ /**
+ * Determines if a class is new or not
+ */
public boolean isNew() {
return getStateManager().isNew(this);
}
@Override
+ /**
+ * Sets this element as a new one inside the stateManager object
+ */
public void setNew() {
getStateManager().setNew(this);
}
@Override
+ /**
+ * Clears a new object from the stateManager
+ */
public void clearNew() {
getStateManager().clearNew(this);
}
@Override
+ /**
+ * Determines if an object has been modified or not
+ */
public boolean isDirty() {
return getStateManager().isDirty(this);
}
@Override
+ /**
+ * Determines if an object has been modified or not
+ * based on its field index
+ */
public boolean isDirty(int fieldIndex) {
return getStateManager().isDirty(this, fieldIndex);
}
@Override
+ /**
+ * Determines if an object has been modified or not
+ * based on its field name
+ */
public boolean isDirty(String field) {
return isDirty(getFieldIndex(field));
}
@Override
+ /**
+ * Sets this class as dirty
+ */
public void setDirty() {
getStateManager().setDirty(this);
}
@Override
+ /**
+ * Sets a specific field as dirty using its index
+ */
public void setDirty(int fieldIndex) {
getStateManager().setDirty(this, fieldIndex);
}
@Override
+ /**
+ * Sets a specific field as dirty using its name
+ */
public void setDirty(String field) {
setDirty(getFieldIndex(field));
}
@Override
+ /**
+ * Clears dirty fields using its index
+ */
public void clearDirty(int fieldIndex) {
getStateManager().clearDirty(this, fieldIndex);
}
@Override
+ /**
+ * Clears dirty fields using its name
+ */
public void clearDirty(String field) {
clearDirty(getFieldIndex(field));
}
@Override
+ /**
+ * Clears dirty fields from the state manager
+ */
public void clearDirty() {
getStateManager().clearDirty(this);
}
@Override
+ /**
+ * Checks if a field is readable using its index
+ */
public boolean isReadable(int fieldIndex) {
return getStateManager().isReadable(this, fieldIndex);
}
@Override
+ /**
+ * Checks if a field is readable using its name
+ */
public boolean isReadable(String field) {
return isReadable(getFieldIndex(field));
}
@Override
+ /**
+ * Sets a field as readable using its index
+ */
public void setReadable(int fieldIndex) {
getStateManager().setReadable(this, fieldIndex);
}
@Override
+ /**
+ * Sets a field as readable using its name
+ */
public void setReadable(String field) {
setReadable(getFieldIndex(field));
}
@Override
+ /**
+ * Clears this readable object from the state manager
+ */
public void clearReadable() {
getStateManager().clearReadable(this);
}
@Override
+ /**
+ * Clears a readable object based on its field index
+ * using a stateManager object
+ */
public void clearReadable(int fieldIndex) {
getStateManager().clearReadable(this, fieldIndex);
}
@Override
+ /**
+ * Clears a readable object based on its field name
+ * using a stateManager object
+ */
public void clearReadable(String field) {
clearReadable(getFieldIndex(field));
}
@Override
+ /**
+ * Determines if an object is equal to this class
+ */
public boolean equals(Object o) {
if (this == o) return true;
- /*if (!(o instanceof SpecificRecord)) return false;
-
- SpecificRecord r2 = (SpecificRecord)o;
- if (!this.getSchema().equals(r2.getSchema())) return false;
-
- return this.hashCode() == r2.hashCode();*/
+ // TODO we should check if the object has schema or not
return true;
}
@Override
+ // TODO
public int hashCode() {
int result = 1;
- /* List<Field> fields = this.getSchema().getFields();
- int end = fields.size();
- for (int i = 0; i < end; i++) {
- result = prime * result + getFieldHashCode(i, fields.get(i));
- }
- */
return result;
}
- /*private int getFieldHashCode(int i, Field field) {
- Object o = get(i);
- if(o == null)
- return 0;
-
- if(field.schema().getType() == Type.BYTES) {
- return getByteBufferHashCode((ByteBuffer)o);
- }
-
- return o.hashCode();
- }*/
-
/** ByteBuffer.hashCode() takes into account the position of the
* buffer, but we do not want that*/
private int getByteBufferHashCode(ByteBuffer buf) {
@@ -266,33 +309,34 @@ public abstract class PersistentWSBase i
}
@Override
+ /**
+ * Clones a persistent object
+ */
public Persistent clone() {
- //return datumReader.clone(this, getSchema());
return null;
}
@Override
+ /**
+ * Converts an object to string
+ */
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(super.toString());
builder.append(" {\n");
- /*List<Field> fields = getSchema().getFields();
- for(int i=0; i<fields.size(); i++) {
- builder.append(" \"").append(fields.get(i).name()).append("\":\"");
- builder.append(get(i)).append("\"\n");
- }
- */
+ // TODO get fields
builder.append("}");
return builder.toString();
}
-
+
+ /**
+ * Checks if a field is equal between two objects
+ * @param index
+ * @param value
+ * @return
+ */
protected boolean isFieldEqual(int index, Object value) {
- /*Object old = get(index);
- if (old == null && value == null)
- return true;
- if (old == null || value == null)
- return false;
- return value.equals(old);*/
+ // TODO
return true;
}
}
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/StateManagerWSImpl.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/StateManagerWSImpl.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/StateManagerWSImpl.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/persistency/ws/impl/StateManagerWSImpl.java Wed Aug 29 17:31:01 2012
@@ -34,9 +34,15 @@ public class StateManagerWSImpl implemen
protected BitSet dirtyBits;
protected BitSet readableBits;
+ /**
+ * Constructor
+ */
public StateManagerWSImpl() {
}
+ /**
+ * Sets dirtyBits and readableBits sizes
+ */
public void setManagedPersistent(Persistent persistent) {
// dirtyBits = new BitSet(persistent.getSchema().getFields().size());
// readableBits = new BitSet(persistent.getSchema().getFields().size());
@@ -44,60 +50,99 @@ public class StateManagerWSImpl implemen
}
@Override
+ /**
+ * Checks if an object is new or not
+ */
public boolean isNew(Persistent persistent) {
return isNew;
}
@Override
+ /**
+ * Sets an object as new
+ */
public void setNew(Persistent persistent) {
this.isNew = true;
}
@Override
+ /**
+ * Clear the new object by setting it as not new
+ */
public void clearNew(Persistent persistent) {
this.isNew = false;
}
+ /**
+ * Sets an object as dirty using its index
+ */
public void setDirty(Persistent persistent, int fieldIndex) {
dirtyBits.set(fieldIndex);
readableBits.set(fieldIndex);
}
+ /**
+ * Determines if an object is dirty or not based on its index
+ */
public boolean isDirty(Persistent persistent, int fieldIndex) {
return dirtyBits.get(fieldIndex);
}
+ /**
+ * Determines if an object is dirty
+ */
public boolean isDirty(Persistent persistent) {
return !dirtyBits.isEmpty();
}
@Override
+ /**
+ * Sets an object as dirty
+ */
public void setDirty(Persistent persistent) {
dirtyBits.set(0, dirtyBits.size());
}
@Override
+ /**
+ * Marks a persistent object as not dirty using its index
+ */
public void clearDirty(Persistent persistent, int fieldIndex) {
dirtyBits.clear(fieldIndex);
}
+ /**
+ * Marks all objects as not dirty
+ */
public void clearDirty(Persistent persistent) {
dirtyBits.clear();
}
+ /**
+ * Sets a persistent object as readable using its index
+ */
public void setReadable(Persistent persistent, int fieldIndex) {
readableBits.set(fieldIndex);
}
+ /**
+ * Determines if an object is readable using its index
+ */
public boolean isReadable(Persistent persistent, int fieldIndex) {
return readableBits.get(fieldIndex);
}
@Override
+ /**
+ * Marks an object as non-readable using its index
+ */
public void clearReadable(Persistent persistent, int fieldIndex) {
readableBits.clear(fieldIndex);
}
+ /**
+ * Marks all objects as non-readable
+ */
public void clearReadable(Persistent persistent) {
readableBits.clear();
}
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/PartitionWSQueryImpl.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/PartitionWSQueryImpl.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/PartitionWSQueryImpl.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/PartitionWSQueryImpl.java Wed Aug 29 17:31:01 2012
@@ -15,7 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+/**
+ * @author Renato Marroquin
+ */
package org.apache.gora.query.ws.impl;
import java.util.Arrays;
@@ -28,20 +30,38 @@ import org.apache.gora.store.DataStore;
/**
* Implementation for {@link PartitionQuery}.
*/
+//TODO this class should be reviewed when a web service backed datastore has the
+// ability to write partition queries
public class PartitionWSQueryImpl<K, T extends Persistent>
extends QueryWSBase<K, T> implements PartitionQuery<K, T> {
+ /**
+ * Base query
+ */
protected Query<K, T> baseQuery;
+
+ /**
+ * The places where this query will be executed
+ */
protected String[] locations;
+ /**
+ * Constructor
+ */
public PartitionWSQueryImpl() {
super(null);
}
+ /**
+ * Constructor
+ */
public PartitionWSQueryImpl(Query<K, T> baseQuery, String... locations) {
this(baseQuery, null, null, locations);
}
+ /**
+ * Constructor
+ */
public PartitionWSQueryImpl(Query<K, T> baseQuery, K startKey, K endKey,
String... locations) {
super(baseQuery.getDataStore());
@@ -53,100 +73,123 @@ public class PartitionWSQueryImpl<K, T e
}
@Override
-public String[] getLocations() {
+ /**
+ * Gets the locations where this query will be executed
+ */
+ public String[] getLocations() {
return locations;
}
+ /**
+ * Gets the base query to be used
+ * @return
+ */
public Query<K, T> getBaseQuery() {
return baseQuery;
}
/* Override everything except start-key/end-key */
-
@Override
+ /**
+ * Gets the fields used
+ */
public String[] getFields() {
return baseQuery.getFields();
}
@Override
+ /**
+ * Gets the data store used
+ */
public DataStore<K, T> getDataStore() {
return baseQuery.getDataStore();
}
@Override
+ /**
+ * Gets the timestamp used
+ */
public long getTimestamp() {
return baseQuery.getTimestamp();
}
@Override
+ /**
+ * Gets the start time used
+ */
public long getStartTime() {
return baseQuery.getStartTime();
}
@Override
+ /**
+ * Gets the end time used
+ */
public long getEndTime() {
return baseQuery.getEndTime();
}
@Override
+ /**
+ * Gets the results limit number used
+ */
public long getLimit() {
return baseQuery.getLimit();
}
@Override
+ /**
+ * Sets the fields to be retrieved
+ */
public void setFields(String... fields) {
baseQuery.setFields(fields);
}
@Override
+ /**
+ * Sets the timestamp used
+ */
public void setTimestamp(long timestamp) {
baseQuery.setTimestamp(timestamp);
}
@Override
+ /**
+ * Sets the start time used
+ */
public void setStartTime(long startTime) {
baseQuery.setStartTime(startTime);
}
@Override
+ /**
+ * Sets the end time used
+ */
public void setEndTime(long endTime) {
baseQuery.setEndTime(endTime);
}
@Override
+ /**
+ * Sets the time range used
+ */
public void setTimeRange(long startTime, long endTime) {
baseQuery.setTimeRange(startTime, endTime);
}
@Override
+ /**
+ * Sets the maximum number of records to be retrieved
+ */
public void setLimit(long limit) {
baseQuery.setLimit(limit);
}
- /*@Override
- public void write(DataOutput out) throws IOException {
- super.write(out);
- IOUtils.serialize(null, out, baseQuery);
- IOUtils.writeStringArray(out, locations);
- }*/
-
- /*@Override
- public void readFields(DataInput in) throws IOException {
- super.readFields(in);
- try {
- baseQuery = IOUtils.deserialize(null, in, null);
- } catch (ClassNotFoundException ex) {
- throw new IOException(ex);
- }
- locations = IOUtils.readStringArray(in);
- //we should override the data store as basequery's data store
- //also we may not call super.readFields so that temporary this.dataStore
- //is not created at all
- this.dataStore = baseQuery.getDataStore();
- }*/
-
@Override
@SuppressWarnings({ "rawtypes" })
+ /**
+ * Determines if this object is equal to another one
+ */
public boolean equals(Object obj) {
if(obj instanceof PartitionWSQueryImpl) {
PartitionWSQueryImpl that = (PartitionWSQueryImpl) obj;
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/QueryWSBase.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/QueryWSBase.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/QueryWSBase.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/QueryWSBase.java Wed Aug 29 17:31:01 2012
@@ -15,7 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+/**
+ * @author Renato Marroquin
+ */
package org.apache.gora.query.ws.impl;
import org.apache.commons.lang.builder.EqualsBuilder;
@@ -31,78 +33,137 @@ import org.apache.gora.store.DataStore;
*/
public abstract class QueryWSBase<K, T extends Persistent> implements Query<K,T>{
+ /**
+ * Data store used for this query
+ */
protected DataStore<K,T> dataStore;
+ /**
+ * Query represented in a string
+ */
protected String queryString;
+
+ /**
+ * Fields to be retrieved
+ */
protected String[] fields;
+ /**
+ * Range key parameters
+ */
protected K startKey;
protected K endKey;
+ /**
+ * Query time parameters
+ */
protected long startTime = -1;
protected long endTime = -1;
+ /**
+ * Query filter
+ */
protected String filter;
+ /**
+ * Max number of results to be retrieved
+ */
protected long limit = -1;
+ /**
+ * Flag to determine whether a query is compiled or not
+ */
protected boolean isCompiled = false;
/** Object that will hold user's authentication tokens for webservice database */
private Object authentication;
+ /**
+ * Constructor
+ * @param dataStore
+ */
public QueryWSBase(DataStore<K,T> dataStore) {
this.dataStore = dataStore;
}
@Override
+ /**
+ * Executes the query
+ */
public Result<K,T> execute() throws Exception {
//compile();
return dataStore.execute(this);
}
@Override
+ /**
+ * Sets the data store to be used
+ */
public void setDataStore(DataStore<K, T> dataStore) {
this.dataStore = dataStore;
}
@Override
+ /**
+ * Gets the data store used for querying
+ */
public DataStore<K, T> getDataStore() {
return dataStore;
}
@Override
+ /**
+ * Sets the fields to be retrieved
+ */
public void setFields(String... fields) {
this.fields = fields;
}
@Override
+ /**
+ * Gets the fields to be retrieved
+ */
public String[] getFields() {
return fields;
}
@Override
+ /**
+ * Sets the key to be used for querying
+ */
public void setKey(K key) {
setKeyRange(key, key);
}
@Override
+ /**
+ * Sets the start key to be used for querying
+ */
public void setStartKey(K startKey) {
this.startKey = startKey;
}
@Override
+ /**
+ * Sets the end key to be used for querying
+ */
public void setEndKey(K endKey) {
this.endKey = endKey;
}
@Override
+ /**
+ * Sets the range key to be used for querying
+ */
public void setKeyRange(K startKey, K endKey) {
this.startKey = startKey;
this.endKey = endKey;
}
@Override
+ /**
+ * Gets the key to be used for querying
+ */
public K getKey() {
if(startKey == endKey) {
return startKey; //address comparison
@@ -111,71 +172,115 @@ public abstract class QueryWSBase<K, T e
}
@Override
+ /**
+ * Gets the start key to be used for querying
+ */
public K getStartKey() {
return startKey;
}
@Override
+ /**
+ * Gets the end key to be used for querying
+ */
public K getEndKey() {
return endKey;
}
@Override
+ /**
+ * Sets the timestamp to be used for querying
+ */
public void setTimestamp(long timestamp) {
setTimeRange(timestamp, timestamp);
}
@Override
+ /**
+ * Sets the start time for querying
+ */
public void setStartTime(long startTime) {
this.startTime = startTime;
}
@Override
+ /**
+ * Sets the end time for querying
+ */
public void setEndTime(long endTime) {
this.endTime = endTime;
}
@Override
+ /**
+ * Sets the range time for querying
+ */
public void setTimeRange(long startTime, long endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
@Override
+ /**
+ * Gets the timestamp set
+ */
public long getTimestamp() {
return startTime == endTime ? startTime : -1;
}
@Override
+ /**
+ * Gets the start time
+ */
public long getStartTime() {
return startTime;
}
@Override
+ /**
+ * Gets the end time
+ */
public long getEndTime() {
return endTime;
}
@Override
+ /**
+ * Sets the limit of results to be gotten
+ */
public void setLimit(long limit) {
this.limit = limit;
}
@Override
+ /**
+ * Gets the number limit of this query
+ */
public long getLimit() {
return limit;
}
+ /**
+ * Gets the configuration object
+ * @return
+ */
public Object getConf() {
return authentication;
}
+ /**
+ * Sets the configuration object
+ * @param auth
+ */
public void setConf(Object auth) {
this.authentication = auth;
}
@SuppressWarnings({ "rawtypes" })
@Override
+ /**
+ * Determines if this object is equal to a different one
+ */
public boolean equals(Object obj) {
if(obj instanceof QueryWSBase) {
QueryWSBase that = (QueryWSBase) obj;
@@ -193,6 +298,9 @@ public abstract class QueryWSBase<K, T e
}
@Override
+ /**
+ * Retrieves the object as hash code
+ */
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder();
builder.append(dataStore);
@@ -206,6 +314,9 @@ public abstract class QueryWSBase<K, T e
}
@Override
+ /**
+ * Convets an object to string
+ */
public String toString() {
ToStringBuilder builder = new ToStringBuilder(this);
builder.append("dataStore", dataStore);
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/ResultWSBase.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/ResultWSBase.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/ResultWSBase.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/query/ws/impl/ResultWSBase.java Wed Aug 29 17:31:01 2012
@@ -15,6 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+/**
+ * @author Renato Marroquin
+ */
package org.apache.gora.query.ws.impl;
@@ -31,12 +34,24 @@ import org.apache.gora.store.DataStore;
public abstract class ResultWSBase<K, T extends Persistent>
implements Result<K, T> {
+ /**
+ * Data store used
+ */
protected final DataStore<K,T> dataStore;
+ /**
+ * Query for obtaining this result
+ */
protected final Query<K, T> query;
+ /**
+ * Key
+ */
protected K key;
+ /**
+ * Persistent object
+ */
protected T persistent;
/** Query limit */
@@ -45,6 +60,11 @@ public abstract class ResultWSBase<K, T
/** How far we have proceeded*/
protected long offset = 0;
+ /**
+ * Constructor
+ * @param dataStore
+ * @param query
+ */
public ResultWSBase(DataStore<K,T> dataStore, Query<K,T> query) {
this.dataStore = dataStore;
this.query = query;
@@ -52,31 +72,49 @@ public abstract class ResultWSBase<K, T
}
@Override
+ /**
+ * Gets the data store used for retrieving this result
+ */
public DataStore<K, T> getDataStore() {
return dataStore;
}
@Override
+ /**
+ * Gets the query used for this result
+ */
public Query<K, T> getQuery() {
return query;
}
@Override
+ /**
+ * Gets the persistent object
+ */
public T get() {
return persistent;
}
@Override
+ /**
+ * Gets the key
+ */
public K getKey() {
return key;
}
@Override
+ /**
+ * Gets the key class
+ */
public Class<K> getKeyClass() {
return getDataStore().getKeyClass();
}
@Override
+ /**
+ * Gets the persistent object class
+ */
public Class<T> getPersistentClass() {
return getDataStore().getPersistentClass();
}
@@ -91,6 +129,9 @@ public abstract class ResultWSBase<K, T
return false;
}
+ /**
+ * Clears the persistent object
+ */
protected void clear() {
if(persistent != null) {
persistent.clear();
@@ -101,6 +142,9 @@ public abstract class ResultWSBase<K, T
}
@Override
+ /**
+ * Returnts the next object from the result's lists
+ */
public final boolean next() throws Exception {
if(isLimitReached()) {
return false;
@@ -116,6 +160,9 @@ public abstract class ResultWSBase<K, T
}
@Override
+ /**
+ * Gets the offset inside the result's list
+ */
public long getOffset() {
return offset;
}
@@ -126,6 +173,13 @@ public abstract class ResultWSBase<K, T
*/
protected abstract boolean nextInner() throws Exception;
+ /**
+ * Creates an object if it does not exists
+ * @param persistent Object to be created if it does not exist
+ * @return
+ * @throws Exception
+ * @throws IOException
+ */
protected T getOrCreatePersistent(T persistent) throws Exception, IOException {
if(persistent != null) {
return persistent;
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/DataStore.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/DataStore.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/DataStore.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/DataStore.java Wed Aug 29 17:31:01 2012
@@ -214,8 +214,8 @@ public interface DataStore<K, T> {
*/
void close() throws IOException, InterruptedException, Exception;
- //void readFields() throws Exception;
+ //void readFields(Object in) throws Exception;
- //void write() throws IOException;
+ //void write() throws Exception;
}
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/WebServiceBackedDataStore.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/WebServiceBackedDataStore.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/WebServiceBackedDataStore.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/WebServiceBackedDataStore.java Wed Aug 29 17:31:01 2012
@@ -20,7 +20,8 @@ package org.apache.gora.store;
import org.apache.gora.persistency.Persistent;
-/** FileBackedDataStore supplies necessary interfaces to set input
+/**
+ * FileBackedDataStore supplies necessary interfaces to set input
* and output paths for data stored which are file based.
*/
public interface WebServiceBackedDataStore<K, T extends Persistent> extends DataStore<K, T> {
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/DataStoreBase.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/DataStoreBase.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/DataStoreBase.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/DataStoreBase.java Wed Aug 29 17:31:01 2012
@@ -176,7 +176,6 @@ implements DataStore<K, T>, Configurable
return conf;
}
- //@Override
@SuppressWarnings("unchecked")
public void readFields(DataInput in) throws IOException {
try {
@@ -189,7 +188,6 @@ implements DataStore<K, T>, Configurable
}
}
- //@Override
public void write(DataOutput out) throws IOException {
Text.writeString(out, getKeyClass().getCanonicalName());
Text.writeString(out, getPersistentClass().getCanonicalName());
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/FileBackedDataStoreBase.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/FileBackedDataStoreBase.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/FileBackedDataStoreBase.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/impl/FileBackedDataStoreBase.java Wed Aug 29 17:31:01 2012
@@ -158,7 +158,7 @@ public InputStream getInputStream() {
@Override
public Result<K, T> execute(Query<K, T> query) throws IOException {
if(query instanceof FileSplitPartitionQuery) {
- return executePartial((FileSplitPartitionQuery<K, T>) query);
+ return executePartial((FileSplitPartitionQuery<K, T>) query);
} else {
return executeQuery(query);
}
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSBackedDataStoreBase.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSBackedDataStoreBase.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSBackedDataStoreBase.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSBackedDataStoreBase.java Wed Aug 29 17:31:01 2012
@@ -15,7 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+/**
+ * @author Renato Marroquin
+ */
package org.apache.gora.store.ws.impl;
import java.io.IOException;
@@ -24,30 +26,31 @@ import java.util.Properties;
import org.apache.gora.persistency.Persistent;
import org.apache.gora.query.Query;
import org.apache.gora.query.Result;
-import org.apache.gora.store.FileBackedDataStore;
import org.apache.gora.store.WebServiceBackedDataStore;
import org.apache.gora.util.OperationNotSupportedException;
/**
- * Base implementations for {@link FileBackedDataStore} methods.
+ * Base implementations for {@link WebServiceBackedDataStore} methods.
*/
public abstract class WSBackedDataStoreBase<K, T extends Persistent>
extends WSDataStoreBase<K, T> implements WebServiceBackedDataStore<K, T> {
@Override
+ /**
+ * Initializes a web service backed data store
+ */
public void initialize(Class<K> keyClass, Class<T> persistentClass,
Properties properties) throws Exception {
super.initialize(keyClass, persistentClass, properties);
- //if(properties != null) {
- //}
}
+
@Override
+ /**
+ * Executes a query inside a web service backed data store
+ */
public Result<K, T> execute(Query<K, T> query) throws Exception {
- /* if(query instanceof PartitionWSQueryImpl) {
- return executePartial((FileSplitPartitionQuery<K, T>) query);
- } else {*/
- return executeQuery(query);
- //}
+ // TODO We could have different types of execution {@link FileBackedDataStoreBase}
+ return executeQuery(query);
}
/**
@@ -57,48 +60,57 @@ public abstract class WSBackedDataStoreB
protected abstract Result<K,T> executeQuery(Query<K,T> query)
throws Exception;
+ @Override
/**
- * Executes a PartitialQuery, reading the data between start and end.
+ * Flushes objects into the data store
*/
- //protected abstract Result<K,T> executePartial(FileSplitPartitionQuery<K,T> query)
- // throws Exception;
-
- @Override
public void flush() throws Exception {
}
@Override
+ /**
+ * Creates schema into the data store
+ */
public void createSchema() throws Exception{
}
@Override
+ /**
+ * Deletes schema from the data store
+ */
public void deleteSchema() throws Exception {
throw new OperationNotSupportedException("delete schema is not supported for " +
"file backed data stores");
}
@Override
+ /**
+ * Verifies if a schema exists
+ */
public boolean schemaExists() throws Exception {
return true;
}
@Override
+ /**
+ * Writes an object into the data
+ */
public void write(Object out) throws Exception {
super.write(out);
- //if(wsProvider != null)
- // make write request
-
}
@Override
+ /**
+ * Reads fields from an object
+ */
public void readFields(Object in) throws Exception {
super.readFields(in);
- //if(wsProvider != null)
- // make read request
}
- // TODO this could be close connection
@Override
+ /**
+ * Closes the data store
+ */
public void close() throws IOException, InterruptedException, Exception {
}
}
Modified: gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSDataStoreBase.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSDataStoreBase.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSDataStoreBase.java (original)
+++ gora/branches/goraamazon/gora-core/src/main/java/org/apache/gora/store/ws/impl/WSDataStoreBase.java Wed Aug 29 17:31:01 2012
@@ -15,7 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+/**
+ * @author Renato Marroquin
+ */
package org.apache.gora.store.ws.impl;
import java.util.Properties;
@@ -25,110 +27,84 @@ import org.apache.gora.store.DataStore;
import org.apache.gora.util.StringUtils;
/**
- * A Base class for Avro persistent {@link DataStore}s.
+ * A Base class for persistent objects{@link DataStore}s.
*/
public abstract class WSDataStoreBase<K, T extends Persistent>
implements DataStore<K, T>{
- //protected BeanFactory<K, T> beanFactory;
-
+ /**
+ * Class of the key to be used
+ */
protected Class<K> keyClass;
+
+ /**
+ * Class of the persistent object
+ */
protected Class<T> persistentClass;
- /** The web service provider's name*/
+ /**
+ * The web service provider's name
+ */
private String wsProvider;
- /** A map of field names to Field objects containing schema's fields
- protected Map<String, Field> fieldMap; */
-
- /** The authentication object to be used for our provider*/
+ /**
+ * The authentication object to be used for our provider
+ */
protected Object authentication;
- /** Properties object */
+ /**
+ * Properties object
+ */
protected Properties properties;
-
- //TODO see if a webservice database will have these persistent datums
- //protected PersistentDatumReader<T> datumReader;
- //protected PersistentDatumWriter<T> datumWriter;
+ /**
+ * Default constructor
+ */
public WSDataStoreBase() {
}
@Override
+ /**
+ * Initializes the web services backed data store
+ */
public void initialize(Class<K> keyClass, Class<T> persistentClass,
Properties properties) throws Exception {
setKeyClass(keyClass);
setPersistentClass(persistentClass);
- //TODO See if we need to create a factory to manage our beans
- //if(this.beanFactory == null)
- // this.beanFactory = new BeanFactoryImpl<K, T>(keyClass, persistentClass);
}
@Override
+ /**
+ * Sets the persistent class to be used
+ */
public void setPersistentClass(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
@Override
+ /**
+ * Gets the persistent class being used
+ */
public Class<T> getPersistentClass() {
return persistentClass;
}
@Override
+ /**
+ * Gets the key class being used
+ */
public Class<K> getKeyClass() {
return keyClass;
}
@Override
+ /**
+ * Sets the key class to be used
+ */
public void setKeyClass(Class<K> keyClass) {
if(keyClass != null)
this.keyClass = keyClass;
}
- /*
- @Override
- public K newKey() throws IOException {
- try {
- return beanFactory.newKey();
- } catch (Exception ex) {
- throw new IOException(ex);
- }
- }
-
- @Override
- public T newPersistent() throws IOException {
- try {
- return beanFactory.newPersistent();
- } catch (Exception ex) {
- throw new IOException(ex);
- }
- }
-
- @Override
- public void setBeanFactory(BeanFactory<K, T> beanFactory) {
- this.beanFactory = beanFactory;
- }
-
- @Override
- public BeanFactory<K, T> getBeanFactory() {
- return beanFactory;
- }
-
- @Override
- public T get(K key) throws Exception {
- return get(key, getFieldsToQuery(null));
- };
-*/
- /**
- * Checks whether the fields argument is null, and if so
- * returns all the fields of the Persistent object, else returns the
- * argument.
- */
- /*protected String[] getFieldsToQuery(String[] fields) {
- if(fields != null) {
- return fields;
- }
- return beanFactory.getCachedPersistent().getFields();
- }*/
/**
* Gets the configuration (authentication) object
@@ -144,39 +120,29 @@ implements DataStore<K, T>{
public void setConf(Object auth) {
this.authentication = auth;
}
-
- //@Override
- //@SuppressWarnings("unchecked")
- public void readFields(Object in) throws Exception {
- /* try {
- Class<K> keyClass = (Class<K>) ClassLoadingUtils.loadClass(Text.readString(in));
- Class<T> persistentClass = (Class<T>)ClassLoadingUtils.loadClass(Text.readString(in));
- Properties props = WritableUtils.readProperties(in);
- initialize(keyClass, persistentClass, props);
- } catch (ClassNotFoundException ex) {
- throw new IOException(ex);
- }
- */
+
+ /**
+ * Reads fields from an object
+ * @param obj
+ * @throws Exception
+ */
+ public void readFields(Object obj) throws Exception {
}
- //@Override
+ /**
+ * Writes an object
+ * @param obj
+ * @throws Exception
+ */
public void write(Object obj) throws Exception {
- /*Text.writeString(out, getKeyClass().getCanonicalName());
- Text.writeString(out, getPersistentClass().getCanonicalName());
- WritableUtils.writeProperties(out, properties);
- */
}
@Override
public boolean equals(Object obj) {
if(obj instanceof WSDataStoreBase) {
@SuppressWarnings("rawtypes")
- WSDataStoreBase that = (WSDataStoreBase) obj;
- return that.equals(obj);
- /* EqualsBuilder builder = new EqualsBuilder();
- builder.append(this.keyClass, that.keyClass);
- builder.append(this.persistentClass, that.persistentClass);
- return builder.isEquals();*/
+ WSDataStoreBase that = (WSDataStoreBase) obj;
+ return that.equals(this);
}
return false;
}
@@ -210,11 +176,19 @@ implements DataStore<K, T>{
return StringUtils.getClassname(persistentClass);
}
+ /**
+ * Gets web service provider name
+ * @return
+ */
public String getWSProvider() {
- return wsProvider;
+ return wsProvider;
}
+ /**
+ * Sets web service provider name
+ * @param wsProvider
+ */
public void setWsProvider(String wsProvider) {
- this.wsProvider = wsProvider;
+ this.wsProvider = wsProvider;
}
}
Modified: gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java (original)
+++ gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/compiler/GoraDynamoDBCompiler.java Wed Aug 29 17:31:01 2012
@@ -99,15 +99,15 @@ public class GoraDynamoDBCompiler {
private void setItems(List<Map<String, String>> pItems, int pIden) throws IOException{
for(Map<String, String> item : pItems){
for (String itemName : item.keySet()){
- String itemType = "String";
- if (item.get(itemName).toString().equals("N"))
- itemType = "double";
- if (item.get(itemName).toString().equals("SS"))
- itemType = "Set<String>";
- if (item.get(itemName).toString().equals("SN"))
- itemType = "Set<double>";
- line(pIden, "private " + itemType + " " + itemName + ";");
- setItemMethods(itemName, itemType, pIden);
+ String itemType = "String";
+ if (item.get(itemName).toString().equals("N"))
+ itemType = "double";
+ if (item.get(itemName).toString().equals("SS"))
+ itemType = "Set<String>";
+ if (item.get(itemName).toString().equals("SN"))
+ itemType = "Set<double>";
+ line(pIden, "private " + itemType + " " + itemName + ";");
+ setItemMethods(itemName, itemType, pIden);
}
}
line(0, "");
Modified: gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/store/DynamoDBMapping.java
URL: http://svn.apache.org/viewvc/gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/store/DynamoDBMapping.java?rev=1378656&r1=1378655&r2=1378656&view=diff
==============================================================================
--- gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/store/DynamoDBMapping.java (original)
+++ gora/branches/goraamazon/gora-dynamodb/src/main/java/org/apache/gora/dynamodb/store/DynamoDBMapping.java Wed Aug 29 17:31:01 2012
@@ -61,19 +61,20 @@ public class DynamoDBMapping {
* @param provisionedThroughput Provisioned throughput used within tables mapped.
*/
public DynamoDBMapping(Map<String, List<Map<String, String>>> tables,
- Map<String, KeySchema> tablesToKeySchemas,
- Map<String, ProvisionedThroughput> provisionedThroughput) {
- this.tablesToItems = tables;
- this.tablesToKeySchemas = tablesToKeySchemas;
- this.tablesToPrTh = provisionedThroughput;
- }
+ Map<String, KeySchema> tablesToKeySchemas,
+ Map<String, ProvisionedThroughput> provisionedThroughput) {
+
+ this.tablesToItems = tables;
+ this.tablesToKeySchemas = tablesToKeySchemas;
+ this.tablesToPrTh = provisionedThroughput;
+ }
/**
* Gets the tables with their own items
* @return tablesToItem HashMap
*/
public Map<String,List<Map<String, String>>> getTables(){
- return tablesToItems;
+ return tablesToItems;
}
/**
@@ -82,7 +83,7 @@ public class DynamoDBMapping {
* @return
*/
public List<Map<String, String>> getItems(String tableName){
- return tablesToItems.get(tableName);
+ return tablesToItems.get(tableName);
}
/**
@@ -100,7 +101,7 @@ public class DynamoDBMapping {
* @return
*/
public ProvisionedThroughput getProvisionedThroughput(String tableName){
- return tablesToPrTh.get(tableName);
+ return tablesToPrTh.get(tableName);
}
/**
@@ -110,203 +111,202 @@ public class DynamoDBMapping {
*/
public static class DynamoDBMappingBuilder {
- /**
- * Table name to be used to build the DynamoDBMapping object
- */
- private String tableName;
-
- /**
- * This data structure can hold several tables, with their own items.
- * Map<TableName, List<Map<AttributeName,AttributeType>>
- */
- private Map<String, List<Map<String, String>>> tablesToItems =
- new HashMap<String, List<Map<String, String>>>();
-
- private Map<String, KeySchema> tablesToKeySchemas =
- new HashMap<String, KeySchema>();
-
- private Map<String, ProvisionedThroughput> tablesToPrTh =
- new HashMap<String, ProvisionedThroughput>();
-
- public void setTableName(String tabName){
- tableName = tabName;
- }
-
- /**
- * Gets the table name for which the table is being mapped
- * @param tableName
- * @return
- */
- public String getTableName(String tableName){
- return tableName;
- }
-
- /**
- * Sets the provisioned throughput for the specified table
- * @param tableName
- * @param readCapUnits
- * @param writeCapUnits
- */
- public void setProvisionedThroughput(String tableName, long readCapUnits, long writeCapUnits){
- ProvisionedThroughput ptDesc = new ProvisionedThroughput()
- .withReadCapacityUnits(readCapUnits)
- .withWriteCapacityUnits(writeCapUnits);
- tablesToPrTh.put(tableName, ptDesc);
- }
-
- /**
- * Sets the hash range key schema for the specified table
- * @param tableName
- * @param rangeKeyName
- * @param rangeKeyType
- */
- public void setHashRangeKeySchema(String tableName, String rangeKeyName, String rangeKeyType){
- KeySchema kSchema = tablesToKeySchemas.get(tableName);
- if ( kSchema == null)
- kSchema = new KeySchema();
-
- KeySchemaElement rangeKeyElement = new KeySchemaElement().
- withAttributeName(rangeKeyName).
- withAttributeType(rangeKeyType);
- kSchema.setRangeKeyElement(rangeKeyElement);
- tablesToKeySchemas.put(tableName, kSchema);
- }
-
- /**
- * Sets the hash key schema for the specified table
- * @param tableName
- * @param keyName
- * @param keyType
- */
- public void setHashKeySchema(String tableName, String keyName, String keyType){
- KeySchema kSchema = tablesToKeySchemas.get(tableName);
- if ( kSchema == null)
- kSchema = new KeySchema();
-
- KeySchemaElement hashKey = new KeySchemaElement().
- withAttributeName(keyName).
- withAttributeType(keyType);
- kSchema.setHashKeyElement(hashKey);
- tablesToKeySchemas.put(tableName, kSchema);
- }
-
- /**
- * Checks if a table exists, and if doesn't exist it creates the new table.
- * @param tableName
- * @return The table identified by the parameter
- */
- private List<Map<String, String>> getOrCreateTable(String tableName) {
-
- List<Map<String, String>> items = tablesToItems.get(tableName);
- if (items == null) {
- items = new ArrayList<Map<String, String>>();
- tablesToItems.put(tableName, items);
- }
- return items;
- }
-
- /**
- * Gets the attribute for a specific item. The idea is to be able to get different items with different attributes.
- * TODO This method is incomplete because the itemNumber might not be present and this would be a problem
- * @param items
- * @param itemNumber
- * @return
- */
- private HashMap<String, String> getOrCreateItemAttribs(List<Map<String, String>> items, int itemNumber){
- HashMap<String, String> itemAttribs;
-
- if (items.isEmpty())
- items.add(new HashMap<String, String>());
-
- itemAttribs = (HashMap<String, String>) items.get(itemNumber);
- if (itemAttribs == null)
- items.add(new HashMap<String, String>());
-
- return (HashMap<String, String>) items.get(itemNumber);
-
+ /**
+ * Table name to be used to build the DynamoDBMapping object
+ */
+ private String tableName;
+
+ /**
+ * This data structure can hold several tables, with their own items.
+ * Map<TableName, List<Map<AttributeName,AttributeType>>
+ */
+ private Map<String, List<Map<String, String>>> tablesToItems =
+ new HashMap<String, List<Map<String, String>>>();
+
+ /**
+ * Maps tables to key schemas
+ */
+ private Map<String, KeySchema> tablesToKeySchemas = new HashMap<String, KeySchema>();
+
+ /**
+ * Maps tables to provisioned throughput
+ */
+ private Map<String, ProvisionedThroughput> tablesToPrTh = new HashMap<String, ProvisionedThroughput>();
+
+ /**
+ * Sets table name
+ * @param tabName
+ */
+ public void setTableName(String tabName){
+ tableName = tabName;
+ }
+
+ /**
+ * Gets the table name for which the table is being mapped
+ * @param tableName
+ * @return
+ */
+ public String getTableName(String tableName){
+ return tableName;
+ }
+
+ /**
+ * Sets the provisioned throughput for the specified table
+ * @param tableName
+ * @param readCapUnits
+ * @param writeCapUnits
+ */
+ public void setProvisionedThroughput(String tableName, long readCapUnits, long writeCapUnits){
+ ProvisionedThroughput ptDesc =
+ new ProvisionedThroughput().withReadCapacityUnits(readCapUnits).withWriteCapacityUnits(writeCapUnits);
+ tablesToPrTh.put(tableName, ptDesc);
+ }
+
+ /**
+ * Sets the hash range key schema for the specified table
+ * @param tableName
+ * @param rangeKeyName
+ * @param rangeKeyType
+ */
+ public void setHashRangeKeySchema(String tableName, String rangeKeyName, String rangeKeyType){
+ KeySchema kSchema = tablesToKeySchemas.get(tableName);
+ if ( kSchema == null)
+ kSchema = new KeySchema();
+
+ KeySchemaElement rangeKeyElement =
+ new KeySchemaElement().withAttributeName(rangeKeyName).withAttributeType(rangeKeyType);
+ kSchema.setRangeKeyElement(rangeKeyElement);
+ tablesToKeySchemas.put(tableName, kSchema);
+ }
+
+ /**
+ * Sets the hash key schema for the specified table
+ * @param tableName
+ * @param keyName
+ * @param keyType
+ */
+ public void setHashKeySchema(String tableName, String keyName, String keyType){
+ KeySchema kSchema = tablesToKeySchemas.get(tableName);
+ if ( kSchema == null)
+ kSchema = new KeySchema();
+ KeySchemaElement hashKey =
+ new KeySchemaElement().withAttributeName(keyName).withAttributeType(keyType);
+ kSchema.setHashKeyElement(hashKey);
+ tablesToKeySchemas.put(tableName, kSchema);
+ }
+
+ /**
+ * Checks if a table exists, and if doesn't exist it creates the new table.
+ * @param tableName
+ * @return The table identified by the parameter
+ */
+ private List<Map<String, String>> getOrCreateTable(String tableName) {
+
+ List<Map<String, String>> items = tablesToItems.get(tableName);
+ if (items == null) {
+ items = new ArrayList<Map<String, String>>();
+ tablesToItems.put(tableName, items);
}
+ return items;
+ }
+
+ /**
+ * Gets the attribute for a specific item. The idea is to be able to get different items with different attributes.
+ * TODO This method is incomplete because the itemNumber might not be present and this would be a problem
+ * @param items
+ * @param itemNumber
+ * @return
+ */
+ private HashMap<String, String> getOrCreateItemAttribs(List<Map<String, String>> items, int itemNumber){
+ HashMap<String, String> itemAttribs;
+
+ if (items.isEmpty())
+ items.add(new HashMap<String, String>());
+
+ itemAttribs = (HashMap<String, String>) items.get(itemNumber);
+ if (itemAttribs == null)
+ items.add(new HashMap<String, String>());
+ return (HashMap<String, String>) items.get(itemNumber);
+ }
- /**
- * Adds an attribute to an specific item
- * @param tableName
- * @param attributeName
- * @param attrType
- * @param itemNumber
- */
- public void addAttribute(String tableName, String attributeName, String attrType, int itemNumber) {
- // selecting table
- List<Map<String, String>> items = getOrCreateTable(tableName);
- // add attribute to item
- HashMap<String, String> itemAttribs = getOrCreateItemAttribs(items, itemNumber);
- itemAttribs.put(attributeName, attrType);
- //items.add(itemAttribs);
- // add item to table
- //tablesToItems.put(tableName, items);
- }
-
- /**
- * Method to verify whether or not the schemas have been initialized
- * @return
- */
- private String verifyAllKeySchemas(){
-
- String wrongTable = "";
- // if there are not tables defined
- if (tablesToItems.isEmpty()) return "";
-
- for(String tableName : tablesToItems.keySet()){
- // if there are not schemas defined
- if (tablesToKeySchemas.isEmpty()) return "";
- if (!verifyKeySchema(tableName)) return "";
- }
-
- return wrongTable;
-
- }
-
- /**
- * Verifies is a table has a key schema defined
- * @param tableName Table name to determine which key schema to obtain
- * @return
- */
- private boolean verifyKeySchema(String tableName){
- KeySchema kSchema = tablesToKeySchemas.get(tableName);
-
- if (kSchema == null)
- return false;
+ /**
+ * Adds an attribute to an specific item
+ * @param tableName
+ * @param attributeName
+ * @param attrType
+ * @param itemNumber
+ */
+ public void addAttribute(String tableName, String attributeName, String attrType, int itemNumber) {
+ // selecting table
+ List<Map<String, String>> items = getOrCreateTable(tableName);
+ // add attribute to item
+ HashMap<String, String> itemAttribs = getOrCreateItemAttribs(items, itemNumber);
+ itemAttribs.put(attributeName, attrType);
+ //items.add(itemAttribs);
+ // add item to table
+ //tablesToItems.put(tableName, items);
+ }
+
+ /**
+ * Method to verify whether or not the schemas have been initialized
+ * @return
+ */
+ private String verifyAllKeySchemas(){
+
+ String wrongTable = "";
+ // if there are not tables defined
+ if (tablesToItems.isEmpty()) return "";
+ for(String tableName : tablesToItems.keySet()){
+ // if there are not schemas defined
+ if (tablesToKeySchemas.isEmpty()) return "";
+ if (!verifyKeySchema(tableName)) return "";
+ }
+ return wrongTable;
+ }
+
+ /**
+ * Verifies is a table has a key schema defined
+ * @param tableName Table name to determine which key schema to obtain
+ * @return
+ */
+ private boolean verifyKeySchema(String tableName){
+ KeySchema kSchema = tablesToKeySchemas.get(tableName);
+
+ if (kSchema == null)
+ return false;
- KeySchemaElement rangeKey = kSchema.getRangeKeyElement();
- KeySchemaElement hashKey = kSchema.getHashKeyElement();
- // A range key must have a hash key as well
- if (rangeKey != null){
- if (hashKey != null)
- return true;
- else
- return false;
- }
- // A hash key may exist by itself
- if (hashKey != null)
- return true;
- return false;
- }
-
- /**
- * Constructs the DynamoDBMapping object
- * @return A newly constructed mapping.
- */
- public DynamoDBMapping build() {
-
- if (tableName == null) throw new IllegalStateException("tableName is not specified");
-
- // verifying items for at least a table
- if (tablesToItems.isEmpty()) throw new IllegalStateException("No tables");
-
- // verifying if key schemas have been properly defined
- String wrongTableName = verifyAllKeySchemas();
- if (!wrongTableName.equals("")) throw new IllegalStateException("no key schemas defined for table " + wrongTableName);
-
- // Return the tableDescription and all the attributes needed
- return new DynamoDBMapping(tablesToItems,tablesToKeySchemas, tablesToPrTh);
- }
+ KeySchemaElement rangeKey = kSchema.getRangeKeyElement();
+ KeySchemaElement hashKey = kSchema.getHashKeyElement();
+ // A range key must have a hash key as well
+ if (rangeKey != null){
+ if (hashKey != null)
+ return true;
+ else
+ return false;
+ }
+ // A hash key may exist by itself
+ if (hashKey != null)
+ return true;
+ return false;
+ }
+
+ /**
+ * Constructs the DynamoDBMapping object
+ * @return A newly constructed mapping.
+ */
+ public DynamoDBMapping build() {
+
+ if (tableName == null) throw new IllegalStateException("tableName is not specified");
+
+ // verifying items for at least a table
+ if (tablesToItems.isEmpty()) throw new IllegalStateException("No tables");
+
+ // verifying if key schemas have been properly defined
+ String wrongTableName = verifyAllKeySchemas();
+ if (!wrongTableName.equals("")) throw new IllegalStateException("no key schemas defined for table " + wrongTableName);
+
+ // Return the tableDescription and all the attributes needed
+ return new DynamoDBMapping(tablesToItems,tablesToKeySchemas, tablesToPrTh);
+ }
}
}