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/10 06:27:38 UTC

jclouds-labs-google git commit: JCLOUDS-651: GCS copy object content metadata

Repository: jclouds-labs-google
Updated Branches:
  refs/heads/master 8d867feba -> 60e26da23


JCLOUDS-651: GCS copy object content metadata


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/commit/60e26da2
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/tree/60e26da2
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/diff/60e26da2

Branch: refs/heads/master
Commit: 60e26da23c2772e0e905a61f65621db9e5d17f41
Parents: 8d867fe
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Apr 9 21:25:21 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Apr 9 21:27:05 2015 -0700

----------------------------------------------------------------------
 .../blobstore/GoogleCloudStorageBlobStore.java  | 57 +++++++++++++++-----
 1 file changed, 44 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/60e26da2/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
index 7ef2daf..dcc1d5a 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java
@@ -23,7 +23,6 @@ import static org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Obj
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Set;
-import java.util.Map;
 
 import javax.inject.Inject;
 
@@ -66,6 +65,7 @@ import org.jclouds.googlecloudstorage.domain.templates.ObjectAccessControlsTempl
 import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
 import org.jclouds.googlecloudstorage.options.ListObjectOptions;
 import org.jclouds.http.HttpResponseException;
+import org.jclouds.io.ContentMetadata;
 import org.jclouds.io.Payload;
 
 import com.google.common.base.Charsets;
@@ -305,16 +305,47 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore {
       return false;
    }
 
-    @Override
-    public String copyBlob(String fromContainer, String fromName, String toContainer, String toName, CopyOptions options) {
-
-        if (options == CopyOptions.NONE) {
-           return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName).etag();
-        } else {
-            Map<String, String> map = options.getUserMetadata().get();
-            String contentType = api.getObjectApi().getObject(fromContainer, fromName).contentType();
-            ObjectTemplate template = new ObjectTemplate().customMetadata(map).contentType(contentType);
-            return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName, template).etag();
-        }
-    }
+   @Override
+   public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
+         CopyOptions options) {
+      if (!options.getContentMetadata().isPresent() && !options.getUserMetadata().isPresent()) {
+         return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName).etag();
+      }
+
+      ObjectTemplate template = new ObjectTemplate();
+
+      if (options.getContentMetadata().isPresent()) {
+         ContentMetadata contentMetadata = options.getContentMetadata().get();
+
+         String contentDisposition = contentMetadata.getContentDisposition();
+         if (contentDisposition != null) {
+            template.contentDisposition(contentDisposition);
+         }
+
+         // TODO: causes failures with subsequent GET operations:
+         // HTTP/1.1 failed with response: HTTP/1.1 503 Service Unavailable; content: [Service Unavailable]
+/*
+         String contentEncoding = contentMetadata.getContentEncoding();
+         if (contentEncoding != null) {
+            template.contentEncoding(contentEncoding);
+         }
+*/
+
+         String contentLanguage = contentMetadata.getContentLanguage();
+         if (contentLanguage != null) {
+            template.contentLanguage(contentLanguage);
+         }
+
+         String contentType = contentMetadata.getContentType();
+         if (contentType != null) {
+            template.contentType(contentType);
+         }
+      }
+
+      if (options.getUserMetadata().isPresent()) {
+         template.customMetadata(options.getUserMetadata().get());
+      }
+
+      return api.getObjectApi().copyObject(toContainer, toName, fromContainer, fromName, template).etag();
+   }
 }