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=c212300fa6bb0642c3a665d7552b62857edff4d4;hb=e159106bc148e76fc1e3e3c780bdd740d99e74ed;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..c212300fa6 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,27 @@ */ package org.opendaylight.controller.config.manager.impl.factoriesresolver; + +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.Set; import java.util.TreeSet; - +import javax.management.InstanceNotFoundException; import org.opendaylight.controller.config.spi.ModuleFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.osgi.framework.BundleContext; /** * 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 +36,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); } /** @@ -78,17 +55,21 @@ public class HierarchicalConfigMBeanFactoriesHolder { * @throws IllegalArgumentException * if factory is not found */ - public ModuleFactory findByModuleName(String moduleName) { - ModuleFactory result = moduleNamesToConfigBeanFactories.get(moduleName); + public ModuleFactory findByModuleName(String moduleName) throws InstanceNotFoundException { + Map.Entry result = moduleNamesToConfigBeanFactories.get(moduleName); if (result == null) { - throw new IllegalArgumentException( + throw new InstanceNotFoundException( "ModuleFactory not found with module name: " + moduleName); } - return result; + return result.getKey(); } public Set getModuleNames() { return moduleNames; } + public List getModuleFactories() { + return moduleFactories; + } + }