package com.neverwinterdp.scribengin.storage.s3; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import com.amazonaws.services.s3.model.GetObjectRequest; 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.PutObjectRequest; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3ObjectSummary; public class S3Folder { private S3Client s3Client ; private String bucketName; private String folderPath; public S3Folder(S3Client s3Client, String bucketName, String folderPath) { this.s3Client = s3Client; this.bucketName = bucketName; if("/".equals(folderPath)) folderPath = ""; this.folderPath = folderPath; } public S3Client getS3Client() { return s3Client; } public String getBucketName() { return bucketName; } public String getFolderPath() { return folderPath; } public void create(String name, byte[] data, String mimeType) { InputStream is = new ByteArrayInputStream(data); create(name, is, mimeType); } public void create(String name, InputStream is, String mimeType) { ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType(mimeType); create(name, is, metadata); } public void create(String name, InputStream is, ObjectMetadata metadata) { s3Client.getAmazonS3Client().putObject(new PutObjectRequest(bucketName, toKey(name), is, metadata)); } public S3Folder createFolder(String name) { return s3Client.createS3Folder(bucketName, name) ; } public List<String> getChildrenNames() { List<String> holder = new ArrayList<String>() ; for(S3ObjectSummary sel : getChildren()) { String name = sel.getKey().substring(folderPath.length() + 1); holder.add(name); } return holder; } public List<S3ObjectSummary> getChildren() { ListObjectsRequest request = new ListObjectsRequest().withBucketName(bucketName).withPrefix(folderPath + "/").withDelimiter("/"); ObjectListing objectListing = s3Client.getAmazonS3Client().listObjects(request); return objectListing.getObjectSummaries() ; } public List<S3ObjectSummary> getDescendants() { ListObjectsRequest request = new ListObjectsRequest().withBucketName(bucketName).withPrefix(folderPath + "/"); ObjectListing objectListing = s3Client.getAmazonS3Client().listObjects(request); return objectListing.getObjectSummaries(); } public S3Folder getS3Folder(String name) { return new S3Folder(s3Client, bucketName, toKey(name)); } public void createObject(String name, byte[] data, ObjectMetadata metadata) throws IOException { s3Client.createObject(bucketName, toKey(name), data, metadata); } public void createObject(String name, InputStream is, ObjectMetadata metadata) throws IOException { s3Client.createObject(bucketName, toKey(name), is, metadata); } public void updateObjectMetadata(String name, ObjectMetadata metadata) throws IOException { s3Client.updateObjectMetadata(bucketName, toKey(name), metadata); } public S3ObjectWriter createObjectWriter(String name, ObjectMetadata metadata) throws IOException { S3ObjectWriter writer = new S3ObjectWriter(s3Client, bucketName, toKey(name), metadata); return writer; } public S3Object getS3Object(String name) { S3Object object = s3Client.getAmazonS3Client().getObject(new GetObjectRequest(bucketName, toKey(name))); return object; } String toKey(String name) { return folderPath + "/" + name; } public String toString() { return bucketName + ":" + folderPath; } }