You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2014/07/27 07:44:04 UTC

git commit: JCLOUDS-457: Add getBlob operation

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 <ro...@gmail.com>
Authored: Wed Jul 23 23:53:09 2014 +0200
Committer: Andrew Gaul <ga...@apache.org>
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