Fixed generation of javadocs.
[mdsal.git] / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / yangtools / sal / java / api / generator / InterfaceTemplate.xtend
1 package org.opendaylight.yangtools.sal.java.api.generator\r
2 \r
3 import java.util.List\r
4 import org.opendaylight.yangtools.binding.generator.util.TypeConstants\r
5 import org.opendaylight.yangtools.sal.binding.model.api.Constant\r
6 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration\r
7 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject\r
8 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType\r
9 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature\rimport org.opendaylight.yangtools.sal.binding.model.api.AnnotationType
10
11 /**\r
12  * Template for generating JAVA interfaces. \r
13  */\r
14 class InterfaceTemplate extends BaseTemplate {\r
15     \r
16     /**\r
17      * List of constant instances which are generated as JAVA public static final attributes.\r
18      */\r
19     val List<Constant> consts\r
20     \r
21     /**\r
22      * List of method signatures which are generated as method declarations.\r
23      */\r
24     val List<MethodSignature> methods\r
25     \r
26     /**\r
27      * List of enumeration which are generated as JAVA enum type.\r
28      */\r
29     val List<Enumeration> enums\r
30     \r
31     /**\r
32      * List of generated types which are enclosed inside <code>genType</code>\r
33      */\r
34     val List<GeneratedType> enclosedGeneratedTypes\r
35     \r
36     /**\r
37      * Creates the instance of this class which is used for generating the interface file source \r
38      * code from <code>genType</code>.\r
39      * \r
40      * @throws IllegalArgumentException if <code>genType</code> equals <code>null</code>\r
41      */\r
42     new(GeneratedType genType) {\r
43         super(genType)\r
44         if (genType == null) {\r
45             throw new IllegalArgumentException("Generated type reference cannot be NULL!")\r
46         }\r
47         \r
48         consts = genType.constantDefinitions\r
49         methods = genType.methodDefinitions\r
50         enums = genType.enumerations\r
51         enclosedGeneratedTypes = genType.enclosedTypes\r
52     }\r
53     \r
54 \r
55     \r
56     /**\r
57      * Template method which generate the whole body of the interface.\r
58      * \r
59      * @return string with code for interface body in JAVA format\r
60      */\r
61     override body() '''\r
62         «type.comment.asJavadoc»\r
63         public interface «type.name»\r
64             «superInterfaces»\r
65         {\r
66         \r
67             «generateInnerClasses»\r
68         \r
69             «generateEnums»\r
70         \r
71             «generateConstants»\r
72         \r
73             «generateMethods»\r
74         \r
75         }\r
76         \r
77     '''\r
78    \r
79 \r
80     def private generateAnnotations(List<AnnotationType> annotations) '''\r
81         «IF annotations != null && !annotations.empty»\r
82             «FOR annotation : annotations»\r
83                 @«annotation.name»\r
84                 «IF annotation.parameters != null && !annotation.parameters.empty»\r
85                 (\r
86                 «FOR param : annotation.parameters SEPARATOR ","»\r
87                     «param.name»=«param.value»\r
88                 «ENDFOR»\r
89                 )\r
90                 «ENDIF»\r
91             «ENDFOR»\r
92         «ENDIF»\r
93     '''\r
94 \r
95     /**\r
96      * Template method which generates the interface name declaration.\r
97      * \r
98      * @return string with the code for the interface declaration in JAVA format\r
99      */\r
100     def private superInterfaces() \r
101     '''\r
102     «IF (!type.implements.empty)»\r
103          extends\r
104          «FOR type : type.implements SEPARATOR ","»\r
105              «type.importedName»\r
106          «ENDFOR»\r
107      « ENDIF»\r
108      '''\r
109 \r
110     /**\r
111      * Template method which generates inner classes inside this interface.\r
112      * \r
113      * @return string with the source code for inner classes in JAVA format\r
114      */\r
115     def private generateInnerClasses() '''\r
116         «IF !enclosedGeneratedTypes.empty»\r
117             «FOR innerClass : enclosedGeneratedTypes SEPARATOR "\n"»\r
118                 «IF (innerClass instanceof GeneratedTransferObject)»\r
119                     «IF (innerClass as GeneratedTransferObject).unionType»\r
120                         «val unionTemplate = new UnionTemplate(innerClass as GeneratedTransferObject)»\r
121                         «unionTemplate.generateAsInnerClass»\r
122                         «this.importMap.putAll(unionTemplate.importMap)»\r
123                     «ELSE»\r
124                         «val classTemplate = new ClassTemplate(innerClass as GeneratedTransferObject)»\r
125                         «classTemplate.generateAsInnerClass»\r
126                         «this.importMap.putAll(classTemplate.importMap)»\r
127                     «ENDIF»\r
128 \r
129                 «ENDIF»\r
130             «ENDFOR»\r
131         «ENDIF»\r
132     '''\r
133 \r
134     /**\r
135      * Template method which generates JAVA enum type.\r
136      * \r
137      * @return string with inner enum source code in JAVA format\r
138      */    \r
139     def private generateEnums() '''\r
140         «IF !enums.empty»\r
141             «FOR e : enums SEPARATOR "\n"»\r
142                 «val enumTemplate = new EnumTemplate(e)»\r
143                 «enumTemplate.generateAsInnerClass»\r
144             «ENDFOR»\r
145         «ENDIF»\r
146     '''\r
147     \r
148     /**\r
149      * Template method wich generates JAVA constants.\r
150      * \r
151      * @return string with constants in JAVA format \r
152      */    \r
153     def private generateConstants() '''\r
154         «IF !consts.empty»\r
155             «FOR c : consts»\r
156                 «IF c.name != TypeConstants.PATTERN_CONSTANT_NAME»\r
157                     public static final «c.type.importedName» «c.name» = «c.value»;\r
158                 «ENDIF»\r
159             «ENDFOR»\r
160         «ENDIF»\r
161     '''\r
162 \r
163     /**\r
164      * Template method which generates the declaration of the methods.\r
165      * \r
166      * @return string with the declaration of methods source code in JAVA format \r
167      */    \r
168     def private generateMethods() '''\r
169         «IF !methods.empty»\r
170             «FOR m : methods SEPARATOR "\n"»\r
171                 «m.comment.asJavadoc»\r
172                 «m.annotations.generateAnnotations»\r
173                 «m.returnType.importedName» «m.name»(«m.parameters.generateParameters»);\r
174             «ENDFOR»\r
175         «ENDIF»\r
176     '''\r
177 \r
178 }\r
179 \r