/* * Copyright (c) 2013, 2017 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.config.manager.impl.factoriesresolver; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.opendaylight.controller.config.api.ModuleFactoryNotFoundException; import org.opendaylight.controller.config.spi.ModuleFactory; import org.osgi.framework.BundleContext; /** * Hold sorted ConfigMBeanFactories by their module names. Check that module * names are globally unique. */ public class HierarchicalConfigMBeanFactoriesHolder { private final Map> moduleNamesToConfigBeanFactories; private final Set moduleNames; private final List moduleFactories; /** * Create instance. * * @param factoriesMap map of factories * @throws IllegalArgumentException * if unique constraint on module names is violated */ public HierarchicalConfigMBeanFactoriesHolder( final Map> factoriesMap) { this.moduleNamesToConfigBeanFactories = Collections.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); } /** * Get ModuleFactory by their name. * * @param moduleName * module name * @return module factory * @throws IllegalArgumentException * if factory is not found */ public ModuleFactory findByModuleName(final String moduleName) { Map.Entry result = moduleNamesToConfigBeanFactories.get(moduleName); if (result == null) { throw new ModuleFactoryNotFoundException(moduleName); } return result.getKey(); } public Set getModuleNames() { return moduleNames; } public List getModuleFactories() { return moduleFactories; } }