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/03 00:40:50 UTC

[4/4] jclouds git commit: JCLOUDS-651: Add Swift server-side copyBlob

JCLOUDS-651: Add Swift server-side copyBlob

This has some limitations as discussed in JCLOUDS-872.


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

Branch: refs/heads/master
Commit: 67d731f0543a3f95d164ffb1bc3e37ef6c9361ec
Parents: b85068c
Author: Andrew Gaul <ga...@apache.org>
Authored: Sun Mar 29 21:51:03 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Apr 2 15:36:54 2015 -0700

----------------------------------------------------------------------
 .../blobstore/RegionScopedSwiftBlobStore.java   | 28 ++++++++++++++++++++
 1 file changed, 28 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/67d731f0/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 d535569..4516264 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
@@ -25,6 +25,7 @@ import static org.jclouds.location.predicates.LocationPredicates.idEquals;
 import static org.jclouds.openstack.swift.v1.options.PutOptions.Builder.metadata;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.inject.Inject;
@@ -44,6 +45,7 @@ import org.jclouds.blobstore.domain.internal.BlobBuilderImpl;
 import org.jclouds.blobstore.domain.internal.BlobImpl;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
 import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
+import org.jclouds.blobstore.options.CopyOptions;
 import org.jclouds.blobstore.options.CreateContainerOptions;
 import org.jclouds.blobstore.options.GetOptions;
 import org.jclouds.blobstore.options.ListContainerOptions;
@@ -229,6 +231,32 @@ public class RegionScopedSwiftBlobStore implements BlobStore {
    }
 
    @Override
+   public String copyBlob(String fromContainer, String fromName, String toContainer, String toName,
+         CopyOptions options) {
+      ObjectApi objectApi = api.getObjectApi(regionId, toContainer);
+
+      boolean copied = objectApi.copy(toName, fromContainer, fromName);
+      if (!copied) {
+         throw new RuntimeException("could not copy blob");
+      }
+
+      // TODO: content disposition
+      // TODO: content encoding
+      // TODO: content language
+      // TODO: content type
+
+      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");
+         }
+      }
+
+      return objectApi.getWithoutBody(toName).getETag();
+   }
+
+   @Override
    public BlobMetadata blobMetadata(String container, String name) {
       SwiftObject object = api.getObjectApi(regionId, container).get(name);
       if (object == null) {