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 2016/01/17 02:15:16 UTC

[1/7] jclouds git commit: JCLOUDS-948: Azure Cache-Control support

Repository: jclouds
Updated Branches:
  refs/heads/master 8bddbb496 -> 688890819


JCLOUDS-948: Azure Cache-Control support

References JCLOUDS-185.


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

Branch: refs/heads/master
Commit: 01e10bba6692f3904199305d50fea76f5658014e
Parents: 77d3db0
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Jan 14 16:18:18 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 15 04:41:01 2016 -0800

----------------------------------------------------------------------
 .../storage/reference/AzureStorageHeaders.java  |  1 +
 ...BindAzureBlobMetadataToMultipartRequest.java |  4 ++
 .../binders/BindAzureBlobMetadataToRequest.java |  6 +++
 .../BindAzureContentMetadataToRequest.java      |  5 ++
 .../azureblob/blobstore/AzureBlobStore.java     |  5 ++
 .../domain/internal/BlobPropertiesImpl.java     |  1 +
 .../jclouds/azureblob/AzureBlobClientTest.java  | 56 ++++++++++++++++++++
 7 files changed, 78 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/01e10bba/providers/azureblob/src/main/java/org/jclouds/azure/storage/reference/AzureStorageHeaders.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azure/storage/reference/AzureStorageHeaders.java b/providers/azureblob/src/main/java/org/jclouds/azure/storage/reference/AzureStorageHeaders.java
index 9521e37..37adc2c 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azure/storage/reference/AzureStorageHeaders.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azure/storage/reference/AzureStorageHeaders.java
@@ -23,6 +23,7 @@ package org.jclouds.azure.storage.reference;
  */
 public final class AzureStorageHeaders {
 
+   public static final String CACHE_CONTROL = "x-ms-blob-cache-control";
    public static final String CONTENT_DISPOSITION = "x-ms-blob-content-disposition";
    public static final String CONTENT_ENCODING = "x-ms-blob-content-encoding";
    public static final String CONTENT_LANGUAGE = "x-ms-blob-content-language";

http://git-wip-us.apache.org/repos/asf/jclouds/blob/01e10bba/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java
index dcf6aaf..969a3c2 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java
@@ -55,6 +55,10 @@ public class BindAzureBlobMetadataToMultipartRequest implements Binder {
       // bind BlockList-specific headers
       ImmutableMap.Builder<String, String> headers = ImmutableMap.builder();
       ContentMetadata contentMetadata = blob.getProperties().getContentMetadata();
+      String cacheControl = contentMetadata.getCacheControl();
+      if (cacheControl != null) {
+         headers.put("x-ms-blob-cache-control", cacheControl);
+      }
       String contentDisposition = contentMetadata.getContentDisposition();
       if (contentDisposition != null) {
          headers.put("x-ms-blob-content-disposition", contentDisposition);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/01e10bba/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java
index 2a258d1..6a6904e 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java
@@ -22,6 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
+import org.jclouds.azure.storage.reference.AzureStorageHeaders;
 import org.jclouds.azureblob.blobstore.functions.AzureBlobToBlob;
 import org.jclouds.azureblob.domain.AzureBlob;
 import org.jclouds.blobstore.binders.BindUserMetadataToHeadersWithPrefix;
@@ -57,6 +58,11 @@ public class BindAzureBlobMetadataToRequest implements Binder {
 
       Builder<String, String> headers = ImmutableMap.builder();
 
+      String cacheControl = blob.getPayload().getContentMetadata().getCacheControl();
+      if (cacheControl != null) {
+         headers.put(AzureStorageHeaders.CACHE_CONTROL, cacheControl);
+      }
+
       headers.put("x-ms-blob-type", blob.getProperties().getType().toString());
 
       String contentDisposition = blob.getPayload().getContentMetadata().getContentDisposition();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/01e10bba/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureContentMetadataToRequest.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureContentMetadataToRequest.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureContentMetadataToRequest.java
index 6568e4d..2a57775 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureContentMetadataToRequest.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureContentMetadataToRequest.java
@@ -45,6 +45,11 @@ public class BindAzureContentMetadataToRequest implements Binder {
 
       ImmutableMap.Builder<String, String> headers = ImmutableMap.builder();
 
+      String cacheControl = contentMetadata.getCacheControl();
+      if (cacheControl != null) {
+         headers.put(AzureStorageHeaders.CACHE_CONTROL, cacheControl);
+      }
+
       String contentDisposition = contentMetadata.getContentDisposition();
       if (contentDisposition != null) {
          headers.put(AzureStorageHeaders.CONTENT_DISPOSITION, contentDisposition);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/01e10bba/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 6029b95..d2cb8ed 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
@@ -249,6 +249,11 @@ public class AzureBlobStore extends BaseBlobStore {
       if (contentMetadata.isPresent()) {
          ContentMetadataBuilder builder = ContentMetadataBuilder.create();
 
+         String cacheControl = contentMetadata.get().getCacheControl();
+         if (cacheControl != null) {
+            builder.cacheControl(cacheControl);
+         }
+
          String contentDisposition = contentMetadata.get().getContentDisposition();
          if (contentDisposition != null) {
             builder.contentDisposition(contentDisposition);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/01e10bba/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/BlobPropertiesImpl.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/BlobPropertiesImpl.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/BlobPropertiesImpl.java
index 29868d3..27866db 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/BlobPropertiesImpl.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/domain/internal/BlobPropertiesImpl.java
@@ -46,6 +46,7 @@ public class BlobPropertiesImpl implements BlobProperties {
    private final LeaseStatus leaseStatus;
    private final BaseImmutableContentMetadata contentMetadata;
 
+   // TODO: should this take Cache-Control as well?
    public BlobPropertiesImpl(BlobType type, String name, String container, URI url, Date lastModified, String eTag,
             long size, String contentType, @Nullable byte[] contentMD5, @Nullable String contentMetadata,
             @Nullable String contentLanguage, @Nullable Date currentExpires, LeaseStatus leaseStatus, 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/01e10bba/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java
index 48300d2..c6fa723 100644
--- a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java
+++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java
@@ -26,11 +26,13 @@ import java.net.URI;
 import java.util.Date;
 import java.util.Map;
 
+import org.jclouds.ContextBuilder;
 import org.jclouds.Fallbacks.TrueOnNotFoundOr404;
 import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
 import org.jclouds.azure.storage.filters.SharedKeyLiteAuthentication;
 import org.jclouds.azure.storage.options.ListOptions;
 import org.jclouds.azureblob.AzureBlobFallbacks.FalseIfContainerAlreadyExists;
+import org.jclouds.azureblob.domain.AzureBlob;
 import org.jclouds.azureblob.domain.PublicAccess;
 import org.jclouds.azureblob.functions.ParseBlobFromHeadersAndHttpContent;
 import org.jclouds.azureblob.functions.ParseContainerPropertiesFromHeaders;
@@ -48,6 +50,8 @@ import org.jclouds.http.functions.ParseSax;
 import org.jclouds.http.functions.ReleasePayloadAndReturn;
 import org.jclouds.http.functions.ReturnTrueIf2xx;
 import org.jclouds.http.options.GetOptions;
+import org.jclouds.io.ContentMetadata;
+import org.jclouds.io.ContentMetadataBuilder;
 import org.jclouds.rest.internal.BaseRestAnnotationProcessingTest;
 import org.jclouds.rest.internal.GeneratedHttpRequest;
 import org.testng.annotations.Test;
@@ -60,6 +64,13 @@ import com.google.common.reflect.Invokable;
 @Test(groups = "unit", testName = "AzureBlobClientTest")
 public class AzureBlobClientTest extends BaseRestAnnotationProcessingTest<AzureBlobClient> {
 
+   private static AzureBlobClient getAzureBlobClient() {
+      return ContextBuilder
+            .newBuilder("azureblob")
+            .credentials("accessKey", "secretKey")
+            .buildApi(AzureBlobClient.class);
+   }
+
    public void testListContainers() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(AzureBlobClient.class, "listContainers", ListOptions[].class);
       GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of());
@@ -278,6 +289,30 @@ public class AzureBlobClientTest extends BaseRestAnnotationProcessingTest<AzureB
       assertFallbackClassEquals(method, null);
    }
 
+   public void testPutBlob() throws Exception {
+      Invokable<?, ?> method = method(AzureBlobClient.class, "putBlob", String.class, AzureBlob.class);
+      String payload = "payload";
+      String cacheControl = "max-age=3600";
+      AzureBlob object = getAzureBlobClient().newBlob();
+      object.setPayload(payload);
+      object.getProperties().setName("blob");
+      object.getProperties().getContentMetadata().setCacheControl(cacheControl);
+      object.getProperties().getContentMetadata().setContentLength(7L);
+      GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of("container", object));
+
+      assertRequestLineEquals(request, "PUT https://identity.blob.core.windows.net/container/blob HTTP/1.1");
+      assertNonPayloadHeadersEqual(request,
+            "Expect: 100-continue\n" +
+            "x-ms-blob-cache-control: " + cacheControl + "\n" +
+            "x-ms-blob-type: BlockBlob\n" +
+            "x-ms-version: 2013-08-15\n");
+      assertPayloadEquals(request, payload, "application/unknown", false);
+
+      assertResponseParserClassEquals(method, request, ParseETagHeader.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+   }
+
    public void testGetBlob() throws SecurityException, NoSuchMethodException, IOException {
       Invokable<?, ?> method = method(AzureBlobClient.class, "getBlob", String.class, String.class, GetOptions[].class);
       GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of("container", "blob"));
@@ -307,6 +342,27 @@ public class AzureBlobClientTest extends BaseRestAnnotationProcessingTest<AzureB
       assertFallbackClassEquals(method, null);
    }
 
+   public void testSetBlobProperties() throws Exception {
+      String cacheControl = "max-age=3600";
+      ContentMetadata metadata = ContentMetadataBuilder.create()
+            .cacheControl(cacheControl)
+            .build();
+      Invokable<?, ?> method = method(AzureBlobClient.class, "setBlobProperties", String.class, String.class, ContentMetadata.class);
+      GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of("container", "blob", metadata));
+
+      assertRequestLineEquals(request,
+               "PUT https://identity.blob.core.windows.net/container/blob?comp=properties HTTP/1.1");
+      assertNonPayloadHeadersEqual(request,
+               "x-ms-blob-cache-control: " + cacheControl + "\n" +
+               "x-ms-blob-content-type: application/unknown\n" +
+               "x-ms-version: 2013-08-15\n");
+      assertPayloadEquals(request, null, null, false);
+
+      assertResponseParserClassEquals(method, request, ParseETagHeader.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+   }
+
    public void testCopyBlob() throws Exception {
       Invokable<?, ?> method = method(AzureBlobClient.class, "copyBlob", URI.class, String.class, String.class, CopyBlobOptions.class);
       GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(


[6/7] jclouds git commit: JCLOUDS-948: Swift Cache-Control support

Posted by ga...@apache.org.
JCLOUDS-948: Swift Cache-Control support

Not supported.


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

Branch: refs/heads/master
Commit: b63f74a6ebb025b5cdeca7b35dff08e03af2378b
Parents: f292408
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 15 03:54:05 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 15 13:22:15 2016 -0800

----------------------------------------------------------------------
 .../blobstore/integration/SwiftBlobIntegrationLiveTest.java | 9 +++++++++
 1 file changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/b63f74a6/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java b/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
index 6f62958..6440788 100644
--- a/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
+++ b/apis/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/integration/SwiftBlobIntegrationLiveTest.java
@@ -16,6 +16,7 @@
  */
 package org.jclouds.openstack.swift.v1.blobstore.integration;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
 
 import java.util.Properties;
@@ -68,6 +69,14 @@ public class SwiftBlobIntegrationLiveTest extends BaseBlobIntegrationTest {
       return 422;
    }
 
+   // not supported
+   @Override
+   protected void checkCacheControl(Blob blob, String cacheControl) {
+      assertThat(blob.getPayload().getContentMetadata().getCacheControl()).isNull();
+      assertThat(blob.getMetadata().getContentMetadata().getCacheControl()).isNull();
+   }
+
+   // not supported
    @Override
    protected void checkContentLanguage(Blob blob, String contentLanguage) {
       assert blob.getPayload().getContentMetadata().getContentLanguage() == null;


[2/7] jclouds git commit: JCLOUDS-948: Atmos Cache-Control support

Posted by ga...@apache.org.
JCLOUDS-948: Atmos Cache-Control support

Not supported.


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

Branch: refs/heads/master
Commit: 77d3db0058a0c16b8deb8b24bb9c6b111de1bea4
Parents: 5fd7b1a
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 15 04:12:32 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 15 04:41:01 2016 -0800

----------------------------------------------------------------------
 .../internal/DelegatingMutableContentMetadata.java       | 11 ++++++++++-
 .../blobstore/integration/AtmosIntegrationLiveTest.java  |  8 ++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/77d3db00/apis/atmos/src/main/java/org/jclouds/atmos/domain/internal/DelegatingMutableContentMetadata.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/domain/internal/DelegatingMutableContentMetadata.java b/apis/atmos/src/main/java/org/jclouds/atmos/domain/internal/DelegatingMutableContentMetadata.java
index 8e09ecb..eea8987 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/domain/internal/DelegatingMutableContentMetadata.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/domain/internal/DelegatingMutableContentMetadata.java
@@ -132,9 +132,13 @@ public class DelegatingMutableContentMetadata implements MutableContentMetadata
    }
 
    @Override
+   public void setCacheControl(String cacheControl) {
+      delegate.setCacheControl(cacheControl);
+   }
+
+   @Override
    public void setContentDisposition(String contentDisposition) {
       delegate.setContentDisposition(contentDisposition);
-
    }
 
    @Override
@@ -148,6 +152,11 @@ public class DelegatingMutableContentMetadata implements MutableContentMetadata
    }
 
    @Override
+   public String getCacheControl() {
+      return delegate.getCacheControl();
+   }
+
+   @Override
    public String getContentDisposition() {
       return delegate.getContentDisposition();
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/77d3db00/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
index ee2590d..f534787 100644
--- a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
+++ b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosIntegrationLiveTest.java
@@ -16,6 +16,7 @@
  */
 package org.jclouds.atmos.blobstore.integration;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.testng.Assert.assertEquals;
 
 import java.io.IOException;
@@ -78,6 +79,13 @@ public class AtmosIntegrationLiveTest extends BaseBlobIntegrationTest {
 
    // not supported
    @Override
+   protected void checkCacheControl(Blob blob, String cacheControl) {
+      assertThat(blob.getPayload().getContentMetadata().getCacheControl()).isNull();
+      assertThat(blob.getMetadata().getContentMetadata().getCacheControl()).isNull();
+   }
+
+   // not supported
+   @Override
    protected void checkContentDisposition(Blob blob, String contentDisposition) {
       assert blob.getPayload().getContentMetadata().getContentDisposition() == null;
       assert blob.getMetadata().getContentMetadata().getContentDisposition() == null;


[4/7] jclouds git commit: JCLOUDS-948: Filesystem Cache-Control support

Posted by ga...@apache.org.
JCLOUDS-948: Filesystem Cache-Control support


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

Branch: refs/heads/master
Commit: 82ad05e98eaab5e69d8a788b5a9162fdabfc78c9
Parents: 01e10bb
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 15 04:42:31 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 15 04:43:39 2016 -0800

----------------------------------------------------------------------
 .../strategy/internal/FilesystemStorageStrategyImpl.java        | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/82ad05e9/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
index 893d944..91750d5 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
@@ -95,6 +95,7 @@ import com.google.common.primitives.Longs;
  */
 public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
 
+   private static final String XATTR_CACHE_CONTROL = "user.cache-control";
    private static final String XATTR_CONTENT_DISPOSITION = "user.content-disposition";
    private static final String XATTR_CONTENT_ENCODING = "user.content-encoding";
    private static final String XATTR_CONTENT_LANGUAGE = "user.content-language";
@@ -326,6 +327,7 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
          byteSource = Files.asByteSource(file);
       }
       try {
+         String cacheControl = null;
          String contentDisposition = null;
          String contentEncoding = null;
          String contentLanguage = null;
@@ -338,6 +340,7 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
          if (view != null) {
             Set<String> attributes = ImmutableSet.copyOf(view.list());
 
+            cacheControl = readStringAttributeIfPresent(view, attributes, XATTR_CACHE_CONTROL);
             contentDisposition = readStringAttributeIfPresent(view, attributes, XATTR_CONTENT_DISPOSITION);
             contentEncoding = readStringAttributeIfPresent(view, attributes, XATTR_CONTENT_ENCODING);
             contentLanguage = readStringAttributeIfPresent(view, attributes, XATTR_CONTENT_LANGUAGE);
@@ -370,6 +373,7 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
             }
 
             builder.payload(byteSource)
+               .cacheControl(cacheControl)
                .contentDisposition(contentDisposition)
                .contentEncoding(contentEncoding)
                .contentLanguage(contentLanguage)
@@ -397,6 +401,7 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
 
    private void writeCommonMetadataAttr(UserDefinedFileAttributeView view, Blob blob) throws IOException {
       ContentMetadata metadata = blob.getMetadata().getContentMetadata();
+      writeStringAttributeIfPresent(view, XATTR_CACHE_CONTROL, metadata.getCacheControl());
       writeStringAttributeIfPresent(view, XATTR_CONTENT_DISPOSITION, metadata.getContentDisposition());
       writeStringAttributeIfPresent(view, XATTR_CONTENT_ENCODING, metadata.getContentEncoding());
       writeStringAttributeIfPresent(view, XATTR_CONTENT_LANGUAGE, metadata.getContentLanguage());


[7/7] jclouds git commit: Fix replacing metadata in BaseBlobStore

Posted by ga...@apache.org.
Fix replacing metadata in BaseBlobStore

Fixes Atmos errors.  Uncovered by removing unneeded addContentMetadata
call in BaseBlobIntegrationTest.testCopyBlobReplaceMetadata.


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

Branch: refs/heads/master
Commit: 688890819e05013209af3b2b43cfc021f6f3887f
Parents: b63f74a
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 15 04:13:04 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 15 13:22:15 2016 -0800

----------------------------------------------------------------------
 .../blobstore/internal/BaseBlobStore.java       | 21 +++++++++++++-------
 .../internal/BaseBlobIntegrationTest.java       |  1 -
 2 files changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/68889081/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
index 782d60b..3c14f5f 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
@@ -262,18 +262,25 @@ public abstract class BaseBlobStore implements BlobStore {
       InputStream is = null;
       try {
          is = blob.getPayload().openStream();
-         ContentMetadata metadata = blob.getMetadata().getContentMetadata();
          BlobBuilder.PayloadBlobBuilder builder = blobBuilder(toName)
-               .payload(is)
-               .cacheControl(metadata.getCacheControl())
+               .payload(is);
+         Long contentLength = blob.getMetadata().getContentMetadata().getContentLength();
+         if (contentLength != null) {
+            builder.contentLength(contentLength);
+         }
+
+         ContentMetadata metadata;
+         if (options.getContentMetadata().isPresent()) {
+            metadata = options.getContentMetadata().get();
+         } else {
+            metadata = blob.getMetadata().getContentMetadata();
+         }
+         builder.cacheControl(metadata.getCacheControl())
                .contentDisposition(metadata.getContentDisposition())
                .contentEncoding(metadata.getContentEncoding())
                .contentLanguage(metadata.getContentLanguage())
                .contentType(metadata.getContentType());
-         Long contentLength = metadata.getContentLength();
-         if (contentLength != null) {
-            builder.contentLength(contentLength);
-         }
+
          Optional<Map<String, String>> userMetadata = options.getUserMetadata();
          if (userMetadata.isPresent()) {
             builder.userMetadata(userMetadata.get());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/68889081/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 1732e67..479c174 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
@@ -906,7 +906,6 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
             .contentEncoding("compress")
             .contentLanguage("fr")
             .contentType("audio/ogg");
-      addContentMetadata(blobBuilder);
       Blob blob = blobBuilder.build();
 
       String fromContainer = getContainerName();


[3/7] jclouds git commit: JCLOUDS-948: Portable Cache-Control support

Posted by ga...@apache.org.
JCLOUDS-948: Portable Cache-Control support


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

Branch: refs/heads/master
Commit: 5fd7b1aa782399958e90ed9a16a3b20a0fc35d07
Parents: 8bddbb4
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Jan 14 15:52:46 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 15 04:41:01 2016 -0800

----------------------------------------------------------------------
 .../blobstore/config/LocalBlobStore.java        | 11 +++++++++-
 .../jclouds/blobstore/domain/BlobBuilder.java   |  2 ++
 .../domain/internal/BlobBuilderImpl.java        |  6 +++++
 .../blobstore/internal/BaseBlobStore.java       |  1 +
 .../internal/BaseBlobIntegrationTest.java       |  9 ++++++++
 .../main/java/org/jclouds/http/HttpUtils.java   |  8 +++++++
 .../java/org/jclouds/io/ContentMetadata.java    | 15 +++++++++++--
 .../org/jclouds/io/ContentMetadataBuilder.java  | 17 +++++++++++----
 .../org/jclouds/io/ContentMetadataCodec.java    |  7 +++++-
 .../org/jclouds/io/MutableContentMetadata.java  |  2 ++
 .../payloads/BaseImmutableContentMetadata.java  | 19 +++++++++++++++-
 .../io/payloads/BaseMutableContentMetadata.java | 23 ++++++++++++++++----
 .../java/org/jclouds/logging/internal/Wire.java |  1 +
 13 files changed, 108 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/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 06b3367..9c06f21 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -544,6 +544,10 @@ public final class LocalBlobStore implements BlobStore {
 
          if (options.getContentMetadata().isPresent()) {
             ContentMetadata contentMetadata = options.getContentMetadata().get();
+            String cacheControl = contentMetadata.getCacheControl();
+            if (cacheControl != null) {
+               builder.cacheControl(cacheControl);
+            }
             String contentDisposition = contentMetadata.getContentDisposition();
             if (contentDisposition != null) {
                builder.contentDisposition(contentDisposition);
@@ -561,7 +565,8 @@ public final class LocalBlobStore implements BlobStore {
                builder.contentType(contentType);
             }
          } else {
-            builder.contentDisposition(metadata.getContentDisposition())
+            builder.cacheControl(metadata.getCacheControl())
+                   .contentDisposition(metadata.getContentDisposition())
                    .contentEncoding(metadata.getContentEncoding())
                    .contentLanguage(metadata.getContentLanguage())
                    .contentType(metadata.getContentType());
@@ -782,6 +787,10 @@ public final class LocalBlobStore implements BlobStore {
             .userMetadata(mpu.blobMetadata().getUserMetadata())
             .payload(new SequenceInputStream(Iterators.asEnumeration(streams.build().iterator())))
             .contentLength(contentLength);
+      String cacheControl = mpu.blobMetadata().getContentMetadata().getCacheControl();
+      if (cacheControl != null) {
+         blobBuilder.cacheControl(cacheControl);
+      }
       String contentDisposition = mpu.blobMetadata().getContentMetadata().getContentDisposition();
       if (contentDisposition != null) {
          blobBuilder.contentDisposition(contentDisposition);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java b/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
index e2d4c62..5d0bb0f 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/domain/BlobBuilder.java
@@ -108,6 +108,8 @@ public interface BlobBuilder {
 
    public interface PayloadBlobBuilder extends BlobBuilder {
 
+      PayloadBlobBuilder cacheControl(String cacheControl);
+
       PayloadBlobBuilder contentLength(long contentLength);
 
       /** @deprecated use {@link #contentMD5(HashCode)} instead. */

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java b/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
index e6d94e1..e819001 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/domain/internal/BlobBuilderImpl.java
@@ -180,6 +180,12 @@ public class BlobBuilderImpl implements BlobBuilder {
       }
 
       @Override
+      public PayloadBlobBuilder cacheControl(String cacheControl) {
+         payload.getContentMetadata().setCacheControl(cacheControl);
+         return this;
+      }
+
+      @Override
       public PayloadBlobBuilder contentLength(long contentLength) {
          checkArgument(contentLength >= 0, "content length must be non-negative, was: %s", contentLength);
          payload.getContentMetadata().setContentLength(contentLength);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
index a608b18..782d60b 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/internal/BaseBlobStore.java
@@ -265,6 +265,7 @@ public abstract class BaseBlobStore implements BlobStore {
          ContentMetadata metadata = blob.getMetadata().getContentMetadata();
          BlobBuilder.PayloadBlobBuilder builder = blobBuilder(toName)
                .payload(is)
+               .cacheControl(metadata.getCacheControl())
                .contentDisposition(metadata.getContentDisposition())
                .contentEncoding(metadata.getContentEncoding())
                .contentLanguage(metadata.getContentLanguage())

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/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 0240602..1732e67 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
@@ -756,6 +756,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
    }
 
    protected void checkContentMetadata(Blob blob) {
+      checkCacheControl(blob, "max-age=3600");
       checkContentType(blob, "text/csv");
       checkContentDisposition(blob, "attachment; filename=photo.jpg");
       checkContentEncoding(blob, "gzip");
@@ -763,12 +764,18 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
    }
 
    protected void addContentMetadata(PayloadBlobBuilder blobBuilder) {
+      blobBuilder.cacheControl("max-age=3600");
       blobBuilder.contentType("text/csv");
       blobBuilder.contentDisposition("attachment; filename=photo.jpg");
       blobBuilder.contentEncoding("gzip");
       blobBuilder.contentLanguage("en");
    }
 
+   protected void checkCacheControl(Blob blob, String cacheControl) {
+      assertThat(blob.getPayload().getContentMetadata().getCacheControl()).isEqualTo(cacheControl);
+      assertThat(blob.getMetadata().getContentMetadata().getCacheControl()).isEqualTo(cacheControl);
+   }
+
    protected void checkContentType(Blob blob, String contentType) {
       assert blob.getPayload().getContentMetadata().getContentType().startsWith(contentType) : blob.getPayload()
                .getContentMetadata().getContentType();
@@ -893,6 +900,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
             .blobBuilder(fromName)
             .userMetadata(ImmutableMap.of("key1", "value1", "key2", "value2"))
             .payload(payload)
+            .cacheControl("max-age=1800")
             .contentLength(payload.size())
             .contentDisposition("attachment; filename=original.jpg")
             .contentEncoding("compress")
@@ -908,6 +916,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
          Map<String, String> userMetadata = ImmutableMap.of("key3", "value3", "key4", "value4");
          blobStore.copyBlob(fromContainer, fromName, toContainer, toName, CopyOptions.builder()
                .contentMetadata(ContentMetadataBuilder.create()
+                     .cacheControl("max-age=3600")
                      .contentType("text/csv")
                      .contentDisposition("attachment; filename=photo.jpg")
                      .contentEncoding("gzip")

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/http/HttpUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/HttpUtils.java b/core/src/main/java/org/jclouds/http/HttpUtils.java
index 5c026de..5b636a9 100644
--- a/core/src/main/java/org/jclouds/http/HttpUtils.java
+++ b/core/src/main/java/org/jclouds/http/HttpUtils.java
@@ -30,6 +30,7 @@ import static com.google.common.collect.Iterables.size;
 import static com.google.common.collect.Multimaps.filterKeys;
 import static com.google.common.io.BaseEncoding.base64;
 import static com.google.common.io.ByteStreams.toByteArray;
+import static com.google.common.net.HttpHeaders.CACHE_CONTROL;
 import static com.google.common.net.HttpHeaders.CONTENT_DISPOSITION;
 import static com.google.common.net.HttpHeaders.CONTENT_ENCODING;
 import static com.google.common.net.HttpHeaders.CONTENT_LANGUAGE;
@@ -168,6 +169,7 @@ public class HttpUtils {
    }
 
    public static void copy(ContentMetadata fromMd, MutableContentMetadata toMd) {
+      toMd.setCacheControl(fromMd.getCacheControl());
       toMd.setContentLength(fromMd.getContentLength());
       toMd.setContentMD5(fromMd.getContentMD5());
       toMd.setContentType(fromMd.getContentType());
@@ -190,6 +192,8 @@ public class HttpUtils {
             logger.debug("%s %s: %s", prefix, header.getKey(), header.getValue());
       }
       if (message.getPayload() != null) {
+         if (message.getPayload().getContentMetadata().getCacheControl() != null)
+            logger.debug("%s %s: %s", prefix, CACHE_CONTROL, message.getPayload().getContentMetadata().getCacheControl());
          if (message.getPayload().getContentMetadata().getContentType() != null)
             logger.debug("%s %s: %s", prefix, CONTENT_TYPE, message.getPayload().getContentMetadata().getContentType());
          if (message.getPayload().getContentMetadata().getContentLength() != null)
@@ -221,6 +225,10 @@ public class HttpUtils {
 
    public void checkRequestHasRequiredProperties(HttpRequest message) {
       checkArgument(
+            message.getPayload() == null || message.getFirstHeaderOrNull(CACHE_CONTROL) == null,
+            "configuration error please use request.getPayload().getContentMetadata().setCacheControl(value) as opposed to adding a cache control header: %s",
+                  message);
+      checkArgument(
             message.getPayload() == null || message.getFirstHeaderOrNull(CONTENT_TYPE) == null,
             "configuration error please use request.getPayload().getContentMetadata().setContentType(value) as opposed to adding a content type header: %s",
                   message);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/io/ContentMetadata.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/ContentMetadata.java b/core/src/main/java/org/jclouds/io/ContentMetadata.java
index 316567e..382d6b5 100644
--- a/core/src/main/java/org/jclouds/io/ContentMetadata.java
+++ b/core/src/main/java/org/jclouds/io/ContentMetadata.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.jclouds.io;
+import static com.google.common.net.HttpHeaders.CACHE_CONTROL;
 import static com.google.common.net.HttpHeaders.CONTENT_DISPOSITION;
 import static com.google.common.net.HttpHeaders.CONTENT_ENCODING;
 import static com.google.common.net.HttpHeaders.CONTENT_LANGUAGE;
@@ -32,13 +33,23 @@ import com.google.common.hash.HashCode;
 import com.google.common.collect.ImmutableSet;
 
 public interface ContentMetadata {
-   Set<String> HTTP_HEADERS = ImmutableSet.of(CONTENT_LENGTH, CONTENT_MD5, CONTENT_TYPE,
-            CONTENT_DISPOSITION, CONTENT_ENCODING, CONTENT_LANGUAGE, EXPIRES);
+   Set<String> HTTP_HEADERS = ImmutableSet.of(
+         CACHE_CONTROL,
+         CONTENT_LENGTH,
+         CONTENT_MD5,
+         CONTENT_TYPE,
+         CONTENT_DISPOSITION,
+         CONTENT_ENCODING,
+         CONTENT_LANGUAGE,
+         EXPIRES);
 
    // See http://stackoverflow.com/questions/10584647/simpledateformat-parse-is-one-hour-out-using-rfc-1123-gmt-in-summer
    // for why not using "zzz"
    String RFC1123_DATE_PATTERN = "EEE, dd MMM yyyyy HH:mm:ss Z";
    
+   @Nullable
+   String getCacheControl();
+
    /**
     * Returns the total size of the payload, or the chunk that's available.
     * <p/>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/io/ContentMetadataBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/ContentMetadataBuilder.java b/core/src/main/java/org/jclouds/io/ContentMetadataBuilder.java
index 48d3eff..c63e052 100644
--- a/core/src/main/java/org/jclouds/io/ContentMetadataBuilder.java
+++ b/core/src/main/java/org/jclouds/io/ContentMetadataBuilder.java
@@ -31,6 +31,7 @@ public class ContentMetadataBuilder {
       return new ContentMetadataBuilder();
    }
 
+   protected String cacheControl;
    protected String contentType = "application/unknown";
    protected Long contentLength;
    protected HashCode contentMD5;
@@ -39,6 +40,11 @@ public class ContentMetadataBuilder {
    protected String contentEncoding;
    protected Date expires;
 
+   public ContentMetadataBuilder cacheControl(@Nullable String cacheControl) {
+      this.cacheControl = cacheControl;
+      return this;
+   }
+
    public ContentMetadataBuilder contentLength(@Nullable Long contentLength) {
       this.contentLength = contentLength;
       return this;
@@ -85,13 +91,14 @@ public class ContentMetadataBuilder {
    }
 
    public ContentMetadata build() {
-      return new BaseImmutableContentMetadata(contentType, contentLength,
+      return new BaseImmutableContentMetadata(cacheControl, contentType, contentLength,
                contentMD5 == null ? null : contentMD5.asBytes(), contentDisposition,
                contentLanguage, contentEncoding, expires);
    }
 
    public static ContentMetadataBuilder fromContentMetadata(ContentMetadata in) {
-      return new ContentMetadataBuilder().contentType(in.getContentType()).contentLength(in.getContentLength())
+      return new ContentMetadataBuilder()
+               .cacheControl(in.getCacheControl()).contentType(in.getContentType()).contentLength(in.getContentLength())
                .contentMD5(in.getContentMD5()).contentDisposition(in.getContentDisposition()).contentLanguage(
                         in.getContentLanguage()).contentEncoding(in.getContentEncoding()).expires(in.getExpires());
    }
@@ -111,7 +118,8 @@ public class ContentMetadataBuilder {
       if (getClass() != obj.getClass())
          return false;
       ContentMetadataBuilder other = (ContentMetadataBuilder) obj;
-      return Objects.equal(contentDisposition, other.contentDisposition) &&
+      return Objects.equal(cacheControl, other.cacheControl) &&
+             Objects.equal(contentDisposition, other.contentDisposition) &&
              Objects.equal(contentEncoding, other.contentEncoding) &&
              Objects.equal(contentLanguage, other.contentLanguage) &&
              Objects.equal(contentLength, other.contentLength) &&
@@ -122,7 +130,8 @@ public class ContentMetadataBuilder {
 
    @Override
    public String toString() {
-      return "[contentDisposition=" + contentDisposition + ", contentEncoding=" + contentEncoding
+      return "[cacheControl=" + cacheControl
+               + ", contentDisposition=" + contentDisposition + ", contentEncoding=" + contentEncoding
                + ", contentLanguage=" + contentLanguage + ", contentLength=" + contentLength + ", contentMD5="
                + contentMD5 + ", contentType=" + contentType + ", expires=" + expires + "]";
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java b/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java
index 5bc607d..05de972 100644
--- a/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java
+++ b/core/src/main/java/org/jclouds/io/ContentMetadataCodec.java
@@ -18,6 +18,7 @@ package org.jclouds.io;
 
 import static com.google.common.collect.Iterables.any;
 import static com.google.common.io.BaseEncoding.base64;
+import static com.google.common.net.HttpHeaders.CACHE_CONTROL;
 import static com.google.common.net.HttpHeaders.CONTENT_DISPOSITION;
 import static com.google.common.net.HttpHeaders.CONTENT_ENCODING;
 import static com.google.common.net.HttpHeaders.CONTENT_LANGUAGE;
@@ -85,6 +86,8 @@ public interface ContentMetadataCodec {
       @Override
       public Multimap<String, String> toHeaders(ContentMetadata md) {
          Builder<String, String> builder = ImmutableMultimap.builder();
+         if (md.getCacheControl() != null)
+            builder.put(CACHE_CONTROL, md.getCacheControl());
          if (md.getContentType() != null)
             builder.put(CONTENT_TYPE, md.getContentType());
          if (md.getContentDisposition() != null)
@@ -111,7 +114,9 @@ public interface ContentMetadataCodec {
             }
          });
          for (Entry<String, String> header : headers.entries()) {
-            if (!chunked && CONTENT_LENGTH.equalsIgnoreCase(header.getKey())) {
+            if (CACHE_CONTROL.equalsIgnoreCase(header.getKey())) {
+               contentMetadata.setCacheControl(header.getValue());
+            } else if (!chunked && CONTENT_LENGTH.equalsIgnoreCase(header.getKey())) {
                contentMetadata.setContentLength(Long.valueOf(header.getValue()));
             } else if (CONTENT_MD5.equalsIgnoreCase(header.getKey())) {
                contentMetadata.setContentMD5(base64().decode(header.getValue()));

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/io/MutableContentMetadata.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/MutableContentMetadata.java b/core/src/main/java/org/jclouds/io/MutableContentMetadata.java
index 6efa771..6fb0a74 100644
--- a/core/src/main/java/org/jclouds/io/MutableContentMetadata.java
+++ b/core/src/main/java/org/jclouds/io/MutableContentMetadata.java
@@ -24,6 +24,8 @@ import com.google.common.hash.HashCode;
 
 public interface MutableContentMetadata extends ContentMetadata {
 
+   void setCacheControl(@Nullable String cacheControl);
+
    void setContentLength(@Nullable Long contentLength);
 
    /** @deprecated use {@link #setContentMD5(HashCode)} instead. */

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/io/payloads/BaseImmutableContentMetadata.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/payloads/BaseImmutableContentMetadata.java b/core/src/main/java/org/jclouds/io/payloads/BaseImmutableContentMetadata.java
index 9624717..8578687 100644
--- a/core/src/main/java/org/jclouds/io/payloads/BaseImmutableContentMetadata.java
+++ b/core/src/main/java/org/jclouds/io/payloads/BaseImmutableContentMetadata.java
@@ -26,6 +26,7 @@ import com.google.common.hash.HashCode;
 
 public class BaseImmutableContentMetadata implements ContentMetadata {
 
+   protected String cacheControl;
    protected String contentType;
    protected Long contentLength;
    protected HashCode contentMD5;
@@ -34,8 +35,15 @@ public class BaseImmutableContentMetadata implements ContentMetadata {
    protected String contentEncoding;
    protected Date expires;
 
+   @Deprecated
    public BaseImmutableContentMetadata(String contentType, Long contentLength, byte[] contentMD5,
             String contentDisposition, String contentLanguage, String contentEncoding, Date expires) {
+      this(null, contentType, contentLength, contentMD5, contentDisposition, contentLanguage, contentEncoding, expires);
+   }
+
+   public BaseImmutableContentMetadata(String cacheControl, String contentType, Long contentLength, byte[] contentMD5,
+            String contentDisposition, String contentLanguage, String contentEncoding, Date expires) {
+      this.cacheControl = cacheControl;
       this.contentType = contentType;
       this.contentLength = contentLength;
       this.contentMD5 = contentMD5 == null ? null : HashCode.fromBytes(contentMD5);
@@ -45,6 +53,11 @@ public class BaseImmutableContentMetadata implements ContentMetadata {
       this.expires = expires;
    }
 
+   @Override
+   public String getCacheControl() {
+      return cacheControl;
+   }
+
    /**
     * {@inheritDoc}
     */
@@ -108,7 +121,8 @@ public class BaseImmutableContentMetadata implements ContentMetadata {
 
    @Override
    public String toString() {
-      return "[contentType=" + contentType + ", contentLength=" + contentLength + ", contentDisposition="
+      return "[cacheControl=" + cacheControl
+               + "contentType=" + contentType + ", contentLength=" + contentLength + ", contentDisposition="
                + contentDisposition + ", contentEncoding=" + contentEncoding + ", contentLanguage=" + contentLanguage
                + ", contentMD5=" + contentMD5 + ", expires = " + expires + "]";
    }
@@ -128,6 +142,9 @@ public class BaseImmutableContentMetadata implements ContentMetadata {
       if (getClass() != obj.getClass())
          return false;
       BaseImmutableContentMetadata other = (BaseImmutableContentMetadata) obj;
+      if (!Objects.equal(cacheControl, other.cacheControl)) {
+         return false;
+      }
       if (contentDisposition == null) {
          if (other.contentDisposition != null)
             return false;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/io/payloads/BaseMutableContentMetadata.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/payloads/BaseMutableContentMetadata.java b/core/src/main/java/org/jclouds/io/payloads/BaseMutableContentMetadata.java
index 33e1793..5fd2880 100644
--- a/core/src/main/java/org/jclouds/io/payloads/BaseMutableContentMetadata.java
+++ b/core/src/main/java/org/jclouds/io/payloads/BaseMutableContentMetadata.java
@@ -27,6 +27,16 @@ import com.google.common.hash.HashCode;
 
 public class BaseMutableContentMetadata extends ContentMetadataBuilder implements MutableContentMetadata {
 
+   @Override
+   public String getCacheControl() {
+      return cacheControl;
+   }
+
+   @Override
+   public void setCacheControl(@Nullable String cacheControl) {
+      cacheControl(cacheControl);
+   }
+
    /**
     * {@inheritDoc}
     */
@@ -154,9 +164,14 @@ public class BaseMutableContentMetadata extends ContentMetadataBuilder implement
    }
 
    public static BaseMutableContentMetadata fromContentMetadata(ContentMetadata in) {
-      return (BaseMutableContentMetadata) new BaseMutableContentMetadata().contentType(in.getContentType())
-               .contentLength(in.getContentLength()).contentMD5(in.getContentMD5()).contentDisposition(
-                        in.getContentDisposition()).contentLanguage(in.getContentLanguage()).contentEncoding(
-                        in.getContentEncoding()).expires(in.getExpires());
+      return (BaseMutableContentMetadata) new BaseMutableContentMetadata()
+               .cacheControl(in.getCacheControl())
+               .contentDisposition(in.getContentDisposition())
+               .contentEncoding(in.getContentEncoding())
+               .contentLanguage(in.getContentLanguage())
+               .contentLength(in.getContentLength())
+               .contentMD5(in.getContentMD5())
+               .contentType(in.getContentType())
+               .expires(in.getExpires());
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/5fd7b1aa/core/src/main/java/org/jclouds/logging/internal/Wire.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/logging/internal/Wire.java b/core/src/main/java/org/jclouds/logging/internal/Wire.java
index 8c20c2d..b58a680 100644
--- a/core/src/main/java/org/jclouds/logging/internal/Wire.java
+++ b/core/src/main/java/org/jclouds/logging/internal/Wire.java
@@ -159,6 +159,7 @@ public abstract class Wire {
       MutableContentMetadata wiredMd = wiredPayload.getContentMetadata();
       if (oldMd.getContentLength() != null)
          wiredMd.setContentLength(oldMd.getContentLength());
+      wiredMd.setCacheControl(oldMd.getCacheControl());
       wiredMd.setContentType(oldMd.getContentType());
       wiredMd.setContentMD5(oldMd.getContentMD5());
       wiredMd.setContentDisposition(oldMd.getContentDisposition());


[5/7] jclouds git commit: JCLOUDS-948: S3 Cache-Control support

Posted by ga...@apache.org.
JCLOUDS-948: S3 Cache-Control support

Deprecate older S3-specific Cache-Control mechanism.


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

Branch: refs/heads/master
Commit: f292408af4f9700fdde3f35c45a97cfb64793319
Parents: 82ad05e
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Jan 15 04:18:52 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Jan 15 13:22:14 2016 -0800

----------------------------------------------------------------------
 .../s3/binders/BindObjectMetadataToRequest.java      |  4 ++--
 .../s3/binders/BindS3ObjectMetadataToRequest.java    |  6 ------
 .../java/org/jclouds/s3/blobstore/S3BlobStore.java   |  5 +++++
 .../org/jclouds/s3/domain/MutableObjectMetadata.java |  3 +++
 .../java/org/jclouds/s3/domain/ObjectMetadata.java   |  3 +++
 .../org/jclouds/s3/domain/ObjectMetadataBuilder.java |  4 +---
 .../domain/internal/MutableObjectMetadataImpl.java   | 10 ++++++----
 .../org/jclouds/s3/options/CopyObjectOptions.java    | 15 +++++++++++++++
 .../binders/BindS3ObjectMetadataToRequestTest.java   |  3 +--
 9 files changed, 36 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/binders/BindObjectMetadataToRequest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/binders/BindObjectMetadataToRequest.java b/apis/s3/src/main/java/org/jclouds/s3/binders/BindObjectMetadataToRequest.java
index 1f96b7a..84948e1 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/binders/BindObjectMetadataToRequest.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/binders/BindObjectMetadataToRequest.java
@@ -54,8 +54,8 @@ public class BindObjectMetadataToRequest implements Binder {
       request = metadataPrefixer.bindToRequest(request, md.getUserMetadata());
 
       Builder<String, String> headers = ImmutableMultimap.builder();
-      if (md.getCacheControl() != null) {
-         headers.put(HttpHeaders.CACHE_CONTROL, md.getCacheControl());
+      if (md.getContentMetadata().getCacheControl() != null) {
+         headers.put(HttpHeaders.CACHE_CONTROL, md.getContentMetadata().getCacheControl());
       }
 
       if (md.getContentMetadata().getContentDisposition() != null) {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequest.java b/apis/s3/src/main/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequest.java
index f35ff5c..d35a3e6 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequest.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequest.java
@@ -27,8 +27,6 @@ import org.jclouds.http.HttpRequest;
 import org.jclouds.rest.Binder;
 import org.jclouds.s3.domain.S3Object;
 
-import com.google.common.net.HttpHeaders;
-
 @Singleton
 public class BindS3ObjectMetadataToRequest implements Binder {
    protected final BindMapToHeadersWithPrefix metadataPrefixer;
@@ -53,10 +51,6 @@ public class BindS3ObjectMetadataToRequest implements Binder {
       
       request = metadataPrefixer.bindToRequest(request, s3Object.getMetadata().getUserMetadata());
 
-      if (s3Object.getMetadata().getCacheControl() != null) {
-         request = (R) request.toBuilder()
-                              .replaceHeader(HttpHeaders.CACHE_CONTROL, s3Object.getMetadata().getCacheControl()).build();
-      }
       return request;
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
index 4cb5ea2..fbb481c 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
@@ -278,6 +278,11 @@ public class S3BlobStore extends BaseBlobStore {
 
       Optional<ContentMetadata> contentMetadata = options.getContentMetadata();
       if (contentMetadata.isPresent()) {
+         String cacheControl = contentMetadata.get().getCacheControl();
+         if (cacheControl != null) {
+            s3Options.cacheControl(cacheControl);
+         }
+
          String contentDisposition = contentMetadata.get().getContentDisposition();
          if (contentDisposition != null) {
             s3Options.contentDisposition(contentDisposition);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/domain/MutableObjectMetadata.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/domain/MutableObjectMetadata.java b/apis/s3/src/main/java/org/jclouds/s3/domain/MutableObjectMetadata.java
index 5af1025..8ec9a71 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/domain/MutableObjectMetadata.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/domain/MutableObjectMetadata.java
@@ -59,7 +59,10 @@ public interface MutableObjectMetadata extends ObjectMetadata {
     * Can be used to specify caching behavior along the request/reply chain.
     *
     * @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html?sec14.9.
+    *
+    * @deprecated call getContentMetadata().setCacheControl(String) instead
     */
+   @Deprecated
    void setCacheControl(String cacheControl);
 
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadata.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadata.java b/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadata.java
index 10e56f5..d7dd394 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadata.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadata.java
@@ -63,7 +63,10 @@ public interface ObjectMetadata extends Comparable<ObjectMetadata> {
     * Can be used to specify caching behavior along the request/reply chain.
     * 
     * @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html?sec14.9.
+    *
+    * @deprecated call getContentMetadata().getCacheControl() instead
     */
+   @Deprecated
    String getCacheControl();
 
    Date getLastModified();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadataBuilder.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadataBuilder.java b/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadataBuilder.java
index ba6c938..e142ca7 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadataBuilder.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/domain/ObjectMetadataBuilder.java
@@ -42,7 +42,6 @@ public class ObjectMetadataBuilder {
    private String bucket;
    private URI uri;
    private StorageClass storageClass = StorageClass.STANDARD;
-   private String cacheControl;
    private Date lastModified;
    private String eTag;
    private CanonicalUser owner;
@@ -84,7 +83,7 @@ public class ObjectMetadataBuilder {
    }
 
    public ObjectMetadataBuilder cacheControl(String cacheControl) {
-      this.cacheControl = cacheControl;
+      contentMetadataBuilder.cacheControl(cacheControl);
       return this;
    }
 
@@ -130,7 +129,6 @@ public class ObjectMetadataBuilder {
    public ObjectMetadata build() {
       MutableObjectMetadataImpl toReturn = new MutableObjectMetadataImpl();
       toReturn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(contentMetadataBuilder.build()));
-      toReturn.setCacheControl(cacheControl);
       toReturn.setKey(key);
       toReturn.setBucket(bucket);
       toReturn.setUri(uri);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/domain/internal/MutableObjectMetadataImpl.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/domain/internal/MutableObjectMetadataImpl.java b/apis/s3/src/main/java/org/jclouds/s3/domain/internal/MutableObjectMetadataImpl.java
index e2692cb..6fc329f 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/domain/internal/MutableObjectMetadataImpl.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/domain/internal/MutableObjectMetadataImpl.java
@@ -108,11 +108,12 @@ public class MutableObjectMetadataImpl implements MutableObjectMetadata {
    }
 
    /**
-    *{@inheritDoc}
+    * @deprecated call getContentMetadata().getCacheControl() instead
     */
+   @Deprecated
    @Override
    public String getCacheControl() {
-      return cacheControl;
+      return contentMetadata.getCacheControl();
    }
 
    /**
@@ -148,11 +149,12 @@ public class MutableObjectMetadataImpl implements MutableObjectMetadata {
    }
 
    /**
-    *{@inheritDoc}
+    * @deprecated call getContentMetadata().setCacheControl(String) instead
     */
+   @Deprecated
    @Override
    public void setCacheControl(String cacheControl) {
-      this.cacheControl = cacheControl;
+      contentMetadata.setCacheControl(cacheControl);
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/main/java/org/jclouds/s3/options/CopyObjectOptions.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/options/CopyObjectOptions.java b/apis/s3/src/main/java/org/jclouds/s3/options/CopyObjectOptions.java
index 2370bf5..374278d 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/options/CopyObjectOptions.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/options/CopyObjectOptions.java
@@ -72,6 +72,7 @@ import com.google.common.net.HttpHeaders;
 public class CopyObjectOptions extends BaseHttpRequestOptions {
    private static final DateService dateService = new SimpleDateFormatDateService();
    public static final CopyObjectOptions NONE = new CopyObjectOptions();
+   private String cacheControl;
    private String contentDisposition;
    private String contentEncoding;
    private String contentLanguage;
@@ -255,6 +256,10 @@ public class CopyObjectOptions extends BaseHttpRequestOptions {
          returnVal.put(entry.getKey().replace(DEFAULT_AMAZON_HEADERTAG, headerTag), entry.getValue());
       }
       boolean replace = false;
+      if (cacheControl != null) {
+         returnVal.put(HttpHeaders.CACHE_CONTROL, cacheControl);
+         replace = true;
+      }
       if (contentDisposition != null) {
          returnVal.put(HttpHeaders.CONTENT_DISPOSITION, contentDisposition);
          replace = true;
@@ -284,6 +289,11 @@ public class CopyObjectOptions extends BaseHttpRequestOptions {
       return returnVal.build();
    }
 
+   public CopyObjectOptions cacheControl(String cacheControl) {
+      this.cacheControl = checkNotNull(cacheControl, "cacheControl");
+      return this;
+   }
+
    public CopyObjectOptions contentDisposition(String contentDisposition) {
       this.contentDisposition = checkNotNull(contentDisposition, "contentDisposition");
       return this;
@@ -354,6 +364,11 @@ public class CopyObjectOptions extends BaseHttpRequestOptions {
          return options.ifSourceETagDoesntMatch(eTag);
       }
 
+      public static CopyObjectOptions cacheControl(String cacheControl) {
+         CopyObjectOptions options = new CopyObjectOptions();
+         return options.cacheControl(cacheControl);
+      }
+
       public static CopyObjectOptions contentDisposition(String contentDisposition) {
          CopyObjectOptions options = new CopyObjectOptions();
          return options.contentDisposition(contentDisposition);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/f292408a/apis/s3/src/test/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequestTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequestTest.java b/apis/s3/src/test/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequestTest.java
index b65c2b9..229f4a1 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequestTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/binders/BindS3ObjectMetadataToRequestTest.java
@@ -62,7 +62,6 @@ public class BindS3ObjectMetadataToRequestTest extends BaseS3ClientTest<S3Client
       payload.getContentMetadata().setContentLength(5368709120l);
       object.setPayload(payload);
       object.getMetadata().setKey("foo");
-      object.getMetadata().setCacheControl("no-cache");
       object.getMetadata().setUserMetadata(ImmutableMap.of("foo", "bar"));
 
       HttpRequest request = HttpRequest.builder().method("PUT").endpoint("http://localhost").build();
@@ -70,7 +69,7 @@ public class BindS3ObjectMetadataToRequestTest extends BaseS3ClientTest<S3Client
 
       assertEquals(binder.bindToRequest(request, object), HttpRequest.builder().method("PUT").endpoint(
                URI.create("http://localhost")).headers(
-               ImmutableMultimap.of("Cache-Control", "no-cache", "x-amz-meta-foo", "bar")).build());
+               ImmutableMultimap.of("x-amz-meta-foo", "bar")).build());
    }
 
    @Test(expectedExceptions = IllegalArgumentException.class)