2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.controller.sal.java.api.generator;
\r
10 import static org.opendaylight.controller.sal.java.api.generator.Constants.*;
\r
12 import java.util.List;
\r
14 import org.opendaylight.controller.sal.binding.model.api.Constant;
\r
15 import org.opendaylight.controller.sal.binding.model.api.Enumeration;
\r
16 import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
\r
17 import org.opendaylight.controller.sal.binding.model.api.ParameterizedType;
\r
18 import org.opendaylight.controller.sal.binding.model.api.Type;
\r
19 import org.opendaylight.controller.sal.binding.model.api.Enumeration.Pair;
\r
20 import org.opendaylight.controller.sal.binding.model.api.MethodSignature.Parameter;
\r
22 public class GeneratorUtil {
\r
24 private GeneratorUtil() {
\r
27 public static String createIfcDeclarationWithPkgName(String packageName,
\r
28 String name, String indent) {
\r
29 return createFileDeclarationWithPkgName(IFC, packageName, name, indent);
\r
32 public static String createClassDeclarationWithPkgName(String packageName,
\r
33 String name, String indent) {
\r
34 return createFileDeclarationWithPkgName(CLASS, packageName, name,
\r
38 private static String createFileDeclarationWithPkgName(String type,
\r
39 String packageName, String name, String indent) {
\r
40 StringBuilder sb = new StringBuilder();
\r
41 sb.append(PKG + GAP + packageName + SC);
\r
44 sb.append(PUBLIC + GAP + type + GAP + name + GAP + LCB);
\r
45 return sb.toString();
\r
48 public static String createConstant(Constant constant, String indent) {
\r
49 StringBuilder sb = new StringBuilder();
\r
50 sb.append(indent + PUBLIC + GAP + STATIC + GAP + FINAL + GAP);
\r
51 sb.append(getExplicitType(constant.getType()) + GAP
\r
52 + constant.getName());
\r
53 sb.append(GAP + "=" + GAP);
\r
54 sb.append(constant.getValue() + SC);
\r
55 return sb.toString();
\r
58 public static String createField(Constant field, String indent) {
\r
59 StringBuilder sb = new StringBuilder();
\r
60 sb.append(indent + PRIVATE + GAP);
\r
61 sb.append(getExplicitType(field.getType()) + GAP + field.getName());
\r
62 sb.append(GAP + "=" + GAP);
\r
63 sb.append(field.getValue() + SC);
\r
64 return sb.toString();
\r
68 * Create method declaration in interface.
\r
74 public static String createMethodDeclaration(MethodSignature method,
\r
76 String comment = method.getComment();
\r
77 Type type = method.getReturnType();
\r
78 String name = method.getName();
\r
79 List<Parameter> parameters = method.getParameters();
\r
81 StringBuilder sb = new StringBuilder();
\r
82 createComment(sb, comment, indent);
\r
84 sb.append(indent + getExplicitType(type) + GAP + name);
\r
86 for (int i = 0; i < parameters.size(); i++) {
\r
87 Parameter p = parameters.get(i);
\r
88 String separator = COMMA;
\r
89 if (i + 1 == parameters.size()) {
\r
92 sb.append(getExplicitType(p.getType()) + GAP + p.getName()
\r
98 return sb.toString();
\r
101 public static String createGetter(Constant field, String indent) {
\r
102 StringBuilder sb = new StringBuilder();
\r
104 Type type = field.getType();
\r
105 String varName = field.getName();
\r
106 char first = Character.toUpperCase(varName.charAt(0));
\r
107 String methodName = "get" + first + varName.substring(1);
\r
109 sb.append(indent + PUBLIC + GAP + getExplicitType(type) + GAP
\r
111 sb.append(LB + RB + LCB + NL);
\r
113 String currentIndent = indent + TAB;
\r
115 sb.append(currentIndent + "return " + varName + SC + NL);
\r
117 sb.append(indent + RCB);
\r
118 return sb.toString();
\r
121 public static String createHashCode(List<Constant> fields, String indent) {
\r
122 StringBuilder sb = new StringBuilder();
\r
123 sb.append(indent + "public int hashCode() {" + NL);
\r
124 sb.append(indent + TAB + "final int prime = 31;" + NL);
\r
125 sb.append(indent + TAB + "int result = 1;" + NL);
\r
127 for (Constant field : fields) {
\r
128 String fieldName = field.getName();
\r
129 sb.append(indent + TAB + "result = prime * result + ((" + fieldName
\r
130 + " == null) ? 0 : " + fieldName + ".hashCode());" + NL);
\r
133 sb.append(indent + TAB + "return result;" + NL);
\r
134 sb.append(indent + RCB + NL);
\r
135 return sb.toString();
\r
138 public static String createEquals(Type type, List<Constant> fields,
\r
140 StringBuilder sb = new StringBuilder();
\r
141 final String indent1 = indent + TAB;
\r
142 final String indent2 = indent + TAB + TAB;
\r
143 final String indent3 = indent + TAB + TAB + TAB;
\r
145 sb.append(indent + "public boolean equals(Object obj) {" + NL);
\r
146 sb.append(indent1 + "if (this == obj) {" + NL);
\r
147 sb.append(indent2 + "return true;" + NL);
\r
148 sb.append(indent1 + "}" + NL);
\r
149 sb.append(indent1 + "if (obj == null) {" + NL);
\r
150 sb.append(indent2 + "return false;" + NL);
\r
151 sb.append(indent1 + "}" + NL);
\r
152 sb.append(indent1 + "if (getClass() != obj.getClass()) {" + NL);
\r
153 sb.append(indent2 + "return false;" + NL);
\r
154 sb.append(indent1 + "}" + NL);
\r
156 String typeStr = type.getPackageName() + "." + type.getName();
\r
157 sb.append(indent1 + typeStr + " other = (" + typeStr + ") obj;" + NL);
\r
159 for (Constant field : fields) {
\r
160 String fieldName = field.getName();
\r
161 sb.append(indent1 + "if (" + fieldName + " == null) {" + NL);
\r
162 sb.append(indent2 + "if (other." + fieldName + " != null) {" + NL);
\r
163 sb.append(indent3 + "return false;" + NL);
\r
164 sb.append(indent2 + "}" + NL);
\r
165 sb.append(indent1 + "} else if (!" + fieldName + ".equals(other."
\r
166 + fieldName + ")) {" + NL);
\r
167 sb.append(indent2 + "return false;" + NL);
\r
168 sb.append(indent1 + "}" + NL);
\r
171 sb.append(indent1 + "return true;" + NL);
\r
173 sb.append(indent + RCB + NL);
\r
174 return sb.toString();
\r
177 public static String createToString(Type type, List<Constant> fields,
\r
179 StringBuilder sb = new StringBuilder();
\r
180 String typeStr = type.getPackageName() + "." + type.getName();
\r
182 sb.append(indent + "public String toString() {" + NL);
\r
183 sb.append(indent + TAB + "return \"" + typeStr + "[");
\r
185 boolean first = true;
\r
186 for (Constant field : fields) {
\r
187 String fieldName = field.getName();
\r
188 String fieldType = field.getType().getPackageName() + "."
\r
189 + field.getType().getName();
\r
191 if (fieldType.equals("java.lang.String")) {
\r
192 sb.append(fieldName + "=\\\""
\r
193 + parseStringValue((String) field.getValue())
\r
196 sb.append(fieldName + "=" + field.getValue() + "");
\r
199 if (fieldType.equals("java.lang.String")) {
\r
200 sb.append(", " + fieldName + "=\\\""
\r
201 + parseStringValue((String) field.getValue())
\r
204 sb.append(", " + fieldName + "=" + field.getValue() + "");
\r
210 sb.append("]\"" + SC + NL);
\r
212 sb.append(indent + RCB + NL);
\r
213 return sb.toString();
\r
217 * Remove starting and ending quote sign
\r
222 private static String parseStringValue(String str) {
\r
223 return str.substring(1, str.length() - 1);
\r
226 public static String createEnum(Enumeration e, String indent) {
\r
227 StringBuilder sb = new StringBuilder(indent + ENUM + GAP + e.getName()
\r
230 String separator = COMMA;
\r
231 List<Pair> values = e.getValues();
\r
232 sb.append(indent + TAB);
\r
233 for (int i = 0; i < values.size(); i++) {
\r
234 if (i + 1 == values.size()) {
\r
237 sb.append(values.get(i).getName() + separator);
\r
240 sb.append(indent + RCB);
\r
241 return sb.toString();
\r
244 private static String getExplicitType(Type type) {
\r
245 String packageName = type.getPackageName();
\r
246 if (packageName.endsWith(".")) {
\r
247 packageName = packageName.substring(0, packageName.length() - 1);
\r
249 StringBuilder sb = new StringBuilder(packageName + "." + type.getName());
\r
250 if (type instanceof ParameterizedType) {
\r
251 ParameterizedType pType = (ParameterizedType) type;
\r
252 Type[] pTypes = pType.getActualTypeArguments();
\r
254 sb.append(getParameters(pTypes));
\r
257 if (sb.toString().equals("java.lang.Void")) {
\r
260 return sb.toString();
\r
263 private static String getParameters(Type[] pTypes) {
\r
264 StringBuilder sb = new StringBuilder();
\r
265 for (int i = 0; i < pTypes.length; i++) {
\r
266 Type t = pTypes[i];
\r
268 String separator = COMMA;
\r
269 if (i + 1 == pTypes.length) {
\r
272 sb.append(getExplicitType(t) + separator);
\r
274 return sb.toString();
\r
277 private static void createComment(StringBuilder sb, String comment,
\r
279 if (comment != null && comment.length() > 0) {
\r
280 sb.append(indent + "/*" + NL);
\r
281 sb.append(indent + comment + NL);
\r
282 sb.append(indent + "*/" + NL);
\r