Merge "Fix to allow Switch configuration modification(Description and Tier) in non...
[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             final boolean oneConstructor;
71             if (genTO.isUnionType()) {
72                 oneConstructor = false;
73             } else {
74                 oneConstructor = true;
75             }
76             writer.write(GeneratorUtil.createConstructor(genTO, indent + TAB, imports, genTO.isAbstract(),
77                     oneConstructor));
78             writer.write(NL);
79
80             for (GeneratedProperty field : fields) {
81                 writer.write(GeneratorUtil.createGetter(field, indent + TAB, imports, packageName) + NL);
82                 if (!field.isReadOnly()) {
83                     writer.write(GeneratorUtil.createSetter(field, indent + TAB, imports, packageName) + NL);
84                 }
85             }
86
87             if (!genTO.getHashCodeIdentifiers().isEmpty()) {
88                 writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), indent + TAB) + NL);
89             }
90
91             if (!genTO.getEqualsIdentifiers().isEmpty()) {
92                 writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), indent + TAB) + NL);
93             }
94
95             if (!genTO.getToStringIdentifiers().isEmpty()) {
96                 writer.write(GeneratorUtil.createToString(genTO, genTO.getToStringIdentifiers(), indent + TAB) + NL);
97             }
98
99             writer.write(indent + RCB);
100         }
101     }
102
103     @Override
104     public Writer generate(Type type) throws IOException {
105         final Writer writer = new StringWriter();
106
107         if (type instanceof GeneratedTransferObject) {
108             GeneratedTransferObject genTO = (GeneratedTransferObject) type;
109             imports = GeneratorUtil.createImports(genTO);
110
111             final String currentPkg = genTO.getPackageName();
112
113             generatePackage(writer, currentPkg);
114
115             generateImports(writer);
116
117             generateClassBody(writer, genTO, currentPkg, NO_INDENT, false);
118
119         }
120         return writer;
121     }
122
123     public Writer generateOnlyClass(Type type, Map<String, String> imports) throws IOException {
124         this.imports = imports;
125         Writer writer = new StringWriter();
126
127         if (type instanceof GeneratedTransferObject) {
128             GeneratedTransferObject genTO = (GeneratedTransferObject) type;
129
130             final String currentPkg = "";
131
132             generateClassBody(writer, genTO, currentPkg, TAB, true);
133
134         }
135
136         return writer;
137     }
138 }