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.LinkedHashMap;
16 import java.util.List;
19 import org.opendaylight.controller.sal.binding.model.api.CodeGenerator;
20 import org.opendaylight.controller.sal.binding.model.api.Enumeration;
21 import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
22 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferIdentityObject;
23 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
24 import org.opendaylight.controller.sal.binding.model.api.Type;
26 public final class ClassCodeGenerator implements CodeGenerator {
28 private Map<String, LinkedHashMap<String, Integer>> imports;
31 public Writer generate(Type type) throws IOException {
32 final Writer writer = new StringWriter();
34 if (type instanceof GeneratedTransferObject) {
35 GeneratedTransferObject genTO = (GeneratedTransferObject) type;
36 imports = GeneratorUtil.createImports(genTO);
38 final String currentPkg = genTO.getPackageName();
39 final List<GeneratedProperty> fields = genTO.getProperties();
40 final List<Enumeration> enums = genTO.getEnumerations();
42 writer.write(GeneratorUtil.createPackageDeclaration(currentPkg));
45 List<String> importLines = GeneratorUtil.createImportLines(imports);
46 for (String line : importLines) {
47 writer.write(line + NL);
51 writer.write(GeneratorUtil.createClassDeclaration(genTO, "",
52 imports, genTO.isAbstract()));
57 EnumGenerator enumGenerator = new EnumGenerator();
58 for ( Enumeration e : enums ) {
59 writer.write(enumGenerator.generateInnerEnumeration(e, TAB).toString());
65 for (GeneratedProperty field : fields) {
66 writer.write(GeneratorUtil.createField(field, TAB, imports,
70 writer.write(GeneratorUtil.createConstructor(genTO, TAB,
71 imports, genTO.isAbstract()) + NL);
73 for (GeneratedProperty field : fields) {
74 writer.write(GeneratorUtil.createGetter(field, TAB,
75 imports, currentPkg) + NL);
76 if (!field.isReadOnly()) {
77 writer.write(GeneratorUtil.createSetter(field, TAB,
78 imports, currentPkg) + NL);
83 if (!genTO.getHashCodeIdentifiers().isEmpty()) {
84 writer.write(GeneratorUtil.createHashCode(
85 genTO.getHashCodeIdentifiers(), TAB)
89 if (!genTO.getEqualsIdentifiers().isEmpty()) {
90 writer.write(GeneratorUtil.createEquals(genTO,
91 genTO.getEqualsIdentifiers(), TAB)
95 if (!genTO.getToStringIdentifiers().isEmpty()) {
96 writer.write(GeneratorUtil.createToString(genTO,
97 genTO.getToStringIdentifiers(), TAB)