X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fmapping%2Fattributes%2Fresolving%2FObjectResolver.java;h=4a4281a55e04489beb1a8ed9360a457ec9899dad;hb=8720a3f3498bbc6fab675431f4200d26641a8ec8;hp=94a69477582fe379feb1e74552d7eb9a4411d362;hpb=4f623c74a703a31e787387b536981dcb344ca4f9;p=controller.git diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/ObjectResolver.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/ObjectResolver.java index 94a6947758..4a4281a55e 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/ObjectResolver.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/attributes/resolving/ObjectResolver.java @@ -8,31 +8,27 @@ package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.resolving; -import java.util.Map; -import java.util.Map.Entry; - -import javax.management.openmbean.ArrayType; -import javax.management.openmbean.CompositeType; -import javax.management.openmbean.OpenType; -import javax.management.openmbean.SimpleType; - +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; -import org.opendaylight.controller.config.yangjmxgenerator.attribute.DependencyAttribute; -import org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute; +import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.AttributeIfcSwitchStatement; -import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Services; +import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; +import javax.management.openmbean.ArrayType; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.OpenType; +import javax.management.openmbean.SimpleType; +import java.util.Map; +import java.util.Map.Entry; public class ObjectResolver extends AttributeIfcSwitchStatement>> { - private final Services serviceTracker; - private OpenType openType; + private final ServiceRegistryWrapper serviceTracker; - public ObjectResolver(Services serviceTracker) { + public ObjectResolver(ServiceRegistryWrapper serviceTracker) { this.serviceTracker = serviceTracker; } @@ -42,16 +38,14 @@ public class ObjectResolver extends AttributeIfcSwitchStatement attrEntry : configDefinition.entrySet()) { strategies.put(attrEntry.getKey(), - prepareStrategy(attrEntry.getValue(), attrEntry.getValue().getOpenType())); + prepareStrategy(attrEntry.getValue())); } return strategies; } - private AttributeResolvingStrategy> prepareStrategy(AttributeIfc attributeIfc, - OpenType openType) { + private AttributeResolvingStrategy> prepareStrategy(AttributeIfc attributeIfc) { - this.openType = openType; return switchAttribute(attributeIfc); } @@ -64,45 +58,79 @@ public class ObjectResolver extends AttributeIfcSwitchStatement> caseJavaAttribute(JavaAttribute attributeIfc) { - if (attributeIfc.getOpenType() instanceof SimpleType) - return new SimpleAttributeResolvingStrategy((SimpleType) openType); - else if (attributeIfc.getOpenType() instanceof ArrayType) { - ArrayType arrayType = (ArrayType) openType; - SimpleType innerType = (SimpleType) arrayType.getElementOpenType(); - AttributeResolvingStrategy> strat = new SimpleAttributeResolvingStrategy(innerType); - return new ArrayAttributeResolvingStrategy(strat, arrayType); + protected AttributeResolvingStrategy> caseJavaSimpleAttribute(SimpleType openType) { + return new SimpleAttributeResolvingStrategy(openType); + } + + @Override + protected AttributeResolvingStrategy> caseJavaArrayAttribute(ArrayType openType) { + SimpleType innerType = (SimpleType) openType.getElementOpenType(); + AttributeResolvingStrategy> strat = new SimpleAttributeResolvingStrategy(innerType); + return new ArrayAttributeResolvingStrategy(strat, openType); + } + + @Override + protected AttributeResolvingStrategy> caseJavaCompositeAttribute(CompositeType openType) { + Map>> innerMap = Maps.newHashMap(); + Map yangToJmxMapping = Maps.newHashMap(); + + fillMappingForComposite(openType, innerMap, yangToJmxMapping); + return new CompositeAttributeResolvingStrategy(innerMap, openType, yangToJmxMapping); + } + + private void fillMappingForComposite(CompositeType openType, Map>> innerMap, Map yangToJmxMapping) { + for (String innerAttributeKey : openType.keySet()) { + innerMap.put(innerAttributeKey, caseJavaAttribute(openType.getType(innerAttributeKey))); + yangToJmxMapping.put(innerAttributeKey, innerAttributeKey); } - throw new IllegalStateException(JavaAttribute.class + " can only provide open type " + SimpleType.class - + " or " + ArrayType.class); + } + + @Override + protected AttributeResolvingStrategy> caseJavaUnionAttribute(OpenType openType) { + + Preconditions.checkState(openType instanceof CompositeType, "Unexpected open type, expected %s but was %s"); + CompositeType compositeType = (CompositeType) openType; + + Map>> innerMap = Maps.newHashMap(); + Map yangToJmxMapping = Maps.newHashMap(); + fillMappingForComposite(compositeType, innerMap, yangToJmxMapping); + + return new UnionCompositeAttributeResolvingStrategy(innerMap, compositeType, yangToJmxMapping); } @Override protected AttributeResolvingStrategy> caseDependencyAttribute( - DependencyAttribute attributeIfc) { + SimpleType openType) { return new ObjectNameAttributeResolvingStrategy(serviceTracker); } @Override - protected AttributeResolvingStrategy> caseTOAttribute(TOAttribute attributeIfc) { - CompositeType compositeType = (CompositeType) openType; + protected AttributeResolvingStrategy> caseTOAttribute(CompositeType openType) { + Preconditions.checkState(getLastAttribute() instanceof TOAttribute); + TOAttribute toAttribute = (TOAttribute) getLastAttribute(); + Map>> innerMap = Maps.newHashMap(); - for (String innerName : compositeType.keySet()) { - Preconditions.checkState(attributeIfc instanceof TOAttribute, "Unexpected state, " + attributeIfc - + " should be instance of " + TOAttribute.class.getName()); - AttributeIfc innerAttributeIfc = attributeIfc.getJmxPropertiesToTypesMap().get(innerName); + + for (String innerName : openType.keySet()) { + + AttributeIfc innerAttributeIfc = toAttribute.getJmxPropertiesToTypesMap().get(innerName); innerMap.put(innerAttributeIfc.getAttributeYangName(), - prepareStrategy(innerAttributeIfc, compositeType.getType(innerName))); + prepareStrategy(innerAttributeIfc)); } - return new CompositeAttributeResolvingStrategy(innerMap, compositeType, createYangToJmxMapping(attributeIfc)); + return new CompositeAttributeResolvingStrategy(innerMap, openType, createYangToJmxMapping(toAttribute)); + } + + @Override + protected AttributeResolvingStrategy> caseListAttribute(ArrayType openType) { + Preconditions.checkState(getLastAttribute() instanceof ListAttribute); + AttributeIfc innerAttribute = ((ListAttribute) getLastAttribute()).getInnerAttribute(); + return new ArrayAttributeResolvingStrategy(prepareStrategy(innerAttribute), openType); } @Override - protected AttributeResolvingStrategy> caseListAttribute(ListAttribute attributeIfc) { - ArrayType arrayType = (ArrayType) openType; - OpenType innerType = arrayType.getElementOpenType(); - AttributeIfc inner = attributeIfc.getInnerAttribute(); - return new ArrayAttributeResolvingStrategy(prepareStrategy(inner, innerType), arrayType); + protected AttributeResolvingStrategy> caseListDependeciesAttribute(ArrayType openType) { + Preconditions.checkState(getLastAttribute() instanceof ListDependenciesAttribute); + return new ArrayAttributeResolvingStrategy(caseDependencyAttribute(SimpleType.OBJECTNAME), openType); } }