Add support for configuration attributes based on yang leaves with custom types ...
[controller.git] / opendaylight / netconf / config-netconf-connector / src / main / java / org / opendaylight / controller / netconf / confignetconfconnector / mapping / attributes / fromxml / ObjectXmlReader.java
index 80a255507460d6d4b2d19369e8e9c2e56aefcdc8..bc3c74a88f218aa01ad82a97976ee704df8d1f86 100644 (file)
@@ -8,15 +8,15 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml;
 
+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.TOAttribute;
 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.AttributeIfcSwitchStatement;
 
 import javax.management.openmbean.ArrayType;
+import javax.management.openmbean.CompositeType;
 import javax.management.openmbean.SimpleType;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -41,26 +41,33 @@ public class ObjectXmlReader extends AttributeIfcSwitchStatement<AttributeReadin
     }
 
     @Override
-    protected AttributeReadingStrategy caseJavaAttribute(JavaAttribute attributeIfc) {
-        if (attributeIfc.getOpenType() instanceof SimpleType<?>)
-            return new SimpleAttributeReadingStrategy(attributeIfc);
-        else if (attributeIfc.getOpenType() instanceof ArrayType<?>) {
-            SimpleAttributeReadingStrategy innerStrategy = new SimpleAttributeReadingStrategy(
-                    ((ArrayType<?>) attributeIfc.getOpenType()).getElementOpenType());
-            return new ArrayAttributeReadingStrategy(attributeIfc, innerStrategy);
-        }
-        throw new IllegalStateException(JavaAttribute.class + " can only provide open type " + SimpleType.class
-                + " or " + ArrayType.class);
+    public AttributeReadingStrategy caseJavaSimpleAttribute(SimpleType<?> openType) {
+        return new SimpleAttributeReadingStrategy(lastAttribute.getNullableDefault());
+    }
+
+    @Override
+    public AttributeReadingStrategy caseJavaArrayAttribute(ArrayType<?> openType) {
+        SimpleAttributeReadingStrategy innerStrategy = new SimpleAttributeReadingStrategy(lastAttribute.getNullableDefault());
+        return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
     }
 
     @Override
-    protected AttributeReadingStrategy caseDependencyAttribute(DependencyAttribute attributeIfc) {
-        return new ObjectNameAttributeReadingStrategy(attributeIfc);
+    public AttributeReadingStrategy caseJavaCompositeAttribute(CompositeType openType) {
+        Preconditions.checkState(openType.keySet().size() == 1, "Unexpected number of elements for open type %s, should be 1", openType);
+        String mappingKey = openType.keySet().iterator().next();
+        return new SimpleCompositeAttributeReadingStrategy(lastAttribute.getNullableDefault(), mappingKey);
     }
 
     @Override
-    protected AttributeReadingStrategy caseTOAttribute(TOAttribute attributeIfc) {
-        Map<String, AttributeIfc> inner = attributeIfc.getYangPropertiesToTypesMap();
+    protected AttributeReadingStrategy caseDependencyAttribute(SimpleType<?> openType) {
+        return new ObjectNameAttributeReadingStrategy(lastAttribute.getNullableDefault());
+    }
+
+    @Override
+    protected AttributeReadingStrategy caseTOAttribute(CompositeType openType) {
+        Preconditions.checkState(lastAttribute instanceof TOAttribute);
+        Map<String, AttributeIfc> inner = ((TOAttribute)lastAttribute).getYangPropertiesToTypesMap();
+
         Map<String, AttributeReadingStrategy> innerStrategies = Maps.newHashMap();
 
         for (Entry<String, AttributeIfc> innerAttrEntry : inner.entrySet()) {
@@ -69,14 +76,14 @@ public class ObjectXmlReader extends AttributeIfcSwitchStatement<AttributeReadin
             innerStrategies.put(innerAttrEntry.getKey(), innerStrat);
         }
 
-        return new CompositeAttributeReadingStrategy(attributeIfc, innerStrategies);
+        return new CompositeAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategies);
     }
 
     @Override
-    protected AttributeReadingStrategy caseListAttribute(ListAttribute attributeIfc) {
-        AttributeIfc innerAttr = attributeIfc.getInnerAttribute();
-        AttributeReadingStrategy innerStrategy = prepareReadingStrategy(key, innerAttr);
-        return new ArrayAttributeReadingStrategy(attributeIfc, innerStrategy);
+    protected AttributeReadingStrategy caseListAttribute(ArrayType<?> openType) {
+        Preconditions.checkState(lastAttribute instanceof ListAttribute);
+        AttributeReadingStrategy innerStrategy = prepareReadingStrategy(key, ((ListAttribute) lastAttribute).getInnerAttribute());
+        return new ArrayAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategy);
     }
 
 }