27570ca77d7ede88b8c72cb110dfdcbfced1a634
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / controller / sal / java / api / generator / InterfaceGenerator.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.sal.java.api.generator;
9
10 import static org.opendaylight.controller.sal.java.api.generator.Constants.*;
11
12 import java.io.IOException;
13 import java.io.StringWriter;
14 import java.io.Writer;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.opendaylight.controller.sal.binding.model.api.*;
19
20 public final class InterfaceGenerator implements CodeGenerator {
21
22     private Map<String, String> imports;
23     private Map<String, String> innerTypeImports;
24
25     private String generateEnums(List<Enumeration> enums) {
26         String result = "";
27         if (enums != null) {
28             EnumGenerator enumGenerator = new EnumGenerator();
29             for (Enumeration en : enums) {
30                 try {
31                     result = result + (enumGenerator.generateInnerEnumeration(en, TAB).toString() + NL);
32                 } catch (IOException e) {
33                     e.printStackTrace();
34                 }
35             }
36         }
37         return result;
38     }
39
40     private String generateConstants(List<Constant> constants, String pkgName) {
41         String result = "";
42         if (constants != null) {
43             for (Constant c : constants) {
44                 result = result + GeneratorUtil.createConstant(c, TAB, imports, pkgName) + NL;
45             }
46             result.concat(NL);
47         }
48         return result;
49     }
50
51     public String generateMethods(List<MethodSignature> methods, String pkgName) {
52         String result = "";
53
54         if (methods != null) {
55             for (MethodSignature m : methods) {
56                 result = result + GeneratorUtil.createMethodDeclaration(m, TAB, imports, pkgName) + NL;
57             }
58             result = result + NL;
59         }
60         return result;
61     }
62
63     public String generateInnerClasses(final List<GeneratedType> generatedTypes) throws IOException {
64         String result = "";
65
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;
72                 }
73             }
74         }
75
76         return result;
77     }
78
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);
85
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();
91
92             writer.write(GeneratorUtil.createPackageDeclaration(genType.getPackageName()));
93             writer.write(NL);
94
95             List<String> importLines = GeneratorUtil.createImportLines(imports, innerTypeImports);
96
97             for (String line : importLines) {
98                 writer.write(line + NL);
99             }
100             writer.write(NL);
101             writer.write(GeneratorUtil.createIfcDeclaration(genType, "", imports));
102             writer.write(NL);
103
104             writer.write(generateInnerClasses(enclosedGeneratedTypes));
105             writer.write(generateEnums(enums));
106             writer.write(generateConstants(constants, currentPkg));
107             writer.write(generateMethods(methods, currentPkg));
108
109             writer.write(RCB);
110         }
111         return writer;
112     }
113 }