JcloudsLocationResolver extensible
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/326583f1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/326583f1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/326583f1 Branch: refs/heads/master Commit: 326583f144114140ec6c9f3e0ec926e24d01f624 Parents: cf49a2b Author: Sam Corbett <[email protected]> Authored: Fri May 22 15:32:11 2015 +0100 Committer: Sam Corbett <[email protected]> Committed: Fri May 29 14:45:01 2015 +0100 ---------------------------------------------------------------------- .../basic/LocalhostLocationResolver.java | 3 ++- .../jclouds/JcloudsLocationResolver.java | 20 ++++++++++++-------- .../jclouds/BrooklynMachinePoolLiveTest.java | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/326583f1/core/src/main/java/brooklyn/location/basic/LocalhostLocationResolver.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/location/basic/LocalhostLocationResolver.java b/core/src/main/java/brooklyn/location/basic/LocalhostLocationResolver.java index 08963a4..6451ed1 100644 --- a/core/src/main/java/brooklyn/location/basic/LocalhostLocationResolver.java +++ b/core/src/main/java/brooklyn/location/basic/LocalhostLocationResolver.java @@ -58,7 +58,8 @@ public class LocalhostLocationResolver extends AbstractLocationResolver implemen protected SpecParser getSpecParser() { return new AbstractLocationResolver.SpecParser(getPrefix()).setExampleUsage("\"localhost\" or \"localhost(displayName=abc)\""); } - + + @Override protected Map<String, Object> getFilteredLocationProperties(String provider, String namedLocation, Map<String, ?> globalProperties) { return new LocalhostPropertiesFromBrooklynProperties().getLocationProperties("localhost", namedLocation, globalProperties); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/326583f1/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationResolver.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationResolver.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationResolver.java index 5d42da3..3a90653 100644 --- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationResolver.java +++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationResolver.java @@ -50,7 +50,7 @@ public class JcloudsLocationResolver implements LocationResolver { public static final Logger log = LoggerFactory.getLogger(JcloudsLocationResolver.class); - public static final String JCLOUDS = "jclouds"; + private static final String JCLOUDS = "jclouds"; public static final Map<String,ProviderMetadata> PROVIDERS = getProvidersMap(); public static final Map<String,ApiMetadata> APIS = getApisMap(); @@ -83,15 +83,15 @@ public class JcloudsLocationResolver implements LocationResolver { this.managementContext = checkNotNull(managementContext, "managementContext"); } - protected static class JcloudsSpecParser { + protected class JcloudsSpecParser { String providerOrApi; String parameter; - public static JcloudsSpecParser parse(String spec, boolean dryrun) { + public JcloudsSpecParser parse(String spec, boolean dryrun) { JcloudsSpecParser result = new JcloudsSpecParser(); int split = spec.indexOf(':'); if (split<0) { - if (spec.equalsIgnoreCase(JCLOUDS)) { + if (spec.equalsIgnoreCase(getPrefix())) { if (dryrun) return null; throw new IllegalArgumentException("Cannot use '"+spec+"' as a location ID; it is insufficient. "+ "Try jclouds:aws-ec2 (for example)."); @@ -102,7 +102,7 @@ public class JcloudsLocationResolver implements LocationResolver { result.providerOrApi = spec.substring(0, split); result.parameter = spec.substring(split+1); int numJcloudsPrefixes = 0; - while (result.providerOrApi.equalsIgnoreCase(JCLOUDS)) { + while (result.providerOrApi.equalsIgnoreCase(getPrefix())) { //strip any number of jclouds: prefixes, for use by static "resolve" method numJcloudsPrefixes++; result.providerOrApi = result.parameter; @@ -152,7 +152,7 @@ public class JcloudsLocationResolver implements LocationResolver { public JcloudsLocation newLocationFromString(Map locationFlags, String spec, brooklyn.location.LocationRegistry registry) { Map globalProperties = registry.getProperties(); - JcloudsSpecParser details = JcloudsSpecParser.parse(spec, false); + JcloudsSpecParser details = new JcloudsSpecParser().parse(spec, false); String namedLocation = (String) locationFlags.get(LocationInternal.NAMED_SPEC_NAME.getName()); boolean isProvider = details.isProvider(); @@ -193,7 +193,7 @@ public class JcloudsLocationResolver implements LocationResolver { } } - return managementContext.getLocationManager().createLocation(LocationSpec.create(JcloudsLocation.class) + return managementContext.getLocationManager().createLocation(LocationSpec.create(getLocationClass()) .configure(LocationConfigUtils.finalAndOriginalSpecs(spec, jcloudsProperties, globalProperties, namedLocation)) .configure(jcloudsProperties) ); } @@ -210,11 +210,15 @@ public class JcloudsLocationResolver implements LocationResolver { public String getPrefix() { return JCLOUDS; } + + protected Class<? extends JcloudsLocation> getLocationClass() { + return JcloudsLocation.class; + } @Override public boolean accepts(String spec, LocationRegistry registry) { if (BasicLocationRegistry.isResolverPrefixForSpec(this, spec, true)) return true; - JcloudsSpecParser details = JcloudsSpecParser.parse(spec, true); + JcloudsSpecParser details = new JcloudsSpecParser().parse(spec, true); if (details==null) return false; if (details.isProvider() || details.isApi()) return true; return false; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/326583f1/locations/jclouds/src/test/java/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/test/java/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java b/locations/jclouds/src/test/java/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java index 3504570..7a52f04 100644 --- a/locations/jclouds/src/test/java/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java +++ b/locations/jclouds/src/test/java/brooklyn/location/jclouds/BrooklynMachinePoolLiveTest.java @@ -98,6 +98,6 @@ public class BrooklynMachinePoolLiveTest { private JcloudsLocation resolve(String spec) { - return (JcloudsLocation) managementContext.getLocationRegistry().resolve(JcloudsLocationResolver.JCLOUDS+":"+spec); + return (JcloudsLocation) managementContext.getLocationRegistry().resolve(new JcloudsLocationResolver().getPrefix() + ":" + spec); } }
