Fix checkstyle reported by odlparent-3.0.0
[controller.git] / opendaylight / config / config-manager / src / main / java / org / opendaylight / controller / config / manager / impl / jmx / JMXNotifierConfigRegistry.java
1 /*
2  * Copyright (c) 2015, 2017 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
9 package org.opendaylight.controller.config.manager.impl.jmx;
10
11 import java.util.List;
12 import java.util.Map;
13 import java.util.Set;
14 import javax.management.InstanceAlreadyExistsException;
15 import javax.management.InstanceNotFoundException;
16 import javax.management.MBeanRegistrationException;
17 import javax.management.MBeanServer;
18 import javax.management.NotCompliantMBeanException;
19 import javax.management.NotificationBroadcasterSupport;
20 import javax.management.ObjectName;
21 import org.opendaylight.controller.config.api.ConflictingVersionException;
22 import org.opendaylight.controller.config.api.ValidationException;
23 import org.opendaylight.controller.config.api.jmx.CommitStatus;
24 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
25 import org.opendaylight.controller.config.api.jmx.notifications.ConfigJMXNotification;
26 import org.opendaylight.controller.config.manager.impl.ConfigRegistryImplMXBean;
27
28 /**
29  * Thin wrapper over ConfigRegistry emitting JMX notifications.
30  */
31 public class JMXNotifierConfigRegistry implements ConfigRegistryImplMXBean, AutoCloseable {
32
33     private final ConfigRegistryImplMXBean delegate;
34     private final NotifierMXBeanImpl notifier;
35     private final MBeanServer beanServer;
36
37     public JMXNotifierConfigRegistry(final ConfigRegistryImplMXBean delegate, final MBeanServer beanServer) {
38         this.delegate = delegate;
39         notifier = new NotifierMXBeanImpl();
40         this.beanServer = beanServer;
41         registerMBean(notifier, this.beanServer, ConfigJMXNotification.OBJECT_NAME);
42     }
43
44     private static void registerMBean(final Object instance, final MBeanServer mbs, final ObjectName on) {
45         try {
46             mbs.registerMBean(instance, on);
47         } catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {
48             throw new IllegalStateException("Unable to register " + instance + " as " + on, e);
49         }
50     }
51
52     @Override
53     public long getVersion() {
54         return delegate.getVersion();
55     }
56
57     @Override
58     public ObjectName beginConfig() {
59         return delegate.beginConfig();
60     }
61
62     @Override
63     public CommitStatus commitConfig(final ObjectName transactionControllerON)
64             throws ConflictingVersionException, ValidationException {
65         final CommitStatus commitStatus = delegate.commitConfig(transactionControllerON);
66         notifier.notifyCommit(ObjectNameUtil.getTransactionName(transactionControllerON));
67         return commitStatus;
68     }
69
70     @Override
71     public List<ObjectName> getOpenConfigs() {
72         return delegate.getOpenConfigs();
73     }
74
75     @Override
76     public boolean isHealthy() {
77         return delegate.isHealthy();
78     }
79
80     @Override
81     public Set<String> getAvailableModuleNames() {
82         return delegate.getAvailableModuleNames();
83     }
84
85     @Override
86     public Set<ObjectName> lookupConfigBeans() {
87         return delegate.lookupConfigBeans();
88     }
89
90     @Override
91     public Set<ObjectName> lookupConfigBeans(final String moduleName) {
92         return delegate.lookupConfigBeans(moduleName);
93     }
94
95     @Override
96     public Set<ObjectName> lookupConfigBeans(final String moduleName, final String instanceName) {
97         return delegate.lookupConfigBeans(moduleName, instanceName);
98     }
99
100     @Override
101     public ObjectName lookupConfigBean(final String moduleName, final String instanceName)
102             throws InstanceNotFoundException {
103         return delegate.lookupConfigBean(moduleName, instanceName);
104     }
105
106     @Override
107     public void checkConfigBeanExists(final ObjectName objectName) throws InstanceNotFoundException {
108         delegate.checkConfigBeanExists(objectName);
109     }
110
111     @Override
112     public Set<String> getAvailableModuleFactoryQNames() {
113         return delegate.getAvailableModuleFactoryQNames();
114     }
115
116     @Override
117     public Set<ObjectName> lookupRuntimeBeans() {
118         return delegate.lookupRuntimeBeans();
119     }
120
121     @Override
122     public Set<ObjectName> lookupRuntimeBeans(final String moduleName, final String instanceName) {
123         return delegate.lookupRuntimeBeans(moduleName, instanceName);
124     }
125
126     @Override
127     public ObjectName lookupConfigBeanByServiceInterfaceName(final String serviceInterfaceQName, final String refName) {
128         return delegate.lookupConfigBeanByServiceInterfaceName(serviceInterfaceQName, refName);
129     }
130
131     @Override
132     public Map<String, Map<String, ObjectName>> getServiceMapping() {
133         return delegate.getServiceMapping();
134     }
135
136     @Override
137     public Map<String, ObjectName> lookupServiceReferencesByServiceInterfaceName(final String serviceInterfaceQName) {
138         return delegate.lookupServiceReferencesByServiceInterfaceName(serviceInterfaceQName);
139     }
140
141     @Override
142     public Set<String> lookupServiceInterfaceNames(final ObjectName objectName) throws InstanceNotFoundException {
143         return delegate.lookupServiceInterfaceNames(objectName);
144     }
145
146     @Override
147     public String getServiceInterfaceName(final String namespace, final String localName) {
148         return delegate.getServiceInterfaceName(namespace, localName);
149     }
150
151     @Override
152     public ObjectName getServiceReference(final String serviceInterfaceQName, final String refName)
153             throws InstanceNotFoundException {
154         return delegate.getServiceReference(serviceInterfaceQName, refName);
155     }
156
157     @Override
158     public void checkServiceReferenceExists(final ObjectName objectName) throws InstanceNotFoundException {
159         delegate.checkServiceReferenceExists(objectName);
160     }
161
162     @Override
163     public void close() {
164         try {
165             beanServer.unregisterMBean(ConfigJMXNotification.OBJECT_NAME);
166         } catch (InstanceNotFoundException | MBeanRegistrationException e) {
167             throw new IllegalStateException(
168                     "Notifier: " + ConfigJMXNotification.OBJECT_NAME + " not found in JMX when closing", e);
169         }
170     }
171
172     public interface NotifierMXBean {
173     }
174
175     public static class NotifierMXBeanImpl extends NotificationBroadcasterSupport implements NotifierMXBean {
176
177         private void notifyCommit(final String transactionName) {
178             sendNotification(ConfigJMXNotification.afterCommit(this, "commit success " + transactionName));
179         }
180     }
181 }