config-util: final parameters
[controller.git] / opendaylight / config / config-util / src / main / java / org / opendaylight / controller / config / util / ConfigTransactionJMXClient.java
index 548c0e9ea4f6eedc7c317cabc7cbc820cda03f62..f13592364609c3e5a0faf0b2d32f03853adbaa0d 100644 (file)
@@ -7,17 +7,16 @@
  */
 package org.opendaylight.controller.config.util;
 
+import java.util.Map;
 import java.util.Set;
-
 import javax.management.Attribute;
 import javax.management.InstanceAlreadyExistsException;
 import javax.management.InstanceNotFoundException;
 import javax.management.JMException;
 import javax.management.JMX;
+import javax.management.MBeanException;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
-import javax.management.RuntimeMBeanException;
-
 import org.opendaylight.controller.config.api.ConflictingVersionException;
 import org.opendaylight.controller.config.api.ValidationException;
 import org.opendaylight.controller.config.api.jmx.CommitStatus;
@@ -26,41 +25,54 @@ import org.opendaylight.controller.config.api.jmx.ConfigTransactionControllerMXB
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 
 public class ConfigTransactionJMXClient implements ConfigTransactionClient {
-    private final ConfigRegistryMXBean configTransactionManagerProxy;
+    private final ConfigRegistryMXBean configRegistryMXBeanProxy;
     private final ObjectName configTransactionControllerON;
-    private final ConfigTransactionControllerMXBean configControllerProxy;
+    private final ConfigTransactionControllerMXBean configTransactionControllerMXBeanProxy;
     private final MBeanServer configMBeanServer;
 
     public ConfigTransactionJMXClient(
-            ConfigRegistryMXBean configTransactionManagerProxy,
-            ObjectName configTransactionControllerON,
-            MBeanServer configMBeanServer) {
+            final ConfigRegistryMXBean configRegistryMXBeanProxy,
+            final ObjectName configTransactionControllerON,
+            final MBeanServer configMBeanServer) {
         this.configMBeanServer = configMBeanServer;
-        this.configTransactionManagerProxy = configTransactionManagerProxy;
+        this.configRegistryMXBeanProxy = configRegistryMXBeanProxy;
         this.configTransactionControllerON = configTransactionControllerON;
-        this.configControllerProxy = JMX.newMXBeanProxy(configMBeanServer,
+        this.configTransactionControllerMXBeanProxy = JMX.newMXBeanProxy(configMBeanServer,
                 configTransactionControllerON,
                 ConfigTransactionControllerMXBean.class);
     }
 
-    public <T> T newMXBeanProxy(ObjectName on, Class<T> clazz) {
-        return JMX.newMXBeanProxy(configMBeanServer, on, clazz);
+    public <T> T newMXBeanProxy(final ObjectName on, final Class<T> clazz) {
+        ObjectName onName = on;
+        // if on is without transaction, add it. Reason is that when using getters on MXBeans the transaction name is stripped
+        onName = ObjectNameUtil.withTransactionName(onName, getTransactionName());
+        // if this is service reference and user requests for implementation, look it up
+        onName = ConfigRegistryJMXClient.translateServiceRefIfPossible(onName, clazz, configMBeanServer);
+        onName = ObjectNameUtil.withTransactionName(onName, getTransactionName());
+        return JMX.newMXBeanProxy(configMBeanServer, onName, clazz);
     }
 
-    public <T> T newMBeanProxy(ObjectName on, Class<T> clazz) {
+    /**
+     * Usage of this method indicates error as config JMX uses solely MXBeans.
+     * Use {@link #newMXBeanProxy(javax.management.ObjectName, Class)}
+     * or {@link JMX#newMBeanProxy(javax.management.MBeanServerConnection, javax.management.ObjectName, Class)}
+     * This method will be removed soon.
+     */
+    @Deprecated
+    public <T> T newMBeanProxy(final ObjectName on, final Class<T> clazz) {
         return JMX.newMBeanProxy(configMBeanServer, on, clazz);
     }
 
     @Override
     public CommitStatus commit() throws ConflictingVersionException,
             ValidationException {
-        return configTransactionManagerProxy
+        return configRegistryMXBeanProxy
                 .commitConfig(configTransactionControllerON);
     }
 
     @Override
-    public void assertVersion(int expectedParentVersion,
-            int expectedCurrentVersion) {
+    public void assertVersion(final int expectedParentVersion,
+            final int expectedCurrentVersion) {
         if (expectedParentVersion != getParentVersion()) {
             throw new IllegalStateException();
         }
@@ -71,19 +83,35 @@ public class ConfigTransactionJMXClient implements ConfigTransactionClient {
 
     // proxy around ConfigManagerMXBean
     @Override
-    public ObjectName createModule(String moduleName, String instanceName)
+    public ObjectName createModule(final String moduleName, final String instanceName)
             throws InstanceAlreadyExistsException {
-        return configControllerProxy.createModule(moduleName, instanceName);
+        return configTransactionControllerMXBeanProxy.createModule(moduleName, instanceName);
+    }
+
+    @Override
+    public void reCreateModule(final ObjectName objectName) throws InstanceNotFoundException {
+        configTransactionControllerMXBeanProxy.reCreateModule(objectName);
+    }
+
+    @Override
+    public void destroyModule(final ObjectName objectName)
+            throws InstanceNotFoundException {
+        configTransactionControllerMXBeanProxy.destroyModule(objectName);
     }
 
     @Override
-    public void destroyModule(ObjectName objectName)
+    @Deprecated
+    /**
+     * {@inheritDoc}
+     */
+    public void destroyConfigBean(final String moduleName, final String instanceName)
             throws InstanceNotFoundException {
-        configControllerProxy.destroyModule(objectName);
+        destroyModule(ObjectNameUtil.createTransactionModuleON(
+                getTransactionName(), moduleName, instanceName));
     }
 
     @Override
-    public void destroyConfigBean(String moduleName, String instanceName)
+    public void destroyModule(final String moduleName, final String instanceName)
             throws InstanceNotFoundException {
         destroyModule(ObjectNameUtil.createTransactionModuleON(
                 getTransactionName(), moduleName, instanceName));
@@ -91,12 +119,12 @@ public class ConfigTransactionJMXClient implements ConfigTransactionClient {
 
     @Override
     public void abortConfig() {
-        configControllerProxy.abortConfig();
+        configTransactionControllerMXBeanProxy.abortConfig();
     }
 
     @Override
     public void validateConfig() throws ValidationException {
-        configControllerProxy.validateConfig();
+        configTransactionControllerMXBeanProxy.validateConfig();
     }
 
     @Override
@@ -104,7 +132,7 @@ public class ConfigTransactionJMXClient implements ConfigTransactionClient {
         try {
             return (Long) configMBeanServer.getAttribute(
                     configTransactionControllerON, "ParentVersion");
-        } catch (JMException e) {
+        } catch (final JMException e) {
             throw new RuntimeException(e);
         }
     }
@@ -114,19 +142,19 @@ public class ConfigTransactionJMXClient implements ConfigTransactionClient {
         try {
             return (Long) configMBeanServer.getAttribute(
                     configTransactionControllerON, "Version");
-        } catch (JMException e) {
+        } catch (final JMException e) {
             throw new RuntimeException(e);
         }
     }
 
     @Override
     public String getTransactionName() {
-        return configControllerProxy.getTransactionName();
+        return configTransactionControllerMXBeanProxy.getTransactionName();
     }
 
     @Override
     public Set<String> getAvailableModuleNames() {
-        return configControllerProxy.getAvailableModuleNames();
+        return configTransactionControllerMXBeanProxy.getAvailableModuleNames();
     }
 
     @Override
@@ -136,50 +164,151 @@ public class ConfigTransactionJMXClient implements ConfigTransactionClient {
 
     @Override
     public Set<ObjectName> lookupConfigBeans() {
-        return configControllerProxy.lookupConfigBeans();
+        return configTransactionControllerMXBeanProxy.lookupConfigBeans();
     }
 
     @Override
-    public Set<ObjectName> lookupConfigBeans(String moduleName) {
-        return configControllerProxy.lookupConfigBeans(moduleName);
+    public Set<ObjectName> lookupConfigBeans(final String moduleName) {
+        return configTransactionControllerMXBeanProxy.lookupConfigBeans(moduleName);
     }
 
     @Override
-    public ObjectName lookupConfigBean(String moduleName, String instanceName)
+    public ObjectName lookupConfigBean(final String moduleName, final String instanceName)
             throws InstanceNotFoundException {
-        return configControllerProxy.lookupConfigBean(moduleName, instanceName);
+        return configTransactionControllerMXBeanProxy.lookupConfigBean(moduleName, instanceName);
     }
 
     @Override
-    public Set<ObjectName> lookupConfigBeans(String moduleName,
-            String instanceName) {
-        return configControllerProxy
+    public Set<ObjectName> lookupConfigBeans(final String moduleName,
+            final String instanceName) {
+        return configTransactionControllerMXBeanProxy
                 .lookupConfigBeans(moduleName, instanceName);
     }
 
     @Override
-    public void validateBean(ObjectName configBeanON)
+    public void checkConfigBeanExists(final ObjectName objectName) throws InstanceNotFoundException {
+        configTransactionControllerMXBeanProxy.checkConfigBeanExists(objectName);
+    }
+
+    @Override
+    public ObjectName saveServiceReference(final String serviceInterfaceName, final String refName, final ObjectName moduleON) throws InstanceNotFoundException {
+        return configTransactionControllerMXBeanProxy.saveServiceReference(serviceInterfaceName,refName, moduleON);
+    }
+
+    @Override
+    public void removeServiceReference(final String serviceInterfaceName, final String refName) throws InstanceNotFoundException{
+        configTransactionControllerMXBeanProxy.removeServiceReference(serviceInterfaceName, refName);
+    }
+
+    @Override
+    public void removeAllServiceReferences() {
+        configTransactionControllerMXBeanProxy.removeAllServiceReferences();
+    }
+
+    @Override
+    public ObjectName lookupConfigBeanByServiceInterfaceName(final String serviceInterfaceQName, final String refName) {
+        return configTransactionControllerMXBeanProxy.lookupConfigBeanByServiceInterfaceName(serviceInterfaceQName, refName);
+    }
+
+    @Override
+    public Map<String, Map<String, ObjectName>> getServiceMapping() {
+        return configTransactionControllerMXBeanProxy.getServiceMapping();
+    }
+
+    @Override
+    public Map<String, ObjectName> lookupServiceReferencesByServiceInterfaceName(final String serviceInterfaceQName) {
+        return configTransactionControllerMXBeanProxy.lookupServiceReferencesByServiceInterfaceName(serviceInterfaceQName);
+    }
+
+    @Override
+    public Set<String> lookupServiceInterfaceNames(final ObjectName objectName) throws InstanceNotFoundException {
+        return configTransactionControllerMXBeanProxy.lookupServiceInterfaceNames(objectName);
+    }
+
+    @Override
+    public String getServiceInterfaceName(final String namespace, final String localName) {
+        return configTransactionControllerMXBeanProxy.getServiceInterfaceName(namespace, localName);
+    }
+
+    @Override
+    public boolean removeServiceReferences(final ObjectName objectName) throws InstanceNotFoundException {
+        return configTransactionControllerMXBeanProxy.removeServiceReferences(objectName);
+    }
+
+    @Override
+    public ObjectName getServiceReference(final String serviceInterfaceQName, final String refName) throws InstanceNotFoundException {
+        return configTransactionControllerMXBeanProxy.getServiceReference(serviceInterfaceQName, refName);
+    }
+
+    @Override
+    public void checkServiceReferenceExists(final ObjectName objectName) throws InstanceNotFoundException {
+        configTransactionControllerMXBeanProxy.checkServiceReferenceExists(objectName);
+    }
+
+    @Override
+    public Attribute getAttribute(final ObjectName on, final String attrName) {
+        if (ObjectNameUtil.getTransactionName(on) == null) {
+            throw new IllegalArgumentException("Not in transaction instance "
+                    + on + ", no transaction name present");
+        }
+
+        try {
+            return new Attribute(attrName, configMBeanServer.getAttribute(on,attrName));
+        } catch (final JMException e) {
+            throw new IllegalStateException("Unable to get attribute "
+                    + attrName + " for " + on, e);
+        }
+    }
+
+    @Override
+    public Object getAttributeCurrentValue(final ObjectName on, final String attrName) {
+        return getAttribute(on, attrName).getValue();
+    }
+
+    @Override
+    public void validateBean(final ObjectName configBeanON)
             throws ValidationException {
         try {
             configMBeanServer.invoke(configBeanON, "validate", null, null);
-        } catch (JMException e) {
+        } catch (final MBeanException e) {
+            Exception targetException = e.getTargetException();
+            if (targetException instanceof ValidationException){
+                throw (ValidationException) targetException;
+            } else {
+                throw new RuntimeException(e);
+            }
+        } catch (final JMException e) {
             throw new RuntimeException(e);
-        } catch (RuntimeMBeanException e) {
-            throw e.getTargetException();
         }
     }
 
     @Override
-    public void setAttribute(ObjectName on, String attrName, Attribute attribute) {
-        if (ObjectNameUtil.getTransactionName(on) == null)
+    public void setAttribute(final ObjectName on, final String attrName, final Attribute attribute) {
+        if (ObjectNameUtil.getTransactionName(on) == null) {
             throw new IllegalArgumentException("Not in transaction instance "
                     + on + ", no transaction name present");
+        }
 
         try {
             configMBeanServer.setAttribute(on, attribute);
-        } catch (JMException e) {
+        } catch (final JMException e) {
             throw new IllegalStateException("Unable to set attribute "
                     + attrName + " for " + on, e);
         }
     }
+
+    @Override
+    public Set<String> getAvailableModuleFactoryQNames() {
+        return configTransactionControllerMXBeanProxy.getAvailableModuleFactoryQNames();
+    }
+
+    @Override
+    public Set<ObjectName> lookupRuntimeBeans() {
+        return configTransactionControllerMXBeanProxy.lookupRuntimeBeans();
+    }
+
+    @Override
+    public Set<ObjectName> lookupRuntimeBeans(final String moduleName, final String instanceName) {
+        return configTransactionControllerMXBeanProxy.lookupRuntimeBeans(moduleName, instanceName);
+    }
 }