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/07 00:42:36 UTC
[3/3] jclouds git commit: JCLOUDS-651: Copy Swift system metadata
JCLOUDS-651: Copy Swift system metadata
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/d8f48c48
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/d8f48c48
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/d8f48c48
Branch: refs/heads/master
Commit: d8f48c48b41e229e89c4b5db2641e15003b99277
Parents: 576005a
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Apr 2 17:16:36 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Apr 6 15:35:59 2015 -0700
----------------------------------------------------------------------
.../blobstore/RegionScopedSwiftBlobStore.java | 49 ++++++++++++++------
.../internal/BaseBlobIntegrationTest.java | 3 +-
2 files changed, 37 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d8f48c48/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 4516264..4192a96 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
@@ -53,6 +53,7 @@ import org.jclouds.blobstore.options.PutOptions;
import org.jclouds.blobstore.strategy.ClearListStrategy;
import org.jclouds.collect.Memoized;
import org.jclouds.domain.Location;
+import org.jclouds.io.ContentMetadata;
import org.jclouds.io.Payload;
import org.jclouds.io.payloads.ByteSourcePayload;
import org.jclouds.openstack.swift.v1.SwiftApi;
@@ -78,7 +79,9 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
import com.google.common.io.ByteSource;
+import com.google.common.net.HttpHeaders;
import com.google.inject.AbstractModule;
import com.google.inject.Injector;
import com.google.inject.assistedinject.Assisted;
@@ -234,25 +237,45 @@ public class RegionScopedSwiftBlobStore implements BlobStore {
public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
CopyOptions options) {
ObjectApi objectApi = api.getObjectApi(regionId, toContainer);
+ SwiftObject metadata = api.getObjectApi(regionId, fromContainer).getWithoutBody(fromName);
- boolean copied = objectApi.copy(toName, fromContainer, fromName);
- if (!copied) {
- throw new RuntimeException("could not copy blob");
+ Map<String, String> userMetadata;
+ if (options.getUserMetadata().isPresent()) {
+ userMetadata = options.getUserMetadata().get();
+ } else {
+ userMetadata = metadata.getMetadata();
}
- // TODO: content disposition
- // TODO: content encoding
- // TODO: content language
- // TODO: content type
+ // copy existing system metadata
+ Map<String, String> systemMetadata = Maps.newHashMap();
+ ContentMetadata contentMetadata = metadata.getPayload().getContentMetadata();
+ String contentDisposition = contentMetadata.getContentDisposition();
+ if (contentDisposition != null) {
+ systemMetadata.put(HttpHeaders.CONTENT_DISPOSITION, contentDisposition);
+ }
+ String contentEncoding = contentMetadata.getContentEncoding();
+ if (contentEncoding != null) {
+ systemMetadata.put(HttpHeaders.CONTENT_ENCODING, contentEncoding);
+ }
+ String contentLanguage = contentMetadata.getContentLanguage();
+ if (contentLanguage != null) {
+ systemMetadata.put(HttpHeaders.CONTENT_LANGUAGE, contentLanguage);
+ }
+ String contentType = contentMetadata.getContentType();
+ if (contentType != null) {
+ systemMetadata.put(HttpHeaders.CONTENT_TYPE, contentType);
+ }
- Optional<Map<String, String>> userMetadata = options.getUserMetadata();
- if (userMetadata.isPresent()) {
- boolean updated = objectApi.updateMetadata(toName, userMetadata.get());
- if (!updated) {
- throw new RuntimeException("could not copy blob");
- }
+ boolean copied = objectApi.copy(toName, fromContainer, fromName, userMetadata, systemMetadata);
+ if (!copied) {
+ throw new RuntimeException("could not copy blob");
}
+ // TODO: override content disposition
+ // TODO: override content encoding
+ // TODO: override content language
+ // TODO: override content type
+
return objectApi.getWithoutBody(toName).getETag();
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d8f48c48/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 0d57fc5..1be2597 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
@@ -759,8 +759,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
} finally {
Closeables2.closeQuietly(is);
}
- // TODO: Swift does not preserve system metadata
- //checkContentMetadata(toBlob);
+ checkContentMetadata(toBlob);
assertThat(toBlob.getMetadata().getUserMetadata()).isEqualTo(userMetadata);
} finally {
returnContainer(toContainer);