Merge "Fixed netconf monitoring."
[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 org.opendaylight.controller.config.api.LookupRegistry;
11 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
12 import org.opendaylight.controller.config.manager.impl.jmx.TransactionJMXRegistrator;
13 import org.opendaylight.controller.config.manager.impl.jmx.TransactionModuleJMXRegistrator;
14 import org.opendaylight.controller.config.manager.impl.util.LookupBeansUtil;
15 import org.opendaylight.controller.config.manager.impl.util.ModuleQNameUtil;
16 import org.opendaylight.controller.config.spi.ModuleFactory;
17 import org.osgi.framework.BundleContext;
18
19 import javax.management.InstanceAlreadyExistsException;
20 import javax.management.InstanceNotFoundException;
21 import javax.management.ObjectName;
22 import java.io.Closeable;
23 import java.util.Map;
24 import java.util.Map.Entry;
25 import java.util.Set;
26
27 /**
28  * Responsible for creating TransactionJMXRegistrator, registering transaction and all its beans,
29  * lookup of beans, closing of TransactionJMXRegistrator.
30  */
31 class ConfigTransactionLookupRegistry  implements LookupRegistry, Closeable {
32     private final TransactionJMXRegistrator transactionJMXRegistrator;
33     private final TransactionIdentifier transactionIdentifier;
34     private final TransactionModuleJMXRegistrator txModuleJMXRegistrator;
35     private final Map<String, Map.Entry<ModuleFactory, BundleContext>> allCurrentFactories;
36
37     ConfigTransactionLookupRegistry(TransactionIdentifier transactionIdentifier,
38                                     TransactionJMXRegistratorFactory factory, Map<String, Entry<ModuleFactory, BundleContext>> allCurrentFactories) {
39         this.transactionIdentifier = transactionIdentifier;
40         this.transactionJMXRegistrator = factory.create();
41         this.txModuleJMXRegistrator = transactionJMXRegistrator.createTransactionModuleJMXRegistrator();
42         this.allCurrentFactories = allCurrentFactories;
43     }
44
45     private void checkTransactionName(ObjectName objectName) {
46         String foundTransactionName = ObjectNameUtil
47                 .getTransactionName(objectName);
48         if (transactionIdentifier.getName().equals(foundTransactionName) == false) {
49             throw new IllegalArgumentException("Wrong transaction name "
50                     + objectName);
51         }
52     }
53
54     /**
55      * {@inheritDoc}
56      */
57     @Override
58     public Set<ObjectName> lookupConfigBeans() {
59         return lookupConfigBeans("*", "*");
60     }
61
62     /**
63      * {@inheritDoc}
64      */
65     @Override
66     public Set<ObjectName> lookupConfigBeans(String moduleName) {
67         return lookupConfigBeans(moduleName, "*");
68     }
69
70     /**
71      * {@inheritDoc}
72      */
73     @Override
74     public ObjectName lookupConfigBean(String moduleName, String instanceName)
75             throws InstanceNotFoundException {
76         return LookupBeansUtil.lookupConfigBean(this, moduleName, instanceName);
77     }
78
79     /**
80      * {@inheritDoc}
81      */
82     @Override
83     public Set<ObjectName> lookupConfigBeans(String moduleName,
84                                              String instanceName) {
85         ObjectName namePattern = ObjectNameUtil.createModulePattern(moduleName,
86                 instanceName, transactionIdentifier.getName());
87         return txModuleJMXRegistrator.queryNames(namePattern, null);
88     }
89
90     @Override
91     public void checkConfigBeanExists(ObjectName objectName) throws InstanceNotFoundException {
92         ObjectNameUtil.checkDomain(objectName);
93         ObjectNameUtil.checkType(objectName, ObjectNameUtil.TYPE_MODULE);
94         checkTransactionName(objectName);
95         // make sure exactly one match is found:
96         LookupBeansUtil.lookupConfigBean(this, ObjectNameUtil.getFactoryName(objectName), ObjectNameUtil.getInstanceName(objectName));
97     }
98
99     TransactionIdentifier getTransactionIdentifier() {
100         return transactionIdentifier;
101     }
102
103     TransactionModuleJMXRegistrator getTxModuleJMXRegistrator() {
104         return txModuleJMXRegistrator;
105     }
106
107     public void close() {
108         transactionJMXRegistrator.close();
109     }
110
111     public void registerMBean(ConfigTransactionControllerInternal transactionController, 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
122 interface TransactionJMXRegistratorFactory {
123     TransactionJMXRegistrator create();
124 }