1 package org.opendaylight.yangtools.sal.java.api.generator
\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
12 * Template for generating JAVA interfaces.
\r
14 class InterfaceTemplate extends BaseTemplate {
\r
17 * List of constant instances which are generated as JAVA public static final attributes.
\r
19 val List<Constant> consts
\r
22 * List of method signatures which are generated as method declarations.
\r
24 val List<MethodSignature> methods
\r
27 * List of enumeration which are generated as JAVA enum type.
\r
29 val List<Enumeration> enums
\r
32 * List of generated types which are enclosed inside <code>genType</code>
\r
34 val List<GeneratedType> enclosedGeneratedTypes
\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
40 * @throws IllegalArgumentException if <code>genType</code> equals <code>null</code>
\r
42 new(GeneratedType genType) {
\r
44 if (genType == null) {
\r
45 throw new IllegalArgumentException("Generated type reference cannot be NULL!")
\r
48 consts = genType.constantDefinitions
\r
49 methods = genType.methodDefinitions
\r
50 enums = genType.enumerations
\r
51 enclosedGeneratedTypes = genType.enclosedTypes
\r
57 * Template method which generate the whole body of the interface.
\r
59 * @return string with code for interface body in JAVA format
\r
62 «type.comment.asJavadoc»
\r
63 public interface «type.name»
\r
67 «generateInnerClasses»
\r
80 def private generateAnnotations(List<AnnotationType> annotations) '''
\r
81 «IF annotations != null && !annotations.empty»
\r
82 «FOR annotation : annotations»
\r
84 «IF annotation.parameters != null && !annotation.parameters.empty»
\r
86 «FOR param : annotation.parameters SEPARATOR ","»
\r
87 «param.name»=«param.value»
\r
96 * Template method which generates the interface name declaration.
\r
98 * @return string with the code for the interface declaration in JAVA format
\r
100 def private superInterfaces()
\r
102 «IF (!type.implements.empty)»
\r
104 «FOR type : type.implements SEPARATOR ","»
\r
105 «type.importedName»
\r
111 * Template method which generates inner classes inside this interface.
\r
113 * @return string with the source code for inner classes in JAVA format
\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
124 «val classTemplate = new ClassTemplate(innerClass as GeneratedTransferObject)»
\r
125 «classTemplate.generateAsInnerClass»
\r
126 «this.importMap.putAll(classTemplate.importMap)»
\r
135 * Template method which generates JAVA enum type.
\r
137 * @return string with inner enum source code in JAVA format
\r
139 def private generateEnums() '''
\r
141 «FOR e : enums SEPARATOR "\n"»
\r
142 «val enumTemplate = new EnumTemplate(e)»
\r
143 «enumTemplate.generateAsInnerClass»
\r
149 * Template method wich generates JAVA constants.
\r
151 * @return string with constants in JAVA format
\r
153 def private generateConstants() '''
\r
156 «IF c.name != TypeConstants.PATTERN_CONSTANT_NAME»
\r
157 public static final «c.type.importedName» «c.name» = «c.value»;
\r
164 * Template method which generates the declaration of the methods.
\r
166 * @return string with the declaration of methods source code in JAVA format
\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