You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2014/10/07 00:30:39 UTC
[02/52] [abbrv] JCLOUDS-150 add SubmissionAsyncBlobStore;
unasync s3 and aws-s3
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
index 1c138ae..ecc6e3f 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobSignerExpectTest.java
@@ -19,10 +19,9 @@ package org.jclouds.s3.blobstore;
import org.jclouds.blobstore.internal.BaseBlobSignerExpectTest;
import org.jclouds.date.TimeStamp;
import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.s3.S3AsyncClient;
+import org.jclouds.rest.ConfiguresHttpApi;
import org.jclouds.s3.S3Client;
-import org.jclouds.s3.config.S3RestClientModule;
+import org.jclouds.s3.config.S3HttpApiModule;
import org.testng.SkipException;
import org.testng.annotations.Test;
@@ -106,11 +105,11 @@ public class S3BlobSignerExpectTest extends BaseBlobSignerExpectTest {
@Override
protected Module createModule() {
- return new TestS3RestClientModule();
+ return new TestS3HttpApiModule();
}
- @ConfiguresRestClient
- private static final class TestS3RestClientModule extends S3RestClientModule<S3Client, S3AsyncClient> {
+ @ConfiguresHttpApi
+ private static final class TestS3HttpApiModule extends S3HttpApiModule<S3Client> {
@Override
protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureTest.java b/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureTest.java
index 77cd173..48da148 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureTest.java
@@ -26,11 +26,11 @@ import java.util.Properties;
import org.jclouds.blobstore.binders.BindBlobToMultipartFormTest;
import org.jclouds.http.HttpRequest;
import org.jclouds.rest.internal.GeneratedHttpRequest;
-import org.jclouds.s3.S3AsyncClient;
+import org.jclouds.s3.S3Client;
import org.jclouds.s3.domain.AccessControlList;
import org.jclouds.s3.domain.CannedAccessPolicy;
import org.jclouds.s3.domain.S3Object;
-import org.jclouds.s3.internal.BaseS3AsyncClientTest;
+import org.jclouds.s3.internal.BaseS3ClientTest;
import org.jclouds.s3.options.PutObjectOptions;
import org.jclouds.s3.reference.S3Headers;
import org.testng.annotations.DataProvider;
@@ -45,7 +45,7 @@ import com.google.common.net.HttpHeaders;
*/
// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
@Test(groups = "unit", testName = "RequestAuthorizeSignatureTest")
-public class RequestAuthorizeSignatureTest extends BaseS3AsyncClientTest<S3AsyncClient> {
+public class RequestAuthorizeSignatureTest extends BaseS3ClientTest<S3Client> {
String bucketName = "bucket";
@DataProvider(parallel = true)
@@ -84,7 +84,7 @@ public class RequestAuthorizeSignatureTest extends BaseS3AsyncClientTest<S3Async
@Test
void testAppendBucketNameHostHeader() throws SecurityException, NoSuchMethodException {
GeneratedHttpRequest request = processor.createRequest(
- method(S3AsyncClient.class, "getBucketLocation", String.class),
+ method(S3Client.class, "getBucketLocation", String.class),
ImmutableList.<Object> of("bucket"));
StringBuilder builder = new StringBuilder();
filter.appendBucketName(request, builder);
@@ -101,7 +101,7 @@ public class RequestAuthorizeSignatureTest extends BaseS3AsyncClientTest<S3Async
private GeneratedHttpRequest putBucketAcl() throws NoSuchMethodException {
return processor.createRequest(
- method(S3AsyncClient.class, "putBucketACL", String.class, AccessControlList.class),
+ method(S3Client.class, "putBucketACL", String.class, AccessControlList.class),
ImmutableList.<Object> of("bucket",
AccessControlList.fromCannedAccessPolicy(CannedAccessPolicy.PRIVATE, "1234")));
}
@@ -117,7 +117,7 @@ public class RequestAuthorizeSignatureTest extends BaseS3AsyncClientTest<S3Async
}
private GeneratedHttpRequest listOwnedBuckets() throws NoSuchMethodException {
- return processor.createRequest(method(S3AsyncClient.class, "listOwnedBuckets"),
+ return processor.createRequest(method(S3Client.class, "listOwnedBuckets"),
ImmutableList.of());
}
@@ -134,14 +134,14 @@ public class RequestAuthorizeSignatureTest extends BaseS3AsyncClientTest<S3Async
private HttpRequest putObject() throws NoSuchMethodException {
S3Object object = blobToS3Object.apply(BindBlobToMultipartFormTest.TEST_BLOB);
object.getMetadata().getUserMetadata().put("Adrian", "foo");
- return processor.createRequest(method(S3AsyncClient.class, "putObject", String.class,
+ return processor.createRequest(method(S3Client.class, "putObject", String.class,
S3Object.class, PutObjectOptions[].class), ImmutableList.<Object> of("bucket", object));
}
@Test
void testAppendBucketNameInURIPath() throws SecurityException, NoSuchMethodException {
GeneratedHttpRequest request = processor.createRequest(
- method(S3AsyncClient.class, "getBucketLocation", String.class),
+ method(S3Client.class, "getBucketLocation", String.class),
ImmutableList.<Object> of(bucketName));
URI uri = request.getEndpoint();
assertEquals(uri.getHost(), "s3.amazonaws.com");
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureWithSessionCredentialsTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureWithSessionCredentialsTest.java b/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureWithSessionCredentialsTest.java
index 396664a..8ae2fc1 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureWithSessionCredentialsTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/filters/RequestAuthorizeSignatureWithSessionCredentialsTest.java
@@ -27,12 +27,11 @@ import org.jclouds.domain.Credentials;
import org.jclouds.http.HttpRequest;
import org.jclouds.logging.config.NullLoggingModule;
import org.jclouds.reflect.Invocation;
-import org.jclouds.rest.ConfiguresRestClient;
+import org.jclouds.rest.ConfiguresHttpApi;
import org.jclouds.rest.internal.BaseRestApiTest.MockModule;
import org.jclouds.rest.internal.GeneratedHttpRequest;
-import org.jclouds.s3.S3AsyncClient;
import org.jclouds.s3.S3Client;
-import org.jclouds.s3.config.S3RestClientModule;
+import org.jclouds.s3.config.S3HttpApiModule;
import org.testng.annotations.Test;
import com.google.common.base.Supplier;
@@ -50,11 +49,11 @@ public class RequestAuthorizeSignatureWithSessionCredentialsTest {
public static Injector injector(Credentials creds) {
return ContextBuilder.newBuilder("s3")
.credentialsSupplier(Suppliers.<Credentials> ofInstance(creds))
- .modules(ImmutableList.<Module> of(new MockModule(), new NullLoggingModule(), new TestS3RestClientModule())).buildInjector();
+ .modules(ImmutableList.<Module> of(new MockModule(), new NullLoggingModule(), new TestS3HttpApiModule())).buildInjector();
}
- @ConfiguresRestClient
- private static final class TestS3RestClientModule extends S3RestClientModule<S3Client, S3AsyncClient> {
+ @ConfiguresHttpApi
+ private static final class TestS3HttpApiModule extends S3HttpApiModule<S3Client> {
@Override
protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
@@ -72,7 +71,7 @@ public class RequestAuthorizeSignatureWithSessionCredentialsTest {
.sessionToken("AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT")
.expiration(new SimpleDateFormatDateService().iso8601DateParse("2011-07-11T19:55:29.611Z")).build();
- Invocation invocation = Invocation.create(method(S3AsyncClient.class, "bucketExists", String.class),
+ Invocation invocation = Invocation.create(method(S3Client.class, "bucketExists", String.class),
ImmutableList.<Object> of("foo"));
HttpRequest bucketFooExists = GeneratedHttpRequest.builder().method("GET")
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3AsyncClientTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3AsyncClientTest.java b/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3AsyncClientTest.java
deleted file mode 100644
index b1fca99..0000000
--- a/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3AsyncClientTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.s3.internal;
-
-import static org.testng.Assert.assertEquals;
-
-import java.io.IOException;
-
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.internal.BaseAsyncClientTest;
-import org.jclouds.s3.S3ApiMetadata;
-import org.jclouds.s3.S3AsyncClient;
-import org.jclouds.s3.blobstore.functions.BlobToObject;
-import org.jclouds.s3.filters.RequestAuthorizeSignature;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-@Test(groups = "unit")
-public abstract class BaseS3AsyncClientTest<T extends S3AsyncClient> extends BaseAsyncClientTest<T> {
-
- protected BlobToObject blobToS3Object;
- protected RequestAuthorizeSignature filter;
-
- @Override
- protected void checkFilters(HttpRequest request) {
- assertEquals(request.getFilters().size(), 1);
- assertEquals(request.getFilters().get(0).getClass(), RequestAuthorizeSignature.class);
- }
-
-
- @BeforeClass
- @Override
- protected void setupFactory() throws IOException {
- super.setupFactory();
- blobToS3Object = injector.getInstance(BlobToObject.class);
- filter = injector.getInstance(RequestAuthorizeSignature.class);
- }
-
- public BaseS3AsyncClientTest() {
- super();
- }
-
- @Override
- public S3ApiMetadata createApiMetadata() {
- return new S3ApiMetadata();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java b/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java
index 0ee36fe..260a242 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientExpectTest.java
@@ -17,12 +17,11 @@
package org.jclouds.s3.internal;
import org.jclouds.date.TimeStamp;
-import org.jclouds.rest.ConfiguresRestClient;
+import org.jclouds.rest.ConfiguresHttpApi;
import org.jclouds.rest.internal.BaseRestClientExpectTest;
import org.jclouds.s3.S3ApiMetadata;
-import org.jclouds.s3.S3AsyncClient;
import org.jclouds.s3.S3Client;
-import org.jclouds.s3.config.S3RestClientModule;
+import org.jclouds.s3.config.S3HttpApiModule;
import com.google.common.base.Supplier;
import com.google.inject.Module;
@@ -31,8 +30,8 @@ public abstract class BaseS3ClientExpectTest extends BaseRestClientExpectTest<S3
protected static final String CONSTANT_DATE = "2009-11-08T15:54:08.897Z";
- @ConfiguresRestClient
- private static final class TestS3RestClientModule extends S3RestClientModule<S3Client, S3AsyncClient> {
+ @ConfiguresHttpApi
+ private static final class TestS3HttpApiModule extends S3HttpApiModule<S3Client> {
@Override
protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
@@ -42,7 +41,7 @@ public abstract class BaseS3ClientExpectTest extends BaseRestClientExpectTest<S3
@Override
protected Module createModule() {
- return new TestS3RestClientModule();
+ return new TestS3HttpApiModule();
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientTest.java b/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientTest.java
new file mode 100644
index 0000000..2b418ae
--- /dev/null
+++ b/apis/s3/src/test/java/org/jclouds/s3/internal/BaseS3ClientTest.java
@@ -0,0 +1,62 @@
+/*
+ * 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.s3.internal;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.rest.internal.BaseAsyncClientTest;
+import org.jclouds.s3.S3ApiMetadata;
+import org.jclouds.s3.S3Client;
+import org.jclouds.s3.blobstore.functions.BlobToObject;
+import org.jclouds.s3.filters.RequestAuthorizeSignature;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+@Test(groups = "unit")
+public abstract class BaseS3ClientTest<T extends S3Client> extends BaseAsyncClientTest<T> {
+
+ protected BlobToObject blobToS3Object;
+ protected RequestAuthorizeSignature filter;
+
+ @Override
+ protected void checkFilters(HttpRequest request) {
+ assertEquals(request.getFilters().size(), 1);
+ assertEquals(request.getFilters().get(0).getClass(), RequestAuthorizeSignature.class);
+ }
+
+
+ @BeforeClass
+ @Override
+ protected void setupFactory() throws IOException {
+ super.setupFactory();
+ blobToS3Object = injector.getInstance(BlobToObject.class);
+ filter = injector.getInstance(RequestAuthorizeSignature.class);
+ }
+
+ public BaseS3ClientTest() {
+ super();
+ }
+
+ @Override
+ public S3ApiMetadata createApiMetadata() {
+ return new S3ApiMetadata();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java b/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java
deleted file mode 100644
index bbd79ff..0000000
--- a/apis/s3/src/test/java/org/jclouds/s3/internal/StubS3AsyncClient.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * 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.s3.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.util.concurrent.Futures.immediateFailedFuture;
-import static com.google.common.util.concurrent.Futures.immediateFuture;
-import static com.google.common.util.concurrent.Futures.transform;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.Constants;
-import org.jclouds.aws.domain.Region;
-import org.jclouds.blobstore.AsyncBlobStore;
-import org.jclouds.blobstore.KeyNotFoundException;
-import org.jclouds.blobstore.LocalAsyncBlobStore;
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.domain.BlobMetadata;
-import org.jclouds.blobstore.domain.MutableBlobMetadata;
-import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions;
-import org.jclouds.blobstore.options.ListContainerOptions;
-import org.jclouds.blobstore.util.BlobStoreUtils;
-import org.jclouds.date.DateService;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LocationBuilder;
-import org.jclouds.domain.LocationScope;
-import org.jclouds.http.options.GetOptions;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.lifecycle.Closer;
-import org.jclouds.s3.S3AsyncClient;
-import org.jclouds.s3.blobstore.S3AsyncBlobStore;
-import org.jclouds.s3.blobstore.functions.BlobToObject;
-import org.jclouds.s3.blobstore.functions.BlobToObjectMetadata;
-import org.jclouds.s3.blobstore.functions.BucketToContainerListOptions;
-import org.jclouds.s3.blobstore.functions.ObjectToBlob;
-import org.jclouds.s3.blobstore.functions.ResourceToBucketList;
-import org.jclouds.s3.domain.AccessControlList;
-import org.jclouds.s3.domain.AccessControlList.CanonicalUserGrantee;
-import org.jclouds.s3.domain.AccessControlList.EmailAddressGrantee;
-import org.jclouds.s3.domain.AccessControlList.Grant;
-import org.jclouds.s3.domain.BucketLogging;
-import org.jclouds.s3.domain.BucketMetadata;
-import org.jclouds.s3.domain.CannedAccessPolicy;
-import org.jclouds.s3.domain.ListBucketResponse;
-import org.jclouds.s3.domain.ObjectMetadata;
-import org.jclouds.s3.domain.Payer;
-import org.jclouds.s3.domain.S3Object;
-import org.jclouds.s3.options.CopyObjectOptions;
-import org.jclouds.s3.options.ListBucketOptions;
-import org.jclouds.s3.options.PutBucketOptions;
-import org.jclouds.s3.options.PutObjectOptions;
-
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-/**
- * Implementation of {@link S3AsyncBlobStore} which keeps all data in a local Map object.
- */
-@Singleton
-public class StubS3AsyncClient implements S3AsyncClient {
- private final DateService dateService;
- private final HttpGetOptionsListToGetOptions httpGetOptionsConverter;
- private final AsyncBlobStore blobStore;
- private final S3Object.Factory objectProvider;
- private final Blob.Factory blobProvider;
- private final ObjectToBlob object2Blob;
- private final BlobToObject blob2Object;
- private final BlobToObjectMetadata blob2ObjectMetadata;
- private final BucketToContainerListOptions bucket2ContainerListOptions;
- private final ResourceToBucketList resource2BucketList;
- private final ConcurrentMap<String, ConcurrentMap<String, Blob>> containerToBlobs;
- private final ConcurrentMap<String, Location> containerToLocation;
- private final ListeningExecutorService userExecutor;
- private final Closer closer;
-
- @Inject
- private StubS3AsyncClient(@Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
- LocalAsyncBlobStore blobStore, ConcurrentMap<String, ConcurrentMap<String, Blob>> containerToBlobs,
- ConcurrentMap<String, Location> containerToLocation, DateService dateService,
- S3Object.Factory objectProvider, Blob.Factory blobProvider,
- HttpGetOptionsListToGetOptions httpGetOptionsConverter, ObjectToBlob object2Blob, BlobToObject blob2Object,
- BlobToObjectMetadata blob2ObjectMetadata, BucketToContainerListOptions bucket2ContainerListOptions,
- ResourceToBucketList resource2BucketList, Closer closer) {
- this.userExecutor = userExecutor;
- this.containerToBlobs = containerToBlobs;
- this.containerToLocation = containerToLocation;
- this.blobStore = blobStore;
- this.objectProvider = objectProvider;
- this.blobProvider = blobProvider;
- this.dateService = dateService;
- this.httpGetOptionsConverter = httpGetOptionsConverter;
- this.object2Blob = checkNotNull(object2Blob, "object2Blob");
- this.blob2Object = checkNotNull(blob2Object, "blob2Object");
- this.blob2ObjectMetadata = checkNotNull(blob2ObjectMetadata, "blob2ObjectMetadata");
- this.bucket2ContainerListOptions = checkNotNull(bucket2ContainerListOptions, "bucket2ContainerListOptions");
- this.resource2BucketList = checkNotNull(resource2BucketList, "resource2BucketList");
- this.closer = checkNotNull(closer, "closer");
- }
-
- public static final String TEST_ACL_ID = "1a405254c932b52e5b5caaa88186bc431a1bacb9ece631f835daddaf0c47677c";
- public static final String TEST_ACL_EMAIL = "james@misterm.org";
-
- /**
- * An S3 item's "ACL" may be a {@link CannedAccessPolicy} or an {@link AccessControlList}.
- */
- private static Map<String, Object> keyToAcl = new ConcurrentHashMap<String, Object>();
-
- public static final String DEFAULT_OWNER_ID = "abc123";
-
- @Override
- public ListenableFuture<Boolean> putBucketInRegion(@Nullable String region, String name,
- PutBucketOptions... optionsList) {
- region = region == null ? Region.US_STANDARD : region;
- final PutBucketOptions options = (optionsList.length == 0) ? new PutBucketOptions() : optionsList[0];
- keyToAcl.put(name, options.getAcl());
- return blobStore.createContainerInLocation(new LocationBuilder().scope(LocationScope.REGION).id(region)
- .description(region).build(), name);
- }
-
- public ListenableFuture<ListBucketResponse> listBucket(final String name, ListBucketOptions... optionsList) {
- ListContainerOptions options = bucket2ContainerListOptions.apply(optionsList);
- return transform(blobStore.list(name, options), resource2BucketList, userExecutor);
- }
-
- public ListenableFuture<ObjectMetadata> copyObject(final String sourceBucket, final String sourceObject,
- final String destinationBucket, final String destinationObject, CopyObjectOptions... nullableOptions) {
- final CopyObjectOptions options = (nullableOptions.length == 0) ? new CopyObjectOptions() : nullableOptions[0];
- ConcurrentMap<String, Blob> source = containerToBlobs.get(sourceBucket);
- ConcurrentMap<String, Blob> dest = containerToBlobs.get(destinationBucket);
- if (source.containsKey(sourceObject)) {
- Blob object = source.get(sourceObject);
- if (options.getIfMatch() != null) {
- if (!object.getMetadata().getETag().equals(options.getIfMatch()))
- return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
- }
- if (options.getIfNoneMatch() != null) {
- if (object.getMetadata().getETag().equals(options.getIfNoneMatch()))
- return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
- }
- if (options.getIfModifiedSince() != null) {
- Date modifiedSince = dateService.rfc822DateParse(options.getIfModifiedSince());
- if (modifiedSince.after(object.getMetadata().getLastModified()))
- return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
-
- }
- if (options.getIfUnmodifiedSince() != null) {
- Date unmodifiedSince = dateService.rfc822DateParse(options.getIfUnmodifiedSince());
- if (unmodifiedSince.before(object.getMetadata().getLastModified()))
- return immediateFailedFuture(LocalAsyncBlobStore.returnResponseException(412));
- }
- Blob sourceS3 = source.get(sourceObject);
- MutableBlobMetadata newMd = BlobStoreUtils.copy(sourceS3.getMetadata(), destinationObject);
- if (options.getAcl() != null)
- keyToAcl.put(destinationBucket + "/" + destinationObject, options.getAcl());
-
- newMd.setLastModified(new Date());
- Blob newBlob = blobProvider.create(newMd);
- newBlob.setPayload(sourceS3.getPayload());
- dest.put(destinationObject, newBlob);
- return immediateFuture((ObjectMetadata) blob2ObjectMetadata.apply(BlobStoreUtils.copy(newMd)));
- }
- return immediateFailedFuture(new KeyNotFoundException(sourceBucket, sourceObject, sourceBucket + "/"
- + sourceObject));
- }
-
- public ListenableFuture<String> putObject(final String bucketName, final S3Object object,
- PutObjectOptions... nullableOptions) {
- final PutObjectOptions options = (nullableOptions.length == 0) ? new PutObjectOptions() : nullableOptions[0];
- if (options.getAcl() != null)
- keyToAcl.put(bucketName + "/" + object.getMetadata().getKey(), options.getAcl());
- return blobStore.putBlob(bucketName, object2Blob.apply(object));
- }
-
- protected AccessControlList getACLforS3Item(String bucketAndObjectKey) {
- AccessControlList acl = null;
- Object aclObj = keyToAcl.get(bucketAndObjectKey);
- if (aclObj instanceof AccessControlList) {
- acl = (AccessControlList) aclObj;
- } else if (aclObj instanceof CannedAccessPolicy) {
- acl = AccessControlList.fromCannedAccessPolicy((CannedAccessPolicy) aclObj, DEFAULT_OWNER_ID);
- } else if (aclObj == null) {
- // Default to private access policy
- acl = AccessControlList.fromCannedAccessPolicy(CannedAccessPolicy.PRIVATE, DEFAULT_OWNER_ID);
- }
- return acl;
- }
-
- public ListenableFuture<AccessControlList> getBucketACL(final String bucket) {
- return immediateFuture(getACLforS3Item(bucket));
- }
-
- public ListenableFuture<AccessControlList> getObjectACL(final String bucket, final String objectKey) {
- return immediateFuture(getACLforS3Item(bucket + "/" + objectKey));
- }
-
- /**
- * Replace any AmazonCustomerByEmail grantees with a somewhat-arbitrary canonical user grantee,
- * to match S3 which substitutes each email address grantee with that user's corresponding ID. In
- * short, although you can PUT email address grantees, these are actually subsequently returned
- * by S3 as canonical user grantees.
- *
- * @param acl
- * @return
- */
- protected AccessControlList sanitizeUploadedACL(AccessControlList acl) {
- // Replace any email address grantees with canonical user grantees, using
- // the acl's owner ID as the surrogate replacement.
- for (Grant grant : acl.getGrants()) {
- if (grant.getGrantee() instanceof EmailAddressGrantee) {
- EmailAddressGrantee emailGrantee = (EmailAddressGrantee) grant.getGrantee();
- String id = emailGrantee.getEmailAddress().equals(TEST_ACL_EMAIL) ? TEST_ACL_ID : acl.getOwner().getId();
- grant.setGrantee(new CanonicalUserGrantee(id, acl.getOwner().getDisplayName()));
- }
- }
- return acl;
- }
-
- public ListenableFuture<Boolean> putBucketACL(final String bucket, final AccessControlList acl) {
- keyToAcl.put(bucket, sanitizeUploadedACL(acl));
- return immediateFuture(true);
- }
-
- public ListenableFuture<Boolean> putObjectACL(final String bucket, final String objectKey,
- final AccessControlList acl) {
- keyToAcl.put(bucket + "/" + objectKey, sanitizeUploadedACL(acl));
- return immediateFuture(true);
- }
-
- public ListenableFuture<Boolean> bucketExists(final String bucketName) {
- return immediateFuture(containerToBlobs.containsKey(bucketName));
- }
-
- public ListenableFuture<Boolean> deleteBucketIfEmpty(String bucketName) {
- Boolean returnVal = true;
- if (containerToBlobs.containsKey(bucketName)) {
- if (containerToBlobs.get(bucketName).isEmpty())
- containerToBlobs.remove(bucketName);
- else
- returnVal = false;
- }
- return immediateFuture(returnVal);
- }
-
- public ListenableFuture<Void> deleteObject(String bucketName, String key) {
- return blobStore.removeBlob(bucketName, key);
- }
-
- public ListenableFuture<S3Object> getObject(final String bucketName, final String key, final GetOptions... options) {
- org.jclouds.blobstore.options.GetOptions getOptions = httpGetOptionsConverter.apply(options);
- return transform(blobStore.getBlob(bucketName, key, getOptions), blob2Object, userExecutor);
- }
-
- public ListenableFuture<ObjectMetadata> headObject(String bucketName, String key) {
- return transform(blobStore.blobMetadata(bucketName, key), new Function<BlobMetadata, ObjectMetadata>() {
- public ObjectMetadata apply(BlobMetadata from) {
- return blob2ObjectMetadata.apply(from);
- }
- }, userExecutor);
- }
-
- public ListenableFuture<? extends Set<BucketMetadata>> listOwnedBuckets() {
- return immediateFuture(Sets.newLinkedHashSet(Iterables.transform(containerToBlobs.keySet(),
- new Function<String, BucketMetadata>() {
- public BucketMetadata apply(String name) {
- return new BucketMetadata(name, null, null);
- }
-
- })));
- }
-
- public S3Object newS3Object() {
- return objectProvider.create(null);
- }
-
- @Override
- public ListenableFuture<String> getBucketLocation(String bucketName) {
- Location location = containerToLocation.get(bucketName);
- return immediateFuture(location.getId());
- }
-
- @Override
- public ListenableFuture<Payer> getBucketPayer(String bucketName) {
- return immediateFuture(Payer.BUCKET_OWNER);
- }
-
- @Override
- public ListenableFuture<Void> setBucketPayer(String bucketName, Payer payer) {
- return immediateFuture(null);
-
- }
-
- @Override
- public ListenableFuture<Void> disableBucketLogging(String bucketName) {
- return immediateFuture(null);
- }
-
- @Override
- public ListenableFuture<Void> enableBucketLogging(String bucketName, BucketLogging logging) {
- return immediateFuture(null);
- }
-
- @Override
- public ListenableFuture<BucketLogging> getBucketLogging(String bucketName) {
- return immediateFuture(null);
- }
-
- @Override
- public ListenableFuture<Boolean> objectExists(String bucketName, String key) {
- return immediateFuture(containerToBlobs.get(bucketName).containsKey(key));
- }
-
- @Override
- public void close() throws IOException {
- closer.close();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/apis/s3/src/test/java/org/jclouds/s3/services/BucketsLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/services/BucketsLiveTest.java b/apis/s3/src/test/java/org/jclouds/s3/services/BucketsLiveTest.java
index 558b055..bb9891f 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/services/BucketsLiveTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/services/BucketsLiveTest.java
@@ -16,6 +16,18 @@
*/
package org.jclouds.s3.services;
+import static org.jclouds.s3.S3ClientLiveTest.TEST_ACL_EMAIL;
+import static org.jclouds.s3.S3ClientLiveTest.TEST_ACL_ID;
+import static org.jclouds.s3.domain.AccessControlList.GroupGranteeURI.ALL_USERS;
+import static org.jclouds.s3.domain.AccessControlList.GroupGranteeURI.LOG_DELIVERY;
+import static org.jclouds.s3.domain.AccessControlList.Permission.FULL_CONTROL;
+import static org.jclouds.s3.domain.AccessControlList.Permission.READ;
+import static org.jclouds.s3.domain.AccessControlList.Permission.READ_ACP;
+import static org.jclouds.s3.domain.AccessControlList.Permission.WRITE;
+import static org.jclouds.s3.domain.AccessControlList.Permission.WRITE_ACP;
+import static org.jclouds.s3.domain.CannedAccessPolicy.PUBLIC_READ;
+import static org.jclouds.s3.domain.Payer.BUCKET_OWNER;
+import static org.jclouds.s3.domain.Payer.REQUESTER;
import static org.jclouds.s3.options.ListBucketOptions.Builder.afterMarker;
import static org.jclouds.s3.options.ListBucketOptions.Builder.delimiter;
import static org.jclouds.s3.options.ListBucketOptions.Builder.maxResults;
@@ -34,21 +46,15 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest;
-import org.jclouds.s3.S3ApiMetadata;
import org.jclouds.s3.S3Client;
import org.jclouds.s3.domain.AccessControlList;
import org.jclouds.s3.domain.AccessControlList.CanonicalUserGrantee;
import org.jclouds.s3.domain.AccessControlList.EmailAddressGrantee;
import org.jclouds.s3.domain.AccessControlList.Grant;
-import org.jclouds.s3.domain.AccessControlList.GroupGranteeURI;
-import org.jclouds.s3.domain.AccessControlList.Permission;
import org.jclouds.s3.domain.BucketLogging;
import org.jclouds.s3.domain.BucketMetadata;
-import org.jclouds.s3.domain.CannedAccessPolicy;
import org.jclouds.s3.domain.ListBucketResponse;
-import org.jclouds.s3.domain.Payer;
import org.jclouds.s3.domain.S3Object;
-import org.jclouds.s3.internal.StubS3AsyncClient;
import org.jclouds.util.Strings2;
import org.testng.annotations.Test;
@@ -58,13 +64,14 @@ import com.google.common.collect.Iterables;
@Test(groups = { "integration", "live" })
public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
+
public BucketsLiveTest() {
this.provider = "s3";
BaseBlobStoreIntegrationTest.SANITY_CHECK_RETURNED_BUCKET_NAME = true;
}
public S3Client getApi() {
- return view.unwrap(S3ApiMetadata.CONTEXT_TOKEN).getApi();
+ return view.unwrapApi(S3Client.class);
}
/**
@@ -94,7 +101,7 @@ public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
assertEquals(acl.getGrants().size(), 1);
assertNotNull(acl.getOwner());
String ownerId = acl.getOwner().getId();
- assertTrue(acl.hasPermission(ownerId, Permission.FULL_CONTROL));
+ assertTrue(acl.hasPermission(ownerId, FULL_CONTROL));
} finally {
returnContainer(bucketName);
}
@@ -109,7 +116,7 @@ public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
AccessControlList acl = getApi().getBucketACL(bucketName);
String ownerId = acl.getOwner().getId();
assertEquals(acl.getGrants().size(), 1);
- assertTrue(acl.hasPermission(ownerId, Permission.FULL_CONTROL));
+ assertTrue(acl.hasPermission(ownerId, FULL_CONTROL));
addGrantsToACL(acl);
assertEquals(acl.getGrants().size(), 4);
@@ -129,26 +136,26 @@ public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
assertEquals(acl.getGrants().size(), 4, acl.toString());
- assertTrue(acl.hasPermission(ownerId, Permission.FULL_CONTROL), acl.toString());
- assertTrue(acl.hasPermission(GroupGranteeURI.ALL_USERS, Permission.READ), acl.toString());
- assertTrue(acl.hasPermission(ownerId, Permission.WRITE_ACP), acl.toString());
+ assertTrue(acl.hasPermission(ownerId, FULL_CONTROL), acl.toString());
+ assertTrue(acl.hasPermission(ALL_USERS, READ), acl.toString());
+ assertTrue(acl.hasPermission(ownerId, WRITE_ACP), acl.toString());
// EmailAddressGrantee is replaced by a CanonicalUserGrantee, so we cannot test by email addr
- assertTrue(acl.hasPermission(StubS3AsyncClient.TEST_ACL_ID, Permission.READ_ACP), acl.toString());
+ assertTrue(acl.hasPermission(TEST_ACL_ID, READ_ACP), acl.toString());
}
private void addGrantsToACL(AccessControlList acl) {
String ownerId = acl.getOwner().getId();
- acl.addPermission(GroupGranteeURI.ALL_USERS, Permission.READ);
- acl.addPermission(new EmailAddressGrantee(StubS3AsyncClient.TEST_ACL_EMAIL), Permission.READ_ACP);
- acl.addPermission(new CanonicalUserGrantee(ownerId), Permission.WRITE_ACP);
+ acl.addPermission(ALL_USERS, READ);
+ acl.addPermission(new EmailAddressGrantee(TEST_ACL_EMAIL), READ_ACP);
+ acl.addPermission(new CanonicalUserGrantee(ownerId), WRITE_ACP);
}
public void testPublicReadAccessPolicy() throws Exception {
String bucketName = getScratchContainerName();
try {
- getApi().putBucketInRegion(null, bucketName, withBucketAcl(CannedAccessPolicy.PUBLIC_READ));
+ getApi().putBucketInRegion(null, bucketName, withBucketAcl(PUBLIC_READ));
AccessControlList acl = getApi().getBucketACL(bucketName);
- assertTrue(acl.hasPermission(GroupGranteeURI.ALL_USERS, Permission.READ), acl.toString());
+ assertTrue(acl.hasPermission(ALL_USERS, READ), acl.toString());
// TODO: I believe that the following should work based on the above acl assertion passing.
// However, it fails on 403
// URL url = new URL(String.format("http://%s.s3.amazonaws.com", bucketName));
@@ -173,23 +180,23 @@ public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
public void testBucketPayer() throws Exception {
final String bucketName = getContainerName();
try {
- assertEquals(Payer.BUCKET_OWNER, getApi().getBucketPayer(bucketName));
- getApi().setBucketPayer(bucketName, Payer.REQUESTER);
+ assertEquals(BUCKET_OWNER, getApi().getBucketPayer(bucketName));
+ getApi().setBucketPayer(bucketName, REQUESTER);
assertConsistencyAware(new Runnable() {
public void run() {
try {
- assertEquals(Payer.REQUESTER, getApi().getBucketPayer(bucketName));
+ assertEquals(REQUESTER, getApi().getBucketPayer(bucketName));
} catch (Exception e) {
Throwables.propagateIfPossible(e);
}
}
});
- getApi().setBucketPayer(bucketName, Payer.BUCKET_OWNER);
+ getApi().setBucketPayer(bucketName, BUCKET_OWNER);
assertConsistencyAware(new Runnable() {
public void run() {
try {
- assertEquals(Payer.BUCKET_OWNER, getApi().getBucketPayer(bucketName));
+ assertEquals(BUCKET_OWNER, getApi().getBucketPayer(bucketName));
} catch (Exception e) {
Throwables.propagateIfPossible(e);
}
@@ -208,8 +215,7 @@ public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
setupAclForBucketLoggingTarget(targetBucket);
final BucketLogging logging = new BucketLogging(targetBucket, "access_log-",
- ImmutableSet.<Grant> of(new Grant(new EmailAddressGrantee(StubS3AsyncClient.TEST_ACL_EMAIL),
- Permission.FULL_CONTROL)));
+ ImmutableSet.<Grant> of(new Grant(new EmailAddressGrantee(TEST_ACL_EMAIL), FULL_CONTROL)));
getApi().enableBucketLogging(bucketName, logging);
@@ -226,7 +232,7 @@ public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
}
// EmailAddressGrantee is replaced by a CanonicalUserGrantee, so we cannot test by
// email addr
- assertTrue(acl.hasPermission(StubS3AsyncClient.TEST_ACL_ID, Permission.FULL_CONTROL), acl.toString());
+ assertTrue(acl.hasPermission(TEST_ACL_ID, FULL_CONTROL), acl.toString());
assertEquals(logging.getTargetBucket(), newLogging.getTargetBucket());
assertEquals(logging.getTargetPrefix(), newLogging.getTargetPrefix());
} catch (Exception e) {
@@ -251,10 +257,9 @@ public class BucketsLiveTest extends BaseBlobStoreIntegrationTest {
}
private void setupAclForBucketLoggingTarget(final String targetBucket) {
- // http://docs.amazonwebservices.com/AmazonS3/latest/LoggingHowTo.html
AccessControlList acl = getApi().getBucketACL(targetBucket);
- acl.addPermission(GroupGranteeURI.LOG_DELIVERY, Permission.WRITE);
- acl.addPermission(GroupGranteeURI.LOG_DELIVERY, Permission.READ_ACP);
+ acl.addPermission(LOG_DELIVERY, WRITE);
+ acl.addPermission(LOG_DELIVERY, READ_ACP);
assertTrue(getApi().putBucketACL(targetBucket, acl));
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/blobstore/src/main/java/org/jclouds/blobstore/internal/SubmissionAsyncBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/internal/SubmissionAsyncBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/internal/SubmissionAsyncBlobStore.java
new file mode 100644
index 0000000..b141008
--- /dev/null
+++ b/blobstore/src/main/java/org/jclouds/blobstore/internal/SubmissionAsyncBlobStore.java
@@ -0,0 +1,293 @@
+/*
+ * 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.blobstore.internal;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.Constants.PROPERTY_USER_THREADS;
+
+import java.util.Set;
+import java.util.concurrent.Callable;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.jclouds.blobstore.AsyncBlobStore;
+import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.BlobStoreContext;
+import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.blobstore.domain.BlobBuilder;
+import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.PageSet;
+import org.jclouds.blobstore.domain.StorageMetadata;
+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.domain.Location;
+
+import com.google.common.collect.ForwardingObject;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+
+/**
+ * Adapter that allows you to reuse an existing {@link BlobStore} to implement
+ * the deprecated {@link AsyncBlobStore} interface.
+ *
+ * @deprecated will be removed in jclouds 2.0, as async interfaces are no longer
+ * supported. Please use {@link BlobStore}
+ */
+@Deprecated
+public class SubmissionAsyncBlobStore extends ForwardingObject implements AsyncBlobStore {
+ private final BlobStore blobstore;
+ private final ListeningExecutorService executor;
+
+ @Inject
+ public SubmissionAsyncBlobStore(BlobStore blobstore, @Named(PROPERTY_USER_THREADS) ListeningExecutorService executor) {
+ this.blobstore = checkNotNull(blobstore, "blobstore");
+ this.executor = checkNotNull(executor, "executor");
+ }
+
+ @Override
+ protected BlobStore delegate() {
+ return blobstore;
+ }
+
+ @Override
+ public BlobStoreContext getContext() {
+ return delegate().getContext();
+ }
+
+ @Override
+ public BlobBuilder blobBuilder(String name) {
+ return delegate().blobBuilder(name);
+ }
+
+ @Override
+ public ListenableFuture<Set<? extends Location>> listAssignableLocations() {
+ return executor.submit(new Callable<Set<? extends Location>>() {
+ public Set<? extends Location> call() {
+ return delegate().listAssignableLocations();
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<PageSet<? extends StorageMetadata>> list() {
+ return executor.submit(new Callable<PageSet<? extends StorageMetadata>>() {
+ public PageSet<? extends StorageMetadata> call() {
+ return delegate().list();
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Boolean> containerExists(final String container) {
+ return executor.submit(new Callable<Boolean>() {
+ public Boolean call() {
+ return delegate().containerExists(container);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Boolean> createContainerInLocation(final Location location, final String container) {
+ return executor.submit(new Callable<Boolean>() {
+ public Boolean call() {
+ return delegate().createContainerInLocation(location, container);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Boolean> createContainerInLocation(final Location location, final String container,
+ final CreateContainerOptions options) {
+ return executor.submit(new Callable<Boolean>() {
+ public Boolean call() {
+ return delegate().createContainerInLocation(location, container, options);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<PageSet<? extends StorageMetadata>> list(final String container) {
+ return executor.submit(new Callable<PageSet<? extends StorageMetadata>>() {
+ public PageSet<? extends StorageMetadata> call() {
+ return delegate().list(container);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<PageSet<? extends StorageMetadata>> list(final String container,
+ final ListContainerOptions options) {
+ return executor.submit(new Callable<PageSet<? extends StorageMetadata>>() {
+ public PageSet<? extends StorageMetadata> call() {
+ return delegate().list(container, options);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Void> clearContainer(final String container) {
+ return executor.submit(new Callable<Void>() {
+ public Void call() {
+ delegate().clearContainer(container);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Void> clearContainer(final String container, final ListContainerOptions options) {
+ return executor.submit(new Callable<Void>() {
+ public Void call() {
+ delegate().clearContainer(container, options);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Void> deleteContainer(final String container) {
+ return executor.submit(new Callable<Void>() {
+ public Void call() {
+ delegate().deleteContainer(container);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Boolean> deleteContainerIfEmpty(final String container) {
+ return executor.submit(new Callable<Boolean>() {
+ public Boolean call() {
+ return delegate().deleteContainerIfEmpty(container);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Boolean> directoryExists(final String container, final String directory) {
+ return executor.submit(new Callable<Boolean>() {
+ public Boolean call() {
+ return delegate().directoryExists(container, directory);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Void> createDirectory(final String container, final String directory) {
+ return executor.submit(new Callable<Void>() {
+ public Void call() {
+ delegate().createDirectory(container, directory);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Void> deleteDirectory(final String containerName, final String name) {
+ return executor.submit(new Callable<Void>() {
+ public Void call() {
+ delegate().deleteDirectory(containerName, name);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Boolean> blobExists(final String container, final String name) {
+ return executor.submit(new Callable<Boolean>() {
+ public Boolean call() {
+ return delegate().blobExists(container, name);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<String> putBlob(final String container, final Blob blob) {
+ return executor.submit(new Callable<String>() {
+ public String call() {
+ return delegate().putBlob(container, blob);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<String> putBlob(final String container, final Blob blob, final PutOptions options) {
+ return executor.submit(new Callable<String>() {
+ public String call() {
+ return delegate().putBlob(container, blob, options);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<BlobMetadata> blobMetadata(final String container, final String key) {
+ return executor.submit(new Callable<BlobMetadata>() {
+ public BlobMetadata call() {
+ return delegate().blobMetadata(container, key);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Blob> getBlob(final String container, final String key) {
+ return executor.submit(new Callable<Blob>() {
+ public Blob call() {
+ return delegate().getBlob(container, key);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Blob> getBlob(final String container, final String key, final GetOptions options) {
+ return executor.submit(new Callable<Blob>() {
+ public Blob call() {
+ return delegate().getBlob(container, key, options);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Void> removeBlob(final String container, final String key) {
+ return executor.submit(new Callable<Void>() {
+ public Void call() {
+ delegate().removeBlob(container, key);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Long> countBlobs(final String container) {
+ return executor.submit(new Callable<Long>() {
+ public Long call() {
+ return delegate().countBlobs(container);
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<Long> countBlobs(final String container, final ListContainerOptions options) {
+ return executor.submit(new Callable<Long>() {
+ public Long call() {
+ return delegate().countBlobs(container, options);
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java
index 707b40a..ae91faf 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3ApiMetadata.java
@@ -23,26 +23,16 @@ import java.util.Properties;
import org.jclouds.aws.s3.blobstore.AWSS3BlobStoreContext;
import org.jclouds.aws.s3.blobstore.config.AWSS3BlobStoreContextModule;
-import org.jclouds.aws.s3.config.AWSS3RestClientModule;
+import org.jclouds.aws.s3.config.AWSS3HttpApiModule;
import org.jclouds.s3.S3ApiMetadata;
import com.google.common.collect.ImmutableSet;
-import com.google.common.reflect.TypeToken;
import com.google.inject.Module;
/**
- * Implementation of {@link ApiMetadata} for the Amazon-specific S3 API
+ * Implementation of {@link S3ApiMetadata} for the Amazon-specific S3 API
*/
public class AWSS3ApiMetadata extends S3ApiMetadata {
-
- /**
- * @deprecated please use {@code org.jclouds.ContextBuilder#buildApi(AWSS3Client.class)} as
- * {@link AWSS3AsyncClient} interface will be removed in jclouds 1.7.
- */
- @Deprecated
- public static final TypeToken<org.jclouds.rest.RestContext<AWSS3Client, AWSS3AsyncClient>> CONTEXT_TOKEN = new TypeToken<org.jclouds.rest.RestContext<AWSS3Client, AWSS3AsyncClient>>() {
- private static final long serialVersionUID = 1L;
- };
@Override
public Builder toBuilder() {
@@ -63,16 +53,14 @@ public class AWSS3ApiMetadata extends S3ApiMetadata {
return properties;
}
- public static class Builder extends S3ApiMetadata.Builder<Builder> {
- @SuppressWarnings("deprecation")
+ public static class Builder extends S3ApiMetadata.Builder<AWSS3Client, Builder> {
protected Builder() {
- super(AWSS3Client.class, AWSS3AsyncClient.class);
+ super(AWSS3Client.class);
id("aws-s3")
.name("Amazon-specific S3 API")
.defaultProperties(AWSS3ApiMetadata.defaultProperties())
- .context(CONTEXT_TOKEN)
.view(typeToken(AWSS3BlobStoreContext.class))
- .defaultModules(ImmutableSet.<Class<? extends Module>>of(AWSS3RestClientModule.class, AWSS3BlobStoreContextModule.class));
+ .defaultModules(ImmutableSet.<Class<? extends Module>>of(AWSS3HttpApiModule.class, AWSS3BlobStoreContextModule.class));
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3AsyncClient.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3AsyncClient.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3AsyncClient.java
deleted file mode 100644
index 366a845..0000000
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3AsyncClient.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * 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.aws.s3;
-
-import static org.jclouds.blobstore.attr.BlobScopes.CONTAINER;
-
-import java.util.Map;
-
-import javax.inject.Named;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
-
-import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
-import org.jclouds.aws.s3.binders.BindIterableAsPayloadToDeleteRequest;
-import org.jclouds.aws.s3.binders.BindObjectMetadataToRequest;
-import org.jclouds.aws.s3.binders.BindPartIdsAndETagsToRequest;
-import org.jclouds.aws.s3.domain.DeleteResult;
-import org.jclouds.aws.s3.functions.ETagFromHttpResponseViaRegex;
-import org.jclouds.aws.s3.functions.ObjectMetadataKey;
-import org.jclouds.aws.s3.functions.UploadIdFromHttpResponseViaRegex;
-import org.jclouds.aws.s3.xml.DeleteResultHandler;
-import org.jclouds.blobstore.attr.BlobScope;
-import org.jclouds.http.functions.ParseETagHeader;
-import org.jclouds.io.Payload;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.ParamParser;
-import org.jclouds.rest.annotations.ParamValidators;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.XMLResponseParser;
-import org.jclouds.s3.Bucket;
-import org.jclouds.s3.S3AsyncClient;
-import org.jclouds.s3.binders.BindAsHostPrefixIfConfigured;
-import org.jclouds.s3.domain.ObjectMetadata;
-import org.jclouds.s3.filters.RequestAuthorizeSignature;
-import org.jclouds.s3.functions.AssignCorrectHostnameForBucket;
-import org.jclouds.s3.options.PutObjectOptions;
-import org.jclouds.s3.predicates.validators.BucketNameValidator;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides access to amazon-specific S3 features
- *
- * @deprecated please use
- * {@code org.jclouds.ContextBuilder#buildApi(AWSS3Client.class)}
- * as {@link AWSS3AsyncClient} interface will be removed in jclouds 1.7.
- */
-@RequestFilters(RequestAuthorizeSignature.class)
-@BlobScope(CONTAINER)
-@Deprecated
-public interface AWSS3AsyncClient extends S3AsyncClient {
-
- /**
- * @see AWSS3Client#initiateMultipartUpload
- */
- @Named("PutObject")
- @POST
- @QueryParams(keys = "uploads")
- @Path("/{key}")
- @ResponseParser(UploadIdFromHttpResponseViaRegex.class)
- ListenableFuture<String> initiateMultipartUpload(
- @Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
- @PathParam("key") @ParamParser(ObjectMetadataKey.class) @BinderParam(BindObjectMetadataToRequest.class) ObjectMetadata objectMetadata,
- PutObjectOptions... options);
-
- /**
- * @see AWSS3Client#abortMultipartUpload
- */
- @Named("AbortMultipartUpload")
- @DELETE
- @Path("/{key}")
- @Fallback(VoidOnNotFoundOr404.class)
- ListenableFuture<Void> abortMultipartUpload(
- @Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
- @PathParam("key") String key, @QueryParam("uploadId") String uploadId);
-
- /**
- * @see AWSS3Client#uploadPart
- */
- @Named("PutObject")
- @PUT
- @Path("/{key}")
- @ResponseParser(ParseETagHeader.class)
- ListenableFuture<String> uploadPart(
- @Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
- @PathParam("key") String key, @QueryParam("partNumber") int partNumber,
- @QueryParam("uploadId") String uploadId, Payload part);
-
- /**
- * @see AWSS3Client#completeMultipartUpload
- */
- @Named("PutObject")
- @POST
- @Path("/{key}")
- @ResponseParser(ETagFromHttpResponseViaRegex.class)
- ListenableFuture<String> completeMultipartUpload(
- @Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
- @PathParam("key") String key, @QueryParam("uploadId") String uploadId,
- @BinderParam(BindPartIdsAndETagsToRequest.class) Map<Integer, String> parts);
-
- /**
- * @see AWSS3Client#deleteObjects
- */
- @Named("DeleteObject")
- @POST
- @Path("/")
- @QueryParams(keys = "delete")
- @XMLResponseParser(DeleteResultHandler.class)
- ListenableFuture<DeleteResult> deleteObjects(
- @Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
- @BinderParam(BindIterableAsPayloadToDeleteRequest.class) Iterable<String> keys);
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3Client.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3Client.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3Client.java
index 37f9b3b..7dccd70 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3Client.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/AWSS3Client.java
@@ -16,18 +16,53 @@
*/
package org.jclouds.aws.s3;
+import static org.jclouds.Fallbacks.VoidOnNotFoundOr404;
+import static org.jclouds.blobstore.attr.BlobScopes.CONTAINER;
+
import java.util.Map;
+
+import javax.inject.Named;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+
+import org.jclouds.aws.s3.binders.BindIterableAsPayloadToDeleteRequest;
+import org.jclouds.aws.s3.binders.BindObjectMetadataToRequest;
+import org.jclouds.aws.s3.binders.BindPartIdsAndETagsToRequest;
import org.jclouds.aws.s3.domain.DeleteResult;
+import org.jclouds.aws.s3.functions.ETagFromHttpResponseViaRegex;
+import org.jclouds.aws.s3.functions.ObjectMetadataKey;
+import org.jclouds.aws.s3.functions.UploadIdFromHttpResponseViaRegex;
+import org.jclouds.aws.s3.xml.DeleteResultHandler;
+import org.jclouds.blobstore.attr.BlobScope;
+import org.jclouds.http.functions.ParseETagHeader;
import org.jclouds.io.Payload;
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.ParamParser;
+import org.jclouds.rest.annotations.ParamValidators;
+import org.jclouds.rest.annotations.QueryParams;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.ResponseParser;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.s3.Bucket;
import org.jclouds.s3.S3Client;
+import org.jclouds.s3.binders.BindAsHostPrefixIfConfigured;
import org.jclouds.s3.domain.ObjectMetadata;
+import org.jclouds.s3.filters.RequestAuthorizeSignature;
+import org.jclouds.s3.functions.AssignCorrectHostnameForBucket;
import org.jclouds.s3.options.PutObjectOptions;
+import org.jclouds.s3.predicates.validators.BucketNameValidator;
/**
* Provides access to amazon-specific S3 features
- *
- * @see AWSS3AsyncClient
*/
+@RequestFilters(RequestAuthorizeSignature.class)
+@BlobScope(CONTAINER)
public interface AWSS3Client extends S3Client {
/**
@@ -48,8 +83,15 @@ public interface AWSS3Client extends S3Client {
* controls optional parameters such as canned ACL
* @return ID for the initiated multipart upload.
*/
- String initiateMultipartUpload(String bucketName, ObjectMetadata objectMetadata, PutObjectOptions... options);
-
+ @Named("PutObject")
+ @POST
+ @QueryParams(keys = "uploads")
+ @Path("/{key}")
+ @ResponseParser(UploadIdFromHttpResponseViaRegex.class)
+ String initiateMultipartUpload(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(
+ BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
+ @PathParam("key") @ParamParser(ObjectMetadataKey.class) @BinderParam(BindObjectMetadataToRequest.class)
+ ObjectMetadata objectMetadata, PutObjectOptions... options);
/**
* This operation aborts a multipart upload. After a multipart upload is aborted, no additional
@@ -66,7 +108,13 @@ public interface AWSS3Client extends S3Client {
* @param uploadId
* id of the multipart upload in progress.
*/
- void abortMultipartUpload(String bucketName, String key, String uploadId);
+ @Named("AbortMultipartUpload")
+ @DELETE
+ @Path("/{key}")
+ @Fallback(VoidOnNotFoundOr404.class)
+ void abortMultipartUpload(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(
+ BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
+ @PathParam("key") String key, @QueryParam("uploadId") String uploadId);
/**
* This operation uploads a part in a multipart upload. You must initiate a multipart upload (see
@@ -98,10 +146,15 @@ public interface AWSS3Client extends S3Client {
* @param part
* contains the data to create or overwrite
* @return ETag of the content uploaded
- * @see <a href="http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPart.html"
- * />
*/
- String uploadPart(String bucketName, String key, int partNumber, String uploadId, Payload part);
+ @Named("PutObject")
+ @PUT
+ @Path("/{key}")
+ @ResponseParser(ParseETagHeader.class)
+ String uploadPart(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(
+ BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
+ @PathParam("key") String key, @QueryParam("partNumber") int partNumber,
+ @QueryParam("uploadId") String uploadId, Payload part);
/**
*
@@ -135,7 +188,14 @@ public interface AWSS3Client extends S3Client {
* a map of part id to eTag from the {@link #uploadPart} command.
* @return ETag of the content uploaded
*/
- String completeMultipartUpload(String bucketName, String key, String uploadId, Map<Integer, String> parts);
+ @Named("PutObject")
+ @POST
+ @Path("/{key}")
+ @ResponseParser(ETagFromHttpResponseViaRegex.class)
+ String completeMultipartUpload(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(
+ BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
+ @PathParam("key") String key, @QueryParam("uploadId") String uploadId,
+ @BinderParam(BindPartIdsAndETagsToRequest.class) Map<Integer, String> parts);
/**
* The Multi-Object Delete operation enables you to delete multiple objects from a bucket using a
@@ -151,11 +211,17 @@ public interface AWSS3Client extends S3Client {
* By default, the operation uses verbose mode in which the response includes the result of
* deletion of each key in your request.
*
- * @see <a href="http://docs.amazonwebservices.com/AmazonS3/latest/API/multiobjectdeleteapi.html" />
* @param bucketName
* namespace of the objects you are deleting
* @param keys
* set of unique keys identifying objects
*/
- DeleteResult deleteObjects(String bucketName, Iterable<String> keys);
+ @Named("DeleteObject")
+ @POST
+ @Path("/")
+ @QueryParams(keys = "delete")
+ @XMLResponseParser(DeleteResultHandler.class)
+ DeleteResult deleteObjects(@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(
+ BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
+ @BinderParam(BindIterableAsPayloadToDeleteRequest.class) Iterable<String> keys);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java
deleted file mode 100644
index 63e084d..0000000
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3AsyncBlobStore.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * 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.aws.s3.blobstore;
-
-import static org.jclouds.s3.domain.ObjectMetadata.StorageClass.REDUCED_REDUNDANCY;
-
-import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-
-import org.jclouds.Constants;
-import org.jclouds.aws.domain.Region;
-import org.jclouds.aws.s3.AWSS3ApiMetadata;
-import org.jclouds.aws.s3.AWSS3AsyncClient;
-import org.jclouds.aws.s3.AWSS3Client;
-import org.jclouds.aws.s3.blobstore.options.AWSS3PutObjectOptions;
-import org.jclouds.aws.s3.blobstore.options.AWSS3PutOptions;
-import org.jclouds.aws.s3.blobstore.strategy.AsyncMultipartUploadStrategy;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
-import org.jclouds.blobstore.options.CreateContainerOptions;
-import org.jclouds.blobstore.options.PutOptions;
-import org.jclouds.blobstore.strategy.internal.FetchBlobMetadata;
-import org.jclouds.blobstore.util.BlobUtils;
-import org.jclouds.collect.Memoized;
-import org.jclouds.domain.Location;
-import org.jclouds.s3.blobstore.S3AsyncBlobStore;
-import org.jclouds.s3.blobstore.functions.BlobToObject;
-import org.jclouds.s3.blobstore.functions.BucketToResourceList;
-import org.jclouds.s3.blobstore.functions.ContainerToBucketListOptions;
-import org.jclouds.s3.blobstore.functions.ObjectToBlob;
-import org.jclouds.s3.blobstore.functions.ObjectToBlobMetadata;
-import org.jclouds.s3.domain.AccessControlList;
-import org.jclouds.s3.domain.BucketMetadata;
-import org.jclouds.s3.domain.CannedAccessPolicy;
-import org.jclouds.s3.domain.ObjectMetadata;
-
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-/**
- *
- * @deprecated will be removed in jclouds 1.7, as async interfaces are no longer
- * supported. Please use {@link AWSS3BlobStore}
- */
-@Deprecated
-public class AWSS3AsyncBlobStore extends S3AsyncBlobStore {
-
- private final Provider<AsyncMultipartUploadStrategy> multipartUploadStrategy;
- private final LoadingCache<String, AccessControlList> bucketAcls;
- private final BlobToObject blob2Object;
-
- @Inject
- public AWSS3AsyncBlobStore(BlobStoreContext context, BlobUtils blobUtils,
- @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor, Supplier<Location> defaultLocation,
- @Memoized Supplier<Set<? extends Location>> locations, AWSS3AsyncClient async, AWSS3Client sync,
- Function<Set<BucketMetadata>, PageSet<? extends StorageMetadata>> convertBucketsToStorageMetadata,
- ContainerToBucketListOptions container2BucketListOptions, BucketToResourceList bucket2ResourceList,
- ObjectToBlob object2Blob, BlobToHttpGetOptions blob2ObjectGetOptions, BlobToObject blob2Object,
- ObjectToBlobMetadata object2BlobMd, Provider<FetchBlobMetadata> fetchBlobMetadataProvider,
- LoadingCache<String, AccessControlList> bucketAcls,
- Provider<AsyncMultipartUploadStrategy> multipartUploadStrategy) {
- super(context, blobUtils, userExecutor, defaultLocation, locations, async, sync, convertBucketsToStorageMetadata,
- container2BucketListOptions, bucket2ResourceList, object2Blob, blob2ObjectGetOptions, blob2Object,
- object2BlobMd, fetchBlobMetadataProvider, bucketAcls);
- this.multipartUploadStrategy = multipartUploadStrategy;
- this.bucketAcls = bucketAcls;
- this.blob2Object = blob2Object;
- }
-
- @Override
- public ListenableFuture<String> putBlob(String container, Blob blob, PutOptions options) {
- if (options.isMultipart()) {
- // need to use a provider if the strategy object is stateful
- return multipartUploadStrategy.get().execute(container, blob, options);
- } else if (options instanceof AWSS3PutOptions &&
- ((AWSS3PutOptions) options).getStorageClass() == REDUCED_REDUNDANCY) {
- return putBlobWithReducedRedundancy(container, blob);
-
- } else {
- return super.putBlob(container, blob, options);
- }
- }
-
- private ListenableFuture<String> putBlobWithReducedRedundancy(String container, Blob blob) {
- AWSS3PutObjectOptions options = new AWSS3PutObjectOptions();
- try {
- AccessControlList acl = bucketAcls.getUnchecked(container);
- if (acl != null && acl.hasPermission(AccessControlList.GroupGranteeURI.ALL_USERS,
- AccessControlList.Permission.READ)) {
- options.withAcl(CannedAccessPolicy.PUBLIC_READ);
- }
- options.storageClass(ObjectMetadata.StorageClass.REDUCED_REDUNDANCY);
-
- } catch (CacheLoader.InvalidCacheLoadException e) {
- // nulls not permitted from cache loader
- }
- return getContext().unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN).getAsyncApi().putObject(container,
- blob2Object.apply(blob), options);
- }
-
- @Override
- public ListenableFuture<Boolean> createContainerInLocation(Location location, String container,
- CreateContainerOptions options) {
- if ((location == null || location.getId().equals(Region.US_STANDARD)) &&
- Futures.getUnchecked(containerExists(container))) {
- // AWS-S3 returns the incorrect creation status when a container
- // already exists in the us-standard (or default) region. See
- // JCLOUDS-334 for details.
- // TODO: executing on the calling thread
- return Futures.immediateFuture(Boolean.FALSE);
- }
- return super.createContainerInLocation(location, container, options);
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java
index 3c26fc6..b719bab 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobRequestSigner.java
@@ -24,7 +24,7 @@ import java.net.URLEncoder;
import java.util.Date;
import java.util.concurrent.TimeUnit;
-import org.jclouds.aws.s3.AWSS3AsyncClient;
+import org.jclouds.aws.s3.AWSS3Client;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
import org.jclouds.date.DateService;
@@ -44,7 +44,7 @@ import com.google.common.net.HttpHeaders;
import com.google.inject.Inject;
import com.google.inject.Provider;
-public class AWSS3BlobRequestSigner extends S3BlobRequestSigner<AWSS3AsyncClient> {
+public class AWSS3BlobRequestSigner extends S3BlobRequestSigner<AWSS3Client> {
public static final String TEMPORARY_SIGNATURE_PARAM = "Signature";
private final RequestAuthorizeSignature authSigner;
@@ -54,7 +54,7 @@ public class AWSS3BlobRequestSigner extends S3BlobRequestSigner<AWSS3AsyncClient
@Inject
public AWSS3BlobRequestSigner(RestAnnotationProcessor processor, BlobToObject blobToObject,
- BlobToHttpGetOptions blob2HttpGetOptions, Class<AWSS3AsyncClient> interfaceClass,
+ BlobToHttpGetOptions blob2HttpGetOptions, Class<AWSS3Client> interfaceClass,
@org.jclouds.location.Provider Supplier<Credentials> credentials,
RequestAuthorizeSignature authSigner, @TimeStamp Provider<String> timeStampProvider,
DateService dateService) throws SecurityException, NoSuchMethodException {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
index a6541d6..a9b8b1e 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStore.java
@@ -24,7 +24,6 @@ import javax.inject.Inject;
import javax.inject.Provider;
import org.jclouds.aws.domain.Region;
-import org.jclouds.aws.s3.AWSS3ApiMetadata;
import org.jclouds.aws.s3.AWSS3Client;
import org.jclouds.aws.s3.blobstore.options.AWSS3PutObjectOptions;
import org.jclouds.aws.s3.blobstore.options.AWSS3PutOptions;
@@ -110,8 +109,7 @@ public class AWSS3BlobStore extends S3BlobStore {
} catch (CacheLoader.InvalidCacheLoadException e) {
// nulls not permitted from cache loader
}
- return getContext().unwrap(AWSS3ApiMetadata.CONTEXT_TOKEN).getApi().putObject(container, blob2Object.apply(blob),
- options);
+ return getContext().unwrapApi(AWSS3Client.class).putObject(container, blob2Object.apply(blob), options);
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStoreContext.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStoreContext.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStoreContext.java
index 7bb0840..bbf834a 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStoreContext.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/AWSS3BlobStoreContext.java
@@ -26,7 +26,4 @@ public interface AWSS3BlobStoreContext extends S3BlobStoreContext {
@Override
AWSS3BlobStore getBlobStore();
-
- @Override
- AWSS3AsyncBlobStore getAsyncBlobStore();
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
index 2b4f21c..bfd6716 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/config/AWSS3BlobStoreContextModule.java
@@ -16,7 +16,6 @@
*/
package org.jclouds.aws.s3.blobstore.config;
-import org.jclouds.aws.s3.blobstore.AWSS3AsyncBlobStore;
import org.jclouds.aws.s3.blobstore.AWSS3BlobRequestSigner;
import org.jclouds.aws.s3.blobstore.AWSS3BlobStore;
import org.jclouds.aws.s3.blobstore.strategy.AsyncMultipartUploadStrategy;
@@ -24,7 +23,6 @@ import org.jclouds.aws.s3.blobstore.strategy.MultipartUploadStrategy;
import org.jclouds.aws.s3.blobstore.strategy.internal.ParallelMultipartUploadStrategy;
import org.jclouds.aws.s3.blobstore.strategy.internal.SequentialMultipartUploadStrategy;
import org.jclouds.blobstore.BlobRequestSigner;
-import org.jclouds.s3.blobstore.S3AsyncBlobStore;
import org.jclouds.s3.blobstore.S3BlobStore;
import org.jclouds.s3.blobstore.config.S3BlobStoreContextModule;
@@ -35,7 +33,6 @@ public class AWSS3BlobStoreContextModule extends S3BlobStoreContextModule {
@Override
protected void configure() {
super.configure();
- bind(S3AsyncBlobStore.class).to(AWSS3AsyncBlobStore.class).in(Scopes.SINGLETON);
bind(S3BlobStore.class).to(AWSS3BlobStore.class).in(Scopes.SINGLETON);
bind(MultipartUploadStrategy.class).to(SequentialMultipartUploadStrategy.class);
bind(AsyncMultipartUploadStrategy.class).to(ParallelMultipartUploadStrategy.class);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/internal/AWSS3BlobStoreContextImpl.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/internal/AWSS3BlobStoreContextImpl.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/internal/AWSS3BlobStoreContextImpl.java
index cad9916..9455f01 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/internal/AWSS3BlobStoreContextImpl.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/internal/AWSS3BlobStoreContextImpl.java
@@ -20,7 +20,6 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.Context;
-import org.jclouds.aws.s3.blobstore.AWSS3AsyncBlobStore;
import org.jclouds.aws.s3.blobstore.AWSS3BlobStore;
import org.jclouds.aws.s3.blobstore.AWSS3BlobStoreContext;
import org.jclouds.blobstore.AsyncBlobStore;
@@ -49,10 +48,4 @@ public class AWSS3BlobStoreContextImpl extends S3BlobStoreContextImpl implements
public AWSS3BlobStore getBlobStore() {
return AWSS3BlobStore.class.cast(super.getBlobStore());
}
-
- @Override
- public AWSS3AsyncBlobStore getAsyncBlobStore() {
- return AWSS3AsyncBlobStore.class.cast(super.getAsyncBlobStore());
- }
-
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/AsyncMultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/AsyncMultipartUploadStrategy.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/AsyncMultipartUploadStrategy.java
index 1431b6d..3f638ae 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/AsyncMultipartUploadStrategy.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/AsyncMultipartUploadStrategy.java
@@ -23,9 +23,6 @@ import org.jclouds.blobstore.options.PutOptions;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.inject.ImplementedBy;
-/**
- * @see <a href="http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?qfacts.html">AWS Documentation</a>
- */
@ImplementedBy(ParallelMultipartUploadStrategy.class)
public interface AsyncMultipartUploadStrategy {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUpload.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUpload.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUpload.java
index 622c60e..5342e67 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUpload.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUpload.java
@@ -16,9 +16,6 @@
*/
package org.jclouds.aws.s3.blobstore.strategy;
-/**
- * @see <a href="http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?qfacts.html">AWS Documentation</a>
- */
public final class MultipartUpload {
/* Maximum number of parts per upload */
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b6497556/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUploadStrategy.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUploadStrategy.java
index e00580d..12b7ef3 100644
--- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUploadStrategy.java
+++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/MultipartUploadStrategy.java
@@ -21,9 +21,6 @@ import org.jclouds.blobstore.domain.Blob;
import com.google.inject.ImplementedBy;
-/**
- * @see <a href="http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?qfacts.html">AWS Documentation</a>
- */
@ImplementedBy(SequentialMultipartUploadStrategy.class)
public interface MultipartUploadStrategy {