X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fdynamicmbean%2FDynamicWritableWrapper.java;h=07bd63b7c7be8c78397b227ae40db7e53cb8da91;hp=a1cd6b01339dd7fc82864c3219bc5f32fc7de0ba;hb=17d82f582a6bc13c78be3b19954ff8c021180e93;hpb=33ea0032f0837333a9181dd7556faa3266155080 diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dynamicmbean/DynamicWritableWrapper.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dynamicmbean/DynamicWritableWrapper.java index a1cd6b0133..07bd63b7c7 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dynamicmbean/DynamicWritableWrapper.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dynamicmbean/DynamicWritableWrapper.java @@ -7,7 +7,13 @@ */ package org.opendaylight.controller.config.manager.impl.dynamicmbean; -import java.lang.reflect.Method; +import org.opendaylight.controller.config.api.ModuleIdentifier; +import org.opendaylight.controller.config.api.ValidationException; +import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; +import org.opendaylight.controller.config.manager.impl.TransactionIdentifier; +import org.opendaylight.controller.config.spi.Module; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.annotation.concurrent.ThreadSafe; import javax.management.Attribute; @@ -20,14 +26,7 @@ import javax.management.MBeanOperationInfo; import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.ReflectionException; - -import org.opendaylight.controller.config.api.ModuleIdentifier; -import org.opendaylight.controller.config.api.ValidationException; -import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; -import org.opendaylight.controller.config.manager.impl.TransactionIdentifier; -import org.opendaylight.controller.config.spi.Module; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.lang.reflect.Method; /** * Wraps {@link org.opendaylight.controller.config.spi.Module} instance in a @@ -54,12 +53,12 @@ public class DynamicWritableWrapper extends AbstractDynamicWrapper { private final ReadOnlyAtomicBoolean configBeanModificationDisabled; public DynamicWritableWrapper(Module module, - ModuleIdentifier moduleIdentifier, - TransactionIdentifier transactionIdentifier, - ReadOnlyAtomicBoolean configBeanModificationDisabled, - MBeanServer internalServer, MBeanServer configMBeanServer) { + ModuleIdentifier moduleIdentifier, + TransactionIdentifier transactionIdentifier, + ReadOnlyAtomicBoolean configBeanModificationDisabled, + MBeanServer internalServer, MBeanServer configMBeanServer) { super(module, true, moduleIdentifier, ObjectNameUtil - .createTransactionModuleON(transactionIdentifier.getName(), moduleIdentifier), getOperations(moduleIdentifier), + .createTransactionModuleON(transactionIdentifier.getName(), moduleIdentifier), getOperations(moduleIdentifier), internalServer, configMBeanServer); this.configBeanModificationDisabled = configBeanModificationDisabled; } @@ -68,22 +67,19 @@ public class DynamicWritableWrapper extends AbstractDynamicWrapper { ModuleIdentifier moduleIdentifier) { Method validationMethod; try { - validationMethod = DynamicWritableWrapper.class.getMethod( - "validate", new Class[0]); + validationMethod = DynamicWritableWrapper.class.getMethod("validate"); } catch (NoSuchMethodException e) { - throw new IllegalStateException("No such method exception on " - + moduleIdentifier, e); + throw new IllegalStateException("No such method exception on " + moduleIdentifier, e); } - return new MBeanOperationInfo[] { new MBeanOperationInfo("Validation", - validationMethod) }; + return new MBeanOperationInfo[]{new MBeanOperationInfo("Validation", validationMethod)}; } @Override public synchronized void setAttribute(Attribute attribute) - throws AttributeNotFoundException, InvalidAttributeValueException, - MBeanException, ReflectionException { - if (configBeanModificationDisabled.get() == true) + throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { + if (configBeanModificationDisabled.get() == true) { throw new IllegalStateException("Operation is not allowed now"); + } if (attribute.getName().equals("Attribute")) { setAttribute((Attribute) attribute.getValue()); @@ -92,16 +88,11 @@ public class DynamicWritableWrapper extends AbstractDynamicWrapper { try { if (attribute.getValue() instanceof ObjectName) { - AttributeHolder attributeHolder = attributeHolderMap - .get(attribute.getName()); - if (attributeHolder.getRequireInterfaceOrNull() != null) { - attribute = new Attribute(attribute.getName(), - fixObjectName((ObjectName) attribute.getValue())); - } else { - attribute = new Attribute(attribute.getName(), - attribute.getValue()); - } + attribute = fixDependencyAttribute(attribute); + } else if (attribute.getValue() instanceof ObjectName[]) { + attribute = fixDependencyListAttribute(attribute); } + internalServer.setAttribute(objectNameInternal, attribute); } catch (InstanceNotFoundException e) { throw new MBeanException(e); @@ -109,6 +100,34 @@ public class DynamicWritableWrapper extends AbstractDynamicWrapper { } + private Attribute fixDependencyListAttribute(Attribute attribute) { + AttributeHolder attributeHolder = attributeHolderMap.get(attribute.getName()); + if (attributeHolder.getRequireInterfaceOrNull() != null) { + attribute = new Attribute(attribute.getName(), fixObjectNames((ObjectName[]) attribute.getValue())); + } + return attribute; + } + + private Attribute fixDependencyAttribute(Attribute attribute) { + AttributeHolder attributeHolder = attributeHolderMap.get(attribute.getName()); + if (attributeHolder.getRequireInterfaceOrNull() != null) { + attribute = new Attribute(attribute.getName(), fixObjectName((ObjectName) attribute.getValue())); + } else { + attribute = new Attribute(attribute.getName(), attribute.getValue()); + } + return attribute; + } + + private ObjectName[] fixObjectNames(ObjectName[] dependencies) { + int i = 0; + + for (ObjectName dependencyOn : dependencies) { + dependencies[i++] = fixObjectName(dependencyOn); + } + + return dependencies; + } + @Override public AttributeList setAttributes(AttributeList attributes) { AttributeList result = new AttributeList(); @@ -118,8 +137,7 @@ public class DynamicWritableWrapper extends AbstractDynamicWrapper { setAttribute(attribute); result.add(attribute); } catch (Exception e) { - logger.warn("Setting attribute {} failed on {}", - attribute.getName(), moduleIdentifier, e); + logger.warn("Setting attribute {} failed on {}", attribute.getName(), moduleIdentifier, e); throw new IllegalArgumentException( "Setting attribute failed - " + attribute.getName() + " on " + moduleIdentifier, e); @@ -137,8 +155,9 @@ public class DynamicWritableWrapper extends AbstractDynamicWrapper { try { validate(); } catch (Exception e) { - throw ValidationException.createForSingleException( - moduleIdentifier, e); + + throw new MBeanException(ValidationException.createForSingleException( + moduleIdentifier, e)); } return Void.TYPE; }