Teach ModelGenerator about AnyDataSchemaNodes 88/82288/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 28 May 2019 16:29:15 +0000 (18:29 +0200)
committerRobert Varga <nite@hq.sk>
Tue, 28 May 2019 21:07:15 +0000 (21:07 +0000)
anydata is a valid construct coming from YANG 1.1, effectively
replacing anyxml. This patch adds the support for processing anydata
nodes.

JIRA: NETCONF-622
Change-Id: I71207f5a053d718daaeaa4f3dcd6aa9ab27e3d57
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 101d39b9a007c963a8f57ee4e2660abb63e33790)

restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ModelGenerator.java

index b76f75da6a68e0232181506aecd9cd995e97d0e9..b48754136baa95e24a8113569919c802553b6248 100644 (file)
@@ -26,6 +26,7 @@ import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder;
 import org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder.Post;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
@@ -343,6 +344,9 @@ public class ModelGenerator {
                 } else if (node instanceof AnyXmlSchemaNode) {
                     property = processAnyXMLNode((AnyXmlSchemaNode) node);
 
+                } else if (node instanceof AnyDataSchemaNode) {
+                    property = processAnydataNode((AnyDataSchemaNode) node);
+
                 } else if (node instanceof ContainerSchemaNode) {
                     property = processDataNodeContainer((ContainerSchemaNode) node, parentName, models, isConfig,
                             schemaContext);
@@ -412,6 +416,9 @@ public class ModelGenerator {
             } else if (node instanceof AnyXmlSchemaNode) {
                 property = processAnyXMLNode((AnyXmlSchemaNode) node);
 
+            } else if (node instanceof AnyDataSchemaNode) {
+                property = processAnydataNode((AnyDataSchemaNode) node);
+
             } else if (node instanceof ContainerSchemaNode) {
                 property = processDataNodeContainer((ContainerSchemaNode) node, moduleName, models, isConfig,
                         schemaContext);
@@ -452,6 +459,19 @@ public class ModelGenerator {
         return property;
     }
 
+    private static ObjectNode processAnydataNode(final AnyDataSchemaNode leafNode) {
+        final ObjectNode property = JsonNodeFactory.instance.objectNode();
+
+        final String leafDescription = leafNode.getDescription().orElse(null);
+        putIfNonNull(property, DESCRIPTION_KEY, leafDescription);
+
+        processMandatory(leafNode, property);
+        final String localName = leafNode.getQName().getLocalName();
+        property.put(TYPE_KEY, "example of anydata " + localName);
+
+        return property;
+    }
+
     private static ObjectNode processAnyXMLNode(final AnyXmlSchemaNode leafNode) {
         final ObjectNode property = JsonNodeFactory.instance.objectNode();