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