2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.sal.java.api.generator;
10 import static org.opendaylight.controller.sal.java.api.generator.Constants.*;
12 import java.io.IOException;
13 import java.io.StringWriter;
14 import java.io.Writer;
15 import java.util.List;
18 import org.opendaylight.controller.sal.binding.model.api.*;
20 public final class ClassCodeGenerator implements CodeGenerator {
22 private Map<String, String> imports;
24 private void generatePackage(Writer writer, String packageName) throws IOException {
25 writer.write(GeneratorUtil.createPackageDeclaration(packageName));
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);
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();
43 writer.write(GeneratorUtil.createClassDeclaration(genTO, indent, imports, genTO.isAbstract(), isInnerClass));
48 for (Constant con : consts) {
49 writer.write(GeneratorUtil.createConstant(con, indent + TAB, imports, packageName));
55 EnumGenerator enumGenerator = new EnumGenerator();
56 for (Enumeration e : enums) {
57 writer.write(enumGenerator.generateInnerEnumeration(e, indent + TAB).toString());
62 writer.write(GeneratorUtil.createStaticInicializationBlock(genTO, indent + TAB));
65 for (GeneratedProperty field : fields) {
66 writer.write(GeneratorUtil.createField(field, indent + TAB, imports, packageName) + NL);
70 final boolean oneConstructor;
71 if (genTO.isUnionType()) {
72 oneConstructor = false;
74 oneConstructor = true;
76 writer.write(GeneratorUtil.createConstructor(genTO, indent + TAB, imports, genTO.isAbstract(),
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);
87 if (!genTO.getHashCodeIdentifiers().isEmpty()) {
88 writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), indent + TAB) + NL);
91 if (!genTO.getEqualsIdentifiers().isEmpty()) {
92 writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), indent + TAB) + NL);
95 if (!genTO.getToStringIdentifiers().isEmpty()) {
96 writer.write(GeneratorUtil.createToString(genTO, genTO.getToStringIdentifiers(), indent + TAB) + NL);
99 writer.write(indent + RCB);
104 public Writer generate(Type type) throws IOException {
105 final Writer writer = new StringWriter();
107 if (type instanceof GeneratedTransferObject) {
108 GeneratedTransferObject genTO = (GeneratedTransferObject) type;
109 imports = GeneratorUtil.createImports(genTO);
111 final String currentPkg = genTO.getPackageName();
113 generatePackage(writer, currentPkg);
115 generateImports(writer);
117 generateClassBody(writer, genTO, currentPkg, NO_INDENT, false);
123 public Writer generateOnlyClass(Type type, Map<String, String> imports) throws IOException {
124 this.imports = imports;
125 Writer writer = new StringWriter();
127 if (type instanceof GeneratedTransferObject) {
128 GeneratedTransferObject genTO = (GeneratedTransferObject) type;
130 final String currentPkg = "";
132 generateClassBody(writer, genTO, currentPkg, TAB, true);