Another cleanup of GCS.

This commit is contained in:
Adrian Cole 2014-11-04 11:15:31 -08:00
parent b77ddb3351
commit 09df55e295
5 changed files with 40 additions and 23 deletions

View File

@ -14,14 +14,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jclouds.googlecloudstorage.fallback;
package org.jclouds.googlecloudstorage;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Throwables.propagate;
import static org.jclouds.Fallbacks.valOnNotFoundOr404;
import java.util.Iterator;
import org.jclouds.Fallback;
import org.jclouds.googlecloudstorage.domain.ListPage;
public final class GCSFallbacks {
import com.google.common.collect.Iterators;
public final class GoogleCloudStorageFallbacks {
public static final class NullOnBucketAlreadyExists implements Fallback<Object> {
public Object createOrPropagate(Throwable t) throws Exception {
@ -31,4 +37,16 @@ public final class GCSFallbacks {
throw propagate(t);
}
}
public static final class EmptyListPageOnNotFoundOr404 implements Fallback<Object> {
@Override public ListPage<Object> createOrPropagate(Throwable t) throws Exception {
return valOnNotFoundOr404(ListPage.create(null, null, null), t);
}
}
public static final class EmptyIteratorOnNotFoundOr404 implements Fallback<Object> {
@Override public Iterator<Object> createOrPropagate(Throwable t) throws Exception {
return valOnNotFoundOr404(Iterators.emptyIterator(), t);
}
}
}

View File

@ -35,10 +35,11 @@ import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
import org.jclouds.Fallbacks.TrueOnNotFoundOr404;
import org.jclouds.blobstore.BlobStoreFallbacks.NullOnKeyAlreadyExists;
import org.jclouds.googlecloudstorage.GoogleCloudStorageFallbacks.EmptyListPageOnNotFoundOr404;
import org.jclouds.googlecloudstorage.GoogleCloudStorageFallbacks.NullOnBucketAlreadyExists;
import org.jclouds.googlecloudstorage.domain.Bucket;
import org.jclouds.googlecloudstorage.domain.ListPage;
import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
import org.jclouds.googlecloudstorage.fallback.GCSFallbacks.NullOnBucketAlreadyExists;
import org.jclouds.googlecloudstorage.options.DeleteBucketOptions;
import org.jclouds.googlecloudstorage.options.GetBucketOptions;
import org.jclouds.googlecloudstorage.options.InsertBucketOptions;
@ -202,8 +203,7 @@ public interface BucketApi {
@Produces(MediaType.APPLICATION_JSON)
@Path("/b")
@OAuthScopes(STORAGE_FULLCONTROL_SCOPE)
@Fallback(NullOnNotFoundOr404.class)
@Nullable
@Fallback(EmptyListPageOnNotFoundOr404.class)
ListPage<Bucket> listBucket(@QueryParam("project") String projectId);
/**
@ -220,8 +220,7 @@ public interface BucketApi {
@Produces(MediaType.APPLICATION_JSON)
@Path("/b")
@OAuthScopes(STORAGE_FULLCONTROL_SCOPE)
@Fallback(NullOnNotFoundOr404.class)
@Nullable
@Fallback(EmptyListPageOnNotFoundOr404.class)
ListPage<Bucket> listBucket(@QueryParam("project") String projectId, ListOptions options);
/**

View File

@ -34,6 +34,7 @@ import javax.ws.rs.core.MediaType;
import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
import org.jclouds.Fallbacks.TrueOnNotFoundOr404;
import org.jclouds.googlecloudstorage.GoogleCloudStorageFallbacks.EmptyListPageOnNotFoundOr404;
import org.jclouds.googlecloudstorage.binders.MultipartUploadBinder;
import org.jclouds.googlecloudstorage.binders.UploadBinder;
import org.jclouds.googlecloudstorage.domain.GCSObject;
@ -48,8 +49,8 @@ import org.jclouds.googlecloudstorage.options.InsertObjectOptions;
import org.jclouds.googlecloudstorage.options.ListObjectOptions;
import org.jclouds.googlecloudstorage.options.UpdateObjectOptions;
import org.jclouds.googlecloudstorage.parser.ParseToPayloadEnclosing;
import org.jclouds.http.internal.PayloadEnclosingImpl;
import org.jclouds.io.Payload;
import org.jclouds.io.PayloadEnclosing;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.oauth.v2.config.OAuthScopes;
import org.jclouds.oauth.v2.filters.OAuthAuthenticator;
@ -154,7 +155,7 @@ public interface ObjectApi {
@ResponseParser(ParseToPayloadEnclosing.class)
@Fallback(NullOnNotFoundOr404.class)
@Nullable
PayloadEnclosingImpl download(@PathParam("bucket") String bucketName, @PathParam("object") String objectName);
PayloadEnclosing download(@PathParam("bucket") String bucketName, @PathParam("object") String objectName);
/**
* Retrieves objects
@ -177,8 +178,7 @@ public interface ObjectApi {
@ResponseParser(ParseToPayloadEnclosing.class)
@OAuthScopes(STORAGE_FULLCONTROL_SCOPE)
@Fallback(NullOnNotFoundOr404.class)
@Nullable
PayloadEnclosingImpl download(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
@Nullable PayloadEnclosing download(@PathParam("bucket") String bucketName, @PathParam("object") String objectName,
GetObjectOptions options);
/**
@ -254,8 +254,7 @@ public interface ObjectApi {
@Produces(MediaType.APPLICATION_JSON)
@Path("storage/v1/b/{bucket}/o")
@OAuthScopes(STORAGE_FULLCONTROL_SCOPE)
@Fallback(NullOnNotFoundOr404.class)
@Nullable
@Fallback(EmptyListPageOnNotFoundOr404.class)
ListPage<GCSObject> listObjects(@PathParam("bucket") String bucketName);
/**

View File

@ -20,21 +20,22 @@ package org.jclouds.googlecloudstorage.features;
import static org.jclouds.googlecloudstorage.reference.GoogleCloudStorageConstants.STORAGE_FULLCONTROL_SCOPE;
import static org.jclouds.googlecloudstorage.reference.GoogleCloudStorageConstants.STORAGE_READONLY_SCOPE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.AssertJUnit.assertNull;
import javax.ws.rs.core.MediaType;
import org.jclouds.googlecloudstorage.domain.BucketAccessControls;
import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection;
import org.jclouds.googlecloudstorage.domain.BucketAccessControls.Role;
import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Projection;
import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
import org.jclouds.googlecloudstorage.internal.BaseGoogleCloudStorageApiExpectTest;
import org.jclouds.googlecloudstorage.options.GetBucketOptions;
import org.jclouds.googlecloudstorage.options.ListOptions;
import org.jclouds.googlecloudstorage.options.UpdateBucketOptions;
import org.jclouds.googlecloudstorage.parse.BucketUpdateTest;
import org.jclouds.googlecloudstorage.parse.NoAclBucketTest;
import org.jclouds.googlecloudstorage.parse.NoAclBucketListTest;
import org.jclouds.googlecloudstorage.parse.NoAclBucketTest;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.testng.annotations.Test;
@ -126,7 +127,7 @@ public class BucketApiExpectTest extends BaseGoogleCloudStorageApiExpectTest {
BucketApi api = requestsSendResponses(requestForScopes(STORAGE_FULLCONTROL_SCOPE), TOKEN_RESPONSE,
LIST_BUCKET_REQUEST, listResponse).getBucketApi();
assertNull(api.listBucket(EXPECTED_TEST_PROJECT_NUMBER));
assertTrue(api.listBucket(EXPECTED_TEST_PROJECT_NUMBER).isEmpty());
}
// Test createBucket without options

View File

@ -49,6 +49,7 @@ import org.jclouds.googlecloudstorage.options.UpdateObjectOptions;
import org.jclouds.http.internal.PayloadEnclosingImpl;
import org.jclouds.io.ByteStreams2;
import org.jclouds.io.ContentMetadata;
import org.jclouds.io.PayloadEnclosing;
import org.jclouds.io.Payloads;
import org.jclouds.io.payloads.ByteSourcePayload;
import org.jclouds.utils.TestUtils;
@ -74,7 +75,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
private static final String COMPOSED_OBJECT = "ComposedObject1.txt";
private static final String COMPOSED_OBJECT2 = "ComposedObject2.json";
private PayloadEnclosingImpl testPayload;
private PayloadEnclosing testPayload;
private Long RANDOM_LONG = 100L;
private Long metageneration;
@ -105,8 +106,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
ByteSource byteSource = TestUtils.randomByteSource().slice(0, contentLength);
ByteSourcePayload byteSourcePayload = Payloads.newByteSourcePayload(byteSource);
PayloadEnclosingImpl payload = new PayloadEnclosingImpl();
payload.setPayload(byteSourcePayload);
PayloadEnclosing payload = new PayloadEnclosingImpl(byteSourcePayload);
payload.getPayload().getContentMetadata().setContentLength(contentLength);
this.testPayload = payload;
@ -123,7 +123,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
@Test(groups = "live", dependsOnMethods = "testSimpleUpload")
public void testDownload() throws IOException {
PayloadEnclosingImpl impl = api().download(BUCKET_NAME, UPLOAD_OBJECT_NAME);
PayloadEnclosing impl = api().download(BUCKET_NAME, UPLOAD_OBJECT_NAME);
ContentMetadata meta = impl.getPayload().getContentMetadata();
assertNotNull(impl);
assertNotNull(impl.getPayload());
@ -196,7 +196,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
// Test for data
PayloadEnclosingImpl impl = api().download(BUCKET_NAME2, COPIED_OBJECT_NAME);
PayloadEnclosing impl = api().download(BUCKET_NAME2, COPIED_OBJECT_NAME);
assertNotNull(impl);
assertEquals(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream()),
ByteStreams2.toByteArrayAndClose(testPayload.getPayload().openStream()));
@ -364,7 +364,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
long contentLength = 32 * 1024L;
ByteSource byteSource = TestUtils.randomByteSource().slice(0, contentLength);
ByteSourcePayload payload = Payloads.newByteSourcePayload(byteSource);
PayloadEnclosingImpl payloadImpl = new PayloadEnclosingImpl(payload);
PayloadEnclosing payloadImpl = new PayloadEnclosingImpl(payload);
ObjectTemplate template = new ObjectTemplate();
@ -389,7 +389,7 @@ public class ObjectApiLiveTest extends BaseGoogleCloudStorageApiLiveTest {
assertThat(gcsObject.metadata()).contains(entry("custommetakey1", "custommetavalue1"),
entry("Adrian", "powderpuff")).doesNotContainKey("adrian");
PayloadEnclosingImpl impl = api().download(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT);
PayloadEnclosing impl = api().download(BUCKET_NAME, MULTIPART_UPLOAD_OBJECT);
assertThat(ByteStreams2.toByteArrayAndClose(impl.getPayload().openStream())).isEqualTo(
ByteStreams2.toByteArrayAndClose(payloadImpl.getPayload().openStream()));