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 InterfaceGenerator implements CodeGenerator {
22 private Map<String, String> imports;
23 private Map<String, String> innerTypeImports;
25 private String generateEnums(List<Enumeration> enums) {
28 EnumGenerator enumGenerator = new EnumGenerator();
29 for (Enumeration en : enums) {
31 result = result + (enumGenerator.generateInnerEnumeration(en, TAB).toString() + NL);
32 } catch (IOException e) {
40 private String generateConstants(List<Constant> constants, String pkgName) {
42 if (constants != null) {
43 for (Constant c : constants) {
44 result = result + GeneratorUtil.createConstant(c, TAB, imports, pkgName) + NL;
51 public String generateMethods(List<MethodSignature> methods, String pkgName) {
54 if (methods != null) {
55 for (MethodSignature m : methods) {
56 result = result + GeneratorUtil.createMethodDeclaration(m, TAB, imports, pkgName) + NL;
63 public String generateInnerClasses(final List<GeneratedType> generatedTypes) throws IOException {
66 if (generatedTypes != null) {
67 ClassCodeGenerator classCodeGenerator = new ClassCodeGenerator();
68 for (GeneratedType genType : generatedTypes) {
69 if (genType instanceof GeneratedTransferObject) {
70 result = result + classCodeGenerator.generateOnlyClass(genType, imports).toString();
71 result = result + NL + NL;
79 public Writer generate(Type type) throws IOException {
80 Writer writer = new StringWriter();
81 if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) {
82 final GeneratedType genType = (GeneratedType) type;
83 imports = GeneratorUtil.createImports(genType);
84 innerTypeImports = GeneratorUtil.createChildImports(genType);
86 final String currentPkg = genType.getPackageName();
87 final List<Constant> constants = genType.getConstantDefinitions();
88 final List<MethodSignature> methods = genType.getMethodDefinitions();
89 final List<Enumeration> enums = genType.getEnumerations();
90 final List<GeneratedType> enclosedGeneratedTypes = genType.getEnclosedTypes();
92 writer.write(GeneratorUtil.createPackageDeclaration(genType.getPackageName()));
95 List<String> importLines = GeneratorUtil.createImportLines(imports, innerTypeImports);
97 for (String line : importLines) {
98 writer.write(line + NL);
101 writer.write(GeneratorUtil.createIfcDeclaration(genType, "", imports));
104 writer.write(generateInnerClasses(enclosedGeneratedTypes));
105 writer.write(generateEnums(enums));
106 writer.write(generateConstants(constants, currentPkg));
107 writer.write(generateMethods(methods, currentPkg));