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();
33 boolean isIdentity = type instanceof GeneratedTransferIdentityObject;
35 if (type instanceof GeneratedTransferObject) {
36 GeneratedTransferObject genTO = (GeneratedTransferObject) type;
37 imports = GeneratorUtil.createImports(genTO);
39 final String currentPkg = genTO.getPackageName();
40 final List<GeneratedProperty> fields = genTO.getProperties();
41 final List<Enumeration> enums = genTO.getEnumDefintions();
43 writer.write(GeneratorUtil.createPackageDeclaration(currentPkg));
46 List<String> importLines = GeneratorUtil.createImportLines(imports);
47 for (String line : importLines) {
48 writer.write(line + NL);
52 writer.write(GeneratorUtil.createClassDeclaration(genTO, "",
53 imports, isIdentity));
58 EnumGenerator enumGenerator = new EnumGenerator();
59 for ( Enumeration e : enums ) {
60 writer.write(enumGenerator.generateInnerEnumeration(e, TAB).toString());
66 for (GeneratedProperty field : fields) {
67 writer.write(GeneratorUtil.createField(field, TAB, imports,
71 writer.write(GeneratorUtil.createConstructor(genTO, TAB,
72 imports, isIdentity) + NL);
74 for (GeneratedProperty field : fields) {
75 writer.write(GeneratorUtil.createGetter(field, TAB,
76 imports, currentPkg) + NL);
77 if (!field.isReadOnly()) {
78 writer.write(GeneratorUtil.createSetter(field, TAB,
79 imports, currentPkg) + NL);
84 if (!genTO.getHashCodeIdentifiers().isEmpty()) {
85 writer.write(GeneratorUtil.createHashCode(
86 genTO.getHashCodeIdentifiers(), TAB)
90 if (!genTO.getEqualsIdentifiers().isEmpty()) {
91 writer.write(GeneratorUtil.createEquals(genTO,
92 genTO.getEqualsIdentifiers(), TAB)
96 if (!genTO.getToStringIdentifiers().isEmpty()) {
97 writer.write(GeneratorUtil.createToString(genTO,
98 genTO.getToStringIdentifiers(), TAB)