Added toString method to generated inner implementation in builder classes. 76/2876/1
authorMartin Vitez <mvitez@cisco.com>
Tue, 19 Nov 2013 15:45:32 +0000 (16:45 +0100)
committerMartin Vitez <mvitez@cisco.com>
Tue, 19 Nov 2013 15:46:46 +0000 (16:46 +0100)
Signed-off-by: Martin Vitez <mvitez@cisco.com>
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend

index 71f360726b840381307b1e2b6c3d4bd400e34990..367d3b569779d125497b7768b2c56cfe118b1151 100644 (file)
@@ -238,57 +238,62 @@ public class BindingGeneratorImpl implements BindingGenerator {
             }
         }
     }
+\r
+    private def GeneratedTypeBuilder processDataSchemaNode(Module module, String basePackageName,
+        GeneratedTypeBuilder parent, GeneratedTypeBuilder childOf, DataSchemaNode node) {
+        if (node.augmenting || node.addedByUses) {
+            return null
+        }
+        val packageName = packageNameForGeneratedType(basePackageName, (node).path)
+        val genType = addDefaultInterfaceDefinition(packageName, node, childOf)
+        if (node instanceof DataNodeContainer) {
+            genCtx.get(module).addChildNodeType(node.path, genType)
+            groupingsToGenTypes(module, (node as DataNodeContainer).groupings)
+            processUsesAugments(node as DataNodeContainer, module)
+        }
+        return genType
+    }
 
     private def void containerToGenType(Module module, String basePackageName, GeneratedTypeBuilder parent,
         GeneratedTypeBuilder childOf, ContainerSchemaNode node) {
-        if (node.augmenting || node.addedByUses) {
-            return
+        val genType = processDataSchemaNode(module, basePackageName, parent, childOf, node)
+        if (genType != null) {
+            constructGetter(parent, node.QName.localName, node.description, genType)
+            resolveDataSchemaNodes(module, basePackageName, genType, genType, node.childNodes)
         }
-        val packageName = packageNameForGeneratedType(basePackageName, node.path)
-        val genType = addDefaultInterfaceDefinition(packageName, node, childOf)
-        constructGetter(parent, node.QName.localName, node.description, genType)
-        genCtx.get(module).addChildNodeType(node.path, genType)
-        resolveDataSchemaNodes(module, basePackageName, genType, genType, node.childNodes)
-        groupingsToGenTypes(module, node.groupings)
-        processUsesAugments(node, module)
     }
 
     private def void listToGenType(Module module, String basePackageName, GeneratedTypeBuilder parent,
         GeneratedTypeBuilder childOf, ListSchemaNode node) {
-        if (node.augmenting || node.addedByUses) {
-            return
-        }
-        val packageName = packageNameForGeneratedType(basePackageName, (node).path)
-        val genType = addDefaultInterfaceDefinition(packageName, node, childOf)
-        constructGetter(parent, node.QName.localName, node.description, Types.listTypeFor(genType))
-        genCtx.get(module).addChildNodeType(node.path, genType)
-        groupingsToGenTypes(module, node.groupings)
-        processUsesAugments(node, module)
-
-        val List<String> listKeys = listKeys(node);
-        val genTOBuilder = resolveListKeyTOBuilder(packageName, node);\r
+        val genType = processDataSchemaNode(module, basePackageName, parent, childOf, node)
+        if (genType != null) {
+            constructGetter(parent, node.QName.localName, node.description, Types.listTypeFor(genType))
+
+            val List<String> listKeys = listKeys(node);
+            val packageName = packageNameForGeneratedType(basePackageName, (node).path)
+            val genTOBuilder = resolveListKeyTOBuilder(packageName, node);
+            if (genTOBuilder !== null) {
+                val identifierMarker = IDENTIFIER.parameterizedTypeFor(genType);
+                val identifiableMarker = IDENTIFIABLE.parameterizedTypeFor(genTOBuilder);
+                genTOBuilder.addImplementsType(identifierMarker);
+                genType.addImplementsType(identifiableMarker);
+            }
 
-        if (genTOBuilder !== null) {
-            val identifierMarker = IDENTIFIER.parameterizedTypeFor(genType);
-            val identifiableMarker = IDENTIFIABLE.parameterizedTypeFor(genTOBuilder);
-            genTOBuilder.addImplementsType(identifierMarker);
-            genType.addImplementsType(identifiableMarker);
-        }
+            for (schemaNode : node.childNodes) {
+                if (!schemaNode.augmenting) {
+                    addSchemaNodeToListBuilders(basePackageName, schemaNode, genType, genTOBuilder, listKeys, module);
+                }
+            }
 
-        for (schemaNode : node.childNodes) {
-            if (!schemaNode.augmenting) {
-                addSchemaNodeToListBuilders(basePackageName, schemaNode, genType, genTOBuilder, listKeys, module);
+            // serialVersionUID\r
+            if (genTOBuilder !== null) {
+                val GeneratedPropertyBuilder prop = new GeneratedPropertyBuilderImpl("serialVersionUID");
+                prop.setValue(Long.toString(computeDefaultSUID(genTOBuilder as GeneratedTOBuilderImpl)));
+                genTOBuilder.setSUID(prop);
             }
-        }\r
-\r
-        // serialVersionUID\r
-        if (genTOBuilder !== null) {\r
-            val GeneratedPropertyBuilder prop = new GeneratedPropertyBuilderImpl("serialVersionUID");\r
-            prop.setValue(Long.toString(computeDefaultSUID(genTOBuilder as GeneratedTOBuilderImpl)));\r
-            genTOBuilder.setSUID(prop);\r
-        }
 
-        typeBuildersToGenTypes(module, genType, genTOBuilder);
+            typeBuildersToGenTypes(module, genType, genTOBuilder);
+        }
     }
 
     private def void processUsesAugments(DataNodeContainer node, Module module) {
@@ -1181,18 +1186,18 @@ public class BindingGeneratorImpl implements BindingGenerator {
 
         for (caseNode : caseNodes) {
             if (caseNode !== null && !caseNode.isAddedByUses() && !caseNode.isAugmenting()) {
-                val packageName = packageNameForGeneratedType(basePackageName, caseNode.path);
-                val caseTypeBuilder = addDefaultInterfaceDefinition(packageName, caseNode);
-                caseTypeBuilder.addImplementsType(refChoiceType);
+                val packageName = packageNameForGeneratedType(basePackageName, caseNode.path)
+                val caseTypeBuilder = addDefaultInterfaceDefinition(packageName, caseNode)
+                caseTypeBuilder.addImplementsType(refChoiceType)
                 genCtx.get(module).addCaseType(caseNode.path, caseTypeBuilder)
-                val Set<DataSchemaNode> caseChildNodes = caseNode.childNodes;
+                val Set<DataSchemaNode> caseChildNodes = caseNode.childNodes
                 if (caseChildNodes !== null) {
-                    val parentNode = choiceNode.parent;
-                    var SchemaNode parent;
+                    val parentNode = choiceNode.parent
+                    var SchemaNode parent
                     if (parentNode instanceof AugmentationSchema) {
                         val augSchema = parentNode as AugmentationSchema;
                         val targetPath = augSchema.targetPath;
-                        var targetSchemaNode = findDataSchemaNode(schemaContext, targetPath);
+                        var targetSchemaNode = findDataSchemaNode(schemaContext, targetPath)
                         if (targetSchemaNode instanceof DataSchemaNode &&
                             (targetSchemaNode as DataSchemaNode).isAddedByUses()) {
                             targetSchemaNode = findOriginal(targetSchemaNode as DataSchemaNode);
@@ -1202,12 +1207,12 @@ public class BindingGeneratorImpl implements BindingGenerator {
                                         " in module " + module.name);
                             }
                         }
-                        parent = targetSchemaNode as SchemaNode
+                        parent = targetSchemaNode
                     } else {
-                        parent = choiceNode.parent as SchemaNode;
+                        parent = choiceNode.parent as SchemaNode
                     }
                     var GeneratedTypeBuilder childOfType = findChildNodeByPath(parent.path)
-                    resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, childOfType, caseChildNodes);
+                    resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, childOfType, caseChildNodes)
                 }
             }
 
index f60393221088645894e66227ee46e7e8f0b63766..8a76419897e4b61dacff591f7588cc4b9890712a 100644 (file)
@@ -14,6 +14,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
 import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject
 import java.util.Collection
+import java.util.Arrays
 
 abstract class BaseTemplate {
 
@@ -244,6 +245,31 @@ abstract class BaseTemplate {
         }
     '''
 
+    def protected generateToString(Collection<GeneratedProperty> properties) '''
+        «IF !properties.empty»
+            @Override
+            public String toString() {
+                StringBuilder builder = new StringBuilder();
+                builder.append("«type.name» [«properties.get(0).fieldName»=");
+                «IF properties.get(0).returnType.name.contains("[")»
+                    builder.append(«Arrays.importedName».toString(«properties.get(0).fieldName»));
+                «ELSE»
+                    builder.append(«properties.get(0).fieldName»);
+                «ENDIF»
+                «FOR i : 1..<properties.size»
+                    builder.append(", «properties.get(i).fieldName»=");
+                    «IF properties.get(i).returnType.name.contains("[")»
+                        builder.append(«Arrays.importedName».toString(«properties.get(i).fieldName»));
+                    «ELSE»
+                        builder.append(«properties.get(i).fieldName»);
+                    «ENDIF»
+                «ENDFOR»
+                builder.append("]");
+                return builder.toString();
+            }
+        «ENDIF»
+    '''
+
     def GeneratedProperty getPropByName(GeneratedType gt, String name) {
         for (GeneratedProperty prop : gt.properties) {
             if (prop.name.equals(name)) {
index fbe9886d00c375b13ebf9b41cc413a3e50e40833..d5e9beb79931ce9bda6d9c26b64ee097095678ef 100644 (file)
@@ -224,6 +224,8 @@ class BuilderTemplate extends BaseTemplate {
                 «generateHashCode()»\r
 \r
                 «generateEquals()»\r
+                \r
+                «generateToString(properties)»\r
             }\r
 \r
         }\r
index de3ceb454dc68a7d78554cad3fffd9ff2ade9734..53f7d4c5cd045a352176b71ce5f16dacf70131ca 100644 (file)
@@ -107,7 +107,7 @@ class ClassTemplate extends BaseTemplate {
 \r
             «generateEquals»\r
 \r
-            «generateToString»\r
+            «generateToString(genTO.toStringIdentifiers)»\r
 \r
             «generateGetLength»\r
 \r
@@ -375,37 +375,6 @@ class ClassTemplate extends BaseTemplate {
         «ENDIF»\r
     '''\r
 \r
-    /**\r
-     * Template method which generates the method <code>toString()</code>.\r
-     *\r
-     * @return string with the <code>toString()</code> method definition in JAVA format\r
-     */\r
-    def protected generateToString() '''\r
-        «IF !genTO.toStringIdentifiers.empty»\r
-            @Override\r
-            public String toString() {\r
-                StringBuilder builder = new StringBuilder();\r
-                «val properties = genTO.toStringIdentifiers»\r
-                builder.append("«type.name» [«properties.get(0).fieldName»=");\r
-                «IF properties.get(0).returnType.name.contains("[")»\r
-                    builder.append(«Arrays.importedName».toString(«properties.get(0).fieldName»));\r
-                «ELSE»\r
-                    builder.append(«properties.get(0).fieldName»);\r
-                «ENDIF»\r
-                «FOR i : 1..<genTO.toStringIdentifiers.size»\r
-                    builder.append(", «properties.get(i).fieldName»=");\r
-                    «IF properties.get(i).returnType.name.contains("[")»\r
-                        builder.append(«Arrays.importedName».toString(«properties.get(i).fieldName»));\r
-                    «ELSE»\r
-                        builder.append(«properties.get(i).fieldName»);\r
-                    «ENDIF»\r
-                «ENDFOR»\r
-                builder.append("]");\r
-                return builder.toString();\r
-            }\r
-        «ENDIF»\r
-    '''\r
-\r
     def private generateGetLength() '''\r
         «IF restrictions != null && !(restrictions.lengthConstraints.empty)»\r
             public static «List.importedName»<«Range.importedName»<Integer>> getLength() {\r