Comments of source code.
[yangtools.git] / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / yangtools / sal / java / api / generator / BuilderGenerator.java
1 package org.opendaylight.yangtools.sal.java.api.generator;\r
2 \r
3 import org.opendaylight.yangtools.sal.binding.model.api.CodeGenerator;\r
4 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;\r
5 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;\r
6 import org.opendaylight.yangtools.sal.binding.model.api.Type;\r
7 import org.opendaylight.yangtools.yang.binding.Augmentable;\r
8 import org.opendaylight.yangtools.yang.binding.Augmentation;\r
9 import org.opendaylight.yangtools.yang.binding.DataObject;\r
10 \r
11 /**\r
12  * \r
13  * Transformator of the data from the virtual form to JAVA programming language.\r
14  * The result source code represent java class. For generation of the source\r
15  * code is used the template written in XTEND language.\r
16  * \r
17  */\r
18 public final class BuilderGenerator implements CodeGenerator {\r
19 \r
20     /**\r
21      * Constant used as sufix for builder name.\r
22      */\r
23     public static final String BUILDER = "Builder";\r
24 \r
25     /**\r
26      * Passes via list of implemented types in <code>type</code>.\r
27      * \r
28      * @param type\r
29      *            JAVA <code>Type</code>\r
30      * @return boolean value which is true if any of implemented types is of the\r
31      *         type <code>Augmentable</code>.\r
32      */\r
33     @Override\r
34     public boolean isAcceptable(Type type) {\r
35         if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) {\r
36             for (Type t : ((GeneratedType) type).getImplements()) {\r
37                 // "rpc" and "grouping" elements do not implement Augmentable\r
38                 if (t.getFullyQualifiedName().equals(Augmentable.class.getName())) {\r
39                     return true;\r
40                 } else if (t.getFullyQualifiedName().equals(Augmentation.class.getName())) {\r
41                     return true;\r
42                 }\r
43                 \r
44                 \r
45             }\r
46         }\r
47         return false;\r
48     }\r
49 \r
50     /**\r
51      * Generates JAVA source code for generated type <code>Type</code>. The code\r
52      * is generated according to the template source code template which is\r
53      * written in XTEND language.\r
54      */\r
55     @Override\r
56     public String generate(Type type) {\r
57         if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) {\r
58             final GeneratedType genType = (GeneratedType) type;\r
59             final BuilderTemplate template = new BuilderTemplate(genType);\r
60             return template.generate();\r
61         }\r
62         return "";\r
63     }\r
64 \r
65     @Override\r
66     public String getUnitName(Type type) {\r
67         return type.getName() + BUILDER;\r
68     }\r
69 \r
70 }\r