/**
* Upload the files in parallel.
*/
private void uploadFiles(String container, List<BlobDetail> blobDetails)
throws InterruptedException, ExecutionException {
ListeningExecutorService executor = MoreExecutors.listeningDecorator(newFixedThreadPool(THREADS));
List<ListenableFuture<BlobDetail>> blobUploaderFutures = Lists.newArrayList();
BlobUploaderCallback blobUploaderCallback = new BlobUploaderCallback();
try {
for (BlobDetail blobDetail: blobDetails) {
BlobUploader blobUploader = new BlobUploader(container, blobDetail);
ListenableFuture<BlobDetail> blobDetailFuture = executor.submit(blobUploader);
blobUploaderFutures.add(blobDetailFuture);
Futures.addCallback(blobDetailFuture, blobUploaderCallback);
}
ListenableFuture<List<BlobDetail>> future = Futures.successfulAsList(blobUploaderFutures);
List<BlobDetail> uploadedBlobDetails = future.get(); // begin the upload
System.out.format("%n");
for (int i = 0; i < uploadedBlobDetails.size(); i++) {
if (uploadedBlobDetails.get(i) != null) {
BlobDetail blobDetail = uploadedBlobDetails.get(i);
System.out.format(" %s (eTag: %s)%n", blobDetail.getRemoteBlobName(), blobDetail.getETag());
}
else {
System.out.format(" %s (ERROR)%n", blobDetails.get(i).getLocalFile().getAbsolutePath());
}
}
}
finally {
executor.shutdown();
}
}