diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java index b9d52d486c..469922a7fb 100644 --- a/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java +++ b/apis/atmos/src/main/java/org/jclouds/atmos/config/AtmosRestClientModule.java @@ -50,9 +50,6 @@ import com.google.inject.Provides; */ @ConfiguresRestClient public class AtmosRestClientModule extends RestClientModule { - public AtmosRestClientModule() { - super(AtmosClient.class, AtmosAsyncClient.class); - } @Override protected void configure() { diff --git a/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java b/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java index cdbc74dea9..bbaffb58d4 100644 --- a/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java +++ b/apis/cloudfiles/src/main/java/org/jclouds/cloudfiles/config/CloudFilesRestClientModule.java @@ -54,10 +54,6 @@ import com.google.inject.Provides; @ConfiguresRestClient public class CloudFilesRestClientModule extends RestClientModule { - public CloudFilesRestClientModule() { - super(CloudFilesClient.class, CloudFilesAsyncClient.class); - } - @Provides @Singleton CommonSwiftClient provideCommonSwiftClient(CloudFilesClient in) { diff --git a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java index bd9e8ce2b2..f7bc1f307c 100644 --- a/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java +++ b/apis/cloudloadbalancers/src/main/java/org/jclouds/cloudloadbalancers/config/CloudLoadBalancersRestClientModule.java @@ -73,7 +73,7 @@ public class CloudLoadBalancersRestClientModule extends .build(); public CloudLoadBalancersRestClientModule() { - super(CloudLoadBalancersClient.class, CloudLoadBalancersAsyncClient.class, DELEGATE_MAP); + super(DELEGATE_MAP); } protected void installLocations() { diff --git a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java index 13f267c7c5..bb0399dbb7 100644 --- a/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java +++ b/apis/cloudservers/src/main/java/org/jclouds/cloudservers/config/CloudServersRestClientModule.java @@ -54,10 +54,6 @@ import com.google.inject.Provides; @ConfiguresRestClient public class CloudServersRestClientModule extends RestClientModule { - public CloudServersRestClientModule() { - super(CloudServersClient.class, CloudServersAsyncClient.class); - } - @Override protected void configure() { bind(DateAdapter.class).to(Iso8601DateAdapter.class); diff --git a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java index ce17878825..a8ca588291 100644 --- a/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java +++ b/apis/cloudsigma/src/main/java/org/jclouds/cloudsigma/config/CloudSigmaRestClientModule.java @@ -57,10 +57,6 @@ import com.google.inject.TypeLiteral; @ConfiguresRestClient public class CloudSigmaRestClientModule extends RestClientModule { - public CloudSigmaRestClientModule() { - super(CloudSigmaClient.class, CloudSigmaAsyncClient.class); - } - @Override protected void bindErrorHandlers() { bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(CloudSigmaErrorHandler.class); diff --git a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java index a5b63e1d09..7bf1afd861 100644 --- a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java +++ b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/config/CloudStackRestClientModule.java @@ -221,7 +221,7 @@ public class CloudStackRestClientModule extends RestClientModule { - public CloudWatchRestClientModule() { - super(CloudWatchClient.class, CloudWatchAsyncClient.class); - } } diff --git a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java index 8a1664db3d..73974a067d 100644 --- a/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java +++ b/apis/deltacloud/src/main/java/org/jclouds/deltacloud/config/DeltacloudRestClientModule.java @@ -63,10 +63,6 @@ import com.google.inject.Provides; @ConfiguresRestClient public class DeltacloudRestClientModule extends RestClientModule { - public DeltacloudRestClientModule() { - super(DeltacloudClient.class, DeltacloudAsyncClient.class); - } - @Override protected void bindErrorHandlers() { bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(DeltacloudErrorHandler.class); diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java b/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java index b15f95636d..2964886a7b 100644 --- a/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java +++ b/apis/ec2/src/main/java/org/jclouds/ec2/EC2ApiMetadata.java @@ -62,7 +62,7 @@ public class EC2ApiMetadata extends BaseRestApiMetadata { /** The serialVersionUID */ private static final long serialVersionUID = 4424763314988423886L; - public static final TypeToken> CONTEXT_TOKEN = new TypeToken>() { + public static final TypeToken> CONTEXT_TOKEN = new TypeToken>() { private static final long serialVersionUID = -5070937833892503232L; }; @@ -103,6 +103,7 @@ public class EC2ApiMetadata extends BaseRestApiMetadata { .documentation(URI.create("http://docs.amazonwebservices.com/AWSEC2/latest/APIReference")) .version(EC2AsyncClient.VERSION) .defaultProperties(EC2ApiMetadata.defaultProperties()) + .context(CONTEXT_TOKEN) .wrapper(EC2ComputeServiceContext.class) .defaultModules(ImmutableSet.>of(EC2RestClientModule.class, EC2ResolveImagesModule.class, EC2ComputeServiceContextModule.class)); } diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java b/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java index aad33fa08f..48047b3aaf 100644 --- a/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java +++ b/apis/ec2/src/main/java/org/jclouds/ec2/config/EC2RestClientModule.java @@ -49,6 +49,7 @@ import org.jclouds.location.suppliers.derived.ZoneIdsFromRegionIdToZoneIdsValues import org.jclouds.rest.ConfiguresRestClient; import com.google.common.collect.ImmutableMap; +import com.google.common.reflect.TypeToken; import com.google.inject.Scopes; /** @@ -59,26 +60,28 @@ import com.google.inject.Scopes; @ConfiguresRestClient public class EC2RestClientModule extends WithZonesFormSigningRestClientModule { - public static final Map, Class> DELEGATE_MAP = ImmutableMap., Class> builder()// - .put(AMIClient.class, AMIAsyncClient.class)// - .put(ElasticIPAddressClient.class, ElasticIPAddressAsyncClient.class)// - .put(InstanceClient.class, InstanceAsyncClient.class)// - .put(KeyPairClient.class, KeyPairAsyncClient.class)// - .put(SecurityGroupClient.class, SecurityGroupAsyncClient.class)// - .put(WindowsClient.class, WindowsAsyncClient.class)// - .put(AvailabilityZoneAndRegionClient.class, AvailabilityZoneAndRegionAsyncClient.class)// - .put(ElasticBlockStoreClient.class, ElasticBlockStoreAsyncClient.class)// - .build(); - + .put(AMIClient.class, AMIAsyncClient.class)// + .put(ElasticIPAddressClient.class, ElasticIPAddressAsyncClient.class)// + .put(InstanceClient.class, InstanceAsyncClient.class)// + .put(KeyPairClient.class, KeyPairAsyncClient.class)// + .put(SecurityGroupClient.class, SecurityGroupAsyncClient.class)// + .put(WindowsClient.class, WindowsAsyncClient.class)// + .put(AvailabilityZoneAndRegionClient.class, AvailabilityZoneAndRegionAsyncClient.class)// + .put(ElasticBlockStoreClient.class, ElasticBlockStoreAsyncClient.class)// + .build(); + @SuppressWarnings("unchecked") public EC2RestClientModule() { - this((Class) EC2Client.class, (Class) EC2AsyncClient.class, DELEGATE_MAP); + super((TypeToken) TypeToken.of(EC2Client.class), (TypeToken) TypeToken.of(EC2AsyncClient.class), DELEGATE_MAP); } - public EC2RestClientModule(Class sync, Class async, Map, Class> delegateMap) { - super(sync, async, delegateMap); + protected EC2RestClientModule(TypeToken syncClientType, TypeToken asyncClientType, + Map, Class> sync2Async) { + super(syncClientType, asyncClientType, sync2Async); } + + @Override protected void installLocations() { diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java b/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java index 7d3f66c91c..2890eae3fc 100644 --- a/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java +++ b/apis/ec2/src/test/java/org/jclouds/ec2/services/BaseEC2AsyncClientTest.java @@ -62,13 +62,9 @@ import com.google.inject.Provides; */ @Test(groups = "unit") public abstract class BaseEC2AsyncClientTest extends BaseAsyncClientTest { - @ConfiguresRestClient + @ConfiguresRestClient protected static class StubEC2RestClientModule extends EC2RestClientModule { - public StubEC2RestClientModule() { - super(EC2Client.class, EC2AsyncClient.class, DELEGATE_MAP); - } - @Provides @Singleton LoadingCache provide(){ diff --git a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java index 93781f3be8..38b3a85cfe 100644 --- a/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java +++ b/apis/elasticstack/src/main/java/org/jclouds/elasticstack/config/ElasticStackRestClientModule.java @@ -57,10 +57,6 @@ import com.google.inject.TypeLiteral; @ConfiguresRestClient public class ElasticStackRestClientModule extends RestClientModule { - public ElasticStackRestClientModule() { - super(ElasticStackClient.class, ElasticStackAsyncClient.class); - } - @Override protected void configure() { super.configure(); diff --git a/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java b/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java index e1c3186b98..d82c9f0728 100644 --- a/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java +++ b/apis/nova/src/main/java/org/jclouds/openstack/nova/config/NovaRestClientModule.java @@ -51,7 +51,6 @@ public class NovaRestClientModule extends RestClientModule { - public NovaEC2RestClientModule() { - super(EC2Client.class, EC2AsyncClient.class, DELEGATE_MAP); - } - @Override protected void configure() { super.configure(); diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java index 32c8513874..c9f603d178 100644 --- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java +++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v1_1/config/NovaRestClientModule.java @@ -78,7 +78,7 @@ public class NovaRestClientModule extends RestClientModule> CONTEXT_TOKEN = new TypeToken>() { + public static final TypeToken> CONTEXT_TOKEN = new TypeToken>() { private static final long serialVersionUID = -5070937833892503232L; }; @@ -107,6 +107,7 @@ public class S3ApiMetadata extends BaseRestApiMetadata { .documentation(URI.create("http://docs.amazonwebservices.com/AmazonS3/latest/API")) .version(S3AsyncClient.VERSION) .defaultProperties(S3ApiMetadata.defaultProperties()) + .context(CONTEXT_TOKEN) .wrapper(TypeToken.of(S3BlobStoreContext.class)) .defaultModules(ImmutableSet.>of(S3RestClientModule.class, S3BlobStoreContextModule.class)); } diff --git a/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java b/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java index a1c4450ebb..57978bfeea 100644 --- a/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java +++ b/apis/s3/src/main/java/org/jclouds/s3/config/S3RestClientModule.java @@ -46,6 +46,7 @@ import org.jclouds.s3.handlers.S3RedirectionRetryHandler; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import com.google.common.collect.Maps; +import com.google.common.reflect.TypeToken; import com.google.inject.Provides; import com.google.inject.Scopes; @@ -59,11 +60,11 @@ public class S3RestClientModule ext @SuppressWarnings("unchecked") public S3RestClientModule() { - this((Class) S3Client.class, (Class) S3AsyncClient.class); + this((TypeToken) TypeToken.of(S3Client.class), (TypeToken) TypeToken.of(S3AsyncClient.class)); } - public S3RestClientModule(Class sync, Class async) { - super(sync, async); + protected S3RestClientModule(TypeToken syncClientType, TypeToken asyncClientType) { + super(syncClientType, asyncClientType); } @Provides @@ -82,10 +83,10 @@ public class S3RestClientModule ext @Override protected void configure() { + super.configure(); install(new S3ObjectModule()); install(new S3ParserModule()); bind(RequestAuthorizeSignature.class).in(Scopes.SINGLETON); - super.configure(); } @Override diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java index 5e54b10483..70b8b7c4cb 100644 --- a/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java +++ b/apis/s3/src/test/java/org/jclouds/s3/S3AsyncClientTest.java @@ -478,13 +478,9 @@ public abstract class S3AsyncClientTest extends BaseS3A checkFilters(request); } - @ConfiguresRestClient + @ConfiguresRestClient private static final class TestS3RestClientModule extends S3RestClientModule { - public TestS3RestClientModule() { - super(S3Client.class, S3AsyncClient.class); - } - @Override protected String provideTimeStamp(@TimeStamp Supplier cache) { return "2009-11-08T15:54:08.897Z"; diff --git a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java index edc9b03ad1..b2f8bd5b3b 100644 --- a/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java +++ b/apis/s3/src/test/java/org/jclouds/s3/blobstore/S3BlobRequestSignerTest.java @@ -118,10 +118,6 @@ public class S3BlobRequestSignerTest extends BaseS3AsyncClientTest { - public TestS3RestClientModule() { - super(S3Client.class, S3AsyncClient.class); - } - @Override protected String provideTimeStamp(@TimeStamp Supplier cache) { return "Thu, 05 Jun 2008 16:38:19 GMT"; 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 f38e1e4659..5fd0cbb8be 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 @@ -40,10 +40,6 @@ public abstract class BaseS3ClientExpectTest extends BaseRestClientExpectTest { - public TestS3RestClientModule() { - super(S3Client.class, S3AsyncClient.class); - } - @Override protected String provideTimeStamp(@TimeStamp Supplier cache) { return CONSTANT_DATE; diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java index 4dd913724a..c84c0460b8 100644 --- a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java +++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/BaseSwiftRestClientModule.java @@ -50,13 +50,11 @@ public class BaseSwiftRestClientModule { private final OpenStackAuthenticationModule module; - public BaseSwiftRestClientModule(Class syncClientType, Class asyncClientType) { - this(new OpenStackAuthenticationModule(), syncClientType, asyncClientType); + public BaseSwiftRestClientModule() { + this(new OpenStackAuthenticationModule()); } - public BaseSwiftRestClientModule(OpenStackAuthenticationModule module, Class syncClientType, - Class asyncClientType) { - super(syncClientType, asyncClientType); + public BaseSwiftRestClientModule(OpenStackAuthenticationModule module) { this.module = module; } diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java index a647924ca4..ebbaab3cca 100644 --- a/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java +++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/config/SwiftRestClientModule.java @@ -35,10 +35,6 @@ import com.google.inject.Provides; @ConfiguresRestClient public class SwiftRestClientModule extends BaseSwiftRestClientModule { - public SwiftRestClientModule() { - super(SwiftClient.class, SwiftAsyncClient.class); - } - @Provides @Singleton CommonSwiftClient provideCommonSwiftClient(SwiftClient in) { diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java index ced9b5fab5..cc74c180c1 100644 --- a/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java +++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/CommonSwiftClientTest.java @@ -67,7 +67,7 @@ public abstract class CommonSwiftClientTest extends BaseAsyncClientTest { private TestSwiftRestClientModule() { - super(new TestOpenStackAuthenticationModule(), SwiftClient.class, SwiftAsyncClient.class); + super(new TestOpenStackAuthenticationModule()); } @Provides @Singleton diff --git a/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java b/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java index a7131c8056..96d82e0201 100644 --- a/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java +++ b/apis/vcloud/src/main/java/org/jclouds/vcloud/config/VCloudRestClientModule.java @@ -144,7 +144,7 @@ public class VCloudRestClientModule extends RestClientModule { - public WalrusRestClientModule() { - super(S3Client.class, WalrusAsyncClient.class); + super(TypeToken.of(S3Client.class), TypeToken.of(WalrusAsyncClient.class)); } @Provides diff --git a/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java b/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java index 62772ab3d1..7915b4f088 100644 --- a/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java +++ b/common/aws/src/main/java/org/jclouds/aws/config/AWSRestClientModule.java @@ -31,22 +31,32 @@ import org.jclouds.http.annotation.ServerError; import org.jclouds.rest.ConfiguresRestClient; import org.jclouds.rest.config.RestClientModule; +import com.google.common.reflect.TypeToken; + /** * * @author Adrian Cole */ @ConfiguresRestClient -public class AWSRestClientModule extends RestClientModule { +public abstract class AWSRestClientModule extends RestClientModule { - public AWSRestClientModule(Class syncClientType, Class asyncClientType, Map, Class> delegates) { - super(syncClientType, asyncClientType, delegates); + protected AWSRestClientModule(Map, Class> delegates) { + super(delegates); } - public AWSRestClientModule(Class syncClientType, Class asyncClientType) { + protected AWSRestClientModule() { + } + + protected AWSRestClientModule(TypeToken syncClientType, TypeToken asyncClientType) { super(syncClientType, asyncClientType); } + protected AWSRestClientModule(TypeToken syncClientType, TypeToken asyncClientType, + Map, Class> sync2Async) { + super(syncClientType, asyncClientType, sync2Async); + } + @Override protected void bindErrorHandlers() { bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseAWSErrorFromXmlContent.class); diff --git a/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java b/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java index cda15e2d13..12b90f30da 100644 --- a/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java +++ b/common/aws/src/main/java/org/jclouds/aws/config/FormSigningRestClientModule.java @@ -31,6 +31,7 @@ import org.jclouds.date.TimeStamp; import org.jclouds.rest.ConfiguresRestClient; import org.jclouds.rest.RequestSigner; +import com.google.common.reflect.TypeToken; import com.google.inject.Provides; /** @@ -38,17 +39,24 @@ import com.google.inject.Provides; * @author Adrian Cole */ @ConfiguresRestClient -public class FormSigningRestClientModule extends AWSRestClientModule { +public abstract class FormSigningRestClientModule extends AWSRestClientModule { - public FormSigningRestClientModule(Class syncClientType, Class asyncClientType, - Map, Class> delegates) { - super(syncClientType, asyncClientType, delegates); + protected FormSigningRestClientModule(Map, Class> delegates) { + super(delegates); } - public FormSigningRestClientModule(Class syncClientType, Class asyncClientType) { + protected FormSigningRestClientModule() { + } + + protected FormSigningRestClientModule(TypeToken syncClientType, TypeToken asyncClientType) { super(syncClientType, asyncClientType); } + protected FormSigningRestClientModule(TypeToken syncClientType, TypeToken asyncClientType, + Map, Class> sync2Async) { + super(syncClientType, asyncClientType, sync2Async); + } + @Provides @TimeStamp protected String provideTimeStamp(final DateService dateService, diff --git a/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java b/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java index de773344e6..e41fd7a6e2 100644 --- a/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java +++ b/common/aws/src/main/java/org/jclouds/aws/config/WithZonesFormSigningRestClientModule.java @@ -23,21 +23,29 @@ import java.util.Map; import org.jclouds.rest.ConfiguresRestClient; +import com.google.common.reflect.TypeToken; + /** * * @author Adrian Cole */ @ConfiguresRestClient -public class WithZonesFormSigningRestClientModule extends FormSigningRestClientModule { - - public WithZonesFormSigningRestClientModule(Class syncClientType, Class asyncClientType, - Map, Class> delegates) { - super(syncClientType, asyncClientType, delegates); +public abstract class WithZonesFormSigningRestClientModule extends FormSigningRestClientModule { + protected WithZonesFormSigningRestClientModule(Map, Class> delegates) { + super(delegates); } - public WithZonesFormSigningRestClientModule(Class syncClientType, Class asyncClientType) { + protected WithZonesFormSigningRestClientModule() { + } + + protected WithZonesFormSigningRestClientModule(TypeToken syncClientType, TypeToken asyncClientType) { super(syncClientType, asyncClientType); } + protected WithZonesFormSigningRestClientModule(TypeToken syncClientType, TypeToken asyncClientType, + Map, Class> sync2Async) { + super(syncClientType, asyncClientType, sync2Async); + } + } \ No newline at end of file diff --git a/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java b/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java index 2a8ed8caf2..86f871fa7b 100644 --- a/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java +++ b/common/azure/src/main/java/org/jclouds/azure/storage/config/AzureStorageRestClientModule.java @@ -38,6 +38,7 @@ import org.jclouds.rest.config.RestClientModule; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; +import com.google.common.reflect.TypeToken; import com.google.inject.Provides; /** @@ -47,8 +48,11 @@ import com.google.inject.Provides; */ @ConfiguresRestClient public class AzureStorageRestClientModule extends RestClientModule { + protected AzureStorageRestClientModule() { - public AzureStorageRestClientModule(Class syncClientType, Class asyncClientType) { + } + + public AzureStorageRestClientModule(TypeToken syncClientType, TypeToken asyncClientType) { super(syncClientType, asyncClientType); } diff --git a/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java b/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java index 4f9c8b6d27..74898ea97c 100644 --- a/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java +++ b/common/azure/src/test/java/org/jclouds/azure/storage/filters/SharedKeyLiteAuthenticationTest.java @@ -39,6 +39,7 @@ import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.google.common.collect.ImmutableSet; +import com.google.common.reflect.TypeToken; import com.google.inject.Injector; import com.google.inject.Module; @@ -140,8 +141,9 @@ public class SharedKeyLiteAuthenticationTest { .credentials(ACCOUNT, "credential") .modules( ImmutableSet. of(new MockModule(), new NullLoggingModule(), - new AzureStorageRestClientModule( - IntegrationTestClient.class, IntegrationTestAsyncClient.class))).buildInjector(); + new AzureStorageRestClientModule(TypeToken + .of(IntegrationTestClient.class), TypeToken.of(IntegrationTestAsyncClient.class)))) + .buildInjector(); filter = injector.getInstance(SharedKeyLiteAuthentication.class); } } \ No newline at end of file diff --git a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java index 393690996f..37de990fd3 100644 --- a/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java +++ b/common/trmk/src/main/java/org/jclouds/trmk/vcloud_0_8/config/TerremarkVCloudRestClientModule.java @@ -96,13 +96,11 @@ import com.google.inject.TypeLiteral; public class TerremarkVCloudRestClientModule extends RestClientModule { - public TerremarkVCloudRestClientModule(Class syncClientType, Class asyncClientType) { - super(syncClientType, asyncClientType); + public TerremarkVCloudRestClientModule() { } - public TerremarkVCloudRestClientModule(Class syncClientType, Class asyncClientType, - Map, Class> delegateMap) { - super(syncClientType, asyncClientType, delegateMap); + public TerremarkVCloudRestClientModule(Map, Class> delegateMap) { + super(delegateMap); } @Override diff --git a/compute/src/test/resources/initscript_with_java.sh b/compute/src/test/resources/initscript_with_java.sh index e1f991bc8e..d7bbeed3ea 100644 --- a/compute/src/test/resources/initscript_with_java.sh +++ b/compute/src/test/resources/initscript_with_java.sh @@ -84,13 +84,13 @@ END_OF_JCLOUDS_SCRIPT exit 1 } alias apt-get-install="apt-get install -f -y -qq --force-yes" -alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)" +alias apt-get-update="apt-get update -qq" function ensure_cmd_or_install_package_apt(){ local cmd=$1 local pkg=$2 - hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg ) + hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg ) } function ensure_cmd_or_install_package_yum(){ @@ -155,7 +155,7 @@ END_OF_JCLOUDS_FILE function installOpenJDK() { if hash apt-get 2>/dev/null; then export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk} - test -d $JAVA_HOME || apt-get-install openjdk-6-jdk + test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk ) elif hash yum 2>/dev/null; then export pkg=java-1.6.0-openjdk-devel yum --nogpgcheck -y install $pkg && diff --git a/compute/src/test/resources/initscript_with_jboss.sh b/compute/src/test/resources/initscript_with_jboss.sh index e700985e58..edec50effd 100644 --- a/compute/src/test/resources/initscript_with_jboss.sh +++ b/compute/src/test/resources/initscript_with_jboss.sh @@ -84,13 +84,13 @@ END_OF_JCLOUDS_SCRIPT exit 1 } alias apt-get-install="apt-get install -f -y -qq --force-yes" -alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)" +alias apt-get-update="apt-get update -qq" function ensure_cmd_or_install_package_apt(){ local cmd=$1 local pkg=$2 - hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg ) + hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg ) } function ensure_cmd_or_install_package_yum(){ @@ -155,7 +155,7 @@ END_OF_JCLOUDS_FILE function installOpenJDK() { if hash apt-get 2>/dev/null; then export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk} - test -d $JAVA_HOME || apt-get-install openjdk-6-jdk + test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk ) elif hash yum 2>/dev/null; then export pkg=java-1.6.0-openjdk-devel yum --nogpgcheck -y install $pkg && diff --git a/compute/src/test/resources/runscript.sh b/compute/src/test/resources/runscript.sh index 082c625f42..1c45816838 100644 --- a/compute/src/test/resources/runscript.sh +++ b/compute/src/test/resources/runscript.sh @@ -84,13 +84,13 @@ END_OF_JCLOUDS_SCRIPT exit 1 } alias apt-get-install="apt-get install -f -y -qq --force-yes" -alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)" +alias apt-get-update="apt-get update -qq" function ensure_cmd_or_install_package_apt(){ local cmd=$1 local pkg=$2 - hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg ) + hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg ) } function ensure_cmd_or_install_package_yum(){ @@ -155,7 +155,7 @@ END_OF_JCLOUDS_FILE function installOpenJDK() { if hash apt-get 2>/dev/null; then export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk} - test -d $JAVA_HOME || apt-get-install openjdk-6-jdk + test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk ) elif hash yum 2>/dev/null; then export pkg=java-1.6.0-openjdk-devel yum --nogpgcheck -y install $pkg && diff --git a/core/src/main/java/org/jclouds/ContextBuilder.java b/core/src/main/java/org/jclouds/ContextBuilder.java index b3ed279960..b57dd40359 100644 --- a/core/src/main/java/org/jclouds/ContextBuilder.java +++ b/core/src/main/java/org/jclouds/ContextBuilder.java @@ -68,6 +68,8 @@ import org.jclouds.rest.config.BindPropertiesToAnnotations; import org.jclouds.rest.config.CredentialStoreModule; import org.jclouds.rest.config.RestClientModule; import org.jclouds.rest.config.RestModule; +import org.jclouds.rest.internal.BaseRestApiMetadata; +import org.jclouds.rest.internal.RestContextImpl; import org.nnsoft.guice.rocoto.Rocoto; import org.nnsoft.guice.rocoto.configuration.ConfigurationModule; @@ -93,6 +95,7 @@ import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.Stage; import com.google.inject.TypeLiteral; +import com.google.inject.util.Types; /** * Creates {@link RestContext} or {@link Injector} instances based on the most commonly requested @@ -109,6 +112,37 @@ import com.google.inject.TypeLiteral; */ public final class ContextBuilder { + static class ResolveRestContextModule extends AbstractModule { + private final RestApiMetadata restApiMetadata; + + ResolveRestContextModule(RestApiMetadata restApiMetadata) { + this.restApiMetadata = restApiMetadata; + } + + @SuppressWarnings("unchecked") + @Override + protected void configure() { + if (restApiMetadata.getContext().getRawType().equals(RestContext.class)) { + TypeToken concreteType = BaseRestApiMetadata.contextToken(TypeToken.of(restApiMetadata.getApi()), TypeToken + .of(restApiMetadata.getAsyncApi())); + // bind explicit type + bind(TypeLiteral.get(concreteType.getType())).to( + (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, restApiMetadata + .getApi(), restApiMetadata.getAsyncApi()))); + // bind potentially wildcard type + if (!concreteType.equals(restApiMetadata.getContext())) { + bind(TypeLiteral.get(restApiMetadata.getContext().getType())).to( + (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, restApiMetadata + .getApi(), restApiMetadata.getAsyncApi()))); + } + // bind w/o types + bind(TypeLiteral.get(RestContext.class)).to( + (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, restApiMetadata + .getApi(), restApiMetadata.getAsyncApi()))); + } + } + } + private final class BindDefaultContextQualifiedToProvider extends AbstractModule { @Override protected void configure() { @@ -301,6 +335,7 @@ public final class ContextBuilder { Iterable defaultModules = ifSpecifiedByUserDontIncludeDefaultRestModule(restModuleSpecifiedByUser); Iterables.addAll(modules, defaultModules); addClientModuleIfNotPresent(modules); + addRestContextBinding(); addLoggingModuleIfNotPresent(modules); addHttpModuleIfNeededAndNotPresent(modules); addExecutorServiceIfNotPresent(modules); @@ -314,6 +349,12 @@ public final class ContextBuilder { return returnVal; } + void addRestContextBinding() { + if (apiMetadata instanceof RestApiMetadata) { + modules.add(new ResolveRestContextModule(RestApiMetadata.class.cast(apiMetadata))); + } + } + private Iterable ifSpecifiedByUserDontIncludeDefaultRestModule(boolean restModuleSpecifiedByUser) { Iterable defaultModules = Iterables.transform(apiMetadata.getDefaultModules(), new Function, Module>() { @@ -384,13 +425,13 @@ public final class ContextBuilder { protected void addClientModule(List modules) { // TODO: move this up if (apiMetadata instanceof RestApiMetadata) { - final RestApiMetadata rest = RestApiMetadata.class.cast(apiMetadata); - modules.add(new RestClientModule(rest.getApi(), rest.getAsyncApi())); + RestApiMetadata rest = RestApiMetadata.class.cast(apiMetadata); + modules.add(new RestClientModule(TypeToken.of(rest.getApi()), TypeToken.of(rest.getAsyncApi()))); } else { modules.add(new RestModule()); } } - + @VisibleForTesting protected void addEventBusIfNotPresent(List modules) { if (!any(modules, new Predicate() { diff --git a/core/src/main/java/org/jclouds/rest/config/RestClientModule.java b/core/src/main/java/org/jclouds/rest/config/RestClientModule.java index cf0cc4b3ac..a2af4eb4b7 100644 --- a/core/src/main/java/org/jclouds/rest/config/RestClientModule.java +++ b/core/src/main/java/org/jclouds/rest/config/RestClientModule.java @@ -21,13 +21,10 @@ package org.jclouds.rest.config; import java.util.Map; import org.jclouds.rest.ConfiguresRestClient; -import org.jclouds.rest.RestContext; -import org.jclouds.rest.internal.RestContextImpl; +import org.jclouds.util.TypeTokens2; import com.google.common.collect.ImmutableMap; -import com.google.inject.Scopes; -import com.google.inject.TypeLiteral; -import com.google.inject.util.Types; +import com.google.common.reflect.TypeToken; /** * @@ -35,50 +32,65 @@ import com.google.inject.util.Types; */ @ConfiguresRestClient public class RestClientModule extends RestModule { - protected final Class asyncClientType; - protected final Class syncClientType; - - public RestClientModule(Class syncClientType, Class asyncClientType, - Map, Class> sync2Async) { + protected final TypeToken syncClientType; + protected final TypeToken asyncClientType; + + /** + * Note that this ctor requires that you instantiate w/resolved generic params. For example, via + * a subclass of a bound type, or natural instantiation w/resolved type params. + */ + protected RestClientModule(Map, Class> sync2Async) { super(sync2Async); - this.asyncClientType = asyncClientType; - this.syncClientType = syncClientType; + this.syncClientType = TypeTokens2.checkBound(new TypeToken(getClass()) { + private static final long serialVersionUID = 7519656925453755752L; + }); + this.asyncClientType = TypeTokens2.checkBound(new TypeToken(getClass()) { + private static final long serialVersionUID = -4420015967358511548L; + }); } - public RestClientModule(Class syncClientType, Class asyncClientType) { - this(syncClientType, asyncClientType, ImmutableMap - ., Class> of(syncClientType, asyncClientType)); + /** + * @see #RestClientModule(Map) + */ + protected RestClientModule() { + this(ImmutableMap., Class> of()); } - - @SuppressWarnings( { "unchecked", "rawtypes" }) + + /** + * @see #RestClientModule(TypeToken, TypeToken, Map) + */ + public RestClientModule(TypeToken syncClientType, TypeToken asyncClientType) { + this(syncClientType, asyncClientType, ImmutableMap., Class> of()); + } + + /** + * only necessary when type params are not resolvable at runtime. + */ + public RestClientModule(TypeToken syncClientType, TypeToken asyncClientType, Map, Class> sync2Async) { + super(sync2Async); + this.syncClientType = TypeTokens2.checkBound(syncClientType); + this.asyncClientType = TypeTokens2.checkBound(asyncClientType); + } + @Override protected void configure() { super.configure(); - // Ensures the restcontext can be looked up without generic types. - bind(new TypeLiteral() { - }).to( - (TypeLiteral) TypeLiteral.get(Types.newParameterizedType( - RestContextImpl.class, syncClientType, asyncClientType))).in( - Scopes.SINGLETON); - bind(TypeLiteral.get(Types.newParameterizedType(RestContext.class, syncClientType, asyncClientType))).to( - (TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, syncClientType, - asyncClientType))).in(Scopes.SINGLETON); bindAsyncClient(); bindClient(); bindErrorHandlers(); bindRetryHandlers(); } + + /** * overrides this to change the default retry handlers for the http engine * * ex. * *
-    * bind(HttpRetryHandler.class).annotatedWith(Redirection.class).to(
-    *       AWSRedirectionRetryHandler.class);
-    * bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(
-    *       AWSClientErrorRetryHandler.class);
+    * bind(HttpRetryHandler.class).annotatedWith(Redirection.class).to(AWSRedirectionRetryHandler.class);
+    * bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(AWSClientErrorRetryHandler.class);
     * 
* */ @@ -91,12 +103,9 @@ public class RestClientModule extends RestModule { * ex. * *
-    * bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(
-    *       ParseAWSErrorFromXmlContent.class);
-    * bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(
-    *       ParseAWSErrorFromXmlContent.class);
-    * bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(
-    *       ParseAWSErrorFromXmlContent.class);
+    * bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseAWSErrorFromXmlContent.class);
+    * bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseAWSErrorFromXmlContent.class);
+    * bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseAWSErrorFromXmlContent.class);
     * 
* * @@ -105,12 +114,11 @@ public class RestClientModule extends RestModule { } protected void bindAsyncClient() { - BinderUtils.bindAsyncClient(binder(), asyncClientType); + BinderUtils.bindAsyncClient(binder(), asyncClientType.getRawType()); } protected void bindClient() { - BinderUtils.bindClient(binder(), syncClientType, asyncClientType, - sync2Async); + BinderUtils.bindClient(binder(), syncClientType.getRawType(), asyncClientType.getRawType(), sync2Async); } } \ No newline at end of file diff --git a/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java b/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java index 2f2478a8c4..1aa9075783 100644 --- a/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java +++ b/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java @@ -67,6 +67,14 @@ public class BaseRestApiMetadata extends BaseApiMetadata implements RestApiMetad return props; } + public static TypeToken> contextToken(TypeToken apiToken, TypeToken
asyncApiToken) { + return new TypeToken>() { + private static final long serialVersionUID = 1L; + }.where(new TypeParameter() { + }, apiToken).where(new TypeParameter() { + }, asyncApiToken); + } + public static class Builder extends BaseApiMetadata.Builder implements RestApiMetadata.Builder { protected Class api; protected Class asyncApi; @@ -80,14 +88,6 @@ public class BaseRestApiMetadata extends BaseApiMetadata implements RestApiMetad .context(contextToken(TypeToken.of(api), TypeToken.of(asyncApi))) .defaultProperties(BaseRestApiMetadata.defaultProperties()); } - - protected TypeToken> contextToken(TypeToken apiToken, TypeToken asyncApiToken) { - return new TypeToken>() { - private static final long serialVersionUID = 1L; - }.where(new TypeParameter() { - }, apiToken).where(new TypeParameter() { - }, asyncApiToken); - } /** * {@inheritDoc} diff --git a/core/src/main/java/org/jclouds/util/TypeTokens2.java b/core/src/main/java/org/jclouds/util/TypeTokens2.java new file mode 100644 index 0000000000..05dad33f57 --- /dev/null +++ b/core/src/main/java/org/jclouds/util/TypeTokens2.java @@ -0,0 +1,40 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds 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.util; + +import static com.google.common.base.Preconditions.checkState; + +import java.lang.reflect.TypeVariable; + +import com.google.common.reflect.TypeToken; + +/** + * + * @author Adrian Cole + */ +public class TypeTokens2 { + /** + * @throws IllegalStateException if the type is an instanceof {@link TypeVariable} + */ + public static TypeToken checkBound(TypeToken type) throws IllegalStateException { + checkState(!(type.getType() instanceof TypeVariable), + "unbound type variable: %s, use ctor that explicitly assigns this", type); + return type; + } +} diff --git a/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java b/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java index 457a81295d..2c9ac3d409 100644 --- a/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java +++ b/core/src/test/java/org/jclouds/http/handlers/BackoffLimitedRetryHandlerTest.java @@ -54,7 +54,7 @@ import com.google.inject.Key; import com.google.inject.TypeLiteral; import com.sun.jersey.api.uri.UriBuilderImpl; -@Test(groups = "unit") +@Test(groups = "unit", testName = "BackoffLimitedRetryHandlerTest") public class BackoffLimitedRetryHandlerTest { BackoffLimitedRetryHandler handler = new BackoffLimitedRetryHandler(); diff --git a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java index 1a97fda1a6..bf21b33c32 100644 --- a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java +++ b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java @@ -176,7 +176,7 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest { @ConfiguresRestClient protected static class CallerModule extends RestClientModule { CallerModule() { - super(Caller.class, AsyncCaller.class, ImmutableMap., Class> of(Callee.class, AsyncCallee.class, Callee2.class, AsyncCallee2.class)); + super(ImmutableMap., Class> of(Callee.class, AsyncCallee.class, Callee2.class, AsyncCallee2.class)); } @Override diff --git a/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java b/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java index 8319a6904c..cf67ae6f7e 100644 --- a/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java +++ b/labs/elb/src/main/java/org/jclouds/elb/config/ELBRestClientModule.java @@ -30,8 +30,5 @@ import org.jclouds.rest.ConfiguresRestClient; */ @ConfiguresRestClient public class ELBRestClientModule extends FormSigningRestClientModule { - public ELBRestClientModule() { - super(ELBClient.class, ELBAsyncClient.class); - } } diff --git a/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java b/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java index a069b43876..aafb715cff 100644 --- a/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java +++ b/labs/glesys/src/main/java/org/jclouds/glesys/config/GleSYSRestClientModule.java @@ -64,7 +64,7 @@ public class GleSYSRestClientModule extends RestClientModule/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg ) + hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg ) } function ensure_cmd_or_install_package_yum(){ diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java index e89fe71a64..8431b17c16 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/AWSEC2ApiMetadata.java @@ -82,6 +82,7 @@ public class AWSEC2ApiMetadata extends EC2ApiMetadata { .version(AWSEC2AsyncClient.VERSION) .name("Amazon-specific EC2 API") .wrapper(AWSEC2ComputeServiceContext.class) + .context(CONTEXT_TOKEN) .defaultProperties(AWSEC2ApiMetadata.defaultProperties()) .defaultModules(ImmutableSet.>of(AWSEC2RestClientModule.class, EC2ResolveImagesModule.class, AWSEC2ComputeServiceContextModule.class)); } diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java index 90072be664..119e0f1ac1 100644 --- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java +++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/config/AWSEC2RestClientModule.java @@ -64,6 +64,7 @@ import org.jclouds.ec2.services.WindowsClient; import org.jclouds.rest.ConfiguresRestClient; import com.google.common.collect.ImmutableMap; +import com.google.common.reflect.TypeToken; import com.google.inject.Provides; /** @@ -90,7 +91,7 @@ public class AWSEC2RestClientModule extends EC2RestClientModule getIso3166Codes() { 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 165792f2b8..b05dff5764 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 @@ -73,6 +73,7 @@ public class AWSS3ApiMetadata extends S3ApiMetadata { id("aws-s3") .name("Amazon-specific S3 API") .defaultProperties(AWSS3ApiMetadata.defaultProperties()) + .context(CONTEXT_TOKEN) .wrapper(TypeToken.of(AWSS3BlobStoreContext.class)) .defaultModules(ImmutableSet.>of(AWSS3RestClientModule.class, AWSS3BlobStoreContextModule.class)); } diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java index f46844114d..93e4538f3d 100644 --- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java +++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/config/AWSS3RestClientModule.java @@ -41,6 +41,7 @@ import org.jclouds.s3.config.S3RestClientModule; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; +import com.google.common.reflect.TypeToken; import com.google.inject.Provides; /** @@ -50,7 +51,11 @@ import com.google.inject.Provides; */ @ConfiguresRestClient public class AWSS3RestClientModule extends S3RestClientModule { - + + public AWSS3RestClientModule() { + super(TypeToken.of(AWSS3Client.class), TypeToken.of(AWSS3AsyncClient.class)); + } + @Override protected Supplier defaultRegionForBucket(@Region Supplier defaultRegion) { return Suppliers.ofInstance(US_STANDARD); @@ -68,11 +73,7 @@ public class AWSS3RestClientModule extends S3RestClientModule provideBucketURI(@Named(PROPERTY_REGION + "." + US_STANDARD + "." + ENDPOINT) String endpoint){ return Suppliers.ofInstance(URI.create(endpoint)); } - - public AWSS3RestClientModule() { - super(AWSS3Client.class, AWSS3AsyncClient.class); - } - + @Singleton @Provides S3Client provide(AWSS3Client in) { diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java index c94667f515..a7ab36914a 100644 --- a/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java +++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/config/AzureBlobRestClientModule.java @@ -36,10 +36,6 @@ import org.jclouds.rest.ConfiguresRestClient; @ConfiguresRestClient public class AzureBlobRestClientModule extends AzureStorageRestClientModule { - public AzureBlobRestClientModule() { - super(AzureBlobClient.class, AzureBlobAsyncClient.class); - } - @Override protected void configure() { install(new AzureBlobModule()); diff --git a/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java b/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java index 8e97f212e1..3c16eb743d 100644 --- a/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java +++ b/providers/gogrid/src/main/java/org/jclouds/gogrid/config/GoGridRestClientModule.java @@ -71,7 +71,7 @@ public class GoGridRestClientModule extends RestClientModule { - public RimuHostingRestClientModule() { - super(RimuHostingClient.class, RimuHostingAsyncClient.class); - } - @Override protected void configure() { bind(DateAdapter.class).to(RimuIso8601DateAdapter.class); diff --git a/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java b/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java index b1e5ef93a5..aa9189154a 100644 --- a/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java +++ b/providers/slicehost/src/main/java/org/jclouds/slicehost/config/SlicehostRestClientModule.java @@ -35,10 +35,6 @@ import org.jclouds.slicehost.handlers.ParseSlicehostErrorFromHttpResponse; @ConfiguresRestClient public class SlicehostRestClientModule extends RestClientModule { - public SlicehostRestClientModule() { - super(SlicehostClient.class, SlicehostAsyncClient.class); - } - @Override protected void bindErrorHandlers() { bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseSlicehostErrorFromHttpResponse.class); diff --git a/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java b/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java index 03e07d12fd..b2eadbe157 100644 --- a/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java +++ b/providers/softlayer/src/main/java/org/jclouds/softlayer/config/SoftLayerRestClientModule.java @@ -62,7 +62,7 @@ public class SoftLayerRestClientModule extends RestClientModule { - public TerremarkVCloudExpressRestClientModule() { - super(TerremarkVCloudExpressClient.class, TerremarkVCloudExpressAsyncClient.class); - } - @Provides @Singleton protected TerremarkVCloudAsyncClient provideVCloudAsyncClient(TerremarkVCloudExpressAsyncClient in) { diff --git a/scriptbuilder/src/main/resources/functions/installOpenJDK.sh b/scriptbuilder/src/main/resources/functions/installOpenJDK.sh index 20139134f4..71539db08c 100644 --- a/scriptbuilder/src/main/resources/functions/installOpenJDK.sh +++ b/scriptbuilder/src/main/resources/functions/installOpenJDK.sh @@ -20,7 +20,7 @@ END_OF_JCLOUDS_FILE function installOpenJDK() { if hash apt-get 2>/dev/null; then export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk} - test -d $JAVA_HOME || apt-get-install openjdk-6-jdk + test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk ) elif hash yum 2>/dev/null; then export pkg=java-1.6.0-openjdk-devel yum --nogpgcheck -y install $pkg && diff --git a/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh b/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh index ad72ddb838..b0854d7813 100644 --- a/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh +++ b/scriptbuilder/src/main/resources/functions/setupPublicCurl.sh @@ -1,11 +1,11 @@ alias apt-get-install="apt-get install -f -y -qq --force-yes" -alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)" +alias apt-get-update="apt-get update -qq" function ensure_cmd_or_install_package_apt(){ local cmd=$1 local pkg=$2 - hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg ) + hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg ) } function ensure_cmd_or_install_package_yum(){ diff --git a/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh b/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh index f3a502ad4b..52c107410f 100644 --- a/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh +++ b/scriptbuilder/src/test/resources/test_install_jdk_scriptbuilder.sh @@ -84,13 +84,13 @@ END_OF_JCLOUDS_SCRIPT exit 1 } alias apt-get-install="apt-get install -f -y -qq --force-yes" -alias apt-get-upgrade="(apt-get update -qq&&apt-get upgrade -y -qq)" +alias apt-get-update="apt-get update -qq" function ensure_cmd_or_install_package_apt(){ local cmd=$1 local pkg=$2 - hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-upgrade && apt-get-install $pkg ) + hash $cmd 2>/dev/null || apt-get-install $pkg || ( apt-get-update && apt-get-install $pkg ) } function ensure_cmd_or_install_package_yum(){ @@ -155,7 +155,7 @@ END_OF_JCLOUDS_FILE function installOpenJDK() { if hash apt-get 2>/dev/null; then export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-6-openjdk} - test -d $JAVA_HOME || apt-get-install openjdk-6-jdk + test -d $JAVA_HOME || apt-get-install openjdk-6-jdk || ( apt-get-update && apt-get-install openjdk-6-jdk ) elif hash yum 2>/dev/null; then export pkg=java-1.6.0-openjdk-devel yum --nogpgcheck -y install $pkg &&