Added support for union yang types to netconf.
[controller.git] / opendaylight / netconf / config-netconf-connector / src / main / java / org / opendaylight / controller / netconf / confignetconfconnector / mapping / attributes / resolving / ObjectResolver.java
index c321164cf6b29c02548d9239787de2686d26e521..a3e2813fa0d383f6db78c6a2c2d52e32d03dc5e1 100644 (file)
@@ -12,6 +12,7 @@ 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.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;
@@ -71,13 +72,30 @@ public class ObjectResolver extends AttributeIfcSwitchStatement<AttributeResolvi
     @Override
     protected AttributeResolvingStrategy<?, ? extends OpenType<?>>  caseJavaCompositeAttribute(CompositeType openType) {
         Map<String, AttributeResolvingStrategy<?, ? extends OpenType<?>>> innerMap = Maps.newHashMap();
-
         Map<String, String> yangToJmxMapping = Maps.newHashMap();
+
+        fillMappingForComposite(openType, innerMap, yangToJmxMapping);
+        return new CompositeAttributeResolvingStrategy(innerMap, openType, yangToJmxMapping);
+    }
+
+    private void fillMappingForComposite(CompositeType openType, Map<String, AttributeResolvingStrategy<?, ? extends OpenType<?>>> innerMap, Map<String, String> yangToJmxMapping) {
         for (String innerAttributeKey : openType.keySet()) {
             innerMap.put(innerAttributeKey, caseJavaAttribute(openType.getType(innerAttributeKey)));
             yangToJmxMapping.put(innerAttributeKey, innerAttributeKey);
         }
-        return new CompositeAttributeResolvingStrategy(innerMap, openType, yangToJmxMapping);
+    }
+
+    @Override
+    protected AttributeResolvingStrategy<?, ? extends OpenType<?>> caseJavaUnionAttribute(OpenType<?> openType) {
+
+        Preconditions.checkState(openType instanceof CompositeType, "Unexpected open type, expected %s but was %s");
+        CompositeType compositeType = (CompositeType) openType;
+
+        Map<String, AttributeResolvingStrategy<?, ? extends OpenType<?>>> innerMap = Maps.newHashMap();
+        Map<String, String> yangToJmxMapping = Maps.newHashMap();
+        fillMappingForComposite(compositeType, innerMap, yangToJmxMapping);
+
+        return new UnionCompositeAttributeResolvingStrategy(innerMap, compositeType, yangToJmxMapping);
     }
 
     @Override
@@ -109,4 +127,10 @@ public class ObjectResolver extends AttributeIfcSwitchStatement<AttributeResolvi
         return new ArrayAttributeResolvingStrategy(prepareStrategy(innerAttribute), openType);
     }
 
+    @Override
+    protected AttributeResolvingStrategy<?, ? extends OpenType<?>> caseListDependeciesAttribute(ArrayType<?> openType) {
+        Preconditions.checkState(lastAttribute instanceof ListDependenciesAttribute);
+        return new ArrayAttributeResolvingStrategy(caseDependencyAttribute(SimpleType.OBJECTNAME), openType);
+    }
+
 }