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/09 08:21:46 UTC

[16/16] jclouds git commit: JCLOUDS-651: portable copy object content metadata

JCLOUDS-651: portable copy object content metadata


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

Branch: refs/heads/1.9.x
Commit: 0647ba8c5506a506dde9cadb2db3cb7013afb1be
Parents: 3f2e9f3
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Apr 6 17:51:17 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Apr 8 23:13:54 2015 -0700

----------------------------------------------------------------------
 .../blobstore/config/LocalBlobStore.java        | 31 ++++++++++++++++----
 .../jclouds/blobstore/options/CopyOptions.java  | 16 ++++++++++
 .../internal/BaseBlobIntegrationTest.java       | 22 ++++++++++----
 3 files changed, 58 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/0647ba8c/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index 2e1b636..6da6f1f 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -511,15 +511,36 @@ public final class LocalBlobStore implements BlobStore {
          is = blob.getPayload().openStream();
          ContentMetadata metadata = blob.getMetadata().getContentMetadata();
          BlobBuilder.PayloadBlobBuilder builder = blobBuilder(toName)
-               .payload(is)
-               .contentDisposition(metadata.getContentDisposition())
-               .contentEncoding(metadata.getContentEncoding())
-               .contentLanguage(metadata.getContentLanguage())
-               .contentType(metadata.getContentType());
+               .payload(is);
          Long contentLength = metadata.getContentLength();
          if (contentLength != null) {
             builder.contentLength(contentLength);
          }
+
+         if (options.getContentMetadata().isPresent()) {
+            ContentMetadata contentMetadata = options.getContentMetadata().get();
+            String contentDisposition = contentMetadata.getContentDisposition();
+            if (contentDisposition != null) {
+               builder.contentDisposition(contentDisposition);
+            }
+            String contentEncoding = contentMetadata.getContentEncoding();
+            if (contentEncoding != null) {
+               builder.contentEncoding(contentEncoding);
+            }
+            String contentLanguage = contentMetadata.getContentLanguage();
+            if (contentLanguage != null) {
+               builder.contentLanguage(contentLanguage);
+            }
+            String contentType = contentMetadata.getContentType();
+            if (contentType != null) {
+               builder.contentType(contentType);
+            }
+         } else {
+            builder.contentDisposition(metadata.getContentDisposition())
+                   .contentEncoding(metadata.getContentEncoding())
+                   .contentLanguage(metadata.getContentLanguage())
+                   .contentType(metadata.getContentType());
+         }
          Optional<Map<String, String>> userMetadata = options.getUserMetadata();
          if (userMetadata.isPresent()) {
             builder.userMetadata(userMetadata.get());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0647ba8c/blobstore/src/main/java/org/jclouds/blobstore/options/CopyOptions.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/options/CopyOptions.java b/blobstore/src/main/java/org/jclouds/blobstore/options/CopyOptions.java
index 8886da7..4084cf9 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/options/CopyOptions.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/options/CopyOptions.java
@@ -17,8 +17,12 @@
 
 package org.jclouds.blobstore.options;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.util.Map;
 
+import org.jclouds.io.ContentMetadata;
+
 import com.google.common.annotations.Beta;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableMap;
@@ -27,12 +31,18 @@ import com.google.common.collect.ImmutableMap;
 public final class CopyOptions {
    public static final CopyOptions NONE = builder().build();
 
+   private final Optional<ContentMetadata> contentMetadata;
    private final Optional<Map<String, String>> userMetadata;
 
    private CopyOptions(Builder builder) {
+      this.contentMetadata = Optional.fromNullable(builder.contentMetadata);
       this.userMetadata = Optional.fromNullable(builder.userMetadata);
    }
 
+   public Optional<ContentMetadata> getContentMetadata() {
+      return contentMetadata;
+   }
+
    public Optional<Map<String, String>> getUserMetadata() {
       return userMetadata;
    }
@@ -42,11 +52,17 @@ public final class CopyOptions {
    }
 
    public static class Builder {
+      ContentMetadata contentMetadata;
       Map<String, String> userMetadata;
 
       Builder() {
       }
 
+      public Builder contentMetadata(ContentMetadata contentMetadata) {
+         this.contentMetadata = checkNotNull(contentMetadata, "contentMetadata");
+         return this;
+      }
+
       public Builder userMetadata(Map<String, String> userMetadata) {
          this.userMetadata = ImmutableMap.copyOf(userMetadata);
          return this;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0647ba8c/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
index 12e83c3..23de246 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
@@ -62,6 +62,7 @@ import org.jclouds.blobstore.options.PutOptions;
 import org.jclouds.crypto.Crypto;
 import org.jclouds.encryption.internal.JCECrypto;
 import org.jclouds.http.HttpResponseException;
+import org.jclouds.io.ContentMetadataBuilder;
 import org.jclouds.io.Payload;
 import org.jclouds.io.Payloads;
 import org.jclouds.io.payloads.ByteSourcePayload;
@@ -777,7 +778,11 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
             .blobBuilder(fromName)
             .userMetadata(ImmutableMap.of("key1", "value1", "key2", "value2"))
             .payload(payload)
-            .contentLength(payload.size());
+            .contentLength(payload.size())
+            .contentDisposition("attachment; filename=original.jpg")
+            .contentEncoding("compress")
+            .contentLanguage("fr")
+            .contentType("audio/ogg");
       addContentMetadata(blobBuilder);
       Blob blob = blobBuilder.build();
 
@@ -786,8 +791,15 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
       try {
          blobStore.putBlob(fromContainer, blob);
          Map<String, String> userMetadata = ImmutableMap.of("key3", "value3", "key4", "value4");
-         blobStore.copyBlob(fromContainer, fromName, toContainer, toName,
-               CopyOptions.builder().userMetadata(userMetadata).build());
+         blobStore.copyBlob(fromContainer, fromName, toContainer, toName, CopyOptions.builder()
+               .contentMetadata(ContentMetadataBuilder.create()
+                     .contentType("text/csv")
+                     .contentDisposition("attachment; filename=photo.jpg")
+                     .contentEncoding("gzip")
+                     .contentLanguage("en")
+                     .build())
+               .userMetadata(userMetadata)
+               .build());
          Blob toBlob = blobStore.getBlob(toContainer, toName);
          InputStream is = null;
          try {
@@ -796,9 +808,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
          } finally {
             Closeables2.closeQuietly(is);
          }
-         // TODO: S3 overrideMetadataWith also overrides system metadata
-         // TODO: Swift does not preserve system metadata
-         //checkContentMetadata(toBlob);
+         checkContentMetadata(toBlob);
          checkUserMetadata(toBlob.getMetadata().getUserMetadata(), userMetadata);
       } finally {
          returnContainer(toContainer);