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