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