You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/11/16 19:45:53 UTC

[1/2] jclouds git commit: Small cleanup of how RegionToEndpoint checks arguments.

Repository: jclouds
Updated Branches:
  refs/heads/1.8.x dedeb63b0 -> c18f3b353


Small cleanup of how RegionToEndpoint checks arguments.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/a9fa0557
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/a9fa0557
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/a9fa0557

Branch: refs/heads/1.8.x
Commit: a9fa05577eae87f4699f30e2152ddaeaa28f428f
Parents: dedeb63
Author: Zack Shoylev <za...@rackspace.com>
Authored: Wed Nov 12 08:36:50 2014 -0600
Committer: Adrian Cole <ad...@gmail.com>
Committed: Sun Nov 16 10:38:25 2014 -0800

----------------------------------------------------------------------
 .../jclouds/location/functions/RegionToEndpoint.java |  4 +---
 .../location/functions/RegionToEndpointTest.java     | 15 ---------------
 2 files changed, 1 insertion(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a9fa0557/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java b/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
index 50c4357..01d4fcb 100644
--- a/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
+++ b/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
@@ -26,7 +26,6 @@ import java.util.Map;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
-import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.location.Region;
 
 import com.google.common.base.Function;
@@ -43,8 +42,7 @@ public class RegionToEndpoint implements Function<Object, URI> {
    }
 
    @Override
-   public URI apply(@Nullable Object from) {
-      checkArgument(from != null && from instanceof String, "you must specify a region, as a String argument");
+   public URI apply(Object from) {
       Map<String, Supplier<URI>> regionToEndpoint = regionToEndpointSupplier.get();
       checkState(regionToEndpoint.size() > 0, "no region name to endpoint mappings configured!");
       checkArgument(regionToEndpoint.containsKey(from),

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a9fa0557/core/src/test/java/org/jclouds/location/functions/RegionToEndpointTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/location/functions/RegionToEndpointTest.java b/core/src/test/java/org/jclouds/location/functions/RegionToEndpointTest.java
index 5f68741..3c0aedc 100644
--- a/core/src/test/java/org/jclouds/location/functions/RegionToEndpointTest.java
+++ b/core/src/test/java/org/jclouds/location/functions/RegionToEndpointTest.java
@@ -18,7 +18,6 @@ package org.jclouds.location.functions;
 
 import static org.testng.Assert.assertEquals;
 
-import java.io.File;
 import java.net.URI;
 import java.util.Map;
 
@@ -41,24 +40,10 @@ public class RegionToEndpointTest {
       assertEquals(fn.apply("1"), URI.create("http://1"));
    }
 
-   @Test(expectedExceptions = IllegalArgumentException.class)
-   public void testMustBeString() {
-      RegionToEndpoint fn = new RegionToEndpoint(Suppliers.<Map<String, Supplier<URI>>> ofInstance(ImmutableMap.of("1",
-               Suppliers.ofInstance(URI.create("http://1")))));
-      fn.apply(new File("foo"));
-   }
-
    @Test(expectedExceptions = IllegalStateException.class)
    public void testMustHaveEndpoints() {
       RegionToEndpoint fn = new RegionToEndpoint(Suppliers.<Map<String, Supplier<URI>>> ofInstance(ImmutableMap
                .<String, Supplier<URI>> of()));
       fn.apply("1");
    }
-
-   @Test(expectedExceptions = IllegalArgumentException.class)
-   public void testNullIsIllegal() {
-      RegionToEndpoint fn = new RegionToEndpoint(Suppliers.<Map<String, Supplier<URI>>> ofInstance(ImmutableMap.of("1",
-               Suppliers.ofInstance(URI.create("http://1")))));
-      fn.apply(null);
-   }
 }


[2/2] jclouds git commit: Finished partial fix in 91f405c9fedf24822015172e9e3c50acbd855d28.

Posted by ad...@apache.org.
Finished partial fix in 91f405c9fedf24822015172e9e3c50acbd855d28.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/c18f3b35
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/c18f3b35
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/c18f3b35

Branch: refs/heads/1.8.x
Commit: c18f3b3537d442f13d8257500650a7004f0b4b89
Parents: a9fa055
Author: Adrian Cole <ad...@gmail.com>
Authored: Sun Nov 16 10:15:06 2014 -0800
Committer: Adrian Cole <ad...@gmail.com>
Committed: Sun Nov 16 10:45:26 2014 -0800

----------------------------------------------------------------------
 .../functions/RegionToAdminEndpointURI.java     | 28 +++++++++--
 .../AssignCorrectHostnameForBucket.java         | 24 +++------
 .../DefaultEndpointThenInvalidateRegion.java    | 14 +++---
 .../AssignCorrectHostnameForBucketTest.java     | 51 ++++++++++----------
 ...DefaultEndpointThenInvalidateRegionTest.java | 22 ++++-----
 .../location/functions/RegionToEndpoint.java    | 17 +++----
 .../RegionToEndpointOrProviderIfNull.java       | 14 ++----
 .../location/functions/ZoneToEndpoint.java      | 21 +++-----
 8 files changed, 93 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/functions/RegionToAdminEndpointURI.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/functions/RegionToAdminEndpointURI.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/functions/RegionToAdminEndpointURI.java
index e69fd19..c6c1a34 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/functions/RegionToAdminEndpointURI.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/functions/RegionToAdminEndpointURI.java
@@ -16,14 +16,34 @@
  */
 package org.jclouds.openstack.keystone.v2_0.functions;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.net.URI;
+import java.util.Map;
+
 import javax.inject.Inject;
 
-import org.jclouds.location.functions.RegionToEndpoint;
 import org.jclouds.openstack.keystone.v2_0.suppliers.RegionIdToAdminURISupplier;
 
-public class RegionToAdminEndpointURI extends RegionToEndpoint {
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+
+public final class RegionToAdminEndpointURI implements Function<Object, URI> {
+
+   private final RegionIdToAdminURISupplier regionToAdminEndpoints;
+
    @Inject
-   public RegionToAdminEndpointURI(RegionIdToAdminURISupplier regionToEndpointSupplier) {
-      super(regionToEndpointSupplier);
+   RegionToAdminEndpointURI(RegionIdToAdminURISupplier regionToAdminEndpoints) {
+      this.regionToAdminEndpoints = regionToAdminEndpoints;
+   }
+
+   @Override
+   public URI apply(Object from) {
+      Map<String, Supplier<URI>> regionToAdminEndpoint = regionToAdminEndpoints.get();
+      checkState(!regionToAdminEndpoint.isEmpty(), "no region name to admin endpoint mappings in keystone!");
+      checkArgument(regionToAdminEndpoint.containsKey(from),
+            "requested location %s, which is not in the keystone admin endpoints: %s", from, regionToAdminEndpoint);
+      return regionToAdminEndpoint.get(from).get();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/apis/s3/src/main/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucket.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucket.java b/apis/s3/src/main/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucket.java
index 0aadaeb..3a203b9 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucket.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucket.java
@@ -18,41 +18,33 @@ package org.jclouds.s3.functions;
 
 import java.net.URI;
 
-import javax.annotation.Resource;
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
-import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
-import org.jclouds.logging.Logger;
 import org.jclouds.s3.Bucket;
 
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
 
-@Singleton
-public class AssignCorrectHostnameForBucket implements Function<Object, URI> {
-   @Resource
-   protected Logger logger = Logger.NULL;
+public final class AssignCorrectHostnameForBucket implements Function<Object, URI> {
 
-   protected final RegionToEndpointOrProviderIfNull r2;
-   protected final Function<String, Optional<String>> bucketToRegion;
+   private final RegionToEndpointOrProviderIfNull delegate;
+   private final Function<String, Optional<String>> bucketToRegion;
 
    @Inject
-   public AssignCorrectHostnameForBucket(RegionToEndpointOrProviderIfNull r2,
+   AssignCorrectHostnameForBucket(RegionToEndpointOrProviderIfNull delegate,
             @Bucket Function<String, Optional<String>> bucketToRegion) {
       this.bucketToRegion = bucketToRegion;
-      this.r2 = r2;
+      this.delegate = delegate;
    }
 
    @Override
-   public URI apply(@Nullable Object from) {
+   public URI apply(Object from) {
       String bucket = from.toString();
       Optional<String> region = bucketToRegion.apply(bucket);
       if (region.isPresent()) {
-         return r2.apply(region.get());
+         return delegate.apply(region.get());
       }
-      return r2.apply(null);
+      return delegate.apply(null);
    }
-
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/apis/s3/src/main/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegion.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegion.java b/apis/s3/src/main/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegion.java
index 07f70de..8b087c6 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegion.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegion.java
@@ -19,7 +19,6 @@ package org.jclouds.s3.functions;
 import java.net.URI;
 
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.s3.Bucket;
@@ -28,23 +27,22 @@ import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.cache.LoadingCache;
 
-@Singleton
-public class DefaultEndpointThenInvalidateRegion implements Function<Object, URI> {
+public final class DefaultEndpointThenInvalidateRegion implements Function<Object, URI> {
 
+   private final Function<Object, URI> delegate;
    private final LoadingCache<String, Optional<String>> bucketToRegionCache;
-   private final AssignCorrectHostnameForBucket r2;
 
    @Inject
-   public DefaultEndpointThenInvalidateRegion(AssignCorrectHostnameForBucket r2,
-            @Bucket LoadingCache<String, Optional<String>> bucketToRegionCache) {
-      this.r2 = r2;
+   DefaultEndpointThenInvalidateRegion(AssignCorrectHostnameForBucket delegate,
+         @Bucket LoadingCache<String, Optional<String>> bucketToRegionCache) {
+      this.delegate = delegate;
       this.bucketToRegionCache = bucketToRegionCache;
    }
 
    @Override
    public URI apply(@Nullable Object from) {
       try {
-         return r2.apply(from);
+         return delegate.apply(from);
       } finally {
          bucketToRegionCache.invalidate(from.toString());
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/apis/s3/src/test/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucketTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucketTest.java b/apis/s3/src/test/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucketTest.java
index 5b9f7a5..476f536 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucketTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/functions/AssignCorrectHostnameForBucketTest.java
@@ -21,6 +21,8 @@ import static org.testng.Assert.assertEquals;
 import java.net.URI;
 import java.util.Map;
 
+import org.jclouds.location.Provider;
+import org.jclouds.location.Region;
 import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
 import org.testng.annotations.Test;
 
@@ -29,42 +31,41 @@ import com.google.common.base.Optional;
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableMap;
+import com.google.inject.Binder;
+import com.google.inject.Guice;
+import com.google.inject.Module;
+import com.google.inject.Provides;
 
-/**
- * Tests behavior of {@code AssignCorrectHostnameForBucket}
- */
-// NOTE:without testName, this will not call @Before* and fail w/NPE during
-// surefire
-@Test(groups = "unit", testName = "AssignCorrectHostnameForBucketTest")
+@Test
 public class AssignCorrectHostnameForBucketTest {
+   static final RegionToEndpointOrProviderIfNull REGION_TO_ENDPOINT = Guice.createInjector(new Module() {
+      @Override public void configure(Binder binder) {
+         binder.bindConstant().annotatedWith(Provider.class).to("s3");
+      }
 
-   public void testWhenNoBucketRegionMappingInCache() {
+      @Provides @Provider Supplier<URI> defaultUri() {
+         return Suppliers.ofInstance(URI.create("https://s3.amazonaws.com"));
+      }
 
-      AssignCorrectHostnameForBucket fn = new AssignCorrectHostnameForBucket(new RegionToEndpointOrProviderIfNull(
-               "aws-s3", Suppliers.ofInstance(URI.create("https://s3.amazonaws.com")),
+      @Provides @Region Supplier<Map<String, Supplier<URI>>> regionToEndpoints() {
+         Map<String, Supplier<URI>> regionToEndpoint = ImmutableMap.of( //
+               "us-standard", defaultUri(), //
+               "us-west-1", Suppliers.ofInstance(URI.create("https://s3-us-west-1.amazonaws.com")));
+         return Suppliers.ofInstance(regionToEndpoint);
+      }
+   }).getInstance(RegionToEndpointOrProviderIfNull.class);
 
-               Suppliers.<Map<String, Supplier<URI>>> ofInstance(ImmutableMap.of("us-standard",
-                        Suppliers.ofInstance(URI.create("https://s3.amazonaws.com")), "us-west-1",
-                        Suppliers.ofInstance(URI.create("https://s3-us-west-1.amazonaws.com"))))),
-                        
-               Functions.forMap(ImmutableMap.<String, Optional<String>> of("bucket", Optional.<String> absent())));
+   public void testWhenNoBucketRegionMappingInCache() {
+      AssignCorrectHostnameForBucket fn = new AssignCorrectHostnameForBucket(REGION_TO_ENDPOINT,
+            Functions.forMap(ImmutableMap.of("bucket", Optional.<String>absent())));
 
       assertEquals(fn.apply("bucket"), URI.create("https://s3.amazonaws.com"));
-
    }
 
    public void testWhenBucketRegionMappingInCache() {
-
-      AssignCorrectHostnameForBucket fn = new AssignCorrectHostnameForBucket(new RegionToEndpointOrProviderIfNull(
-               "aws-s3", Suppliers.ofInstance(URI.create("https://s3.amazonaws.com")),
-
-               Suppliers.<Map<String, Supplier<URI>>> ofInstance(ImmutableMap.of("us-standard",
-                        Suppliers.ofInstance(URI.create("https://s3.amazonaws.com")), "us-west-1",
-                        Suppliers.ofInstance(URI.create("https://s3-us-west-1.amazonaws.com"))))),
-               
-               Functions.forMap(ImmutableMap.<String, Optional<String>> of("bucket", Optional.of("us-west-1"))));
+      AssignCorrectHostnameForBucket fn = new AssignCorrectHostnameForBucket(REGION_TO_ENDPOINT,
+            Functions.forMap(ImmutableMap.of("bucket", Optional.of("us-west-1"))));
 
       assertEquals(fn.apply("bucket"), URI.create("https://s3-us-west-1.amazonaws.com"));
-
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/apis/s3/src/test/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegionTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegionTest.java b/apis/s3/src/test/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegionTest.java
index b601a8f..485dd0e 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegionTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/functions/DefaultEndpointThenInvalidateRegionTest.java
@@ -17,34 +17,30 @@
 package org.jclouds.s3.functions;
 
 import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-
-import java.net.URI;
+import static org.jclouds.s3.functions.AssignCorrectHostnameForBucketTest.REGION_TO_ENDPOINT;
 
 import org.testng.annotations.Test;
 
+import com.google.common.base.Functions;
 import com.google.common.base.Optional;
 import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableMap;
 
-@Test(testName = "DefaultEndpointThenInvalidateRegionTest")
 public class DefaultEndpointThenInvalidateRegionTest {
-
    @SuppressWarnings("unchecked")
    @Test
-   void testInvalidate() throws Exception {
-      AssignCorrectHostnameForBucket r2 = createMock(AssignCorrectHostnameForBucket.class);
+   public void testInvalidate() throws Exception {
       LoadingCache<String, Optional<String>> bucketToRegionCache = createMock(LoadingCache.class);
 
-      expect(r2.apply("mybucket")).andReturn(URI.create("http://east-url"));
       bucketToRegionCache.invalidate("mybucket");
+      replay(bucketToRegionCache);
 
-      replay(r2, bucketToRegionCache);
-
-      new DefaultEndpointThenInvalidateRegion(r2, bucketToRegionCache).apply("mybucket");
-      verify(r2, bucketToRegionCache);
+      AssignCorrectHostnameForBucket delegate = new AssignCorrectHostnameForBucket(REGION_TO_ENDPOINT,
+            Functions.forMap(ImmutableMap.of("mybucket", Optional.of("us-west-1"))));
 
+      new DefaultEndpointThenInvalidateRegion(delegate, bucketToRegionCache).apply("mybucket");
+      verify(bucketToRegionCache);
    }
-
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java b/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
index 01d4fcb..4180f32 100644
--- a/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
+++ b/core/src/main/java/org/jclouds/location/functions/RegionToEndpoint.java
@@ -17,36 +17,33 @@
 package org.jclouds.location.functions;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 import java.net.URI;
 import java.util.Map;
 
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
 import org.jclouds.location.Region;
 
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 
-@Singleton
-public class RegionToEndpoint implements Function<Object, URI> {
+public final class RegionToEndpoint implements Function<Object, URI> {
 
-   private final Supplier<Map<String, Supplier<URI>>> regionToEndpointSupplier;
+   private final Supplier<Map<String, Supplier<URI>>> regionToEndpoints;
 
    @Inject
-   public RegionToEndpoint(@Region Supplier<Map<String, Supplier<URI>>> regionToEndpointSupplier) {
-      this.regionToEndpointSupplier = checkNotNull(regionToEndpointSupplier, "regionToEndpointSupplier");
+   RegionToEndpoint(@Region Supplier<Map<String, Supplier<URI>>> regionToEndpoints) {
+      this.regionToEndpoints = regionToEndpoints;
    }
 
    @Override
    public URI apply(Object from) {
-      Map<String, Supplier<URI>> regionToEndpoint = regionToEndpointSupplier.get();
-      checkState(regionToEndpoint.size() > 0, "no region name to endpoint mappings configured!");
+      Map<String, Supplier<URI>> regionToEndpoint = regionToEndpoints.get();
+      checkState(!regionToEndpoint.isEmpty(), "no region name to endpoint mappings configured!");
       checkArgument(regionToEndpoint.containsKey(from),
-               "requested location %s, which is not in the configured locations: %s", from, regionToEndpoint);
+               "requested location %s, which is not a configured region: %s", from, regionToEndpoint);
       return regionToEndpoint.get(from).get();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/core/src/main/java/org/jclouds/location/functions/RegionToEndpointOrProviderIfNull.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/location/functions/RegionToEndpointOrProviderIfNull.java b/core/src/main/java/org/jclouds/location/functions/RegionToEndpointOrProviderIfNull.java
index f77f1a3..a59c3ce 100644
--- a/core/src/main/java/org/jclouds/location/functions/RegionToEndpointOrProviderIfNull.java
+++ b/core/src/main/java/org/jclouds/location/functions/RegionToEndpointOrProviderIfNull.java
@@ -17,13 +17,11 @@
 package org.jclouds.location.functions;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.net.URI;
 import java.util.Map;
 
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.location.Provider;
@@ -36,25 +34,23 @@ import com.google.common.base.Supplier;
  * Return a uri corresponding to the name of the region (passed argument).
  * Otherwise, return the default location.
  */
-@Singleton
-public class RegionToEndpointOrProviderIfNull implements Function<Object, URI> {
+public final class RegionToEndpointOrProviderIfNull implements Function<Object, URI> {
    private final Supplier<URI> defaultUri;
    private final String defaultProvider;
    private final Supplier<Map<String, Supplier<URI>>> regionToEndpointSupplier;
 
    @Inject
-   public RegionToEndpointOrProviderIfNull(@Provider String defaultProvider, @Provider Supplier<URI> defaultUri,
+   RegionToEndpointOrProviderIfNull(@Provider String defaultProvider, @Provider Supplier<URI> defaultUri,
          @Region Supplier<Map<String, Supplier<URI>>> regionToEndpointSupplier) {
-      this.defaultProvider = checkNotNull(defaultProvider, "defaultProvider");
-      this.defaultUri = checkNotNull(defaultUri, "defaultUri");
-      this.regionToEndpointSupplier = checkNotNull(regionToEndpointSupplier, "regionToEndpointSupplier");
+      this.defaultProvider = defaultProvider;
+      this.defaultUri = defaultUri;
+      this.regionToEndpointSupplier = regionToEndpointSupplier;
    }
 
    @Override
    public URI apply(@Nullable Object from) {
       if (from == null)
          return defaultUri.get();
-      checkArgument(from instanceof String, "region is a String argument");
       Map<String, Supplier<URI>> regionToEndpoint = regionToEndpointSupplier.get();
       if (from.equals(defaultProvider)) {
          if (regionToEndpoint.containsKey(from))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c18f3b35/core/src/main/java/org/jclouds/location/functions/ZoneToEndpoint.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/location/functions/ZoneToEndpoint.java b/core/src/main/java/org/jclouds/location/functions/ZoneToEndpoint.java
index a308dbe..cb844dc 100644
--- a/core/src/main/java/org/jclouds/location/functions/ZoneToEndpoint.java
+++ b/core/src/main/java/org/jclouds/location/functions/ZoneToEndpoint.java
@@ -17,38 +17,33 @@
 package org.jclouds.location.functions;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 import java.net.URI;
 import java.util.Map;
 
 import javax.inject.Inject;
-import javax.inject.Singleton;
 
-import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.location.Zone;
 
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 
-@Singleton
-public class ZoneToEndpoint implements Function<Object, URI> {
+public final class ZoneToEndpoint implements Function<Object, URI> {
 
-   private final Supplier<Map<String, Supplier<URI>>> zoneToEndpointSupplier;
+   private final Supplier<Map<String, Supplier<URI>>> zoneToEndpoints;
 
    @Inject
-   public ZoneToEndpoint(@Zone Supplier<Map<String, Supplier<URI>>> zoneToEndpointSupplier) {
-      this.zoneToEndpointSupplier = checkNotNull(zoneToEndpointSupplier, "zoneToEndpointSupplier");
+   ZoneToEndpoint(@Zone Supplier<Map<String, Supplier<URI>>> zoneToEndpoints) {
+      this.zoneToEndpoints = zoneToEndpoints;
    }
 
    @Override
-   public URI apply(@Nullable Object from) {
-      checkArgument(from != null && from instanceof String, "you must specify a zone, as a String argument");
-      Map<String, Supplier<URI>> zoneToEndpoint = zoneToEndpointSupplier.get();
-      checkState(zoneToEndpoint.size() > 0, "no zone name to endpoint mappings configured!");
+   public URI apply(Object from) {
+      Map<String, Supplier<URI>> zoneToEndpoint = zoneToEndpoints.get();
+      checkState(!zoneToEndpoint.isEmpty(), "no zone name to endpoint mappings configured!");
       checkArgument(zoneToEndpoint.containsKey(from),
-               "requested location %s, which is not in the configured locations: %s", from, zoneToEndpoint);
+               "requested location %s, which is not a configured zone: %s", from, zoneToEndpoint);
       return zoneToEndpoint.get(from).get();
    }
 }