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;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
17 import java.util.List;
19 import java.util.Collections;
20 import java.util.TreeSet;
21 import java.util.Collection;
22 import java.util.ArrayList;
25 * Hold sorted ConfigMBeanFactories by their module names. Check that module
26 * names are globally unique.
28 public class HierarchicalConfigMBeanFactoriesHolder {
29 private static final Logger logger = LoggerFactory
30 .getLogger(HierarchicalConfigMBeanFactoriesHolder.class);
32 private final Map<String, Map.Entry<ModuleFactory, BundleContext>> moduleNamesToConfigBeanFactories;
33 private final Set<String> moduleNames;
34 private final List<ModuleFactory> moduleFactories;
39 * @throws IllegalArgumentException
40 * if unique constraint on module names is violated
42 public HierarchicalConfigMBeanFactoriesHolder(
43 Map<String, Map.Entry<ModuleFactory, BundleContext>> factoriesMap) {
44 this.moduleNamesToConfigBeanFactories = Collections
45 .unmodifiableMap(factoriesMap);
46 moduleNames = Collections.unmodifiableSet(new TreeSet<>(
47 moduleNamesToConfigBeanFactories.keySet()));
48 List<ModuleFactory> factories = new ArrayList<>(this.moduleNamesToConfigBeanFactories.size());
49 Collection<Map.Entry<ModuleFactory, BundleContext>> entryCollection = this.moduleNamesToConfigBeanFactories.values();
50 for (Map.Entry<ModuleFactory, BundleContext> entry : entryCollection) {
51 factories.add(entry.getKey());
53 this.moduleFactories = Collections.unmodifiableList(factories);
57 * Get ModuleFactory by their name.
59 * @throws IllegalArgumentException
60 * if factory is not found
62 public ModuleFactory findByModuleName(String moduleName) {
63 Map.Entry<ModuleFactory, BundleContext> result = moduleNamesToConfigBeanFactories.get(moduleName);
65 throw new IllegalArgumentException(
66 "ModuleFactory not found with module name: " + moduleName);
68 return result.getKey();
71 public Set<String> getModuleNames() {
75 public List<ModuleFactory> getModuleFactories() {
76 return moduleFactories;