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 2015/04/03 00:40:48 UTC

[2/4] jclouds git commit: JCLOUDS-651: Add Azure server-side copyBlob

JCLOUDS-651: Add Azure server-side copyBlob


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/31369ae5
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/31369ae5
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/31369ae5

Branch: refs/heads/master
Commit: 31369ae59058da5ba0331f79f3576c112e22414f
Parents: 3cf8abc
Author: Andrew Gaul <ga...@apache.org>
Authored: Tue Mar 31 11:36:26 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Apr 2 15:36:53 2015 -0700

----------------------------------------------------------------------
 .../azureblob/blobstore/AzureBlobStore.java     | 29 ++++++++++++++++++++
 1 file changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/31369ae5/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
index 9144700..ccd31b5 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
@@ -19,7 +19,9 @@ package org.jclouds.azureblob.blobstore;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.jclouds.azure.storage.options.ListOptions.Builder.includeMetadata;
 
+import java.net.URI;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.inject.Inject;
@@ -38,6 +40,7 @@ import org.jclouds.azureblob.blobstore.strategy.MultipartUploadStrategy;
 import org.jclouds.azureblob.domain.ContainerProperties;
 import org.jclouds.azureblob.domain.ListBlobBlocksResponse;
 import org.jclouds.azureblob.domain.PublicAccess;
+import org.jclouds.azureblob.options.CopyBlobOptions;
 import org.jclouds.azureblob.options.ListBlobsOptions;
 import org.jclouds.blobstore.BlobStoreContext;
 import org.jclouds.blobstore.domain.Blob;
@@ -49,6 +52,7 @@ import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
 import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
 import org.jclouds.blobstore.internal.BaseBlobStore;
+import org.jclouds.blobstore.options.CopyOptions;
 import org.jclouds.blobstore.options.CreateContainerOptions;
 import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.blobstore.options.PutOptions;
@@ -58,6 +62,7 @@ import org.jclouds.domain.Location;
 import org.jclouds.http.options.GetOptions;
 
 import com.google.common.base.Function;
+import com.google.common.base.Optional;
 import com.google.common.base.Supplier;
 import com.google.common.collect.Iterables;
 import org.jclouds.io.Payload;
@@ -215,6 +220,30 @@ public class AzureBlobStore extends BaseBlobStore {
       return putBlob(container, blob);
    }
 
+   @Override
+   public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
+         CopyOptions options) {
+      CopyBlobOptions.Builder azureOptions = CopyBlobOptions.builder();
+
+      Optional<Map<String, String>> userMetadata = options.getUserMetadata();
+      if (userMetadata.isPresent()) {
+         azureOptions.overrideUserMetadata(userMetadata.get());
+      }
+
+      URI source = context.getSigner().signGetBlob(fromContainer, fromName).getEndpoint();
+      sync.copyBlob(source, toContainer, toName, azureOptions.build());
+
+      String eTag = sync.getBlobProperties(toContainer, toName).getETag();
+
+      // TODO: Azure does not allow updating system metadata during copy - call SetBlobProperties (not yet implemented)
+      // TODO: content disposition
+      // TODO: content encoding
+      // TODO: content language
+      // TODO: content type
+
+      return eTag;
+   }
+
    /**
     * This implementation invokes {@link AzureBlobClient#deleteObject}
     *