Repository: jclouds-labs-aws Updated Branches: refs/heads/master 3bc840e67 -> 8e924e737
JCLOUDS-457: Add getBlob operation Now the BlobStore abstraction supports the getBlob Operation Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/commit/8e924e73 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/tree/8e924e73 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/diff/8e924e73 Branch: refs/heads/master Commit: 8e924e737fc8e5eef1225b6e0aaf080ac04e6b2e Parents: 3bc840e Author: Roman Coedo <[email protected]> Authored: Wed Jul 23 23:53:09 2014 +0200 Committer: Andrew Gaul <[email protected]> Committed: Sat Jul 26 22:40:46 2014 -0700 ---------------------------------------------------------------------- .../glacier/blobstore/GlacierBlobStore.java | 33 +++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/8e924e73/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java ---------------------------------------------------------------------- diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java index 546abc1..f8a4f2a 100644 --- a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java +++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java @@ -16,6 +16,7 @@ */ package org.jclouds.glacier.blobstore; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import java.util.Set; @@ -23,8 +24,11 @@ import java.util.Set; import org.jclouds.blobstore.BlobStoreContext; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.domain.BlobMetadata; +import org.jclouds.blobstore.domain.MutableBlobMetadata; import org.jclouds.blobstore.domain.PageSet; import org.jclouds.blobstore.domain.StorageMetadata; +import org.jclouds.blobstore.domain.internal.BlobImpl; +import org.jclouds.blobstore.domain.internal.MutableBlobMetadataImpl; import org.jclouds.blobstore.internal.BaseBlobStore; import org.jclouds.blobstore.options.CreateContainerOptions; import org.jclouds.blobstore.options.GetOptions; @@ -38,6 +42,8 @@ import org.jclouds.glacier.GlacierClient; import org.jclouds.glacier.blobstore.functions.PaginatedVaultCollectionToStorageMetadata; import org.jclouds.glacier.blobstore.strategy.MultipartUploadStrategy; import org.jclouds.glacier.blobstore.strategy.PollingStrategy; +import org.jclouds.glacier.domain.ArchiveRetrievalJobRequest; +import org.jclouds.glacier.util.ContentRange; import org.jclouds.javax.annotation.Nullable; import com.google.common.base.Supplier; @@ -119,9 +125,34 @@ public class GlacierBlobStore extends BaseBlobStore { throw new UnsupportedOperationException(); } + private ArchiveRetrievalJobRequest buildArchiveRetrievalRequest(String key, GetOptions getOptions) { + ArchiveRetrievalJobRequest.Builder requestBuilder = ArchiveRetrievalJobRequest.builder().archiveId(key); + if (getOptions != null) { + checkArgument(getOptions.getRanges().size() <= 1); + if (getOptions.getRanges().size() == 1) { + requestBuilder.range(ContentRange.fromString(getOptions.getRanges().get(0))); + } + } + return requestBuilder.build(); + } + @Override public Blob getBlob(String container, String key, GetOptions getOptions) { - throw new UnsupportedOperationException(); + String jobId = sync.initiateJob(container, buildArchiveRetrievalRequest(key, getOptions)); + try { + if (pollingStrategy.get().waitForSuccess(container, jobId)) { + MutableBlobMetadata blobMetadata = new MutableBlobMetadataImpl(); + blobMetadata.setContainer(container); + blobMetadata.setName(key); + + Blob blob = new BlobImpl(blobMetadata); + blob.setPayload(sync.getJobOutput(container, jobId)); + return blob; + } + return null; + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } @Override
