2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.manager.impl.factoriesresolver;
11 import org.opendaylight.controller.config.spi.ModuleFactory;
12 import org.osgi.framework.BundleContext;
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.Collections;
17 import java.util.List;
19 import java.util.Map.Entry;
21 import java.util.TreeSet;
24 * Hold sorted ConfigMBeanFactories by their module names. Check that module
25 * names are globally unique.
27 public class HierarchicalConfigMBeanFactoriesHolder {
29 private final Map<String, Map.Entry<ModuleFactory, BundleContext>> moduleNamesToConfigBeanFactories;
30 private final Set<String> moduleNames;
31 private final List<ModuleFactory> moduleFactories;
36 * @throws IllegalArgumentException
37 * if unique constraint on module names is violated
39 public HierarchicalConfigMBeanFactoriesHolder(
40 Map<String, Map.Entry<ModuleFactory, BundleContext>> factoriesMap) {
41 this.moduleNamesToConfigBeanFactories = Collections
42 .unmodifiableMap(factoriesMap);
43 moduleNames = Collections.unmodifiableSet(new TreeSet<>(
44 moduleNamesToConfigBeanFactories.keySet()));
45 List<ModuleFactory> factories = new ArrayList<>(this.moduleNamesToConfigBeanFactories.size());
46 Collection<Map.Entry<ModuleFactory, BundleContext>> entryCollection = this.moduleNamesToConfigBeanFactories.values();
47 for (Map.Entry<ModuleFactory, BundleContext> entry : entryCollection) {
48 factories.add(entry.getKey());
50 this.moduleFactories = Collections.unmodifiableList(factories);
54 * Get ModuleFactory by their name.
56 * @throws IllegalArgumentException
57 * if factory is not found
59 public ModuleFactory findByModuleName(String moduleName) {
60 Map.Entry<ModuleFactory, BundleContext> result = moduleNamesToConfigBeanFactories.get(moduleName);
62 throw new IllegalArgumentException(
63 "ModuleFactory not found with module name: " + moduleName);
65 return result.getKey();
68 public Set<String> getModuleNames() {
72 public List<ModuleFactory> getModuleFactories() {
73 return moduleFactories;
76 public Map<String, Entry<ModuleFactory, BundleContext>> getModuleNamesToConfigBeanFactories() {
77 return moduleNamesToConfigBeanFactories;