Support for Yang 1.1 Anydata statement in mdsal-binding2-generator 35/58735/1
authorMartin Ciglan <martin.ciglan@pantheon.tech>
Thu, 8 Jun 2017 07:11:27 +0000 (09:11 +0200)
committerMartin Ciglan <martin.ciglan@pantheon.tech>
Mon, 12 Jun 2017 13:11:36 +0000 (13:11 +0000)
- able to recognize anydata statement in root or data schema node
- generate type & Java code for it
- YANG test example

Change-Id: I79baeb831ed1b663d332800cca556f6e1dc53cb6
Signed-off-by: Martin Ciglan <martin.ciglan@pantheon.tech>
(cherry picked from commit ce3c65609d686c12738b01943765560ebebdf518)

binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java
binding2/mdsal-binding2-generator-impl/src/test/resources/anydata/test-anydata.yang [new file with mode: 0644]

index dfc26ca3f112808f4d671d6af09e1dde1de096fb..45dbb9c84526685a668eaeb83c47948c8daaaf9c 100644 (file)
@@ -65,6 +65,7 @@ import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
 import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable;
 import org.opendaylight.mdsal.binding.javav2.util.BindingMapping;
 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.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
@@ -546,12 +547,11 @@ final class GenHelperUtil {
             } else if (node instanceof ListSchemaNode) {
                 listToGenType(module, basePackageName, typeBuilder, childOf, (ListSchemaNode) node, schemaContext,
                         verboseClassComments, genCtx, genTypeBuilders, typeProvider);
-            } else if (node instanceof AnyXmlSchemaNode) {
-                resolveAnyxmlNodeAsMethod(schemaContext, typeBuilder, genCtx, (AnyXmlSchemaNode) node, module,
-                        typeProvider);
             } else if (node instanceof ChoiceSchemaNode) {
                 choiceToGenType(module, schemaContext, verboseClassComments, basePackageName, childOf,
                         (ChoiceSchemaNode) node, genTypeBuilders, genCtx, typeProvider);
+            } else if (node instanceof AnyXmlSchemaNode || node instanceof AnyDataSchemaNode) {
+                resolveAnyNodeAsMethod(schemaContext, typeBuilder, genCtx, node, module, typeProvider);
             }
         }
     }
@@ -915,27 +915,26 @@ final class GenHelperUtil {
         }
     }
 
-    private static Type resolveAnyxmlNodeAsMethod(final SchemaContext schemaContext, final GeneratedTypeBuilder
-            typeBuilder, final Map<Module, ModuleContext> genCtx, final AnyXmlSchemaNode anyxml, final Module module,
+    private static Type resolveAnyNodeAsMethod(final SchemaContext schemaContext, final GeneratedTypeBuilder
+            typeBuilder, final Map<Module, ModuleContext> genCtx, final DataSchemaNode node, final Module module,
             final TypeProvider typeProvider) {
 
-        final String anyxmlName = anyxml.getQName().getLocalName();
-        if (anyxmlName == null) {
+        final String anyName = node.getQName().getLocalName();
+        if (anyName == null) {
             return null;
         }
 
-        String anyxmlDesc = anyxml.getDescription();
-        if (anyxmlDesc == null) {
-            anyxmlDesc = "";
+        String anyDesc = node.getDescription();
+        if (anyDesc == null) {
+            anyDesc = "";
         }
 
         Type returnType = Types.DOCUMENT;
 
-        constructGetter(typeBuilder, anyxmlName, anyxmlDesc, returnType, anyxml.getStatus());
+        constructGetter(typeBuilder, anyName, anyDesc, returnType, node.getStatus());
         return returnType;
     }
 
-
     /**
      * Adds <code>schemaNode</code> to <code>typeBuilder</code> as getter method
      * or to <code>genTOBuilder</code> as property.
diff --git a/binding2/mdsal-binding2-generator-impl/src/test/resources/anydata/test-anydata.yang b/binding2/mdsal-binding2-generator-impl/src/test/resources/anydata/test-anydata.yang
new file mode 100644 (file)
index 0000000..1600e7e
--- /dev/null
@@ -0,0 +1,24 @@
+module test-anydata {
+    yang-version 1.1;
+
+    namespace "urn:test:simple:test:anydata";
+    prefix test;
+    organization "test.org";
+    revision "2017-06-08";
+
+    container *my-cont {
+      container my-inner-cont {
+        leaf my-leaf {
+          type string;
+        }
+
+        anydata inner-anydata {
+          description "I am data schema node anydata";
+        }
+      }
+    }
+
+    anydata root-anydata {
+       description "I am root anydata";
+    }
+}
\ No newline at end of file