config-manager: final parameters
[controller.git] / opendaylight / config / config-manager / src / main / java / org / opendaylight / controller / config / manager / impl / ConfigTransactionLookupRegistry.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.config.manager.impl;
9
10 import java.io.Closeable;
11 import java.util.Map;
12 import java.util.Map.Entry;
13 import java.util.Set;
14 import javax.management.InstanceAlreadyExistsException;
15 import javax.management.InstanceNotFoundException;
16 import javax.management.ObjectName;
17 import org.opendaylight.controller.config.api.LookupRegistry;
18 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
19 import org.opendaylight.controller.config.manager.impl.jmx.TransactionJMXRegistrator;
20 import org.opendaylight.controller.config.manager.impl.jmx.TransactionModuleJMXRegistrator;
21 import org.opendaylight.controller.config.manager.impl.util.LookupBeansUtil;
22 import org.opendaylight.controller.config.manager.impl.util.ModuleQNameUtil;
23 import org.opendaylight.controller.config.spi.ModuleFactory;
24 import org.osgi.framework.BundleContext;
25
26 /**
27  * Responsible for creating TransactionJMXRegistrator, registering transaction and all its beans,
28  * lookup of beans, closing of TransactionJMXRegistrator.
29  */
30 class ConfigTransactionLookupRegistry  implements LookupRegistry, Closeable {
31     private final TransactionJMXRegistrator transactionJMXRegistrator;
32     private final TransactionIdentifier transactionIdentifier;
33     private final TransactionModuleJMXRegistrator txModuleJMXRegistrator;
34     private final Map<String, Map.Entry<ModuleFactory, BundleContext>> allCurrentFactories;
35
36     ConfigTransactionLookupRegistry(final TransactionIdentifier transactionIdentifier,
37                                     final TransactionJMXRegistratorFactory factory, final Map<String, Entry<ModuleFactory, BundleContext>> allCurrentFactories) {
38         this.transactionIdentifier = transactionIdentifier;
39         this.transactionJMXRegistrator = factory.create();
40         this.txModuleJMXRegistrator = transactionJMXRegistrator.createTransactionModuleJMXRegistrator();
41         this.allCurrentFactories = allCurrentFactories;
42     }
43
44     private void checkTransactionName(final ObjectName objectName) {
45         String foundTransactionName = ObjectNameUtil
46                 .getTransactionName(objectName);
47         if (!transactionIdentifier.getName().equals(foundTransactionName)) {
48             throw new IllegalArgumentException("Wrong transaction name "
49                     + objectName);
50         }
51     }
52
53     /**
54      * {@inheritDoc}
55      */
56     @Override
57     public Set<ObjectName> lookupConfigBeans() {
58         return lookupConfigBeans("*", "*");
59     }
60
61     /**
62      * {@inheritDoc}
63      */
64     @Override
65     public Set<ObjectName> lookupConfigBeans(final String moduleName) {
66         return lookupConfigBeans(moduleName, "*");
67     }
68
69     /**
70      * {@inheritDoc}
71      */
72     @Override
73     public ObjectName lookupConfigBean(final String moduleName, final String instanceName)
74             throws InstanceNotFoundException {
75         return LookupBeansUtil.lookupConfigBean(this, moduleName, instanceName);
76     }
77
78     /**
79      * {@inheritDoc}
80      */
81     @Override
82     public Set<ObjectName> lookupConfigBeans(final String moduleName,
83                                              final String instanceName) {
84         ObjectName namePattern = ObjectNameUtil.createModulePattern(moduleName,
85                 instanceName, transactionIdentifier.getName());
86         return txModuleJMXRegistrator.queryNames(namePattern, null);
87     }
88
89     @Override
90     public void checkConfigBeanExists(final ObjectName objectName) throws InstanceNotFoundException {
91         ObjectNameUtil.checkDomain(objectName);
92         ObjectNameUtil.checkType(objectName, ObjectNameUtil.TYPE_MODULE);
93         checkTransactionName(objectName);
94         // make sure exactly one match is found:
95         LookupBeansUtil.lookupConfigBean(this, ObjectNameUtil.getFactoryName(objectName), ObjectNameUtil.getInstanceName(objectName));
96     }
97
98     TransactionIdentifier getTransactionIdentifier() {
99         return transactionIdentifier;
100     }
101
102     TransactionModuleJMXRegistrator getTxModuleJMXRegistrator() {
103         return txModuleJMXRegistrator;
104     }
105
106     @Override
107     public void close() {
108         transactionJMXRegistrator.close();
109     }
110
111     public void registerMBean(final ConfigTransactionControllerInternal transactionController, final ObjectName controllerObjectName) throws InstanceAlreadyExistsException {
112         transactionJMXRegistrator.registerMBean(transactionController, controllerObjectName);
113     }
114
115     @Override
116     public Set<String> getAvailableModuleFactoryQNames() {
117         return ModuleQNameUtil.getQNames(allCurrentFactories);
118     }
119
120     /**
121      * {@inheritDoc}
122      */
123     @Override
124     public Set<ObjectName> lookupRuntimeBeans() {
125         return lookupRuntimeBeans("*", "*");
126     }
127
128     /**
129      * {@inheritDoc}
130      */
131     @Override
132     public Set<ObjectName> lookupRuntimeBeans(final String moduleName,
133                                               final String instanceName) {
134         String finalModuleName = moduleName == null ? "*" : moduleName;
135         String finalInstanceName = instanceName == null ? "*" : instanceName;
136         ObjectName namePattern = ObjectNameUtil.createRuntimeBeanPattern(
137                 finalModuleName, finalInstanceName);
138         return transactionJMXRegistrator.queryNames(namePattern, null);
139     }
140
141     @Override
142     public String toString() {
143         return "ConfigTransactionLookupRegistry{" +
144                 "transactionIdentifier=" + transactionIdentifier +
145                 '}';
146     }
147 }
148
149 interface TransactionJMXRegistratorFactory {
150     TransactionJMXRegistrator create();
151 }