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 if (genTO.isUnionType()) {
71 writer.write(GeneratorUtil.createConstructors(genTO, indent + TAB, imports, genTO.isAbstract()));
73 writer.write(GeneratorUtil.createConstructor(genTO, indent + TAB, imports, genTO.isAbstract()) + NL);
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);
84 if (!genTO.getHashCodeIdentifiers().isEmpty()) {
85 writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), indent + TAB) + NL);
88 if (!genTO.getEqualsIdentifiers().isEmpty()) {
89 writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), indent + TAB) + NL);
92 if (!genTO.getToStringIdentifiers().isEmpty()) {
93 writer.write(GeneratorUtil.createToString(genTO, genTO.getToStringIdentifiers(), indent + TAB) + NL);
96 writer.write(indent + RCB);
101 public Writer generate(Type type) throws IOException {
102 final Writer writer = new StringWriter();
104 if (type instanceof GeneratedTransferObject) {
105 GeneratedTransferObject genTO = (GeneratedTransferObject) type;
106 imports = GeneratorUtil.createImports(genTO);
108 final String currentPkg = genTO.getPackageName();
110 generatePackage(writer, currentPkg);
112 generateImports(writer);
114 generateClassBody(writer, genTO, currentPkg, NO_INDENT, false);
120 public Writer generateOnlyClass(Type type, Map<String, String> imports) throws IOException {
121 this.imports = imports;
122 Writer writer = new StringWriter();
124 if (type instanceof GeneratedTransferObject) {
125 GeneratedTransferObject genTO = (GeneratedTransferObject) type;
127 final String currentPkg = "";
129 generateClassBody(writer, genTO, currentPkg, TAB, true);