Bug 706: - Missing support for anyxml statement in java generator and mapping service 68/58468/3
authorMartin Ciglan <martin.ciglan@pantheon.tech>
Wed, 7 Jun 2017 13:36:40 +0000 (15:36 +0200)
committerMartin Ciglan <martin.ciglan@pantheon.tech>
Thu, 8 Jun 2017 07:43:01 +0000 (07:43 +0000)
- basic logic to recognize anyxml node within root or data schema node
- generate type and Java code for it

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

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/anyxml/test-anyxml.yang [new file with mode: 0644]
binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/Types.java

index 9afe6650cb3118e9b6070b3b1a3ab7f78941327f..0c72ed3bf8fa2884ea5d96cd2557c991cb663084 100644 (file)
@@ -60,6 +60,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.AnyXmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
@@ -532,6 +533,9 @@ 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);
             }
         }
 
@@ -684,6 +688,27 @@ final class GenHelperUtil {
         return returnType;
     }
 
+    private static Type resolveAnyxmlNodeAsMethod(final SchemaContext schemaContext, final GeneratedTypeBuilder
+            typeBuilder, final Map<Module, ModuleContext> genCtx, final AnyXmlSchemaNode anyxml, final Module module,
+            final TypeProvider typeProvider) {
+
+        final String anyxmlName = anyxml.getQName().getLocalName();
+        if (anyxmlName == null) {
+            return null;
+        }
+
+        String anyxmlDesc = anyxml.getDescription();
+        if (anyxmlDesc == null) {
+            anyxmlDesc = "";
+        }
+
+        Type returnType = Types.DOCUMENT;
+
+        constructGetter(typeBuilder, anyxmlName, anyxmlDesc, returnType, anyxml.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/anyxml/test-anyxml.yang b/binding2/mdsal-binding2-generator-impl/src/test/resources/anyxml/test-anyxml.yang
new file mode 100644 (file)
index 0000000..90a3915
--- /dev/null
@@ -0,0 +1,24 @@
+module test-anyxml {
+    yang-version 1;
+
+    namespace "urn:test:simple:test:anyxml";
+    prefix test;
+    organization "test.org";
+    revision "2017-06-07";
+
+    container *my-cont {
+      container my-inner-cont {
+        leaf my-leaf {
+          type string;
+        }
+
+        anyxml inner-anyxml {
+          description "I am data schema node anyxml";
+        }
+      }
+    }
+
+    anyxml root-anyxml {
+       description "I am root anyxml";
+    }
+}
\ No newline at end of file
index 432c5653f1427705434deff5cf2d02fd16d81f32..6ab7b47da0aa62fcad28e017b070f0354029aa85 100644 (file)
@@ -36,6 +36,7 @@ import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 import org.opendaylight.yangtools.yang.model.util.BaseConstraints;
+import org.w3c.dom.Document;
 
 @Beta
 public final class Types {
@@ -55,6 +56,7 @@ public final class Types {
     public static final ConcreteType CLASS = typeForClass(Class.class);
     public static final ConcreteType STRING = typeForClass(String.class);
     public static final ConcreteType VOID = typeForClass(Void.class);
+    public static final ConcreteType DOCUMENT = typeForClass(Document.class);
 
     public static final ConcreteType BYTE_ARRAY = primitiveType("byte[]", null);
     public static final ConcreteType CHAR_ARRAY = primitiveType("char[]", null);