Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ AwsCredentials.properties
target/
*.iml
.gradle
build/
build/
*.log
out
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AWS SDK for Java Sample Project
# AWS SDK for Java 'Improved' Sample Project

A simple Java application illustrating usage of the AWS SDK for Java.

Expand Down Expand Up @@ -46,7 +46,7 @@ Maven:

Gradle:

gradlew clean build run
gradlew clean build runS3Example runSQSExample


When you start making your own buckets, the S3 documentation provides a good overview
Expand Down
22 changes: 18 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
apply plugin: 'java'
apply plugin: 'application'

mainClassName="com.amazonaws.samples.S3Sample"
apply plugin: 'idea'
//apply plugin: 'eclipse'
//apply plugin: 'application'

repositories {
mavenCentral()
}

dependencies {
compile 'com.amazonaws:aws-java-sdk:1.9.6'
}
compile 'com.amazonaws:amazon-sqs-java-extended-client-lib:1.0.1'
compile 'log4j:log4j:1.2.17'
}

task(runS3Example, dependsOn: 'classes', type: JavaExec) {
main = 'com.amazonaws.samples.S3Sample'
classpath = sourceSets.main.runtimeClasspath
}

task(runSQSExample, dependsOn: 'classes', type: JavaExec) {
main = 'com.amazonaws.samples.SQSExtendedClientExample'
classpath = sourceSets.main.runtimeClasspath
}

defaultTasks 'runS3Example', 'runSQSExample'
16 changes: 13 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,24 @@
<version>1.2.1</version>
<executions>
<execution>
<id>first-execution</id>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.amazonaws.samples.S3Sample</mainClass>
</configuration>
</execution>
<execution>
<id>second-execution</id>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.amazonaws.samples.SQSExtendedClientExample</mainClass>
</configuration>
</execution>
</executions>
<configuration>
<mainClass>com.amazonaws.samples.S3Sample</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Expand Down
183 changes: 183 additions & 0 deletions src/main/java/com/amazonaws/samples/S3TestUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
package com.amazonaws.samples;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.*;
import java.util.Arrays;
import java.util.Iterator;

/**
* Requires that you created a file ~/.aws/credentials
*/
public class S3TestUtil
{
private static final AmazonS3 s3;
private static final Region usWest2;
private static final DefaultAWSCredentialsProviderChain credentialProviderChain;
private static TransferManager tx;

static {
s3 = new AmazonS3Client();
usWest2 = Region.getRegion(Regions.US_WEST_2);
s3.setRegion(usWest2);
credentialProviderChain = new DefaultAWSCredentialsProviderChain();
}

public static AmazonS3 getS3() {
return s3;
}

public static void deleteEntireBucket(String bucket_name) {
System.out.println("Deleting S3 bucket: " + bucket_name);
try {
System.out.println(" - removing objects from bucket");
ObjectListing object_listing = s3.listObjects(bucket_name);
while (true) {
for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext(); ) {
S3ObjectSummary summary = (S3ObjectSummary) iterator.next();
s3.deleteObject(bucket_name, summary.getKey());
}
if (object_listing.isTruncated()) {
object_listing = s3.listNextBatchOfObjects(object_listing);
} else {
break;
}
}

System.out.println(" - removing versions from bucket");
VersionListing version_listing = s3.listVersions(new ListVersionsRequest().withBucketName(bucket_name));
while (true) {
for (Iterator<?> iterator = version_listing.getVersionSummaries().iterator(); iterator.hasNext(); ) {
S3VersionSummary vs = (S3VersionSummary) iterator.next();
s3.deleteVersion(bucket_name, vs.getKey(), vs.getVersionId());
}
if (version_listing.isTruncated()) {
version_listing = s3.listNextBatchOfVersions(version_listing);
} else {
break;
}
}
s3.deleteBucket(bucket_name);
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
System.out.println("Done removing bucket: " + bucket_name);
}

public static void copyEntireBucket(String src_bucket, String dest_bucket) {
System.out.println("Copying S3 bucket '" + src_bucket + "' to destination '" + dest_bucket + "' ...");
try {
System.out.println(" - copying objects from bucket");
ObjectListing object_listing = s3.listObjects(src_bucket);
while (true) {
for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext(); ) {
S3ObjectSummary summary = (S3ObjectSummary) iterator.next();
s3.copyObject(src_bucket, summary.getKey(), dest_bucket, summary.getKey());
}
if (object_listing.isTruncated()) {
object_listing = s3.listNextBatchOfObjects(object_listing);
} else {
break;
}
}
//System.out.println(" - copying versions from bucket");
//VersionListing version_listing = s3.listVersions(new ListVersionsRequest().withBucketName(src_bucket));
//while (true) {
// for (Iterator<?> iterator = version_listing.getVersionSummaries().iterator(); iterator.hasNext(); ) {
// S3VersionSummary vs = (S3VersionSummary) iterator.next();
// String key = vs.getKey();
// String ver = vs.getVersionId();
// // how??
// }
// if (version_listing.isTruncated()) {
// version_listing = s3.listNextBatchOfVersions(version_listing);
// } else {
// break;
// }
//}
//s3.deleteBucket(src_bucket);
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
System.out.println("Done copying bucket '" + src_bucket + "' to new bucket '" + dest_bucket + "'");
}

public static File createTmpFile() {
File tempTestFile = null;
try {
tempTestFile = File.createTempFile("aws-java-sdk-copy-test-", ".txt");
tempTestFile.deleteOnExit();

Writer writer = new OutputStreamWriter(new FileOutputStream(tempTestFile));
writer.write("abcdefghijklmnopqrstuvwxyz\n");
writer.write("01234567890112345678901234\n");
writer.write("!@#$%^&*()-=[]{};':',.<>/?\n");
writer.write("01234567890112345678901234\n");
writer.write("abcdefghijklmnopqrstuvwxyz\n");
writer.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
return tempTestFile;
}

public static void createExpiringBucket(String name) {
BucketLifecycleConfiguration.Rule bucketExpirationRule =
new BucketLifecycleConfiguration.Rule()
.withId("RULE: Delete bucket after 1 day")
.withExpirationInDays(1) // expiration date must be midnight GMT and is effectively GMT-8, or around 4pm
.withStatus(BucketLifecycleConfiguration.ENABLED.toString());

BucketLifecycleConfiguration configuration =
new BucketLifecycleConfiguration()
.withRules(Arrays.asList(bucketExpirationRule));

boolean bucketMissing = !bucketExists(name);

if (bucketMissing) {
System.out.println("Creating 10 minute bucket " + name + "\n");
s3.createBucket(name);
s3.setBucketLifecycleConfiguration(name, configuration);
}
}

public static boolean bucketExists(String name) {
for (Bucket bucket : s3.listBuckets()) {
if (bucket.getName().equals(name)) {
return true;
}
}
return false;
}

public static void showAllBuckets() {
for (Bucket bucket : s3.listBuckets()) {
System.out.println("bucket: " + bucket.getName());
}
}

public static void uploadTmpFileToBucket(String bucketName, File fileKey) {
System.out.println("Uploading a file to bucket " + bucketName);
tx = new TransferManager(credentialProviderChain.getCredentials());

Upload myUpload = tx.upload(bucketName, fileKey.getName(), fileKey);

try {
myUpload.waitForCompletion();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (tx != null) tx.shutdownNow();
}

}
43 changes: 43 additions & 0 deletions src/main/java/com/amazonaws/samples/S3TransferExample.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.amazonaws.samples;

import java.io.*;
import java.util.UUID;

public class S3TransferExample
{
private static File fileKey1;
private static File fileKey2;
private static String sourceBucket;
private static String destinationBucket;

public static void main(String[] args) {
createSourceAndDestinationBuckets("test-bucket-" + UUID.randomUUID());
fileKey1 = S3TestUtil.createTmpFile();
S3TestUtil.uploadTmpFileToBucket(sourceBucket, fileKey1);
fileKey2 = S3TestUtil.createTmpFile();
S3TestUtil.uploadTmpFileToBucket(sourceBucket, fileKey2);
copyBucketToNewLocation();
S3TestUtil.showAllBuckets();
//deleteTestBucketsNow();
}

private static void copyBucketToNewLocation() {
System.out.println("Copying bucket " + sourceBucket + " to new bucket " + destinationBucket);
//CopyObjectResult copyObjectResult = S3TestUtil.getS3().copyObject(sourceBucket, fileKey1.getName(), destinationBucket, fileKey1.getName());
S3TestUtil.copyEntireBucket(sourceBucket, destinationBucket);
}

public static void createSourceAndDestinationBuckets(String name)
{
sourceBucket = name;
destinationBucket = name + "-dest";
if (!S3TestUtil.bucketExists(sourceBucket)) S3TestUtil.createExpiringBucket(sourceBucket);
if (!S3TestUtil.bucketExists(destinationBucket)) S3TestUtil.createExpiringBucket(destinationBucket);
}

public static void deleteTestBucketsNow() {
S3TestUtil.deleteEntireBucket(sourceBucket);
S3TestUtil.deleteEntireBucket(destinationBucket);
}

}
Loading