From: Tony Tkacik Date: Mon, 15 Sep 2014 10:45:46 +0000 (+0000) Subject: Merge "Bug 1512 - generated builder java file for a leaf containing a union" X-Git-Tag: release/beryllium~340 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=65cbb409d1fd696313d8f237c86a10cd7e23c1b4;hp=bc7b1efb6f2428125b45a40ea99e00af85e38864;p=mdsal.git Merge "Bug 1512 - generated builder java file for a leaf containing a union" --- diff --git a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/YangTemplate.xtend b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/YangTemplate.xtend index d0ad08c36b..a9759d885f 100644 --- a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/YangTemplate.xtend +++ b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/YangTemplate.xtend @@ -239,7 +239,7 @@ class YangTemplate { ''' input { - «IF input instanceof DataSchemaNode && !input.childNodes.nullOrEmpty» + «IF !input.childNodes.nullOrEmpty» «writeDataSchemaNodes(input.childNodes)» «ENDIF» } @@ -253,7 +253,7 @@ class YangTemplate { ''' output { - «IF output instanceof DataSchemaNode && !output.childNodes.nullOrEmpty» + «IF !output.childNodes.nullOrEmpty» «writeDataSchemaNodes(output.childNodes)» «ENDIF» } diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend index 26c95d2fa3..2c303b9fb9 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend @@ -203,6 +203,23 @@ abstract class BaseTemplate { return description; } + def protected String formatDataForJavaDoc(GeneratedType type, String additionalComment) { + val StringBuilder typeDescription = new StringBuilder(); + if (!type.description.nullOrEmpty) { + typeDescription.append(type.description) + typeDescription.append(NEW_LINE) + typeDescription.append(NEW_LINE) + typeDescription.append(NEW_LINE) + typeDescription.append(additionalComment) + } else { + typeDescription.append(additionalComment) + } + + return ''' + «typeDescription.toString» + '''.toString + } + def asLink(String text) { val StringBuilder sb = new StringBuilder() var tempText = text diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionBuilderTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionBuilderTemplate.xtend index dbed6c7515..13c9fc309b 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionBuilderTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionBuilderTemplate.xtend @@ -25,7 +25,7 @@ class UnionBuilderTemplate extends ClassTemplate { } def override body() ''' - «wrapToDocumentation(formatDataForJavaDoc(type))» + «wrapToDocumentation(formatDataForJavaDoc(type, getClarification()))» public class «type.name» { «generateMethods» @@ -51,4 +51,16 @@ class UnionBuilderTemplate extends ClassTemplate { } } + def private String getClarification() { + return + ''' + The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. + In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). + + The reason behind putting it under src/main/java is: + This class is generated in form of a stub and needs to be finished by the user. This class is generated only once to prevent + loss of user code. + ''' + } + } diff --git a/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java b/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java index ab8fe5c9c4..124fadb6cd 100644 --- a/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java +++ b/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java @@ -91,7 +91,7 @@ public class TypedefCompilationTest extends BaseCompilationTest { assertTrue(unionExt2.exists()); assertTrue(unionExt3.exists()); assertTrue(unionExt4.exists()); - assertFilesCount(parent, 31); + assertFilesCount(parent, 33); // Test if sources are compilable testCompilation(sourcesOutputDir, compiledOutputDir); diff --git a/code-generator/binding-java-api-generator/src/test/resources/compilation/typedef/foo.yang b/code-generator/binding-java-api-generator/src/test/resources/compilation/typedef/foo.yang index 911096606e..855279f3fc 100644 --- a/code-generator/binding-java-api-generator/src/test/resources/compilation/typedef/foo.yang +++ b/code-generator/binding-java-api-generator/src/test/resources/compilation/typedef/foo.yang @@ -186,5 +186,10 @@ module foo { typedef h { type uint64; } + container cont1 { + leaf leaf1 { + type union-ext1; + } + } } diff --git a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/GeneratorImpl.xtend b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/GeneratorImpl.xtend index f40cbcaa3d..185299d190 100644 --- a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/GeneratorImpl.xtend +++ b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/GeneratorImpl.xtend @@ -400,7 +400,7 @@ class GeneratorImpl { ''' } - private def printAugmentedNode(DataSchemaNode child) { + private def CharSequence printAugmentedNode(DataSchemaNode child) { if(child instanceof ChoiceCaseNode) return '' @@ -810,7 +810,8 @@ class GeneratorImpl { «ENDFOR»