60cbb2955364920ab5d780727a7755b39dcdd96d
[yangtools.git] / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / yangtools / sal / java / api / generator / EnumTemplate.xtend
1 package org.opendaylight.yangtools.sal.java.api.generator
2
3 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration
4 /**
5  * Template for generating JAVA enumeration type. 
6  */
7 class EnumTemplate {
8     
9     /**
10      * Enumeration which will be transformed to JAVA source code for enumeration
11      */
12     val Enumeration enums
13     
14     /**
15      * Constructs instance of this class with concrete <code>enums</code>.
16      * 
17      * @param enumeration which will be transformed to JAVA source code 
18      */
19     new(Enumeration enums) {
20         this.enums = enums
21     }
22     
23     /**
24      * Generates JAVA source code for the enumeration with the package name.
25      * 
26      * @return JAVA source code for enumeration and for the package name 
27      */
28     def String generate() {
29         val body = generateBody
30         val pkg = generatePkg
31         return pkg.toString + body.toString
32     }
33     
34     /**
35      * Generates only JAVA enumeration source code.
36      * 
37      * @return string with JAVA enumeration source code
38      */
39     def generateAsInnerClass() {
40         return generateBody
41     }
42     
43     /**
44      * Template method which generates enumeration body (declaration + enumeration items).
45      * 
46      * @return string with the enumeration body 
47      */
48     def private generateBody() '''
49         public enum «enums.name» {
50         «FOR v : enums.values SEPARATOR ",\n"»
51             «"    "»«v.name»(«v.value»)«
52         ENDFOR»;
53         
54             int value;
55         
56             private «enums.name»(int value) {
57                 this.value = value;
58             }
59         }
60     '''
61     
62     /**
63      * Template method which generates the package name line.
64      * 
65      * @return string with the package name line   
66      */
67     def private generatePkg() '''
68         package «enums.packageName»;
69         
70         
71     '''
72     
73 }