Maping of union leaf a bits leaf YANG type to JAVA inner classes.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / controller / sal / java / api / generator / ClassCodeGenerator.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.sal.java.api.generator;
9
10 import static org.opendaylight.controller.sal.java.api.generator.Constants.*;
11
12 import java.io.IOException;
13 import java.io.StringWriter;
14 import java.io.Writer;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.opendaylight.controller.sal.binding.model.api.*;
19
20 public final class ClassCodeGenerator implements CodeGenerator {
21
22     private Map<String, String> imports;
23
24     private void generatePackage(Writer writer, String packageName) throws IOException {
25         writer.write(GeneratorUtil.createPackageDeclaration(packageName));
26         writer.write(NL);
27     }
28
29     private void generateImports(Writer writer) throws IOException {
30         List<String> importLines = GeneratorUtil.createImportLines(imports, null);
31         for (String line : importLines) {
32             writer.write(line + NL);
33         }
34         writer.write(NL);
35     }
36
37     private void generateClassBody(Writer writer, GeneratedTransferObject genTO, String packageName, String indent,
38             boolean isInnerClass) throws IOException {
39         final List<GeneratedProperty> fields = genTO.getProperties();
40         final List<Enumeration> enums = genTO.getEnumerations();
41         final List<Constant> consts = genTO.getConstantDefinitions();
42
43         writer.write(GeneratorUtil.createClassDeclaration(genTO, indent, imports, genTO.isAbstract(), isInnerClass));
44         writer.write(NL);
45         writer.write(NL);
46
47         if (consts != null) {
48             for (Constant con : consts) {
49                 writer.write(GeneratorUtil.createConstant(con, indent + TAB, imports, packageName));
50                 writer.write(NL);
51             }
52         }
53
54         if (enums != null) {
55             EnumGenerator enumGenerator = new EnumGenerator();
56             for (Enumeration e : enums) {
57                 writer.write(enumGenerator.generateInnerEnumeration(e, indent + TAB).toString());
58                 writer.write(NL);
59             }
60         }
61
62         writer.write(GeneratorUtil.createStaticInicializationBlock(genTO, indent + TAB));
63
64         if (fields != null) {
65             for (GeneratedProperty field : fields) {
66                 writer.write(GeneratorUtil.createField(field, indent + TAB, imports, packageName) + NL);
67             }
68
69             writer.write(NL);
70             if (genTO.isUnionType()) {
71                 writer.write(GeneratorUtil.createConstructors(genTO, indent + TAB, imports, genTO.isAbstract()));
72             } else {
73                 writer.write(GeneratorUtil.createConstructor(genTO, indent + TAB, imports, genTO.isAbstract()) + NL);
74             }
75             writer.write(NL);
76
77             for (GeneratedProperty field : fields) {
78                 writer.write(GeneratorUtil.createGetter(field, indent + TAB, imports, packageName) + NL);
79                 if (!field.isReadOnly()) {
80                     writer.write(GeneratorUtil.createSetter(field, indent + TAB, imports, packageName) + NL);
81                 }
82             }
83
84             if (!genTO.getHashCodeIdentifiers().isEmpty()) {
85                 writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), indent + TAB) + NL);
86             }
87
88             if (!genTO.getEqualsIdentifiers().isEmpty()) {
89                 writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), indent + TAB) + NL);
90             }
91
92             if (!genTO.getToStringIdentifiers().isEmpty()) {
93                 writer.write(GeneratorUtil.createToString(genTO, genTO.getToStringIdentifiers(), indent + TAB) + NL);
94             }
95
96             writer.write(indent + RCB);
97         }
98     }
99
100     @Override
101     public Writer generate(Type type) throws IOException {
102         final Writer writer = new StringWriter();
103
104         if (type instanceof GeneratedTransferObject) {
105             GeneratedTransferObject genTO = (GeneratedTransferObject) type;
106             imports = GeneratorUtil.createImports(genTO);
107
108             final String currentPkg = genTO.getPackageName();
109
110             generatePackage(writer, currentPkg);
111
112             generateImports(writer);
113
114             generateClassBody(writer, genTO, currentPkg, NO_INDENT, false);
115
116         }
117         return writer;
118     }
119
120     public Writer generateOnlyClass(Type type, Map<String, String> imports) throws IOException {
121         this.imports = imports;
122         Writer writer = new StringWriter();
123
124         if (type instanceof GeneratedTransferObject) {
125             GeneratedTransferObject genTO = (GeneratedTransferObject) type;
126
127             final String currentPkg = "";
128
129             generateClassBody(writer, genTO, currentPkg, TAB, true);
130
131         }
132
133         return writer;
134     }
135 }