X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Ffactoriesresolver%2FHierarchicalConfigMBeanFactoriesHolder.java;h=adc8168af5d85b0aee22e717cb59cda7b8939b8f;hb=d5759c52d69ba8725d9bbdc18e81848f319861d1;hp=8f1c69eee3ce0f8a9eecb10de53c74ae832a3f65;hpb=9fb64948564e252018f9b1e13e7cea2c92f991aa;p=controller.git diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HierarchicalConfigMBeanFactoriesHolder.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HierarchicalConfigMBeanFactoriesHolder.java index 8f1c69eee3..adc8168af5 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HierarchicalConfigMBeanFactoriesHolder.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HierarchicalConfigMBeanFactoriesHolder.java @@ -7,27 +7,28 @@ */ package org.opendaylight.controller.config.manager.impl.factoriesresolver; + +import org.opendaylight.controller.config.spi.ModuleFactory; +import org.osgi.framework.BundleContext; + +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; -import org.opendaylight.controller.config.spi.ModuleFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * Hold sorted ConfigMBeanFactories by their module names. Check that module * names are globally unique. */ public class HierarchicalConfigMBeanFactoriesHolder { - private static final Logger logger = LoggerFactory - .getLogger(HierarchicalConfigMBeanFactoriesHolder.class); - private final Map moduleNamesToConfigBeanFactories; + private final Map> moduleNamesToConfigBeanFactories; private final Set moduleNames; + private final List moduleFactories; /** * Create instance. @@ -36,40 +37,17 @@ public class HierarchicalConfigMBeanFactoriesHolder { * if unique constraint on module names is violated */ public HierarchicalConfigMBeanFactoriesHolder( - List list) { - Map moduleNamesToConfigBeanFactories = new HashMap<>(); - StringBuffer errors = new StringBuffer(); - for (ModuleFactory factory : list) { - String moduleName = factory.getImplementationName(); - if (moduleName == null || moduleName.isEmpty()) { - throw new IllegalStateException( - "Invalid implementation name for " + factory); - } - logger.debug("Reading factory {} {}", moduleName, factory); - String error = null; - ModuleFactory conflicting = moduleNamesToConfigBeanFactories - .get(moduleName); - if (conflicting != null) { - error = String - .format("Module name is not unique. Found two conflicting factories with same name '%s': " + - "\n\t%s\n\t%s\n", moduleName, conflicting, factory); - - } - - if (error == null) { - moduleNamesToConfigBeanFactories.put(moduleName, factory); - } else { - errors.append(error); - } - - } - if (errors.length() > 0) { - throw new IllegalArgumentException(errors.toString()); - } + Map> factoriesMap) { this.moduleNamesToConfigBeanFactories = Collections - .unmodifiableMap(moduleNamesToConfigBeanFactories); + .unmodifiableMap(factoriesMap); moduleNames = Collections.unmodifiableSet(new TreeSet<>( moduleNamesToConfigBeanFactories.keySet())); + List factories = new ArrayList<>(this.moduleNamesToConfigBeanFactories.size()); + Collection> entryCollection = this.moduleNamesToConfigBeanFactories.values(); + for (Map.Entry entry : entryCollection) { + factories.add(entry.getKey()); + } + this.moduleFactories = Collections.unmodifiableList(factories); } /** @@ -79,16 +57,23 @@ public class HierarchicalConfigMBeanFactoriesHolder { * if factory is not found */ public ModuleFactory findByModuleName(String moduleName) { - ModuleFactory result = moduleNamesToConfigBeanFactories.get(moduleName); + Map.Entry result = moduleNamesToConfigBeanFactories.get(moduleName); if (result == null) { throw new IllegalArgumentException( "ModuleFactory not found with module name: " + moduleName); } - return result; + return result.getKey(); } public Set getModuleNames() { return moduleNames; } + public List getModuleFactories() { + return moduleFactories; + } + + public Map> getModuleNamesToConfigBeanFactories() { + return moduleNamesToConfigBeanFactories; + } }