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);