package com.amazon.aws.demo.s3; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; import android.util.Log; import com.amazon.aws.demo.AWSDemo; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.Bucket; import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.S3ObjectSummary; public class S3 { private static AmazonS3 s3 = null; private static ObjectListing objListing = null; public static final String BUCKET_NAME = "_bucket_name"; public static final String OBJECT_NAME = "_object_name"; static { System.setProperty("org.xml.sax.driver","org.xmlpull.v1.sax2.Driver"); try { XMLReader reader = XMLReaderFactory.createXMLReader(); } catch ( SAXException e ) { Log.e( "SAXException", e.getMessage() ); } } public static AmazonS3 getInstance() { if ( s3 == null ) { s3 = new AmazonS3Client( AWSDemo.credentials ); } return s3; } public static List<String> getBucketNames() { List buckets = getInstance().listBuckets(); List<String> bucketNames = new ArrayList<String>( buckets.size() ); Iterator<Bucket> bIter = buckets.iterator(); while(bIter.hasNext()){ bucketNames.add((bIter.next().getName())); } return bucketNames; } public static List<String> getObjectNamesForBucket( String bucketName ) { ObjectListing objects = getInstance().listObjects( bucketName ); objListing = objects; List<String> objectNames = new ArrayList<String>( objects.getObjectSummaries().size() ); Iterator<S3ObjectSummary> oIter = objects.getObjectSummaries().iterator(); while(oIter.hasNext()){ objectNames.add(oIter.next().getKey()); } return objectNames; } public static List<String> getObjectNamesForBucket( String bucketName , int numItems) { ListObjectsRequest req= new ListObjectsRequest(); req.setMaxKeys(new Integer(numItems)); req.setBucketName(bucketName); ObjectListing objects = getInstance().listObjects( req ); objListing = objects; List<String> objectNames = new ArrayList<String>( objects.getObjectSummaries().size()); Iterator<S3ObjectSummary> oIter = objects.getObjectSummaries().iterator(); while(oIter.hasNext()){ objectNames.add(oIter.next().getKey()); } return objectNames; } public static List<String> getMoreObjectNamesForBucket() { try{ ObjectListing objects = getInstance().listNextBatchOfObjects(objListing); objListing = objects; List<String> objectNames = new ArrayList<String>( objects.getObjectSummaries().size()); Iterator<S3ObjectSummary> oIter = objects.getObjectSummaries().iterator(); while(oIter.hasNext()){ objectNames.add(oIter.next().getKey()); } return objectNames; } catch (NullPointerException e){ return new ArrayList<String>(); } } public static void createBucket( String bucketName ) { getInstance().createBucket( bucketName ); } public static void deleteBucket( String bucketName ) { getInstance().deleteBucket( bucketName ); } public static void createObjectForBucket( String bucketName, String objectName, String data ) { try { ByteArrayInputStream bais = new ByteArrayInputStream( data.getBytes() ); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength( data.getBytes().length ); getInstance().putObject(bucketName, objectName, bais, metadata ); } catch ( Exception exception ) { Log.e( "TODO", "createObjectForBucket" ); } } public static void deleteObject( String bucketName, String objectName ) { getInstance().deleteObject( bucketName, objectName ); } public static String getDataForObject( String bucketName, String objectName ) { return read( getInstance().getObject( bucketName, objectName ).getObjectContent() ); } protected static String read( InputStream stream ) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream( 8196 ); byte[] buffer = new byte[1024]; int length = 0; while ( ( length = stream.read( buffer ) ) > 0 ) { baos.write( buffer, 0, length ); } return baos.toString(); } catch ( Exception exception ) { return exception.getMessage(); } } }