add rewrite to ObjectApi
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/2abac7c1 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/2abac7c1 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/2abac7c1 Branch: refs/heads/master Commit: 2abac7c11c0ae0995b089114b41aaaae6ee2aff3 Parents: 15a5dad Author: Daniel Broudy <[email protected]> Authored: Tue Jun 23 11:10:13 2015 -0700 Committer: Andrew Gaul <[email protected]> Committed: Tue Jun 23 16:51:32 2015 -0700 ---------------------------------------------------------------------- .../domain/RewriteResponse.java | 41 +++++ .../googlecloudstorage/features/ObjectApi.java | 51 ++++++ .../options/RewriteObjectOptions.java | 155 +++++++++++++++++++ .../features/ObjectApiLiveTest.java | 17 ++ .../features/ObjectApiMockTest.java | 21 +++ .../parse/ParseObjectRewriteResponse.java | 72 +++++++++ .../src/test/resources/object_rewrite.json | 28 ++++ 7 files changed, 385 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java new file mode 100644 index 0000000..8f37193 --- /dev/null +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/RewriteResponse.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.googlecloudstorage.domain; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class RewriteResponse { + // TODO(broudy): should these be UnsignedLong? + public abstract long totalBytesRewritten(); + public abstract long objectSize(); + public abstract boolean done(); + @Nullable public abstract String rewriteToken(); + public abstract GoogleCloudStorageObject resource(); + + @SerializedNames({"totalBytesRewritten", "objectSize", "done", "rewriteToken", "resource"}) + public static RewriteResponse create(long totalBytesRewritten, long objectSize, + boolean done, String rewriteToken, GoogleCloudStorageObject resource) { + return new AutoValue_RewriteResponse(totalBytesRewritten, objectSize, done, rewriteToken, resource); + } + + RewriteResponse() { + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java index f91a410..ff8dfde 100644 --- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java @@ -35,6 +35,7 @@ import org.jclouds.googlecloudstorage.binders.MultipartUploadBinder; import org.jclouds.googlecloudstorage.binders.UploadBinder; import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject; import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes; +import org.jclouds.googlecloudstorage.domain.RewriteResponse; import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate; import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate; import org.jclouds.googlecloudstorage.options.ComposeObjectOptions; @@ -43,6 +44,7 @@ import org.jclouds.googlecloudstorage.options.DeleteObjectOptions; import org.jclouds.googlecloudstorage.options.GetObjectOptions; import org.jclouds.googlecloudstorage.options.InsertObjectOptions; import org.jclouds.googlecloudstorage.options.ListObjectOptions; +import org.jclouds.googlecloudstorage.options.RewriteObjectOptions; import org.jclouds.googlecloudstorage.options.UpdateObjectOptions; import org.jclouds.googlecloudstorage.parser.ParseToPayloadEnclosing; import org.jclouds.http.options.HttpRequestOptions; @@ -473,4 +475,53 @@ public interface ObjectApi { GoogleCloudStorageObject multipartUpload(@PathParam("bucket") String bucketName, @PayloadParam("template") ObjectTemplate objectTemplate, @PayloadParam("payload") Payload payload); + + /** + * Rewrites a source object to a destination object. + * + * @param destinationBucket + * Name of the bucket in which the object to be stored + * @param destinationObject + * Name of the new object. + * @param sourceBucket + * Name of the bucket in which to find the source object. + * @param sourceObject + * Name of the source object. + * + * @return a {@link RewriteResponse} + */ + @Named("Object:rewrite") + @POST + @Consumes(APPLICATION_JSON) + @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}") + RewriteResponse rewriteObjects(@PathParam("destinationBucket") String destinationBucket, + @PathParam("destinationObject") String destinationObject, + @PathParam("sourceBucket") String sourceBucket, + @PathParam("sourceObject") String sourceObject); + + /** + * Rewrites a source object to a destination object. + * + * @param destinationBucket + * Name of the bucket in which the object to be stored + * @param destinationObject + * Name of the new object. + * @param sourceBucket + * Name of the bucket in which to find the source object. + * @param sourceObject + * Name of the source object. + * @param options + * Supply an {@link RewriteObjectOptions} + * + * @return a {@link RewriteResponse} + */ + @Named("Object:rewrite") + @POST + @Consumes(APPLICATION_JSON) + @Path("/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}") + RewriteResponse rewriteObjects(@PathParam("destinationBucket") String destinationBucket, + @PathParam("destinationObject") String destinationObject, + @PathParam("sourceBucket") String sourceBucket, + @PathParam("sourceObject") String sourceObject, + RewriteObjectOptions options); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java new file mode 100644 index 0000000..0e93546 --- /dev/null +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/options/RewriteObjectOptions.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.googlecloudstorage.options; + +import static com.google.common.base.Preconditions.checkNotNull; + +import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.PredefinedAcl; +import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection; +import org.jclouds.http.options.BaseHttpRequestOptions; + +/** + * Allows to optionally specify ifMetagenerationMatch,ifMetagenerationNotMatch and projection which used in Bucket + */ +public class RewriteObjectOptions extends BaseHttpRequestOptions { + + // TODO(broudy): Refactor these redundant options out of every options class. + + public RewriteObjectOptions ifGenerationMatch(Long ifGenerationMatch) { + this.queryParameters.put("ifGenerationMatch", checkNotNull(ifGenerationMatch, "ifGenerationMatch") + ""); + return this; + } + + public RewriteObjectOptions ifGenerationNotMatch(Long ifGenerationNotMatch) { + this.queryParameters.put("ifGenerationNotMatch", checkNotNull(ifGenerationNotMatch, "ifGenerationNotMatch") + ""); + return this; + } + + public RewriteObjectOptions ifMetagenerationMatch(Long ifMetagenerationMatch) { + this.queryParameters.put("ifMetagenerationMatch", checkNotNull(ifMetagenerationMatch, "ifMetagenerationMatch") + + ""); + return this; + } + + public RewriteObjectOptions ifMetagenerationNotMatch(Long ifMetagenerationNotMatch) { + this.queryParameters.put("ifMetagenerationNotMatch", + checkNotNull(ifMetagenerationNotMatch, "ifMetagenerationNotMatch") + ""); + return this; + } + public RewriteObjectOptions ifSourceGenerationMatch(Long ifSourceGenerationMatch) { + this.queryParameters.put("ifSourceGenerationMatch", checkNotNull(ifSourceGenerationMatch, "ifSourceGenerationMatch") + ""); + return this; + } + + public RewriteObjectOptions ifSourceGenerationNotMatch(Long ifSourceGenerationNotMatch) { + this.queryParameters.put("ifSourceGenerationNotMatch", checkNotNull(ifSourceGenerationNotMatch, "ifSourceGenerationNotMatch") + ""); + return this; + } + + public RewriteObjectOptions ifSourceMetagenerationMatch(Long ifSourceMetagenerationMatch) { + this.queryParameters.put("ifSourceMetagenerationMatch", checkNotNull(ifSourceMetagenerationMatch, "ifSourceMetagenerationMatch") + + ""); + return this; + } + + public RewriteObjectOptions ifSourceMetagenerationNotMatch(Long ifSourceMetagenerationNotMatch) { + this.queryParameters.put("ifSourceMetagenerationNotMatch", + checkNotNull(ifSourceMetagenerationNotMatch, "ifSourceMetagenerationNotMatch") + ""); + return this; + } + + public RewriteObjectOptions sourceGeneration(Long sourceGeneration) { + this.queryParameters.put("sourceGeneration", checkNotNull(sourceGeneration, "sourceGeneration") + ""); + return this; + } + + public RewriteObjectOptions predefinedAcl(PredefinedAcl predefinedAcl) { + this.queryParameters.put("predefinedAcl", checkNotNull(predefinedAcl, "predefinedAcl").toString()); + return this; + } + + public RewriteObjectOptions projection(Projection projection) { + this.queryParameters.put("projection", checkNotNull(projection, "projection").toString()); + return this; + } + + public RewriteObjectOptions rewriteToken(String rewriteToken) { + this.queryParameters.put("rewriteToken", checkNotNull(rewriteToken, "rewriteToken").toString()); + return this; + } + + public RewriteObjectOptions maxBytesRewrittenPerCall(Long maxBytesRewrittenPerCall) { + this.queryParameters.put("maxBytesRewrittenPerCall", + checkNotNull(maxBytesRewrittenPerCall, "maxBytesRewrittenPerCall").toString()); + return this; + } + + public static class Builder { + + public RewriteObjectOptions ifGenerationMatch(Long ifGenerationMatch) { + return new RewriteObjectOptions().ifGenerationMatch(ifGenerationMatch); + } + + public RewriteObjectOptions ifGenerationNotMatch(Long ifGenerationNotMatch) { + return new RewriteObjectOptions().ifGenerationNotMatch(ifGenerationNotMatch); + } + + public RewriteObjectOptions ifMetagenerationMatch(Long ifMetagenerationMatch) { + return new RewriteObjectOptions().ifMetagenerationMatch(ifMetagenerationMatch); + } + + public RewriteObjectOptions ifMetagenerationNotMatch(Long ifMetagenerationNotMatch) { + return new RewriteObjectOptions().ifMetagenerationNotMatch(ifMetagenerationNotMatch); + } + + public RewriteObjectOptions ifSourceGenerationMatch(Long ifSourceGenerationMatch) { + return new RewriteObjectOptions().ifSourceGenerationMatch(ifSourceGenerationMatch); + } + + public RewriteObjectOptions ifSourceGenerationNotMatch(Long ifSourceGenerationNotMatch) { + return new RewriteObjectOptions().ifSourceGenerationNotMatch(ifSourceGenerationNotMatch); + } + + public RewriteObjectOptions ifSourceMetagenerationMatch(Long ifSourceMetagenerationMatch) { + return new RewriteObjectOptions().ifSourceMetagenerationMatch(ifSourceMetagenerationMatch); + } + + public RewriteObjectOptions ifSourceMetagenerationNotMatch(Long ifSourceMetagenerationNotMatch) { + return new RewriteObjectOptions().ifSourceMetagenerationNotMatch(ifSourceMetagenerationNotMatch); + } + + public RewriteObjectOptions sourceGeneration(Long sourceGeneration) { + return new RewriteObjectOptions().sourceGeneration(sourceGeneration); + } + + public RewriteObjectOptions predefinedAcl(PredefinedAcl predefinedAcl) { + return new RewriteObjectOptions().predefinedAcl(predefinedAcl); + } + + public RewriteObjectOptions projection(Projection projection) { + return new RewriteObjectOptions().projection(projection); + } + + public RewriteObjectOptions rewriteToken(String rewriteToken) { + return new RewriteObjectOptions().rewriteToken(rewriteToken); + } + + public RewriteObjectOptions maxBytesRewrittenPerCall(Long maxBytesRewrittenPerCall) { + return new RewriteObjectOptions().maxBytesRewrittenPerCall(maxBytesRewrittenPerCall); + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/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 44232a1..4bf48cb 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 @@ -37,6 +37,7 @@ import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject; import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes; import org.jclouds.googlecloudstorage.domain.ObjectAccessControls; +import org.jclouds.googlecloudstorage.domain.RewriteResponse; import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate; import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate; import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate; @@ -76,6 +77,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest { private static final String COMPOSED_OBJECT = "ComposedObject1.txt"; private static final String COMPOSED_OBJECT2 = "ComposedObject2.json"; private static final String NONEXISTENT_OBJECT_NAME = "noSuchObject.txt"; + private static final String REWRITE_OBJECT_NAME = "rewriteObject.txt"; private PayloadEnclosing testPayload; private Long RANDOM_LONG = 100L; @@ -124,6 +126,20 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest { } @Test(groups = "live", dependsOnMethods = "testSimpleUpload") + public void testRewrite() throws IOException { + GoogleCloudStorageObject gcsObject = api().getObject(BUCKET_NAME, UPLOAD_OBJECT_NAME); + System.out.println(gcsObject); + + RewriteResponse response = api().rewriteObjects(BUCKET_NAME, REWRITE_OBJECT_NAME, BUCKET_NAME, UPLOAD_OBJECT_NAME); + assertNotNull(response); + assertTrue(response.done()); + assertEquals(response.objectSize(), 512); + assertEquals(response.totalBytesRewritten(), 512); + assertEquals(response.rewriteToken(), null); + assertNotNull(response.resource()); + } + + @Test(groups = "live", dependsOnMethods = "testRewrite") public void testDownload() throws IOException { PayloadEnclosing impl = api().download(BUCKET_NAME, UPLOAD_OBJECT_NAME); ContentMetadata meta = impl.getPayload().getContentMetadata(); @@ -443,6 +459,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest { assertFalse(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME)); assertTrue(api().deleteObject(BUCKET_NAME, UPLOAD_OBJECT_NAME2)); assertTrue(api().deleteObject(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT)); + assertTrue(api().deleteObject(BUCKET_NAME, REWRITE_OBJECT_NAME)); assertFalse(api().deleteObject(BUCKET_NAME, NONEXISTENT_OBJECT_NAME)); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/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 d30deac..9906a90 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 @@ -34,8 +34,10 @@ import org.jclouds.googlecloudstorage.options.CopyObjectOptions; import org.jclouds.googlecloudstorage.options.GetObjectOptions; import org.jclouds.googlecloudstorage.options.InsertObjectOptions; import org.jclouds.googlecloudstorage.options.ListObjectOptions; +import org.jclouds.googlecloudstorage.options.RewriteObjectOptions; import org.jclouds.googlecloudstorage.parse.ParseGoogleCloudStorageObject; import org.jclouds.googlecloudstorage.parse.ParseGoogleCloudStorageObjectListTest; +import org.jclouds.googlecloudstorage.parse.ParseObjectRewriteResponse; import org.jclouds.http.internal.PayloadEnclosingImpl; import org.jclouds.io.PayloadEnclosing; import org.testng.annotations.Test; @@ -259,6 +261,25 @@ public class ObjectApiMockTest extends BaseGoogleCloudStorageApiMockTest { //TODO: this should be a more robust assertion about the formatting of the payload } + public void rewrite() throws Exception { + server.enqueue(jsonResponse("/object_rewrite.json")); + + assertEquals(objectApi().rewriteObjects("destinationBucket", "destinationObject", "sourceBucket", "sourceObject"), + new ParseObjectRewriteResponse().expected()); + + assertSent(server, "POST", "/storage/v1/b/sourceBucket/o/sourceObject/rewriteTo/b/destinationBucket/o/destinationObject"); + } + + public void rewriteWithOptions() throws Exception { + server.enqueue(jsonResponse("/object_rewrite.json")); + + RewriteObjectOptions options = new RewriteObjectOptions.Builder().rewriteToken("rewriteToken"); + assertEquals(objectApi().rewriteObjects("destinationBucket", "destinationObject", "sourceBucket", "sourceObject", options), + new ParseObjectRewriteResponse().expected()); + + assertSent(server, "POST", + "/storage/v1/b/sourceBucket/o/sourceObject/rewriteTo/b/destinationBucket/o/destinationObject?rewriteToken=rewriteToken"); + } public ObjectApi objectApi(){ return api().getObjectApi(); http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java new file mode 100644 index 0000000..2b4a2e3 --- /dev/null +++ b/providers/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/parse/ParseObjectRewriteResponse.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.googlecloudstorage.parse; + +import java.net.URI; + +import javax.ws.rs.Consumes; +import javax.ws.rs.core.MediaType; + +import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.StorageClass; +import org.jclouds.googlecloudstorage.domain.Owner; +import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject; +import org.jclouds.googlecloudstorage.domain.RewriteResponse; +import org.jclouds.googlecloudstorage.internal.BaseGoogleCloudStorageParseTest; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "ParseObjectRewriteResponse") +public class ParseObjectRewriteResponse extends BaseGoogleCloudStorageParseTest<RewriteResponse> { + + @Override + public String resource() { + return "/object_rewrite.json"; + } + + @Override + @Consumes(MediaType.APPLICATION_JSON) + public RewriteResponse expected() { + return RewriteResponse.create(16, // totalBytesRewritten + 16, // objectSize + true, // done + "rewriteToken", // rewriteToken + GoogleCloudStorageObject.create( + "test/file_name/1000", //id + URI.create("https://www.googleapis.com/storage/v1/b/test/o/file_name"), //selfLink + "etag", // etag + "file_name", // name + "test", // bucket + (long) 1000, //generation + (long) 8, // metageneration + "application/x-tar", // contentType + parse("2014-09-27T00:01:44.819"), // updated + null, // timeDeleted + StorageClass.STANDARD, // storageClass + (long) 1000, //size, + "md5Hash", // md5Hash + URI.create("https://www.googleapis.com/download/storage/v1/b/test/o/file_name?generation=1000&alt=media"), // mediaLink + null, // metadata + null, // contentEncoding + null, // contentDisposition, + null, // contentLanguage + null, // cacheControl + null, // acl + Owner.create("entity", "entityId"), // owner, + "crc32c", // crc32c, + null) //componentCount + ); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/2abac7c1/providers/google-cloud-storage/src/test/resources/object_rewrite.json ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/test/resources/object_rewrite.json b/providers/google-cloud-storage/src/test/resources/object_rewrite.json new file mode 100644 index 0000000..189b9b8 --- /dev/null +++ b/providers/google-cloud-storage/src/test/resources/object_rewrite.json @@ -0,0 +1,28 @@ +{ + "kind": "storage#rewriteResponse", + "totalBytesRewritten": "16", + "objectSize": "16", + "rewriteToken": "rewriteToken", + "done": true, + "resource": { + "kind": "storage#object", + "id": "test/file_name/1000", + "selfLink": "https://www.googleapis.com/storage/v1/b/test/o/file_name", + "name": "file_name", + "bucket": "test", + "generation": "1000", + "metageneration": "8", + "contentType": "application/x-tar", + "updated": "2014-09-27T00:01:44.819", + "storageClass": "STANDARD", + "size": "1000", + "md5Hash": "md5Hash", + "mediaLink": "https://www.googleapis.com/download/storage/v1/b/test/o/file_name?generation=1000&alt=media", + "owner": { + "entity": "entity", + "entityId": "entityId" + }, + "crc32c": "crc32c", + "etag": "etag" + } +} \ No newline at end of file
