package edu.harvard.mcb.leschziner.load;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
import org.jets3t.service.S3Service;
import org.jets3t.service.S3ServiceException;
import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.model.S3Object;
import edu.harvard.mcb.leschziner.aws.DefaultCredentials;
import edu.harvard.mcb.leschziner.core.Particle;
import edu.harvard.mcb.leschziner.distributed.DistributedProcessingTask;
import edu.harvard.mcb.leschziner.storage.DefaultStorageEngine;
public class ImageUploaderTask extends DistributedProcessingTask {
/**
*
*/
private static final long serialVersionUID = 6858185730174280848L;
private final Particle target;
private final String targetBucket;
private final String imageQueueName;
public ImageUploaderTask(Particle particle,
String targetBucket,
String imageQueueName,
String executorName) {
super(executorName);
target = particle;
this.targetBucket = targetBucket;
this.imageQueueName = imageQueueName;
}
@Override public void process() {
// Generate a UUID for the object
UUID uuid = UUID.randomUUID();
// Get the output queue
BlockingQueue<String> outputQueue = DefaultStorageEngine.getStorageEngine()
.getQueue(imageQueueName);
// Prep the particle for putting
try {
String filename = uuid.toString() + ".png";
S3Object object = new S3Object(filename, target.toPng());
// Connect to S3
S3Service s3Service = new RestS3Service(DefaultCredentials.getAwsCredentials());
s3Service.putObject(targetBucket, object);
outputQueue.add("https://s3.amazonaws.com/"
+ targetBucket
+ "/"
+ filename);
} catch (NoSuchAlgorithmException | IOException e) {
markError("Unable to serialize particle", e, 37);
} catch (S3ServiceException e) {
markError("Unable to Connect to S3", e, 40);
}
}
}