JCLOUDS-651: Swift support for conditional copies
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/7eb46cce Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/7eb46cce Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/7eb46cce Branch: refs/heads/master Commit: 7eb46cce366e5bfb6021b03104e9cf64f764c42d Parents: 6cdb121 Author: Andrew Gaul <[email protected]> Authored: Fri Feb 12 03:07:51 2016 -0800 Committer: Andrew Gaul <[email protected]> Committed: Tue Feb 16 16:29:54 2016 -0800 ---------------------------------------------------------------------- .../v1/blobstore/RegionScopedSwiftBlobStore.java | 17 ++++++++++++++++- .../integration/SwiftBlobIntegrationLiveTest.java | 14 ++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/7eb46cce/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java ---------------------------------------------------------------------- diff --git a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java index 5b331ed..8c4745a 100644 --- a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java +++ b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java @@ -253,6 +253,21 @@ public class RegionScopedSwiftBlobStore implements BlobStore { CopyOptions options) { ObjectApi objectApi = api.getObjectApi(regionId, toContainer); + org.jclouds.openstack.swift.v1.options.CopyOptions swiftOptions = new org.jclouds.openstack.swift.v1.options.CopyOptions(); + + if (options.ifMatch() != null) { + swiftOptions.ifMatch(options.ifMatch()); + } + if (options.ifNoneMatch() != null) { + throw new UnsupportedOperationException("Swift does not support ifNoneMatch"); + } + if (options.ifModifiedSince() != null) { + swiftOptions.ifModifiedSince(options.ifModifiedSince()); + } + if (options.ifUnmodifiedSince() != null) { + swiftOptions.ifUnmodifiedSince(options.ifUnmodifiedSince()); + } + Map<String, String> systemMetadata = Maps.newHashMap(); ContentMetadata contentMetadata = options.contentMetadata(); Map<String, String> userMetadata = options.userMetadata(); @@ -307,7 +322,7 @@ public class RegionScopedSwiftBlobStore implements BlobStore { userMetadata = metadata.getMetadata(); } - objectApi.copy(toName, fromContainer, fromName, userMetadata, systemMetadata); + objectApi.copy(toName, fromContainer, fromName, userMetadata, systemMetadata, swiftOptions); // TODO: Swift copy object *appends* user metadata, does not overwrite return objectApi.getWithoutBody(toName).getETag(); http://git-wip-us.apache.org/repos/asf/jclouds/blob/7eb46cce/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 6440788..441b6a2 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 @@ -101,6 +101,20 @@ public class SwiftBlobIntegrationLiveTest extends BaseBlobIntegrationTest { } @Override + @Test(expectedExceptions = UnsupportedOperationException.class) + public void testCopyIfNoneMatch() throws Exception { + super.testCopyIfNoneMatch(); + } + + @Override + @Test(expectedExceptions = UnsupportedOperationException.class) + public void testCopyIfNoneMatchNegative() throws Exception { + super.testCopyIfNoneMatchNegative(); + } + + // TODO: testCopyIfModifiedSinceNegative throws HTTP 304 not 412 error + + @Override protected long getMinimumMultipartBlobSize() { return 1; }
