You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/11/04 17:28:16 UTC
[2/2] git commit: JCLOUDS-458 Fix some obvious bugs in
google-cloud-storage.
JCLOUDS-458 Fix some obvious bugs in google-cloud-storage.
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/commit/a9ea2adf
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/tree/a9ea2adf
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/diff/a9ea2adf
Branch: refs/heads/master
Commit: a9ea2adfde71eb45d5c4513186a41733e0557c5b
Parents: bb9934c
Author: Adrian Cole <ad...@gmail.com>
Authored: Mon Nov 3 20:48:12 2014 -0800
Committer: Adrian Cole <ad...@apache.org>
Committed: Tue Nov 4 08:25:28 2014 -0800
----------------------------------------------------------------------
.../binders/MultipartUploadBinder.java | 19 +++++---
.../blobstore/GCSBlobStore.java | 50 +++++++++-----------
.../functions/ObjectListToStorageMetadata.java | 1 -
.../SequentialMultipartUploadStrategy.java | 25 ++++------
.../googlecloudstorage/domain/GCSObject.java | 22 ++++-----
.../googlecloudstorage/features/ObjectApi.java | 3 +-
6 files changed, 55 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/a9ea2adf/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/MultipartUploadBinder.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/MultipartUploadBinder.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/MultipartUploadBinder.java
index dfd4f7e..ca6422b 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/MultipartUploadBinder.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/MultipartUploadBinder.java
@@ -29,30 +29,35 @@ import org.jclouds.io.Payloads;
import org.jclouds.io.payloads.MultipartForm;
import org.jclouds.io.payloads.Part;
import org.jclouds.io.payloads.StringPayload;
+import org.jclouds.json.Json;
import org.jclouds.rest.MapBinder;
-import com.google.gson.Gson;
-
-public class MultipartUploadBinder implements MapBinder {
+import com.google.inject.Inject;
+public final class MultipartUploadBinder implements MapBinder {
private static final String BOUNDARY_HEADER = "multipart_boundary";
+ private final Json json;
+
+ @Inject MultipartUploadBinder(Json json){
+ this.json = json;
+ }
+
@Override public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
ObjectTemplate template = (ObjectTemplate) postParams.get("template");
Payload payload = (Payload) postParams.get("payload");
- String contentType = checkNotNull(template.cacheControl(), "contentType");
+ String contentType = checkNotNull(template.contentType(), "contentType");
Long length = checkNotNull(template.size(), "contentLength");
- StringPayload jsonPayload = Payloads.newStringPayload(new Gson().toJson(template));
+ StringPayload jsonPayload = Payloads.newStringPayload(json.toJson(template));
payload.getContentMetadata().setContentLength(length);
Part jsonPart = Part.create("Metadata", jsonPayload, new Part.PartOptions().contentType(APPLICATION_JSON));
Part mediaPart = Part.create(template.name(), payload, new Part.PartOptions().contentType(contentType));
- MultipartForm compPayload = new MultipartForm(BOUNDARY_HEADER, jsonPart, mediaPart);
- request.setPayload(compPayload);
+ request.setPayload(new MultipartForm(BOUNDARY_HEADER, jsonPart, mediaPart));
// HeaderPart
request.toBuilder().replaceHeader(CONTENT_TYPE, "Multipart/related; boundary= " + BOUNDARY_HEADER).build();
return request;
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/a9ea2adf/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GCSBlobStore.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GCSBlobStore.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GCSBlobStore.java
index c388857..fd8cfdb 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GCSBlobStore.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GCSBlobStore.java
@@ -18,12 +18,13 @@ package org.jclouds.googlecloudstorage.blobstore;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.io.BaseEncoding.base64;
+import static org.jclouds.googlecloudstorage.domain.DomainResourceReferences.ObjectRole.READER;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Set;
-import javax.inject.Singleton;
+import javax.inject.Inject;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.domain.Blob;
@@ -35,6 +36,7 @@ import org.jclouds.blobstore.domain.internal.BlobImpl;
import org.jclouds.blobstore.domain.internal.PageSetImpl;
import org.jclouds.blobstore.internal.BaseBlobStore;
import org.jclouds.blobstore.options.CreateContainerOptions;
+import org.jclouds.blobstore.options.GetOptions;
import org.jclouds.blobstore.options.ListContainerOptions;
import org.jclouds.blobstore.options.PutOptions;
import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
@@ -50,7 +52,7 @@ import org.jclouds.googlecloudstorage.blobstore.functions.ObjectToBlobMetadata;
import org.jclouds.googlecloudstorage.blobstore.strategy.internal.MultipartUploadStrategy;
import org.jclouds.googlecloudstorage.config.UserProject;
import org.jclouds.googlecloudstorage.domain.Bucket;
-import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.ObjectRole;
+import org.jclouds.googlecloudstorage.domain.DomainResourceReferences;
import org.jclouds.googlecloudstorage.domain.GCSObject;
import org.jclouds.googlecloudstorage.domain.ListPage;
import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
@@ -66,24 +68,21 @@ import com.google.common.base.Supplier;
import com.google.common.base.Throwables;
import com.google.common.collect.Iterables;
import com.google.common.hash.HashCode;
-import com.google.inject.Inject;
import com.google.inject.Provider;
-@Singleton
-public class GCSBlobStore extends BaseBlobStore {
+public final class GCSBlobStore extends BaseBlobStore {
- GoogleCloudStorageApi api;
- BucketToStorageMetadata bucketToStorageMetadata;
- ObjectToBlobMetadata objectToBlobMetadata;
- ObjectListToStorageMetadata objectListToStorageMetadata;
- Provider<FetchBlobMetadata> fetchBlobMetadataProvider;
- BlobMetadataToObjectTemplate blobMetadataToObjectTemplate;
- BlobStoreListContainerOptionsToListObjectOptions listContainerOptionsToListObjectOptions;
- MultipartUploadStrategy multipartUploadStrategy;
- Supplier<String> projectId;
+ private final GoogleCloudStorageApi api;
+ private final BucketToStorageMetadata bucketToStorageMetadata;
+ private final ObjectToBlobMetadata objectToBlobMetadata;
+ private final ObjectListToStorageMetadata objectListToStorageMetadata;
+ private final Provider<FetchBlobMetadata> fetchBlobMetadataProvider;
+ private final BlobMetadataToObjectTemplate blobMetadataToObjectTemplate;
+ private final BlobStoreListContainerOptionsToListObjectOptions listContainerOptionsToListObjectOptions;
+ private final MultipartUploadStrategy multipartUploadStrategy;
+ private final Supplier<String> projectId;
- @Inject
- protected GCSBlobStore(BlobStoreContext context, BlobUtils blobUtils, Supplier<Location> defaultLocation,
+ @Inject GCSBlobStore(BlobStoreContext context, BlobUtils blobUtils, Supplier<Location> defaultLocation,
@Memoized Supplier<Set<? extends Location>> locations, GoogleCloudStorageApi api,
BucketToStorageMetadata bucketToStorageMetadata, ObjectToBlobMetadata objectToBlobMetadata,
ObjectListToStorageMetadata objectListToStorageMetadata,
@@ -105,9 +104,10 @@ public class GCSBlobStore extends BaseBlobStore {
@Override
public PageSet<? extends StorageMetadata> list() {
- return new Function<ListPage<Bucket>, org.jclouds.blobstore.domain.PageSet<? extends StorageMetadata>>() {
- public org.jclouds.blobstore.domain.PageSet<? extends StorageMetadata> apply(ListPage<Bucket> from) {
- return new PageSetImpl<StorageMetadata>(Iterables.transform(from, bucketToStorageMetadata), null);
+ return new Function<ListPage<Bucket>, PageSet<? extends StorageMetadata>>() {
+ public PageSet<? extends StorageMetadata> apply(ListPage<Bucket> from) {
+ return new PageSetImpl<StorageMetadata>(Iterables.transform(from, bucketToStorageMetadata),
+ from.nextPageToken());
}
}.apply(api.getBucketApi().listBucket(projectId.get()));
}
@@ -121,8 +121,7 @@ public class GCSBlobStore extends BaseBlobStore {
public boolean createContainerInLocation(Location location, String container) {
BucketTemplate template = new BucketTemplate().name(container);
if (location != null) {
- org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Location gcsLocation = org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Location
- .fromValue(location.getId());
+ DomainResourceReferences.Location gcsLocation = DomainResourceReferences.Location.fromValue(location.getId());
template = template.location(gcsLocation);
}
return api.getBucketApi().createBucket(projectId.get(), template) != null;
@@ -132,15 +131,13 @@ public class GCSBlobStore extends BaseBlobStore {
public boolean createContainerInLocation(Location location, String container, CreateContainerOptions options) {
BucketTemplate template = new BucketTemplate().name(container);
if (location != null) {
- org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Location gcsLocation = org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Location
- .fromValue(location.getId());
+ DomainResourceReferences.Location gcsLocation = DomainResourceReferences.Location.fromValue(location.getId());
template = template.location(gcsLocation);
}
Bucket bucket = api.getBucketApi().createBucket(projectId.get(), template);
if (options.isPublicRead()) {
try {
- ObjectAccessControlsTemplate doAclTemplate = ObjectAccessControlsTemplate
- .create("allUsers", ObjectRole.READER);
+ ObjectAccessControlsTemplate doAclTemplate = ObjectAccessControlsTemplate.create("allUsers", READER);
api.getDefaultObjectAccessControlsApi().createDefaultObjectAccessControls(container, doAclTemplate);
} catch (HttpResponseException e) {
// If DefaultObjectAccessControls operation fail, Reverse create operation the operation.
@@ -162,7 +159,6 @@ public class GCSBlobStore extends BaseBlobStore {
@Override
public PageSet<? extends StorageMetadata> list(String container, ListContainerOptions options) {
-
if (options != null && options != ListContainerOptions.NONE) {
ListObjectOptions listOptions = listContainerOptionsToListObjectOptions.apply(options);
ListPage<GCSObject> gcsList = api.getObjectApi().listObjects(container, listOptions);
@@ -218,7 +214,7 @@ public class GCSBlobStore extends BaseBlobStore {
}
@Override
- public Blob getBlob(String container, String name, org.jclouds.blobstore.options.GetOptions options) {
+ public Blob getBlob(String container, String name, GetOptions options) {
GCSObject gcsObject = api.getObjectApi().getObject(container, name);
if (gcsObject == null) {
return null;
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/a9ea2adf/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
index a5c6f73..1fc612d 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
@@ -58,6 +58,5 @@ public class ObjectListToStorageMetadata implements Function<ListPage<GCSObject>
return input;
}
}), from.nextPageToken());
-
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/a9ea2adf/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
index c244f5c..3ee612d 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
@@ -20,13 +20,10 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.util.List;
-import javax.annotation.Resource;
-import javax.inject.Named;
import javax.inject.Provider;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobBuilder;
-import org.jclouds.blobstore.reference.BlobStoreConstants;
import org.jclouds.googlecloudstorage.GoogleCloudStorageApi;
import org.jclouds.googlecloudstorage.blobstore.functions.BlobMetadataToObjectTemplate;
import org.jclouds.googlecloudstorage.domain.GCSObject;
@@ -34,16 +31,11 @@ import org.jclouds.googlecloudstorage.domain.templates.ComposeObjectTemplate;
import org.jclouds.googlecloudstorage.domain.templates.ObjectTemplate;
import org.jclouds.io.Payload;
import org.jclouds.io.PayloadSlicer;
-import org.jclouds.logging.Logger;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
-public class SequentialMultipartUploadStrategy extends MultipartUploadStrategy {
-
- @Resource
- @Named(BlobStoreConstants.BLOBSTORE_LOGGER)
- private Logger logger = Logger.NULL;
+public final class SequentialMultipartUploadStrategy extends MultipartUploadStrategy {
private final GoogleCloudStorageApi api;
private final Provider<BlobBuilder> blobBuilders;
@@ -52,16 +44,15 @@ public class SequentialMultipartUploadStrategy extends MultipartUploadStrategy {
private final PayloadSlicer slicer;
private final MultipartNamingStrategy namingStrategy;
- @Inject
- public SequentialMultipartUploadStrategy(GoogleCloudStorageApi api, Provider<BlobBuilder> blobBuilders,
+ @Inject SequentialMultipartUploadStrategy(GoogleCloudStorageApi api, Provider<BlobBuilder> blobBuilders,
BlobMetadataToObjectTemplate blob2ObjectTemplate, MultipartUploadSlicingAlgorithm algorithm,
PayloadSlicer slicer, MultipartNamingStrategy namingStrategy) {
- this.api = checkNotNull(api, "api");
- this.blobBuilders = checkNotNull(blobBuilders, "blobBuilders");
- this.blob2ObjectTemplate = checkNotNull(blob2ObjectTemplate, "blob2Object");
- this.algorithm = checkNotNull(algorithm, "algorithm");
- this.slicer = checkNotNull(slicer, "slicer");
- this.namingStrategy = checkNotNull(namingStrategy, "namingStrategy");
+ this.api = api;
+ this.blobBuilders = blobBuilders;
+ this.blob2ObjectTemplate = blob2ObjectTemplate;
+ this.algorithm = algorithm;
+ this.slicer = slicer;
+ this.namingStrategy = namingStrategy;
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/a9ea2adf/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GCSObject.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GCSObject.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GCSObject.java
index 7b3fc7f..77c1350 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GCSObject.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/GCSObject.java
@@ -44,31 +44,31 @@ public abstract class GCSObject {
public abstract String etag();
public abstract String name();
public abstract String bucket();
- public abstract Long generation();
- public abstract Long metageneration();
+ public abstract long generation();
+ public abstract long metageneration();
public abstract String contentType();
public abstract Date updated();
- public abstract Date timeDeleted();
+ @Nullable public abstract Date timeDeleted();
public abstract StorageClass storageClass();
- public abstract Long size();
+ public abstract long size();
@Nullable public abstract String md5Hash();
public abstract URI mediaLink();
public abstract Map<String, String> metadata();
- public abstract String contentEncoding();
- public abstract String contentDisposition();
- public abstract String contentLanguage();
- public abstract String cacheControl();
+ @Nullable public abstract String contentEncoding();
+ @Nullable public abstract String contentDisposition();
+ @Nullable public abstract String contentLanguage();
+ @Nullable public abstract String cacheControl();
public abstract List<ObjectAccessControls> acl();
public abstract Owner owner();
@Nullable public abstract String crc32c();
- public abstract Integer componentCount();
+ @Nullable public abstract Integer componentCount();
@SerializedNames(
{ "id", "selfLink", "etag", "name", "bucket", "generation", "metageneration", "contentType", "updated",
"timeDeleted", "storageClass", "size", "md5Hash", "mediaLink", "metadata", "contentEncoding",
"contentDisposition", "contentLanguage", "cacheControl", "acl", "owner", "crc32c", "componentCount" })
- public static GCSObject create(String id, URI selfLink, String etag, String name, String bucket, Long generation,
- Long metageneration, String contentType, Date updated, Date timeDeleted, StorageClass storageClass, Long size,
+ public static GCSObject create(String id, URI selfLink, String etag, String name, String bucket, long generation,
+ long metageneration, String contentType, Date updated, Date timeDeleted, StorageClass storageClass, long size,
String md5Hash, URI mediaLink, Map<String, String> metadata, String contentEncoding, String contentDisposition,
String contentLanguage, String cacheControl, List<ObjectAccessControls> acl, Owner owner, String crc32c,
Integer componentCount) {
http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/a9ea2adf/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
index 77d6cf0..75cdf2d 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/ObjectApi.java
@@ -474,7 +474,6 @@ public interface ObjectApi {
*
* @return a {@link GCSObject}
*/
-
@Named("Object:multipartUpload")
@POST
@QueryParams(keys = "uploadType", values = "multipart")
@@ -483,6 +482,6 @@ public interface ObjectApi {
@OAuthScopes(STORAGE_FULLCONTROL_SCOPE)
@MapBinder(MultipartUploadBinder.class)
GCSObject multipartUpload(@PathParam("bucket") String bucketName,
- @BinderParam(BindToJsonPayload.class) ObjectTemplate objectTemplate,
+ @PayloadParam("template") ObjectTemplate objectTemplate,
@PayloadParam("payload") Payload payload);
}