942174fdcede1485b1c931133400d945f70787c6
[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.LinkedHashMap;
16 import java.util.List;
17 import java.util.Map;
18
19 import org.opendaylight.controller.sal.binding.model.api.CodeGenerator;
20 import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
21 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
22 import org.opendaylight.controller.sal.binding.model.api.Type;
23
24 public class ClassCodeGenerator implements CodeGenerator {
25
26     private Map<String, LinkedHashMap<String, Integer>> imports;
27
28     @Override
29     public Writer generate(Type type) throws IOException {
30         final Writer writer = new StringWriter();
31         if (type instanceof GeneratedTransferObject) {
32             GeneratedTransferObject genTO = (GeneratedTransferObject) type;
33             imports = GeneratorUtil.createImports(genTO);
34
35             final String currentPkg = genTO.getPackageName();
36             final List<GeneratedProperty> fields = genTO.getProperties();
37
38             writer.write(GeneratorUtil.createPackageDeclaration(currentPkg));
39             writer.write(NL);
40
41             List<String> importLines = GeneratorUtil.createImportLines(imports);
42             for (String line : importLines) {
43                 writer.write(line + NL);
44             }
45             writer.write(NL);
46
47             writer.write(GeneratorUtil.createClassDeclaration(genTO, "",
48                     imports));
49             writer.write(NL);
50             writer.write(NL);
51
52             if (fields != null) {
53                 for (GeneratedProperty field : fields) {
54                     writer.write(GeneratorUtil.createField(field, TAB, imports,
55                             currentPkg) + NL);
56                 }
57                 writer.write(NL);
58                 writer.write(GeneratorUtil.createConstructor(genTO, TAB,
59                         imports) + NL);
60                 writer.write(NL);
61                 for (GeneratedProperty field : fields) {
62                     writer.write(GeneratorUtil.createGetter(field, TAB,
63                             imports, currentPkg) + NL);
64                     if (!field.isReadOnly()) {
65                         writer.write(GeneratorUtil.createSetter(field, TAB,
66                                 imports, currentPkg) + NL);
67                     }
68                 }
69                 writer.write(NL);
70
71                 if (!genTO.getHashCodeIdentifiers().isEmpty()) {
72                     writer.write(GeneratorUtil.createHashCode(
73                             genTO.getHashCodeIdentifiers(), TAB)
74                             + NL);
75                 }
76
77                 if (!genTO.getEqualsIdentifiers().isEmpty()) {
78                     writer.write(GeneratorUtil.createEquals(genTO,
79                             genTO.getEqualsIdentifiers(), TAB)
80                             + NL);
81                 }
82
83                 if (!genTO.getToStringIdentifiers().isEmpty()) {
84                     writer.write(GeneratorUtil.createToString(genTO,
85                             genTO.getToStringIdentifiers(), TAB)
86                             + NL);
87
88                 }
89
90                 writer.write(RCB);
91             }
92         }
93         return writer;
94     }
95
96 }