From 6a5bdd0e9ed9acd2a463c4cab4ec91146ccc133d Mon Sep 17 00:00:00 2001 From: Martin Ciglan Date: Wed, 7 Jun 2017 15:36:40 +0200 Subject: [PATCH] Bug 706: - Missing support for anyxml statement in java generator and mapping service - 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 (cherry picked from commit 7eb194c73ef0681486b5adf4a318e8f4fde5fd62) --- .../javav2/generator/impl/GenHelperUtil.java | 25 +++++++++++++++++++ .../test/resources/anyxml/test-anyxml.yang | 24 ++++++++++++++++++ .../binding/javav2/generator/util/Types.java | 2 ++ 3 files changed, 51 insertions(+) create mode 100644 binding2/mdsal-binding2-generator-impl/src/test/resources/anyxml/test-anyxml.yang diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java index 9afe6650cb..0c72ed3bf8 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java @@ -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 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 schemaNode to typeBuilder as getter method * or to genTOBuilder 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 index 0000000000..90a3915ef9 --- /dev/null +++ b/binding2/mdsal-binding2-generator-impl/src/test/resources/anyxml/test-anyxml.yang @@ -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 diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/Types.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/Types.java index 432c5653f1..6ab7b47da0 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/Types.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/Types.java @@ -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); -- 2.36.6