You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/09/01 17:16:26 UTC

[03/28] incubator-brooklyn git commit: Bootstrap external config suppliers from brooklyn properties.

Bootstrap external config suppliers from brooklyn properties.


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

Branch: refs/heads/master
Commit: b0b4cd8a758cb976521aff8497223c0a280ae02e
Parents: 36787a1
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Mon Jun 22 16:50:33 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Committed: Tue Aug 25 11:49:23 2015 +0100

----------------------------------------------------------------------
 .../BasicExternalConfigSupplierRegistry.java    | 53 +++++++++++++++++++-
 1 file changed, 52 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b0b4cd8a/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java b/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java
index 605ea11..16f7ed5 100644
--- a/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java
+++ b/core/src/main/java/brooklyn/management/internal/BasicExternalConfigSupplierRegistry.java
@@ -18,9 +18,19 @@
  */
 package brooklyn.management.internal;
 
+import java.lang.reflect.Constructor;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.config.ConfigPredicates;
+import brooklyn.config.ConfigUtils;
 import brooklyn.config.external.ExternalConfigSupplier;
+import brooklyn.management.ManagementContext;
+import brooklyn.util.exceptions.Exceptions;
 
 import com.google.common.collect.Maps;
 
@@ -32,10 +42,13 @@ import com.google.common.collect.Maps;
  */
 public class BasicExternalConfigSupplierRegistry implements ExternalConfigSupplierRegistry {
 
+    private static final Logger LOG = LoggerFactory.getLogger(BasicExternalConfigSupplierRegistry.class);
+
     private final Map<String, ExternalConfigSupplier> providersByName = Maps.newLinkedHashMap();
     private final Object providersMapMutex = new Object();
 
-    public BasicExternalConfigSupplierRegistry() {
+    public BasicExternalConfigSupplierRegistry(ManagementContext mgmt) {
+        updateFromBrooklynProperties(mgmt);
     }
 
     @Override
@@ -66,4 +79,42 @@ public class BasicExternalConfigSupplierRegistry implements ExternalConfigSuppli
         }
     }
 
+    @SuppressWarnings("unchecked")
+    private void updateFromBrooklynProperties(ManagementContext mgmt) {
+        // form is:
+        //     brooklyn.external.<name> : fully.qualified.ClassName
+        //     brooklyn.external.<name>.<key> : <value>
+        //     brooklyn.external.<name>.<key> : <value>
+        //     brooklyn.external.<name>.<key> : <value>
+
+        String EXTERNAL_PROVIDER_PREFIX = "brooklyn.external.";
+        Map<String, Object> externalProviderProperties = mgmt.getConfig().submap(ConfigPredicates.startingWith(EXTERNAL_PROVIDER_PREFIX)).asMapWithStringKeys();
+        ClassLoader classloader = mgmt.getCatalogClassLoader();
+        List<Exception> exceptions = new LinkedList<Exception>();
+
+        for (String key : externalProviderProperties.keySet()) {
+            String strippedKey = key.substring(EXTERNAL_PROVIDER_PREFIX.length());
+            if (strippedKey.contains("."))
+                continue;
+
+            String name = strippedKey;
+            String providerClassname = (String) externalProviderProperties.get(key);
+            Map<String, Object> config = ConfigUtils.filterForPrefixAndStrip(externalProviderProperties, key + ".");
+
+            try {
+                Class<? extends ExternalConfigSupplier> providerClass = (Class<? extends ExternalConfigSupplier>) classloader.loadClass(providerClassname);
+                Constructor<? extends ExternalConfigSupplier> constructor = providerClass.getConstructor(String.class, Map.class);
+                ExternalConfigSupplier configSupplier = constructor.newInstance(name, config);
+                addProvider(name, configSupplier);
+
+            } catch (Exception e) {
+                LOG.error("Failed to instantiate external config supplier named '" + name + "': " + e, e);
+                exceptions.add(e);
+            }
+        }
+
+        if (!exceptions.isEmpty())
+            Exceptions.propagate(exceptions);
+    }
+
 }