blob: 916dd4207286a7d3d346df8432f70827efe14516 [file] [log] [blame]
Bharat saraswal97459962016-02-20 21:57:16 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal97459962016-02-20 21:57:16 +05303 *
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
Vidyashree Ramab3670472016-08-06 15:49:56 +053019import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
Bharat saraswald14cbe82016-07-14 13:26:18 +053020import org.onosproject.yangutils.datamodel.YangNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053021import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalaf413b82016-07-14 15:18:20 +053022import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Shankara-Huaweib7564772016-08-02 18:13:13 +053023import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Bharat saraswalaf413b82016-07-14 15:18:20 +053024import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053025import org.onosproject.yangutils.utils.UtilConstants.Operation;
Bharat saraswal84366c52016-03-23 19:40:35 +053026
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053027import java.util.List;
28
29import static java.util.Collections.sort;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053030import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
31import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
32import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_DIAMOND;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053033import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053034import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
35import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinition;
36import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
37import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Bharat saraswal8beac342016-08-04 02:00:03 +053038import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053039import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswalaf413b82016-07-14 15:18:20 +053040import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053041import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswal84366c52016-03-23 19:40:35 +053042import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
43import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
Bharat saraswal8beac342016-08-04 02:00:03 +053044import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053045import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswald14cbe82016-07-14 13:26:18 +053046import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053047import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
48import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswalaf413b82016-07-14 15:18:20 +053049import static org.onosproject.yangutils.utils.UtilConstants.HASH_MAP;
Bharat saraswald14cbe82016-07-14 13:26:18 +053050import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal64e7e232016-07-14 23:33:55 +053051import static org.onosproject.yangutils.utils.UtilConstants.INT_MAX_RANGE_ATTR;
52import static org.onosproject.yangutils.utils.UtilConstants.INT_MIN_RANGE_ATTR;
Bharat saraswal84366c52016-03-23 19:40:35 +053053import static org.onosproject.yangutils.utils.UtilConstants.LIST;
Bharat saraswal64e7e232016-07-14 23:33:55 +053054import static org.onosproject.yangutils.utils.UtilConstants.LONG_MAX_RANGE_ATTR;
55import static org.onosproject.yangutils.utils.UtilConstants.LONG_MIN_RANGE_ATTR;
Bharat saraswalaf413b82016-07-14 15:18:20 +053056import static org.onosproject.yangutils.utils.UtilConstants.MAP;
57import static org.onosproject.yangutils.utils.UtilConstants.NEW;
Bharat saraswal84366c52016-03-23 19:40:35 +053058import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +053059import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053060import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +053061import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
62import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053063import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswald14cbe82016-07-14 13:26:18 +053064import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswalaf413b82016-07-14 15:18:20 +053065import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
Vidyashree Ramab3670472016-08-06 15:49:56 +053066import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053067import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
68import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053069import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Vidyashree Ramab3670472016-08-06 15:49:56 +053070import static org.onosproject.yangutils.utils.UtilConstants.SET;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053071import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
Bharat saraswal2da23bf2016-08-25 15:28:39 +053072import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE_ATTR;
73import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE_ATTR;
Bharat saraswal84366c52016-03-23 19:40:35 +053074import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053075import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswald14cbe82016-07-14 13:26:18 +053076import static org.onosproject.yangutils.utils.UtilConstants.TYPE;
Bharat saraswal2da23bf2016-08-25 15:28:39 +053077import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MAX_RANGE_ATTR;
78import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MIN_RANGE_ATTR;
Bharat saraswal64e7e232016-07-14 23:33:55 +053079import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE_ATTR;
80import static org.onosproject.yangutils.utils.UtilConstants.UINT_MIN_RANGE_ATTR;
81import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MAX_RANGE_ATTR;
82import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MIN_RANGE_ATTR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053083import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053084import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053085import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.enumJavaDocForInnerClass;
Bharat saraswald14cbe82016-07-14 13:26:18 +053086import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053087import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053088
Bharat saraswal97459962016-02-20 21:57:16 +053089/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053090 * Represents utility class to generate the java snippet.
Bharat saraswal97459962016-02-20 21:57:16 +053091 */
92public final class JavaCodeSnippetGen {
93
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053094 // No instantiation.
Bharat saraswal97459962016-02-20 21:57:16 +053095 private JavaCodeSnippetGen() {
96 }
97
98 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053099 * Returns the java file header comment.
Bharat saraswal97459962016-02-20 21:57:16 +0530100 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530101 * @return the java file header comment
Bharat saraswal97459962016-02-20 21:57:16 +0530102 */
103 public static String getFileHeaderComment() {
104
Bharat saraswal8beac342016-08-04 02:00:03 +0530105 /*
Bharat saraswal97459962016-02-20 21:57:16 +0530106 * TODO return the file header.
107 */
108 return null;
109 }
110
111 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530112 * Returns the textual java code information corresponding to the import
113 * list.
Bharat saraswal97459962016-02-20 21:57:16 +0530114 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530115 * @param importInfo import info
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530116 * @return the textual java code information corresponding to the import
117 * list
Bharat saraswal97459962016-02-20 21:57:16 +0530118 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530119 static String getImportText(JavaQualifiedTypeInfoTranslator importInfo) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530120 return getImportString(importInfo.getPkgInfo(), importInfo
121 .getClassInfo());
Bharat saraswal97459962016-02-20 21:57:16 +0530122 }
123
124 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530125 * Returns the textual java code for attribute definition in class.
Bharat saraswal97459962016-02-20 21:57:16 +0530126 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530127 * @param typePkg Package of the attribute type
128 * @param attrType java attribute type
129 * @param attrName name of the attribute
130 * @param isList is list attribute
131 * @param accessType attribute access type
132 * @param annotation compiler annotation
Bharat saraswal64e7e232016-07-14 23:33:55 +0530133 * @return the textual java code for attribute definition in class
Bharat saraswal97459962016-02-20 21:57:16 +0530134 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530135 public static String getJavaAttributeDefinition(String typePkg,
136 String attrType,
137 String attrName,
138 boolean isList,
139 String accessType,
140 YangCompilerAnnotation annotation) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530141 StringBuilder attrDef = new StringBuilder(FOUR_SPACE_INDENTATION);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530142 attrDef.append(accessType).append(SPACE);
Vinod Kumar S08710982016-03-03 19:55:30 +0530143
Bharat saraswal022dae92016-03-04 20:08:09 +0530144 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530145 if (typePkg != null) {
146 attrDef.append(typePkg).append(PERIOD);
Bharat saraswal022dae92016-03-04 20:08:09 +0530147 }
148
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530149 attrDef.append(attrType).append(SPACE)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530150 .append(attrName).append(SEMI_COLON)
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530151 .append(NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530152 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530153 // Add starting definition.
154 addAttrStartDef(annotation, attrDef);
155
156 if (typePkg != null) {
157 attrDef.append(typePkg).append(PERIOD);
Vidyashree Ramab3670472016-08-06 15:49:56 +0530158 }
159
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530160 attrDef.append(attrType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530161
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530162 // Add ending definition.
163 addAttrEndDef(annotation, attrDef, attrName);
Bharat saraswal5e3c45c2016-02-22 22:15:21 +0530164 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530165 return attrDef.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530166 }
167
168 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530169 * Adds starting attribute definition.
170 *
171 * @param annotation compiler annotation
172 * @param attrDef JAVA attribute definition
173 */
174 private static void addAttrStartDef(YangCompilerAnnotation annotation,
175 StringBuilder attrDef) {
176 if (annotation != null &&
177 annotation.getYangAppDataStructure() != null) {
178 switch (annotation.getYangAppDataStructure().getDataStructure()) {
179 case QUEUE: {
180 attrDef.append(QUEUE)
181 .append(DIAMOND_OPEN_BRACKET);
182 break;
183 }
184 case SET: {
185 attrDef.append(SET)
186 .append(DIAMOND_OPEN_BRACKET);
187 break;
188 }
189 default: {
190 attrDef.append(LIST)
191 .append(DIAMOND_OPEN_BRACKET);
192 }
193 }
194 } else {
195 attrDef.append(LIST).append(DIAMOND_OPEN_BRACKET);
196 }
197 }
198
199 /**
200 * Adds ending attribute definition.
201 *
202 * @param annotation compiler annotation
203 * @param attrDef JAVA attribute definition
204 * @param attrName name of attribute
205 */
206 private static void addAttrEndDef(YangCompilerAnnotation annotation,
207 StringBuilder attrDef, String attrName) {
208 if (annotation != null &&
209 annotation.getYangAppDataStructure() != null) {
210 attrDef.append(DIAMOND_CLOSE_BRACKET).append(SPACE)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530211 .append(attrName).append(SEMI_COLON)
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530212 .append(NEW_LINE);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530213 } else {
214 attrDef.append(DIAMOND_CLOSE_BRACKET).append(SPACE).append(attrName)
215 .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530216 .append(SPACE).append(ARRAY_LIST).append(SEMI_COLON)
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530217 .append(NEW_LINE);
218 }
219 }
220
221 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530222 * Returns string for enum's attribute.
223 *
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530224 * @param name name of attribute
225 * @param value value of the enum
226 * @return string for enum's attribute
227 */
228 public static String generateEnumAttributeString(String name, int value) {
229 String enumName = getEnumJavaAttribute(name);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530230 return enumJavaDocForInnerClass(name) + EIGHT_SPACE_INDENTATION +
231 enumName.toUpperCase() + brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
232 value + EMPTY_STRING, null) +
233 COMMA + NEW_LINE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530234 }
235
236 /**
237 * Returns string for enum's attribute for enum class.
238 *
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530239 * @param name name of attribute
240 * @param value value of the enum
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530241 * @return string for enum's attribute
242 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530243 public static String generateEnumAttributeStringWithSchemaName(
244 String name, int value) {
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530245 String enumName = getEnumJavaAttribute(name);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530246 String str = value + COMMA + SPACE + QUOTES + name + QUOTES;
247 return getJavaDoc(ENUM_ATTRIBUTE, name, false, null) +
248 FOUR_SPACE_INDENTATION + enumName.toUpperCase() + brackets(
249 OPEN_CLOSE_BRACKET_WITH_VALUE, str, null) + COMMA + NEW_LINE;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530250 }
251
Bharat saraswald14cbe82016-07-14 13:26:18 +0530252 /**
Bharat saraswald14cbe82016-07-14 13:26:18 +0530253 * Returns sorted import list.
254 *
255 * @param imports import list
256 * @return sorted import list
257 */
258 public static List<String> sortImports(List<String> imports) {
259 sort(imports);
260 return imports;
261 }
262
263 /**
264 * Returns event enum start.
265 *
266 * @return event enum start
267 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530268 static String getEventEnumTypeStart() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530269 return NEW_LINE + FOUR_SPACE_INDENTATION +
270 getDefaultDefinition(ENUM, TYPE, PUBLIC);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530271 }
272
273 /**
274 * Adds listener's imports.
275 *
276 * @param curNode currentYangNode.
277 * @param imports import list
278 * @param operation add or remove
Bharat saraswald14cbe82016-07-14 13:26:18 +0530279 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530280 public static void addListenersImport(YangNode curNode,
281 List<String> imports,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530282 Operation operation) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530283 String thisImport;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530284 TempJavaServiceFragmentFiles tempFiles =
285 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
286 .getServiceTempFiles();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530287 thisImport = tempFiles.getJavaImportData().getListenerServiceImport();
288 performOperationOnImports(imports, thisImport, operation);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530289 }
290
291 /**
292 * Performs given operations on import list.
293 *
294 * @param imports list of imports
295 * @param curImport current import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530296 * @param operation ADD or REMOVE
Bharat saraswald14cbe82016-07-14 13:26:18 +0530297 * @return import list
298 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530299 private static List<String> performOperationOnImports(List<String> imports,
300 String curImport,
301 Operation operation) {
302 switch (operation) {
303 case ADD:
304 imports.add(curImport);
305 break;
306 case REMOVE:
307 imports.remove(curImport);
308 break;
309 default:
310 throw new TranslatorException("Invalid operation type");
Bharat saraswald14cbe82016-07-14 13:26:18 +0530311 }
312 sortImports(imports);
313 return imports;
314 }
315
316 /**
Bharat saraswald14cbe82016-07-14 13:26:18 +0530317 * Returns integer attribute for enum's class to get the values.
318 *
319 * @param className enum's class name
320 * @return enum's attribute
321 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530322 static String getEnumsValueAttribute(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530323 return getJavaAttributeDefinition(null, INT, className,
324 false, PRIVATE, null) +
325 getJavaAttributeDefinition(null, STRING_DATA_TYPE, SCHEMA_NAME,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530326 false, PRIVATE, null) + NEW_LINE;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530327 }
328
329 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530330 * Returns attribute for augmentation.
331 *
332 * @return attribute for augmentation
333 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530334 static String addAugmentationAttribute() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530335 String[] array = {NEW_LINE, SEMI_COLON};
336 return trimAtLast(getJavaAttributeDefinition(
337 null, getAugmentMapTypeString(),
338 YANG_AUGMENTED_INFO_LOWER_CASE + MAP, false, PROTECTED,
339 null), array) + SPACE + EQUAL + SPACE + NEW + SPACE +
340 HASH_MAP + brackets(OPEN_CLOSE_DIAMOND, null, null) + brackets(
341 OPEN_CLOSE_BRACKET, null, null) + signatureClose();
342 }
343
344 /**
345 * Returns augment map return type.
346 *
347 * @return augment map return type
348 */
349 static String getAugmentMapTypeString() {
350 return MAP + DIAMOND_OPEN_BRACKET + CLASS_STRING + DIAMOND_OPEN_BRACKET +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530351 QUESTION_MARK + DIAMOND_CLOSE_BRACKET + COMMA + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530352 OBJECT_STRING + DIAMOND_CLOSE_BRACKET;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530353 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530354
355 /**
356 * Adds attribute for int ranges.
357 *
358 * @param modifier modifier for attribute
359 * @param addFirst true if int need to be added fist.
360 * @return attribute for int ranges
361 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530362 static String addStaticAttributeIntRange(String modifier,
363 boolean addFirst) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530364 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530365 return getTypeConflictAttributeStrings(modifier,
366 INT_MIN_RANGE_ATTR,
367 INT_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530368 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530369 return getTypeConflictAttributeStrings(modifier,
370 UINT_MIN_RANGE_ATTR,
371 UINT_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530372 }
373
374 /**
375 * Adds attribute for long ranges.
376 *
377 * @param modifier modifier for attribute
378 * @param addFirst if need to be added first
379 * @return attribute for long ranges
380 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530381 static String addStaticAttributeLongRange(String modifier,
382 boolean addFirst) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530383 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530384 return getTypeConflictAttributeStrings(modifier,
385 LONG_MIN_RANGE_ATTR,
386 LONG_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530387 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530388 return getTypeConflictAttributeStrings(modifier,
389 ULONG_MIN_RANGE_ATTR,
390 ULONG_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530391 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530392
393 /**
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530394 * Adds attribute for long ranges.
395 *
396 * @param modifier modifier for attribute
397 * @param addFirst if need to be added first
398 * @return attribute for long ranges
399 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530400 static String addStaticAttributeShortRange(String modifier,
401 boolean addFirst) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530402 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530403 return getTypeConflictAttributeStrings(modifier,
404 SHORT_MIN_RANGE_ATTR,
405 SHORT_MAX_RANGE_ATTR);
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530406 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530407 return getTypeConflictAttributeStrings(modifier,
408 UINT8_MIN_RANGE_ATTR,
409 UINT8_MAX_RANGE_ATTR);
410 }
411
412 /**
413 * Returns attribute for conflicting type in union.
414 *
415 * @param modifier modifier
416 * @param attr1 attribute one
417 * @param att2 attribute two
418 * @return attribute for conflicting type in union
419 */
420 private static String getTypeConflictAttributeStrings(String modifier,
421 String attr1,
422 String att2) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530423 return FOUR_SPACE_INDENTATION + modifier + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530424 attr1 + FOUR_SPACE_INDENTATION + modifier +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530425 SPACE + att2 + NEW_LINE;
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530426 }
427
428 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530429 * Returns operation type enum.
430 *
431 * @return operation type enum
432 */
433 static String getOperationTypeEnum() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530434 return " /**\n" +
435 " * Specify the node specific operation in protocols " +
436 "like NETCONF.\n" +
437 " * Applicable in protocol edit operation, not applicable" +
438 " in query operation\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530439 " */\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530440 " public enum OnosYangNodeOperationType {\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530441 " MERGE,\n" +
442 " REPLACE,\n" +
443 " CREATE,\n" +
444 " DELETE,\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530445 " REMOVE,\n" +
446 " NONE\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530447 " }\n";
448 }
449
450 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530451 * Returns operation type enum, leaf value set attribute and select leaf
452 * attribute.
Bharat saraswal8beac342016-08-04 02:00:03 +0530453 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530454 * @return operation attributes for value and select leaf flags
Bharat saraswal8beac342016-08-04 02:00:03 +0530455 */
456 static String getOperationAttributes() {
457 return " /**\n" +
458 " * Identify the leafs whose value are explicitly set\n" +
459 " * Applicable in protocol edit and query operation\n" +
460 " */\n" +
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530461 " private BitSet valueLeafFlags = new BitSet();\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530462 "\n" +
463 " /**\n" +
464 " * Identify the leafs to be selected, in a query operation\n" +
465 " */\n" +
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530466 " private BitSet selectLeafFlags = new BitSet();\n";
Bharat saraswal8beac342016-08-04 02:00:03 +0530467 }
468
469 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530470 * Returns operation type enum, leaf value set attribute and select leaf
471 * attribute for constructor.
Bharat saraswal8beac342016-08-04 02:00:03 +0530472 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530473 * @return operation attributes for constructor
Bharat saraswal8beac342016-08-04 02:00:03 +0530474 */
475 static String getOperationAttributeForConstructor() {
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530476 return " this.valueLeafFlags = builderObject.getValueLeafFlags();\n" +
477 " this.selectLeafFlags = builderObject.getSelectLeafFlags();\n";
Bharat saraswal8beac342016-08-04 02:00:03 +0530478 }
479
480 /**
Bharat saraswale3175d32016-08-31 17:50:11 +0530481 * Returns attribute in constructor for yang augmented info map.
482 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530483 * @return augment info map
Bharat saraswale3175d32016-08-31 17:50:11 +0530484 */
485 static String getYangAugmentedMapObjectForConstruct() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530486 return " this.yangAugmentedInfoMap = builderObject" +
487 ".yangAugmentedInfoMap();\n";
Bharat saraswale3175d32016-08-31 17:50:11 +0530488 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530489
490 /**
491 * Returns set value parameter for union class.
492 *
493 * @return set value parameter for union class.
494 */
495 static String getSetValueParaForUnionClass() {
496 String[] array = {NEW_LINE, SEMI_COLON};
497 return new StringBuilder().append(trimAtLast(
498 getJavaAttributeDefinition(null, BIT_SET, SET_VALUE_PARA,
499 false, PRIVATE, null), array))
500 .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
501 .append(SPACE).append(BIT_SET).append(OPEN_CLOSE_BRACKET_STRING)
502 .append(signatureClose()).toString();
503 }
Bharat saraswal97459962016-02-20 21:57:16 +0530504}