blob: b901b62e2e47b0dcfb7fe1bea915c06d10187c68 [file] [log] [blame]
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
20import org.onosproject.yangutils.datamodel.YangType;
21import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
22import org.onosproject.yangutils.translator.exception.TranslatorException;
23
janani bc27947a2016-10-19 01:17:40 +053024import java.util.Arrays;
25import java.util.HashSet;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053026import java.util.Map;
janani bc27947a2016-10-19 01:17:40 +053027import java.util.Set;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053028
janani bc27947a2016-10-19 01:17:40 +053029import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN;
30import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
31import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
32import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
33import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
34import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT64;
35import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT8;
36import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
37import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
38import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
39import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053040import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
41import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
42import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE;
43import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
44import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIfConditionForAddToListMethod;
45import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
46import static org.onosproject.yangutils.utils.UtilConstants.AND;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053047import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
Bharat saraswal0663aff2016-10-18 23:16:14 +053048import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053049import static org.onosproject.yangutils.utils.UtilConstants.AT;
50import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
51import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053052import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053053import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
54import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
55import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
56import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
57import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
58import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
59import static org.onosproject.yangutils.utils.UtilConstants.CATCH;
60import static org.onosproject.yangutils.utils.UtilConstants.CHECK_NOT_NULL_STRING;
61import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
62import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
63import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
64import static org.onosproject.yangutils.utils.UtilConstants.COLON;
65import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
66import static org.onosproject.yangutils.utils.UtilConstants.COMPARE_TO;
67import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
68import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
69import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
70import static org.onosproject.yangutils.utils.UtilConstants.DOUBLE;
71import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
72import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
73import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
74import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
Bharat saraswal0663aff2016-10-18 23:16:14 +053075import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053076import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION;
77import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
78import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
79import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
80import static org.onosproject.yangutils.utils.UtilConstants.FOR;
81import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
82import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
83import static org.onosproject.yangutils.utils.UtilConstants.GET;
Bharat saraswal94844d62016-10-13 13:28:03 +053084import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053085import static org.onosproject.yangutils.utils.UtilConstants.IF;
86import static org.onosproject.yangutils.utils.UtilConstants.IMPLEMENTS;
87import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
88import static org.onosproject.yangutils.utils.UtilConstants.IN;
89import static org.onosproject.yangutils.utils.UtilConstants.INT;
90import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
91import static org.onosproject.yangutils.utils.UtilConstants.INT_MAX_RANGE;
92import static org.onosproject.yangutils.utils.UtilConstants.INT_MIN_RANGE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053093import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053094import static org.onosproject.yangutils.utils.UtilConstants.LIST;
95import static org.onosproject.yangutils.utils.UtilConstants.LONG;
96import static org.onosproject.yangutils.utils.UtilConstants.LONG_MAX_RANGE;
97import static org.onosproject.yangutils.utils.UtilConstants.LONG_MIN_RANGE;
98import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053099import static org.onosproject.yangutils.utils.UtilConstants.MORE_OBJ_ATTR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530100import static org.onosproject.yangutils.utils.UtilConstants.NEW;
101import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
102import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
103import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
104import static org.onosproject.yangutils.utils.UtilConstants.OF;
105import static org.onosproject.yangutils.utils.UtilConstants.OMIT_NULL_VALUE_STRING;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530106import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530107import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
108import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
109import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
110import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BOOLEAN;
111import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BYTE;
112import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
113import static org.onosproject.yangutils.utils.UtilConstants.PARSE_LONG;
114import static org.onosproject.yangutils.utils.UtilConstants.PARSE_SHORT;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530115import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530116import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
117import static org.onosproject.yangutils.utils.UtilConstants.PUT;
118import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
119import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530120import static org.onosproject.yangutils.utils.UtilConstants.QUOTE_STRING;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530121import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
122import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
123import static org.onosproject.yangutils.utils.UtilConstants.SET;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530124import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530125import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
126import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE;
127import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE;
128import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
129import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
130import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530131import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER;
132import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530133import static org.onosproject.yangutils.utils.UtilConstants.THIS;
134import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
Bharat saraswal94844d62016-10-13 13:28:03 +0530135import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530136import static org.onosproject.yangutils.utils.UtilConstants.TRY;
137import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
138import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
139import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MAX_RANGE;
140import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MIN_RANGE;
141import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE;
142import static org.onosproject.yangutils.utils.UtilConstants.UINT_MIN_RANGE;
143import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MAX_RANGE;
144import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MIN_RANGE;
145import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
146import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
Bharat saraswal94844d62016-10-13 13:28:03 +0530147import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530148import static org.onosproject.yangutils.utils.UtilConstants.YANG_UTILS_TODO;
149import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
150import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
151
152/**
153 * Represents string generator for translator.
154 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530155public final class StringGenerator {
156
janani bc27947a2016-10-19 01:17:40 +0530157 private static final Set<YangDataTypes> PRIMITIVE_TYPES =
158 new HashSet<>(Arrays.asList(INT8, INT16, INT32, INT64, UINT8,
159 UINT16, UINT32, UINT64, DECIMAL64,
160 BOOLEAN, EMPTY));
161
162 // No instantiation.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530163 private StringGenerator() {
164 }
165
166 /**
167 * Returns compare to string.
168 *
169 * @return compare to string
170 */
171 static String getCompareToString() {
172 return PERIOD + COMPARE_TO;
173 }
174
175 /**
176 * Returns lesser than and equals condition.
177 *
178 * @return lesser than and equals condition
179 */
180 static String getLesserThanCondition() {
181 return SPACE + DIAMOND_OPEN_BRACKET + EQUAL + SPACE;
182 }
183
184 /**
185 * Returns greater than and equals condition.
186 *
187 * @return greater than and equals condition
188 */
189 static String getGreaterThanCondition() {
190 return SPACE + DIAMOND_CLOSE_BRACKET + EQUAL + SPACE;
191 }
192
193 /**
194 * Returns && conditional string.
195 *
196 * @param cond1 condition one
197 * @param cond2 condition two
198 * @return && conditional string
199 */
200 static String ifAndAndCondition(String cond1, String cond2) {
201 return cond1 + SPACE + AND + AND + SPACE + cond2;
202 }
203
204 /**
205 * Returns equal equal conditional string.
206 *
207 * @param cond1 condition one
208 * @param cond2 condition two
209 * @return equal equal conditional string
210 */
211 static String ifEqualEqualCondition(String cond1, String cond2) {
212 return cond1 + SPACE + EQUAL + EQUAL + SPACE + cond2;
213 }
214
215 /**
216 * Returns new instance string.
217 *
218 * @param returnType return type
219 * @param varName variable name
220 * @param space spaces
221 * @param value value
222 * @return new instance string
223 */
224 static String getNewInstance(String returnType, String varName,
225 String space, String value) {
226 return space + returnType + SPACE + varName + SPACE + EQUAL + SPACE +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530227 NEW + SPACE + returnType + getOpenCloseParaWithValue(value) +
228 signatureClose();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530229 }
230
231 /**
232 * Returns return string.
233 *
234 * @param value value to be returned
235 * @param space spaces
236 * @return return string
237 */
238 static String getReturnString(String value, String space) {
239 return space + RETURN + SPACE + value;
240 }
241
242 /**
243 * Returns new line string with spaces.
244 *
245 * @param space spaces
246 * @return new line string with spaces
247 */
248 static String getNewLineAndSpace(String space) {
249 return NEW_LINE + space;
250 }
251
252 /**
253 * Returns method close string.
254 *
255 * @param type indentation type
256 * @return method close string
257 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530258 public static String methodClose(IndentationType type) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530259 switch (type) {
260 case EIGHT_SPACE:
261 return EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
262 NEW_LINE;
263 case TWELVE_SPACE:
264 return TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
265 NEW_LINE;
266 case SIXTEEN_SPACE:
267 return SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
268 NEW_LINE;
269 case TWENTY_SPACE:
270 return TWENTY_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
271 NEW_LINE;
272 case TWENTY_EIGHT_SPACE:
Bharat saraswal0663aff2016-10-18 23:16:14 +0530273 return TWENTY_SPACE_INDENTATION + EIGHT_SPACE_INDENTATION +
274 CLOSE_CURLY_BRACKET + NEW_LINE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530275 case TWENTY_FOUR_SPACE:
Bharat saraswal0663aff2016-10-18 23:16:14 +0530276 return TWENTY_SPACE_INDENTATION + FOUR_SPACE_INDENTATION +
277 CLOSE_CURLY_BRACKET + NEW_LINE;
278 case FOUR_SPACE:
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530279 return FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
280 NEW_LINE;
281 default:
Bharat saraswal0663aff2016-10-18 23:16:14 +0530282 return CLOSE_CURLY_BRACKET + NEW_LINE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530283 }
284 }
285
286 /**
287 * Returns body of the method.
288 *
289 * @param type type of method body
290 * @param paraName parameter name
291 * @param methodName method name
292 * @param space space to be given before body
293 * @param prefix prefix for internal method
294 * @param paramType parameter type
295 * @param isBuilderSetter is for builder setter
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530296 * @param setterVal value to set in setter
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530297 * @return body of the method
298 */
299 static String methodBody(MethodBodyTypes type, String paraName,
300 String methodName,
301 String space, String prefix,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530302 String paramType, boolean isBuilderSetter, String setterVal) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530303 StringBuilder builder = new StringBuilder();
304 String body;
305 switch (type) {
306 case GETTER:
307 return getReturnString(paraName, space);
308 case SETTER:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530309 if (setterVal == null) {
310 setterVal = paraName;
311 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530312 body = space + THIS + PERIOD + paraName + SPACE + EQUAL + SPACE +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530313 setterVal + signatureClose();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530314 builder.append(body);
315 if (isBuilderSetter) {
316 body = getReturnString(THIS + signatureClose(), space);
317 builder.append(body);
318 }
319 return builder.toString();
320 case BUILD:
321 return getReturnString(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530322 NEW + SPACE + paraName + getOpenCloseParaWithValue(
323 THIS) + signatureClose(), space);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530324 case CONSTRUCTOR:
Bharat saraswalb41904b2016-10-20 19:22:36 +0530325 return space + paraName + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530326 EQUAL + SPACE + BUILDER_LOWER_CASE + OBJECT + PERIOD +
327 prefix + methodName +
328 brackets(OPEN_CLOSE_BRACKET, null, null) +
329 signatureClose();
330 case DEFAULT_CONSTRUCTOR:
331 return EMPTY_STRING;
332 case ADD_TO_LIST:
333 return space + getIfConditionForAddToListMethod(paraName) +
334 space + paraName +
335 brackets(OPEN_CLOSE_BRACKET, null, null) + PERIOD +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530336 ADD_STRING + getOpenCloseParaWithValue(VALUE) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530337 signatureClose() + getReturnString(
338 THIS + signatureClose(), space);
339 case AUGMENTED_MAP_ADD:
Bharat saraswal94844d62016-10-13 13:28:03 +0530340 return space + YANG_AUGMENTED_INFO_MAP +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530341 PERIOD + PUT + OPEN_PARENTHESIS + CLASS +
342 OBJECT_STRING + COMMA + SPACE + VALUE +
343 CLOSE_PARENTHESIS + signatureClose();
344 case AUGMENTED_MAP_GET_VALUE:
345 return getReturnString(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530346 YANG_AUGMENTED_INFO_MAP + PERIOD + GET + getOpenCloseParaWithValue(
347 CLASS + OBJECT_STRING) + signatureClose(), space);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530348 case AUGMENTED_MAP_GETTER:
Bharat saraswal94844d62016-10-13 13:28:03 +0530349 return getReturnString(YANG_AUGMENTED_INFO_MAP +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530350 signatureClose(), space);
351 case MANAGER_METHODS:
352 body = space + YANG_UTILS_TODO + NEW_LINE;
353 builder.append(body);
354 if (paramType != null) {
355 body = getReturnString(parseTypeForReturnValue(paramType),
356 space);
357 builder.append(body)
358 .append(signatureClose());
359 }
360 return builder.toString();
361 case OF_METHOD:
362 return getReturnString(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530363 NEW + SPACE + paraName + getOpenCloseParaWithValue(
364 VALUE) + signatureClose(), space);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530365 case TO_STRING:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530366 return getToStringMethodsAddString(space, paraName) + paraName +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530367 CLOSE_PARENTHESIS;
368 case EQUALS_METHOD:
369 default:
370 return null;
371 }
372 }
373
374 /**
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530375 * Returns to string method's add string.
376 *
377 * @param space indentation
378 * @param paraName parameter name
379 * @return to string method's add string
380 */
381 static String getToStringMethodsAddString(String space, String paraName) {
382 return space + PERIOD + ADD_STRING + OPEN_PARENTHESIS +
383 getQuotedString(paraName) + COMMA + SPACE;
384 }
385
386 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530387 * Returns end of line.
388 *
389 * @return end of line
390 */
391 static String signatureClose() {
392 return SEMI_COLON + NEW_LINE;
393 }
394
Bharat saraswal0663aff2016-10-18 23:16:14 +0530395
396 /**
397 * Returns value assignment.
398 *
399 * @return value assignment
400 */
401 static String valueAssign(String param, String value, String indentation) {
402 return indentation + param + SPACE + EQUAL + SPACE + value +
403 signatureClose();
404 }
405
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530406 /**
407 * Returns method signature close for method class type.
408 *
409 * @param type method class type
410 * @return method signature close for method class type
411 */
412 static String methodSignatureClose(MethodClassTypes type) {
413 switch (type) {
414 case INTERFACE_TYPE:
415 return signatureClose();
416 case CLASS_TYPE:
417 return SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
418 default:
419 return null;
420 }
421 }
422
423 /**
424 * Returns method param.
425 *
426 * @param type type of param
427 * @param name name of param
428 * @return method param
429 */
430 private static String methodParam(String type, String name) {
431 return type + SPACE + name;
432 }
433
434 /**
435 * Returns comma followed by a space.
436 *
437 * @return comma followed by a space
438 */
439 private static String commaWithSpace() {
440 return COMMA + SPACE;
441 }
442
443 /**
444 * Returns bracket string for the given type.
445 *
446 * @param type bracket type
447 * @param value value to be added in brackets
448 * @param returnType returns type to be added for value
449 * @return bracket for the given type.
450 */
451 static String brackets(BracketType type, String value,
452 String returnType) {
453 String ret = EMPTY_STRING;
454 switch (type) {
455 case OPEN_CLOSE_BRACKET:
456 return OPEN_PARENTHESIS + CLOSE_PARENTHESIS;
457 case OPEN_CLOSE_BRACKET_WITH_VALUE:
458 return OPEN_PARENTHESIS + value + CLOSE_PARENTHESIS;
459 case OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE:
460 if (returnType != null) {
461 ret = returnType + SPACE;
462 }
463 return OPEN_PARENTHESIS + ret + value +
464 CLOSE_PARENTHESIS;
465 case OPEN_BRACKET_WITH_VALUE:
466 ret = EMPTY_STRING;
467 if (returnType != null) {
468 ret = returnType + SPACE;
469 }
470 return OPEN_PARENTHESIS + ret + value +
471 COMMA;
472 case CLOSE_BRACKET_WITH_VALUE:
473 ret = EMPTY_STRING;
474 if (returnType != null) {
475 ret = returnType + SPACE;
476 }
477 return SPACE + ret + value +
478 CLOSE_PARENTHESIS;
479 case OPEN_CLOSE_DIAMOND:
480 return DIAMOND_OPEN_BRACKET + DIAMOND_CLOSE_BRACKET;
481 case OPEN_CLOSE_DIAMOND_WITH_VALUE:
482 return DIAMOND_OPEN_BRACKET + value + DIAMOND_CLOSE_BRACKET;
483 default:
484 return null;
485 }
486 }
487
488 /**
489 * Returns method signature for multi attribute methods.
490 *
491 * @param methodName method name
492 * @param prefix prefix for method
493 * @param modifier modifier for method
494 * @param methodReturnType method's return type
495 * @param params parameters
496 * @param type type of method
497 * @return method signature for multi attribute methods
498 */
499 static String multiAttrMethodSignature(String methodName, String
500 prefix, String modifier, String methodReturnType,
501 Map<String, String> params,
502 MethodClassTypes type) {
503 StringBuilder methodBuilder = new StringBuilder(FOUR_SPACE_INDENTATION);
504 String method = EMPTY_STRING;
505 if (modifier != null) {
506 method = modifier + SPACE;
507 }
508 methodBuilder.append(method);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530509 if (prefix == null) {
510 prefix = EMPTY_STRING;
511 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530512 if (methodReturnType != null) {
513 method = methodReturnType + SPACE + prefix + methodName;
514 } else {
515 method = prefix + methodName;
516 }
517 //Append method beginning.
518 methodBuilder.append(method)
519 .append(OPEN_PARENTHESIS);
520 for (Map.Entry<String, String> param : params.entrySet()) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530521 methodBuilder.append(methodParam(param.getValue(), param.getKey()));
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530522 methodBuilder.append(commaWithSpace());
523 }
524 String para = methodBuilder.toString();
525 String[] array = {SPACE, COMMA};
526 para = trimAtLast(para, array);
527 methodBuilder = new StringBuilder(para)
528 .append(CLOSE_PARENTHESIS)
529 .append(methodSignatureClose(type));
530
531 return methodBuilder.toString();
532 }
533
534 /**
535 * Returns method signature for interface and implementation classes.
536 *
537 * @param methodName name of the method
538 * @param prefix prefix which needs to be added for method
539 * @param modifier modifier which needs to be added for method
540 * @param paraVal value which needs to be added as parameter
541 * @param methodReturnType returns type to be added for method
542 * @param paraReturnType return type to be added for parameter
543 * @param type method class type
544 * @return method signature for interface and implementation classes
545 */
546 static String methodSignature(
547 String methodName, String prefix, String modifier, String paraVal,
548 String methodReturnType, String paraReturnType,
549 MethodClassTypes type) {
550 StringBuilder methodBuilder = new StringBuilder(FOUR_SPACE_INDENTATION);
551 String method = EMPTY_STRING;
552 if (modifier != null) {
553 method = modifier + SPACE;
554 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530555 if (prefix == null) {
556 prefix = EMPTY_STRING;
557 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530558 methodBuilder.append(method);
559 if (methodReturnType != null) {
560 method = methodReturnType + SPACE + prefix + methodName;
561 } else {
562 method = prefix + methodName;
563 }
564 //Append method beginning.
565 methodBuilder.append(method);
566
567 if (paraVal != null) {
568 methodBuilder.append(brackets(
569 OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE,
570 paraVal, paraReturnType));
571 } else {
572 methodBuilder.append(brackets(OPEN_CLOSE_BRACKET, null,
573 null));
574 }
575
576 methodBuilder.append(methodSignatureClose(type));
577
578 return methodBuilder.toString();
579 }
580
581 /**
582 * Returns list attribute.
583 *
584 * @param attrType attribute type
585 * @param compilerAnnotation compiler annotations
586 * @return list attribute
587 */
588
589 static String getListAttribute(String attrType,
590 YangCompilerAnnotation compilerAnnotation) {
591 String listAttr;
592 if (compilerAnnotation != null &&
593 compilerAnnotation.getYangAppDataStructure() != null) {
594 switch (compilerAnnotation.getYangAppDataStructure()
595 .getDataStructure()) {
596 case QUEUE: {
597 listAttr = QUEUE + DIAMOND_OPEN_BRACKET + attrType +
598 DIAMOND_CLOSE_BRACKET;
599 break;
600 }
601 case SET: {
602 listAttr = SET + DIAMOND_OPEN_BRACKET + attrType +
603 DIAMOND_CLOSE_BRACKET;
604 break;
605 }
606 case LIST: {
607 listAttr = getListString() + attrType +
608 DIAMOND_CLOSE_BRACKET;
609 break;
610 }
611 default: {
612 listAttr = getListString() + attrType +
613 DIAMOND_CLOSE_BRACKET;
614 }
615 }
616 } else {
617 listAttr = getListString() + attrType + DIAMOND_CLOSE_BRACKET;
618 }
619 return listAttr;
620 }
621
622 /**
623 * Returns getters for value and select leaf.
624 *
625 * @return getters for value and select leaf
626 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530627 static String getIsValueLeafSet() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530628 return "\n" +
629 " @Override\n" +
630 " public boolean isLeafValueSet(LeafIdentifier leaf) {\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +0530631 " return valueLeafFlags.get(leaf.getLeafIndex());\n" +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530632 " }\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +0530633 "\n";
634 }
635
636 /**
637 * Returns is select leaf set.
638 *
639 * @return is select leaf set
640 */
641 static String getIsSelectLeafSet() {
642 return " @Override\n" +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530643 " public boolean isSelectLeaf(LeafIdentifier leaf) {\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +0530644 " return selectLeafFlags.get(leaf.getLeafIndex());\n" +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530645 " }\n";
646 }
647
648 /**
649 * Returns getter methods for operation attributes.
650 *
651 * @return getter methods for operation attributes
652 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530653 static String getValueLeafGetters() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530654 return "\n" +
655 " /**\n" +
656 " * Returns the valueLeafFlags.\n" +
657 " *\n" +
658 " * @return value of valueLeafFlags\n" +
659 " */\n" +
660 " public BitSet getValueLeafFlags() {\n" +
661 " return valueLeafFlags;\n" +
662 " }\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +0530663 "\n";
664 }
665
666 /**
667 * Returns getter methods for operation attributes.
668 *
669 * @return getter methods for operation attributes
670 */
671 static String getSelectLeafGetters() {
672 return " /**\n" +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530673 " * Returns the selectLeafFlags.\n" +
674 " *\n" +
675 " * @return value of selectLeafFlags\n" +
676 " */\n" +
677 " public BitSet getSelectLeafFlags() {\n" +
678 " return selectLeafFlags;\n" +
679 " }\n" +
680 "\n";
681 }
682
683 /**
684 * Returns interface leaf identifier enum method.
685 *
686 * @return interface leaf identifier enum method
687 */
688 static String getInterfaceLeafIdEnumMethods() {
689 return "\n\n private int leafIndex;\n" +
690 "\n" +
691 " public int getLeafIndex() {\n" +
692 " return leafIndex;\n" +
693 " }\n" +
694 "\n" +
695 " LeafIdentifier(int value) {\n" +
696 " this.leafIndex = value;\n" +
697 " }\n" +
698 " }\n";
699 }
700
701 /**
702 * Returns if condition string for typedef constructor.
703 *
704 * @param type type of conflict
705 * @param addFirst true int/long need to be added first
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530706 * @param val value to set
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530707 * @return if condition string for typedef constructor
708 */
709 static String ifConditionForIntInTypeDefConstructor(ValidatorTypeForUnionTypes type,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530710 boolean addFirst, String val) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530711 String condition =
712 EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
713 VALIDATE_RANGE + OPEN_PARENTHESIS;
714
715 switch (type) {
716 case INT_TYPE_CONFLICT:
717 if (addFirst) {
718 condition = condition + INT_MIN_RANGE + COMMA + SPACE +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530719 INT_MAX_RANGE + COMMA + SPACE + val;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530720 } else {
721 condition = condition + UINT_MIN_RANGE + COMMA + SPACE +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530722 UINT_MAX_RANGE + COMMA + SPACE + val;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530723 }
724 break;
725 case LONG_TYPE_CONFLICT:
726 if (addFirst) {
727 condition = condition + LONG_MIN_RANGE + COMMA + SPACE +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530728 LONG_MAX_RANGE + COMMA + SPACE + val;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530729 } else {
730 condition = condition + ULONG_MIN_RANGE + COMMA + SPACE +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530731 ULONG_MAX_RANGE + COMMA + SPACE + val;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530732 }
733 break;
734 case SHORT_TYPE_CONFLICT:
735 if (addFirst) {
736 condition = condition + SHORT_MIN_RANGE + COMMA + SPACE +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530737 SHORT_MAX_RANGE + COMMA + SPACE + val;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530738 } else {
739 condition = condition + UINT8_MIN_RANGE + COMMA + SPACE +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530740 UINT8_MAX_RANGE + COMMA + SPACE + val;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530741 }
742 break;
743 default:
744 return null;
745 }
746
747 return condition + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SPACE +
748 OPEN_CURLY_BRACKET + NEW_LINE;
749 }
750
751 /**
752 * Returns from string method parsed string.
753 *
754 * @param targetDataType target data type
755 * @param yangType YANG type
756 * @return parsed string
757 */
758 static String getParseFromStringMethod(String targetDataType,
759 YangType<?> yangType) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530760
janani bc27947a2016-10-19 01:17:40 +0530761 YangDataTypes type = yangType.getDataType();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530762 switch (type) {
763 case INT8:
764 return BYTE_WRAPPER + PERIOD + PARSE_BYTE;
janani bc27947a2016-10-19 01:17:40 +0530765
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530766 case INT16:
767 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
janani bc27947a2016-10-19 01:17:40 +0530768
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530769 case INT32:
770 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
janani bc27947a2016-10-19 01:17:40 +0530771
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530772 case INT64:
773 return LONG_WRAPPER + PERIOD + PARSE_LONG;
janani bc27947a2016-10-19 01:17:40 +0530774
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530775 case UINT8:
776 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
janani bc27947a2016-10-19 01:17:40 +0530777
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530778 case UINT16:
779 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
janani bc27947a2016-10-19 01:17:40 +0530780
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530781 case UINT32:
782 return LONG_WRAPPER + PERIOD + PARSE_LONG;
janani bc27947a2016-10-19 01:17:40 +0530783
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530784 case UINT64:
785 return NEW + SPACE + BIG_INTEGER;
janani bc27947a2016-10-19 01:17:40 +0530786
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530787 case DECIMAL64:
788 return NEW + SPACE + BIG_DECIMAL;
janani bc27947a2016-10-19 01:17:40 +0530789
790 case INSTANCE_IDENTIFIER:
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530791 case STRING:
792 case IDENTITYREF:
793 return EMPTY_STRING;
janani bc27947a2016-10-19 01:17:40 +0530794
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530795 case EMPTY:
796 case BOOLEAN:
797 return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
janani bc27947a2016-10-19 01:17:40 +0530798
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530799 case ENUMERATION:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530800 return targetDataType + PERIOD + OF;
janani bc27947a2016-10-19 01:17:40 +0530801
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530802 case DERIVED:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530803 case UNION:
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530804 return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
janani bc27947a2016-10-19 01:17:40 +0530805
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530806 default:
janani bc27947a2016-10-19 01:17:40 +0530807 throw new TranslatorException(
808 "Given data type is not supported. " +
809 yangType.getDataTypeName() + " in " +
810 yangType.getLineNumber() + " at " +
811 yangType.getCharPosition() + " in " +
812 yangType.getFileName());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530813 }
814 }
815
816 /**
817 * Returns sub string with catch statement for union's from string method.
818 *
819 * @return sub string with catch statement for union's from string method
820 */
821 static String getCatchSubString() {
822 return CLOSE_CURLY_BRACKET + SPACE + CATCH + SPACE +
823 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE, EXCEPTION_VAR,
824 EXCEPTION) + SPACE + OPEN_CURLY_BRACKET;
825 }
826
827 /**
828 * Returns sub string with return statement for union's from string method.
829 *
830 * @return sub string with return statement for union's from string method
831 */
832 static String getReturnOfSubString() {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530833 return getReturnString(OF, TWELVE_SPACE_INDENTATION) +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530834 getOpenCloseParaWithValue(TMP_VAL) + signatureClose();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530835 }
836
837 /**
838 * Returns sub string with try statement for union's from string method.
839 *
840 * @return sub string with try statement for union's from string method
841 */
842 static String getTrySubString() {
843 return TRY + SPACE + OPEN_CURLY_BRACKET;
844 }
845
846 /*
847 * Returns omit null value string.
848 *
849 * @return omit null value string
850 */
851 static String getOmitNullValueString() {
852 return TWELVE_SPACE_INDENTATION + PERIOD + OMIT_NULL_VALUE_STRING +
853 NEW_LINE;
854 }
855
856 /**
857 * Returns collection's iterator method.
858 *
859 * @param indentation indentation
860 * @param loopVar loop variable
861 * @param collection collection
862 * @return collection's iterator method
863 */
864 static String getCollectionIteratorForLoopBegin(String indentation,
865 String loopVar,
866 String collection) {
867 return indentation + FOR + SPACE + OPEN_PARENTHESIS + loopVar + SPACE +
868 COLON + SPACE + collection + CLOSE_PARENTHESIS + SPACE +
869 OPEN_CURLY_BRACKET + NEW_LINE;
870 }
871
872 /**
873 * Returns if else condition's signature.
874 *
875 * @param indentation indentation
876 * @param condition conditions
877 * @return if else condition's signature
878 */
879 static String getElseIfConditionBegin(String indentation,
880 String condition) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530881 return indentation + CLOSE_CURLY_BRACKET + ELSE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530882 getIfConditionBegin(EMPTY_STRING, condition);
883 }
884
885 /**
886 * Returns if condition's signature.
887 *
888 * @param indentation indentation
889 * @param condition conditions
890 * @return if condition's signature
891 */
892 static String getIfConditionBegin(String indentation, String condition) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530893 return indentation + IF + SPACE + getOpenCloseParaWithValue(condition) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530894 methodSignatureClose(CLASS_TYPE);
895 }
896
897 /**
janani bc27947a2016-10-19 01:17:40 +0530898 * Returns true, if the data type is primitive; false otherwise.
899 *
900 * @param dataType data type
901 * @return true if the data type is primitive; false otherwise
902 */
903 public static boolean isPrimitiveDataType(YangDataTypes dataType) {
904 return PRIMITIVE_TYPES.contains(dataType);
905 }
906
907 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530908 * Returns list string.
909 *
910 * @return list string
911 */
912 private static String getListString() {
913 return LIST + DIAMOND_OPEN_BRACKET;
914 }
915
916 /**
917 * Returns override string.
918 *
919 * @return override string
920 */
921 public static String getOverRideString() {
922 return NEW_LINE + FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE;
923 }
924
925 /**
926 * Returns value leaf flag setter.
927 *
Bharat saraswal0663aff2016-10-18 23:16:14 +0530928 * @param name name of leaf
929 * @param flag flag to set values
930 * @param indentation indentation
931 * @param prefix prefix of method
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530932 * @return value leaf flag setter
933 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530934 static String getLeafFlagSetString(String name, String flag, String indentation, String prefix) {
935 return indentation + flag + PERIOD + prefix +
936 getOpenCloseParaWithValue(LEAF_IDENTIFIER + PERIOD + name
937 .toUpperCase() + ".getLeafIndex()");
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530938 }
939
940 /*Provides string to return for type.*/
941 private static String parseTypeForReturnValue(String type) {
942 switch (type) {
943 case BYTE:
944 case INT:
945 case SHORT:
946 case LONG:
947 case DOUBLE:
948 return ZERO;
949 case BOOLEAN_DATA_TYPE:
950 return FALSE;
951 default:
952 return null;
953 }
954 }
955
956 /**
957 * Returns check not null string.
958 *
959 * @param name attribute name
960 * @return check not null string
961 */
962 static String getCheckNotNull(String name) {
963 return EIGHT_SPACE_INDENTATION + CHECK_NOT_NULL_STRING +
964 OPEN_PARENTHESIS + name + COMMA + SPACE + name +
965 CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
966 }
967
968 /**
969 * Returns definition close string.
970 *
971 * @return definition close string
972 */
973 private static String defCloseString() {
Bharat saraswal94844d62016-10-13 13:28:03 +0530974 return SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530975 }
976
977 /**
978 * Returns default class definition for java file when extends a
979 * interface.
980 *
981 * @param classType class type
982 * @param name name of class
983 * @param modifier modifier for class
984 * @param extend extends class name
985 * @return class definition
986 */
987 static String getDefaultDefinitionWithExtends(String classType,
988 String name, String
989 modifier,
990 String extend) {
991 String mod = EMPTY_STRING;
992 if (modifier != null) {
993 mod = modifier + SPACE;
994 }
995 return mod + classType + SPACE + name + SPACE + EXTEND + SPACE
996 + extend + defCloseString();
997 }
998
999 /**
1000 * Returns default class definition for java file when implements a
1001 * interface.
1002 *
1003 * @param classType class type
1004 * @param name name of class
1005 * @param modifier modifier for class
1006 * @param impl implements class name
1007 * @return class definition
1008 */
1009 static String getDefaultDefinitionWithImpl(String classType,
1010 String name, String
1011 modifier,
1012 String impl) {
1013 String mod = EMPTY_STRING;
1014 if (modifier != null) {
1015 mod = modifier + SPACE;
1016 }
1017 return mod + classType + SPACE + name + SPACE + IMPLEMENTS +
1018 SPACE + impl + defCloseString();
1019 }
1020
1021 /**
1022 * Returns default class definition for java file.
1023 *
1024 * @param classType class type
1025 * @param name name of class
1026 * @param modifier modifier for class
1027 * @return class definition
1028 */
1029 static String getDefaultDefinition(String classType,
1030 String name, String modifier) {
1031 String mod = EMPTY_STRING;
1032 if (modifier != null) {
1033 mod = modifier + SPACE;
1034 }
1035 return mod + classType + SPACE + name + defCloseString();
1036 }
1037
1038 /**
1039 * Returns string for service class.
1040 *
1041 * @param name1 name of even listener class
1042 * @param name2 name of even class
1043 * @return listener service string for service class
1044 */
1045 static String getEventExtendsString(String name1, String type,
1046 String name2) {
1047 StringBuilder builder = new StringBuilder();
1048 builder.append(type).append(DIAMOND_OPEN_BRACKET).append(name1)
1049 .append(COMMA).append(SPACE).append(name2).append
1050 (DIAMOND_CLOSE_BRACKET);
1051 return builder.toString();
1052 }
1053
1054 /**
1055 * Returns import string.
1056 *
1057 * @param pkg package
1058 * @param cls class
1059 * @return import string
1060 */
1061 public static String getImportString(String pkg, String cls) {
1062 StringBuilder builder = new StringBuilder()
1063 .append(IMPORT).append(pkg).append(PERIOD).append(cls)
1064 .append(signatureClose());
1065 return builder.toString();
1066 }
1067
1068 /**
1069 * Returns static modifier string.
1070 *
1071 * @param modifier modifier
1072 * @return static modifier string
1073 */
1074 static String getSpecificModifier(String modifier, String keyWord) {
1075 return new StringBuilder(modifier).append(SPACE).append(keyWord)
1076 .toString();
1077 }
1078
1079 /**
1080 * Returns builder string for class definition.
1081 *
1082 * @param yangName class name
1083 * @return builder string for class definition
1084 */
1085 static String getBuilderImplStringClassDef(String yangName) {
1086 return new StringBuilder(yangName).append(PERIOD).append(yangName)
1087 .append(BUILDER).toString();
1088 }
1089
1090 /**
1091 * Returns default name string.
1092 *
1093 * @param yangName class name
1094 * @return default name string
1095 */
1096 static String getDefaultName(String yangName) {
1097 return new StringBuilder(DEFAULT_CAPS).append(yangName).toString();
1098 }
1099
1100 /**
1101 * Returns suffixed name string.
1102 *
1103 * @param yangName class name
1104 * @param suffix suffix to append to name
1105 * @return suffixed name string
1106 */
1107 static String getSuffixedName(String yangName, String suffix) {
1108 return new StringBuilder(yangName).append(suffix).toString();
1109 }
1110
1111 /**
1112 * Returns error msg string.
1113 *
1114 * @param msg message
1115 * @param name name of node
1116 * @param line line number
1117 * @param position char position
1118 * @param fileName file name
1119 * @return error message string
1120 */
1121 static String getErrorMsg(String msg, String name, int line, int position,
1122 String fileName) {
1123 return new StringBuilder().append(msg).append(name).append(IN)
1124 .append(line).append(AT).append(position).append(IN)
1125 .append(fileName).toString();
1126 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301127
1128 /**
1129 * Returns string builder attribute string;
1130 *
1131 * @param init first param to be appended to string builder
1132 * @param space indentation space
1133 * @return string builder attribute
1134 */
1135 static String getStringBuilderAttr(String init, String space) {
1136 StringBuilder builder = new StringBuilder(space);
1137 builder.append(STRING_BUILDER).append(SPACE).append(STRING_BUILDER_VAR)
1138 .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
1139 .append(SPACE).append(STRING_BUILDER).append(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301140 getOpenCloseParaWithValue(getQuotedString(init)))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301141 .append(signatureClose());
1142 return builder.toString();
1143 }
1144
1145 /**
1146 * Returns quoted string.
1147 *
1148 * @param name name to be quoted
1149 * @return quoted string
1150 */
1151 static String getQuotedString(String name) {
1152 return QUOTES + name + QUOTES;
1153 }
1154
1155 /**
1156 * Returns string builder's append string.
1157 *
1158 * @param append data to be append
1159 * @param space indentation
1160 * @return string builder's append string
1161 */
1162 static String getStringBuilderAppendString(String append, String space) {
1163 return space + STRING_BUILDER_VAR + PERIOD + APPEND + OPEN_PARENTHESIS +
1164 append + CLOSE_PARENTHESIS + signatureClose();
1165 }
1166
1167 /**
1168 * Returns pattern quote string.
1169 *
1170 * @param type type for pattern is needed
1171 * @return pattern quote string
1172 */
1173 static String getPatternQuoteString(String type) {
Bharat saraswal0663aff2016-10-18 23:16:14 +05301174 return PATTERN + PERIOD + QUOTE_STRING + getOpenCloseParaWithValue(
1175 getQuotedString(type));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301176 }
1177
1178 /**
1179 * Returns bitset attribute.
1180 *
1181 * @param indentation indentation
1182 * @return bitset attribute
1183 */
1184 static String getBitSetAttr(String indentation) {
1185 StringBuilder builder = new StringBuilder(indentation);
1186 return builder.append(BITSET).append(SPACE).append(TMP_VAL)
1187 .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
1188 .append(SPACE).append(BITSET).append(OPEN_CLOSE_BRACKET_STRING)
1189 .append(signatureClose()).toString();
1190 }
1191
1192 /**
1193 * Returns for loop string
1194 *
1195 * @param space indentation
1196 * @param type data type
1197 * @param var variable
1198 * @param data data variable/collection
1199 * @return for loop string
1200 */
1201 static String getForLoopString(String space, String type, String var,
1202 String data) {
1203 return space + FOR + SPACE + OPEN_PARENTHESIS + type + SPACE + var +
1204 SPACE + COLON + SPACE + data + CLOSE_PARENTHESIS +
1205 methodSignatureClose(CLASS_TYPE);
1206 }
1207
1208 /**
1209 * Returns set value parameter's get string for union to string method.
1210 *
1211 * @param count count of type
1212 * @return get string
1213 */
1214 static String getSetValueParaCondition(int count) {
Bharat saraswal0663aff2016-10-18 23:16:14 +05301215 return SET_VALUE_PARA + PERIOD + GET + getOpenCloseParaWithValue(
1216 count + EMPTY_STRING);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301217 }
1218
1219 /**
1220 * Returns more object attr for union to string method.
1221 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301222 * @param name name of generate class
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301223 * @return more object attr for union to string method
1224 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301225 static String getMoreObjectAttr(String name) {
1226 String cls = name + PERIOD + CLASS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301227 StringBuilder attr = new StringBuilder(EIGHT_SPACE_INDENTATION);
1228 String[] array = {NEW_LINE};
Bharat saraswal94844d62016-10-13 13:28:03 +05301229 attr.append(MORE_OBJ_ATTR).append(GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING)
Bharat saraswal0663aff2016-10-18 23:16:14 +05301230 .append(getOpenCloseParaWithValue(cls)).append(NEW_LINE)
1231 .append(FOUR_SPACE_INDENTATION).append(trimAtLast(
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301232 getOmitNullValueString(), array)).append(signatureClose());
1233 return attr.toString();
1234 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301235
1236 /**
1237 * Returns to string call.
1238 *
1239 * @param name name of attribute
1240 * @return to string call for attribute
1241 */
1242 static String getToStringCall(String name) {
1243 return name + PERIOD +
1244 TO_STRING_METHOD + OPEN_CLOSE_BRACKET_STRING;
1245 }
Bharat saraswal0663aff2016-10-18 23:16:14 +05301246
1247 /**
1248 * Returns value in brackets.
1249 *
1250 * @param name value
1251 * @return value in brackets
1252 */
1253 static String getOpenCloseParaWithValue(String name) {
1254 return brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, name, null);
1255 }
1256
1257 /**
1258 * Returns equals comparision.
1259 *
1260 * @param para1 param
1261 * @param para2 param
1262 * @return equals comparision
1263 */
1264 static String getTwoParaEqualsString(String para1, String para2) {
1265 return para1 + PERIOD + EQUALS_STRING + getOpenCloseParaWithValue(para2);
1266 }
1267
1268 /**
1269 * Returns equal equal condition.
1270 *
1271 * @param para param
1272 * @param val value
1273 * @return equal equal condition
1274 */
1275 static String getEqualEqualString(String para, String val) {
1276 return para + SPACE + EQUAL + EQUAL + SPACE + val;
1277 }
1278
1279 /**
1280 * Returns app instance method call.
1281 *
1282 * @param name attr name
1283 * @return app instance method call
1284 */
1285 static String getAppInstanceAttrString(String name) {
1286 return APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING;
1287 }
1288
1289 /**
1290 * Returns qualified name.
1291 *
1292 * @param pkg package
1293 * @param cls class info
1294 * @return qualified name
1295 */
1296 static String getQualifiedString(String pkg, String cls) {
1297 return pkg + PERIOD + cls;
1298 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301299}