package com.amazon.aws.demo.sdb; import android.util.Log; import com.amazon.aws.demo.AWSDemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.amazonaws.services.simpledb.AmazonSimpleDB; import com.amazonaws.services.simpledb.AmazonSimpleDBClient; import com.amazonaws.services.simpledb.model.Attribute; import com.amazonaws.services.simpledb.model.CreateDomainRequest; import com.amazonaws.services.simpledb.model.DeleteAttributesRequest; import com.amazonaws.services.simpledb.model.DeleteDomainRequest; import com.amazonaws.services.simpledb.model.GetAttributesRequest; import com.amazonaws.services.simpledb.model.GetAttributesResult; import com.amazonaws.services.simpledb.model.Item; import com.amazonaws.services.simpledb.model.ListDomainsRequest; import com.amazonaws.services.simpledb.model.ListDomainsResult; import com.amazonaws.services.simpledb.model.PutAttributesRequest; import com.amazonaws.services.simpledb.model.ReplaceableAttribute; import com.amazonaws.services.simpledb.model.SelectRequest; public class SimpleDB { private static AmazonSimpleDB sdb = null; private static String nextToken = null; private static int prevNumDomains = 0; public static final String DOMAIN_NAME = "_domain_name"; public static AmazonSimpleDB getInstance() { if ( sdb == null ) { sdb = new AmazonSimpleDBClient( AWSDemo.credentials ); sdb.setEndpoint( "https://sdb.amazonaws.com:443" ); } return sdb; } public static List<String> getDomainNames() { return getInstance().listDomains().getDomainNames(); } public static List<String> getDomainNames(int numDomains) { prevNumDomains = numDomains; return getDomainNames(numDomains, null); } private static List<String> getDomainNames(int numDomains, String nextToken) { ListDomainsRequest req = new ListDomainsRequest(); req.setMaxNumberOfDomains(numDomains); if(nextToken != null) req.setNextToken(nextToken); ListDomainsResult result = getInstance().listDomains(req); List domains = result.getDomainNames(); SimpleDB.nextToken = result.getNextToken(); return domains; } public static List<String> getMoreDomainNames() { if(nextToken == null) { return new ArrayList<String>(); } else { return getDomainNames(prevNumDomains, nextToken); } } public static void createDomain( String domainName ) { getInstance().createDomain( new CreateDomainRequest( domainName ) ); } public static void deleteDomain( String domainName ) { getInstance().deleteDomain( new DeleteDomainRequest( domainName ) ); } public static void createItem( String domainName, String itemName ) { List<ReplaceableAttribute> attributes = new ArrayList<ReplaceableAttribute>(1); attributes.add( new ReplaceableAttribute().withName( "Name").withValue( "Value") ); getInstance().putAttributes( new PutAttributesRequest( domainName, itemName, attributes ) ); } public static void createAttributeForItem( String domainName, String itemName, String attributeName, String attributeValue ) { List<ReplaceableAttribute> attributes = new ArrayList<ReplaceableAttribute>(1); attributes.add( new ReplaceableAttribute().withName( attributeName ).withValue( attributeValue ).withReplace( true ) ); getInstance().putAttributes( new PutAttributesRequest( domainName, itemName, attributes ) ); } public static String[] getItemNamesForDomain( String domainName ) { SelectRequest selectRequest = new SelectRequest( "select itemName() from `" + domainName + "`" ).withConsistentRead( true ); List items = getInstance().select( selectRequest ).getItems(); String[] itemNames = new String[ items.size() ]; for ( int i = 0; i < items.size(); i++ ) { itemNames[ i ] = ((Item)items.get( i )).getName(); } return itemNames; } public static HashMap<String,String> getAttributesForItem( String domainName, String itemName ) { GetAttributesRequest getRequest = new GetAttributesRequest( domainName, itemName ).withConsistentRead( true ); GetAttributesResult getResult = getInstance().getAttributes( getRequest ); HashMap<String,String> attributes = new HashMap<String,String>(30); for ( Object attribute : getResult.getAttributes() ) { String name = ((Attribute)attribute).getName(); String value = ((Attribute)attribute).getValue(); attributes.put( name, value ); } return attributes; } public static void updateAttributesForItem( String domainName, String itemName, HashMap<String,String> attributes ) { List<ReplaceableAttribute> replaceableAttributes = new ArrayList<ReplaceableAttribute>( attributes.size() ); for ( String attributeName : attributes.keySet() ) { replaceableAttributes.add( new ReplaceableAttribute().withName( attributeName ).withValue( attributes.get( attributeName ) ).withReplace( true ) ); } getInstance().putAttributes( new PutAttributesRequest( domainName, itemName, replaceableAttributes ) ); } public static void deleteItem( String domainName, String itemName ) { getInstance().deleteAttributes( new DeleteAttributesRequest( domainName, itemName ) ); } public static void deleteItemAttribute( String domainName, String itemName, String attributeName ) { getInstance().deleteAttributes( new DeleteAttributesRequest( domainName, itemName ).withAttributes( new Attribute[] { new Attribute().withName( attributeName ) } ) ); } }