Updated Branches:
  refs/heads/master d04bfc340 -> 5b2e1f42b

The adapterlist needs to be merged instead of overwritten in
ComponentLocator.

When using the extend option in the components-nonoss.xml the adapter
lsit was overwritten (putAll on the map), but it should be merged
instead. This prevented adapters from the parent to be loaded.

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

Branch: refs/heads/master
Commit: 5b2e1f42b74d497c8ead6f697b66cea18d2844b4
Parents: d04bfc3
Author: Hugo Trippaers <[email protected]>
Authored: Mon Oct 22 11:13:34 2012 +0200
Committer: Hugo Trippaers <[email protected]>
Committed: Mon Oct 22 11:13:34 2012 +0200

----------------------------------------------------------------------
 .../cloud/utils/component/ComponentLocator.java    |   29 +++++++++++++--
 1 files changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5b2e1f42/utils/src/com/cloud/utils/component/ComponentLocator.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentLocator.java 
b/utils/src/com/cloud/utils/component/ComponentLocator.java
index dea34d9..2f76f15 100755
--- a/utils/src/com/cloud/utils/component/ComponentLocator.java
+++ b/utils/src/com/cloud/utils/component/ComponentLocator.java
@@ -32,6 +32,7 @@ import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -199,17 +200,38 @@ public class ComponentLocator implements 
ComponentLocatorMBean {
                 library = (ComponentLibrary)clazz.newInstance();
                 _daoMap.putAll(library.getDaos());
                 _managerMap.putAll(library.getManagers());
-                adapters.putAll(library.getAdapters());
                 _factories.putAll(library.getFactories());
                 _pluginsMap.putAll(library.getPluggableServices());
+
+                // putAll overwrites existing keys, so merge instead
+                for (Entry<String, List<ComponentInfo<Adapter>>> e : 
handler.adapters.entrySet()) {
+                       if (adapters.containsKey(e.getKey())) {
+                               s_logger.debug("Merge needed for " + 
e.getKey());
+                               adapters.get(e.getKey()).addAll(e.getValue());
+                       }
+                       else {
+                               adapters.put(e.getKey(), e.getValue());
+                       }
+                }
             }
 
             _daoMap.putAll(handler.daos);
             _managerMap.putAll(handler.managers);
             _checkerMap.putAll(handler.checkers);
-            adapters.putAll(handler.adapters);
             _pluginsMap.putAll(handler.pluggableServices);
-
+            
+            // putAll overwrites existing keys, so merge instead
+            for (Entry<String, List<ComponentInfo<Adapter>>> e : 
handler.adapters.entrySet()) {
+               if (adapters.containsKey(e.getKey())) {
+                       s_logger.debug("Merge needed for " + e.getKey());
+                       adapters.get(e.getKey()).addAll(e.getValue());
+               }
+               else {
+                       adapters.put(e.getKey(), e.getValue());
+               }
+            }
+            
+            
             return new Pair<XmlHandler, HashMap<String, 
List<ComponentInfo<Adapter>>>>(handler, adapters);
         } catch (ParserConfigurationException e) {
             s_logger.error("Unable to load " + _serverName + " due to errors 
while parsing " + filename, e);
@@ -1261,4 +1283,5 @@ public class ComponentLocator implements 
ComponentLocatorMBean {
             return index;
         }
     }
+    
 }

Reply via email to