package detective.task.aws;
import groovy.lang.Closure;
import java.util.ArrayList;
import java.util.List;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import detective.core.Detective;
import detective.core.Parameters;
import detective.core.TestTask;
import detective.task.AbstractTask;
/**
* Get information from a S3 bucket, prefix is optional.
*
* @author James Luo
*
*/
public class S3ListTask extends AbstractTask implements TestTask{
@Override
protected void doExecute(Parameters config, Parameters output) {
String bucketName = this.readAsString(config, "aws.s3.bucketName", null, false, "aws.s3.bucketName not present in config");
String prefix = this.readAsString(config, "aws.s3.list.prefix", null, false, "aws.s3.list.prefix not present");
AmazonS3 client = new AmazonS3Client(AwsUtils.getCredentialProviderC(config), AwsUtils.getClientConfig(config));
client.setRegion(AwsUtils.getRegion(config));
ListObjectsRequest listObjectsRequest =
new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix);
List<S3ObjectSummary> summarys = new ArrayList<S3ObjectSummary>();
ObjectListing objectListing;
do {
objectListing = client.listObjects(listObjectsRequest);
summarys.addAll(objectListing.getObjectSummaries());
String marker = objectListing.getNextMarker();
listObjectsRequest.setMarker(marker);
Detective.info("Reading from S3...current marker:" + marker + " Continue..." );
} while (objectListing.isTruncated());
output.put("s3ObjectSummaries", summarys);
}
public static S3ListTask s3ListTask(Closure<? extends Object> cl){
return new S3ListTask();
}
}