Update ComposeObjectTemplate and update MockTests
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/15a5dadc Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/15a5dadc Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/15a5dadc Branch: refs/heads/master Commit: 15a5dadc1af4c52430e653a4dc115ec3e2a1f692 Parents: 7213acb Author: Daniel Broudy <[email protected]> Authored: Mon Jun 8 17:29:21 2015 -0700 Committer: Daniel Broudy <[email protected]> Committed: Mon Jun 22 09:37:42 2015 -0700 ---------------------------------------------------------------------- .../SequentialMultipartUploadStrategy.java | 4 +- .../domain/templates/ComposeObjectTemplate.java | 93 +++++++++++++++++++- .../features/ObjectApiLiveTest.java | 11 ++- .../features/ObjectApiMockTest.java | 10 ++- .../test/resources/object_compose_request.json | 45 ++-------- 5 files changed, 113 insertions(+), 50 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java index 065f002..83b3823 100644 --- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java @@ -87,7 +87,9 @@ public final class SequentialMultipartUploadStrategy extends MultipartUploadStra sourceList.add(object); } - ComposeObjectTemplate template = ComposeObjectTemplate.create(sourceList, destination); + ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(sourceList) + .destination(destination).build(); + return api.getObjectApi().composeObjects(container, key, template).etag(); } else { return api.getObjectApi() http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java index 669a8f1..4ad8d5e 100644 --- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/ComposeObjectTemplate.java @@ -14,25 +14,110 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.jclouds.googlecloudstorage.domain.templates; +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; @AutoValue public abstract class ComposeObjectTemplate { - private final String kind = "storage/composeRequest"; + @AutoValue + public abstract static class SourceObject { + + @AutoValue + public abstract static class ObjectPreconditions { + @Nullable public abstract long ifGenerationMatch(); + + @SerializedNames({"ifGenerationMatch"}) + public static ObjectPreconditions create(long ifGenerationMatch){ + return new AutoValue_ComposeObjectTemplate_SourceObject_ObjectPreconditions(ifGenerationMatch); + } + + ObjectPreconditions(){ + } + } + + public abstract String name(); + @Nullable public abstract Long generation(); + @Nullable public abstract ObjectPreconditions objectPreconditions(); - public abstract List<GoogleCloudStorageObject> sourceObjects(); + public static SourceObject nameOnly(String name){ + return create(name, null, null); + } + public static SourceObject createWithPrecondition(String name, Long generation, Long objectPreconditions){ + return create(name, generation, ObjectPreconditions.create(objectPreconditions)); + } + + @SerializedNames({ "name", "generation", "objectPreconditions"}) + public static SourceObject create(String name, @Nullable Long generation, + @Nullable ObjectPreconditions objectPreconditions) { + return new AutoValue_ComposeObjectTemplate_SourceObject(name, generation, objectPreconditions); + } + + SourceObject(){ + } + } + + public abstract List<SourceObject> sourceObjects(); public abstract ObjectTemplate destination(); - public static ComposeObjectTemplate create(List<GoogleCloudStorageObject> sourceObjects, ObjectTemplate destination) { + @SerializedNames({"sourceObjects", "destination"}) + public static ComposeObjectTemplate create(List<SourceObject> sourceObjects, ObjectTemplate destination) { return new AutoValue_ComposeObjectTemplate(sourceObjects, destination); } + + public static Builder builder(){ + return new Builder(); + } + + ComposeObjectTemplate() { + } + + public static class Builder { + private ImmutableList<SourceObject> sourceObjects; + private ObjectTemplate destination; + + Builder() { + } + + public Builder fromGoogleCloudStorageObject(Collection<GoogleCloudStorageObject> objects) { + ImmutableList.Builder<SourceObject> sourceObjects = new ImmutableList.Builder<ComposeObjectTemplate.SourceObject>(); + for (GoogleCloudStorageObject obj : objects) { + sourceObjects.add(SourceObject.createWithPrecondition(obj.name(), obj.generation(), obj.generation())); + } + this.sourceObjects = sourceObjects.build(); + return this; + } + + public Builder fromNames(List<String> SourceObjectNames) { + ArrayList<SourceObject> sourceObjects = new ArrayList<SourceObject>(); + for (String name : SourceObjectNames) { + sourceObjects.add(SourceObject.nameOnly(name)); + } + this.sourceObjects = ImmutableList.copyOf(sourceObjects); + return this; + } + + public Builder destination(ObjectTemplate destination) { + checkNotNull(destination, "destination"); + this.destination = destination; + return this; + } + + public ComposeObjectTemplate build() { + return ComposeObjectTemplate.create(sourceObjects, destination); + } + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java index 3cef893..44232a1 100644 --- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java +++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiLiveTest.java @@ -255,7 +255,10 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest { sourceList.add(api().getObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME)); sourceList.add(api().getObject(BUCKET_NAME2, COPIED_OBJECT_NAME)); - ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.create(sourceList, destination); + ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.builder() + .fromGoogleCloudStorageObject(sourceList) + .destination(destination) + .build(); GoogleCloudStorageObject gcsObject = api().composeObjects(BUCKET_NAME2, COMPOSED_OBJECT, requestTemplate); @@ -273,8 +276,10 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest { sourceList.add(api().getObject(BUCKET_NAME2, UPLOAD_OBJECT_NAME)); sourceList.add(api().getObject(BUCKET_NAME2, COPIED_OBJECT_NAME)); - ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.create(sourceList, destination); - + ComposeObjectTemplate requestTemplate = ComposeObjectTemplate.builder() + .fromGoogleCloudStorageObject(sourceList) + .destination(destination) + .build(); ComposeObjectOptions options = new ComposeObjectOptions().destinationPredefinedAcl( DestinationPredefinedAcl.BUCKET_OWNER_READ).ifMetagenerationNotMatch(RANDOM_LONG); http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java index af224d4..d30deac 100644 --- a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java +++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/ObjectApiMockTest.java @@ -176,8 +176,9 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest { ObjectTemplate template = new ObjectTemplate().name("file_name").size((long) 1000).crc32c("crc32c"); - ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.create( - new ParseGoogleCloudStorageObjectListTest().expected(), template); + ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.builder() + .fromGoogleCloudStorageObject(new ParseGoogleCloudStorageObjectListTest().expected()) + .destination(template).build(); assertEquals(objectApi().composeObjects("destination_bucket", "destination_object", composeTemplate), new ParseGoogleCloudStorageObject().expected()); @@ -189,8 +190,9 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest { server.enqueue(jsonResponse("/object_get.json")); ObjectTemplate template = new ObjectTemplate().name("file_name").size((long) 1000).crc32c("crc32c"); - ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.create( - new ParseGoogleCloudStorageObjectListTest().expected(), template); + ComposeObjectTemplate composeTemplate = ComposeObjectTemplate.builder() + .fromGoogleCloudStorageObject(new ParseGoogleCloudStorageObjectListTest().expected()) + .destination(template).build(); ComposeObjectOptions options = new ComposeObjectOptions() .destinationPredefinedAcl(DestinationPredefinedAcl.BUCKET_OWNER_FULLCONTROL) http://git-wip-us.apache.org/repos/asf/jclouds/blob/15a5dadc/providers/google-cloud-storage/src/test/resources/object_compose_request.json ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/test/resources/object_compose_request.json b/providers/google-cloud-storage/src/test/resources/object_compose_request.json index 93cbfc7..0ac4803 100644 --- a/providers/google-cloud-storage/src/test/resources/object_compose_request.json +++ b/providers/google-cloud-storage/src/test/resources/object_compose_request.json @@ -1,54 +1,23 @@ { "sourceObjects": [ { - "id": "test/file_name/1000", - "selfLink": "https://www.googleapis.com/storage/v1/b/test/o/file_name", - "etag": "etag", "name": "file_name", - "bucket": "test", "generation": 1000, - "metageneration": 8, - "contentType": "application/x-tar", - "updated": "2014-09-27T00:01:44.819Z", - "storageClass": "STANDARD", - "size": 1000, - "md5Hash": "md5Hash", - "mediaLink": "https://www.googleapis.com/download/storage/v1/b/test/o/file_name?generation=1000&alt=media", - "metadata": {}, - "acl": [], - "owner": { - "entity": "entity", - "entityId": "entityId" - }, - "crc32c": "crc32c" + "objectPreconditions": { + "ifGenerationMatch": 1000 + } }, { - "id": "test/file_name2/1000", - "selfLink": "https://www.googleapis.com/storage/v1/b/test/o/file_name2", - "etag": "etag", "name": "file_name2", - "bucket": "test", "generation": 1001, - "metageneration": 9, - "contentType": "image/png", - "updated": "2014-09-27T00:01:44.819Z", - "storageClass": "STANDARD", - "size": 10, - "md5Hash": "md5Hash", - "mediaLink": "https://www.googleapis.com/download/storage/v1/b/test/o/file_name2?generation=1001&alt=media", - "metadata": {}, - "acl": [], - "owner": { - "entity": "entity", - "entityId": "entityId" - }, - "crc32c": "crc32c" + "objectPreconditions": { + "ifGenerationMatch": 1001 + } } ], "destination": { "name": "file_name", "size": 1000, "crc32c": "crc32c" - }, - "kind": "storage/composeRequest" + } } \ No newline at end of file
