blob: 5671dd7d08332fbfeb804f8b1c8d449eb8413f5c [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 saraswalaf413b82016-07-14 15:18:20 +053039import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053040import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswal84366c52016-03-23 19:40:35 +053041import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
42import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
Bharat saraswal8beac342016-08-04 02:00:03 +053043import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053044import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswald14cbe82016-07-14 13:26:18 +053045import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053046import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
47import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswalaf413b82016-07-14 15:18:20 +053048import static org.onosproject.yangutils.utils.UtilConstants.HASH_MAP;
Bharat saraswald14cbe82016-07-14 13:26:18 +053049import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal64e7e232016-07-14 23:33:55 +053050import static org.onosproject.yangutils.utils.UtilConstants.INT_MAX_RANGE_ATTR;
51import static org.onosproject.yangutils.utils.UtilConstants.INT_MIN_RANGE_ATTR;
Bharat saraswal84366c52016-03-23 19:40:35 +053052import static org.onosproject.yangutils.utils.UtilConstants.LIST;
Bharat saraswal64e7e232016-07-14 23:33:55 +053053import static org.onosproject.yangutils.utils.UtilConstants.LONG_MAX_RANGE_ATTR;
54import static org.onosproject.yangutils.utils.UtilConstants.LONG_MIN_RANGE_ATTR;
Bharat saraswalaf413b82016-07-14 15:18:20 +053055import static org.onosproject.yangutils.utils.UtilConstants.MAP;
56import static org.onosproject.yangutils.utils.UtilConstants.NEW;
Bharat saraswal84366c52016-03-23 19:40:35 +053057import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +053058import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +053059import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
60import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053061import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswald14cbe82016-07-14 13:26:18 +053062import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswalaf413b82016-07-14 15:18:20 +053063import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
Vidyashree Ramab3670472016-08-06 15:49:56 +053064import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053065import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
66import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053067import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Vidyashree Ramab3670472016-08-06 15:49:56 +053068import static org.onosproject.yangutils.utils.UtilConstants.SET;
Bharat saraswal2da23bf2016-08-25 15:28:39 +053069import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE_ATTR;
70import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE_ATTR;
Bharat saraswal84366c52016-03-23 19:40:35 +053071import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053072import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswald14cbe82016-07-14 13:26:18 +053073import static org.onosproject.yangutils.utils.UtilConstants.TYPE;
Bharat saraswal2da23bf2016-08-25 15:28:39 +053074import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MAX_RANGE_ATTR;
75import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MIN_RANGE_ATTR;
Bharat saraswal64e7e232016-07-14 23:33:55 +053076import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE_ATTR;
77import static org.onosproject.yangutils.utils.UtilConstants.UINT_MIN_RANGE_ATTR;
78import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MAX_RANGE_ATTR;
79import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MIN_RANGE_ATTR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053080import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053081import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053082import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.enumJavaDocForInnerClass;
Bharat saraswald14cbe82016-07-14 13:26:18 +053083import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053084import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053085
Bharat saraswal97459962016-02-20 21:57:16 +053086/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053087 * Represents utility class to generate the java snippet.
Bharat saraswal97459962016-02-20 21:57:16 +053088 */
89public final class JavaCodeSnippetGen {
90
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053091 // No instantiation.
Bharat saraswal97459962016-02-20 21:57:16 +053092 private JavaCodeSnippetGen() {
93 }
94
95 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053096 * Returns the java file header comment.
Bharat saraswal97459962016-02-20 21:57:16 +053097 *
Vinod Kumar S08710982016-03-03 19:55:30 +053098 * @return the java file header comment
Bharat saraswal97459962016-02-20 21:57:16 +053099 */
100 public static String getFileHeaderComment() {
101
Bharat saraswal8beac342016-08-04 02:00:03 +0530102 /*
Bharat saraswal97459962016-02-20 21:57:16 +0530103 * TODO return the file header.
104 */
105 return null;
106 }
107
108 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530109 * Returns the textual java code information corresponding to the import
110 * list.
Bharat saraswal97459962016-02-20 21:57:16 +0530111 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530112 * @param importInfo import info
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530113 * @return the textual java code information corresponding to the import
114 * list
Bharat saraswal97459962016-02-20 21:57:16 +0530115 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530116 static String getImportText(JavaQualifiedTypeInfoTranslator importInfo) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530117 return getImportString(importInfo.getPkgInfo(), importInfo
118 .getClassInfo());
Bharat saraswal97459962016-02-20 21:57:16 +0530119 }
120
121 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530122 * Returns the textual java code for attribute definition in class.
Bharat saraswal97459962016-02-20 21:57:16 +0530123 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530124 * @param typePkg Package of the attribute type
125 * @param attrType java attribute type
126 * @param attrName name of the attribute
127 * @param isList is list attribute
128 * @param accessType attribute access type
129 * @param annotation compiler annotation
Bharat saraswal64e7e232016-07-14 23:33:55 +0530130 * @return the textual java code for attribute definition in class
Bharat saraswal97459962016-02-20 21:57:16 +0530131 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530132 public static String getJavaAttributeDefinition(String typePkg,
133 String attrType,
134 String attrName,
135 boolean isList,
136 String accessType,
137 YangCompilerAnnotation annotation) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530138 StringBuilder attrDef = new StringBuilder(FOUR_SPACE_INDENTATION);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530139 attrDef.append(accessType).append(SPACE);
Vinod Kumar S08710982016-03-03 19:55:30 +0530140
Bharat saraswal022dae92016-03-04 20:08:09 +0530141 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530142 if (typePkg != null) {
143 attrDef.append(typePkg).append(PERIOD);
Bharat saraswal022dae92016-03-04 20:08:09 +0530144 }
145
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530146 attrDef.append(attrType).append(SPACE)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530147 .append(attrName).append(SEMI_COLON)
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530148 .append(NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530149 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530150 // Add starting definition.
151 addAttrStartDef(annotation, attrDef);
152
153 if (typePkg != null) {
154 attrDef.append(typePkg).append(PERIOD);
Vidyashree Ramab3670472016-08-06 15:49:56 +0530155 }
156
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530157 attrDef.append(attrType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530158
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530159 // Add ending definition.
160 addAttrEndDef(annotation, attrDef, attrName);
Bharat saraswal5e3c45c2016-02-22 22:15:21 +0530161 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530162 return attrDef.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530163 }
164
165 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530166 * Adds starting attribute definition.
167 *
168 * @param annotation compiler annotation
169 * @param attrDef JAVA attribute definition
170 */
171 private static void addAttrStartDef(YangCompilerAnnotation annotation,
172 StringBuilder attrDef) {
173 if (annotation != null &&
174 annotation.getYangAppDataStructure() != null) {
175 switch (annotation.getYangAppDataStructure().getDataStructure()) {
176 case QUEUE: {
177 attrDef.append(QUEUE)
178 .append(DIAMOND_OPEN_BRACKET);
179 break;
180 }
181 case SET: {
182 attrDef.append(SET)
183 .append(DIAMOND_OPEN_BRACKET);
184 break;
185 }
186 default: {
187 attrDef.append(LIST)
188 .append(DIAMOND_OPEN_BRACKET);
189 }
190 }
191 } else {
192 attrDef.append(LIST).append(DIAMOND_OPEN_BRACKET);
193 }
194 }
195
196 /**
197 * Adds ending attribute definition.
198 *
199 * @param annotation compiler annotation
200 * @param attrDef JAVA attribute definition
201 * @param attrName name of attribute
202 */
203 private static void addAttrEndDef(YangCompilerAnnotation annotation,
204 StringBuilder attrDef, String attrName) {
205 if (annotation != null &&
206 annotation.getYangAppDataStructure() != null) {
207 attrDef.append(DIAMOND_CLOSE_BRACKET).append(SPACE)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530208 .append(attrName).append(SEMI_COLON)
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530209 .append(NEW_LINE);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530210 } else {
211 attrDef.append(DIAMOND_CLOSE_BRACKET).append(SPACE).append(attrName)
212 .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530213 .append(SPACE).append(ARRAY_LIST).append(SEMI_COLON)
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530214 .append(NEW_LINE);
215 }
216 }
217
218 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530219 * Returns string for enum's attribute.
220 *
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530221 * @param name name of attribute
222 * @param value value of the enum
223 * @return string for enum's attribute
224 */
225 public static String generateEnumAttributeString(String name, int value) {
226 String enumName = getEnumJavaAttribute(name);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530227 return enumJavaDocForInnerClass(name) + EIGHT_SPACE_INDENTATION +
228 enumName.toUpperCase() + brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
229 value + EMPTY_STRING, null) +
230 COMMA + NEW_LINE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530231 }
232
233 /**
234 * Returns string for enum's attribute for enum class.
235 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530236 * @param name name of attribute
237 * @param value value of the enum
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530238 * @return string for enum's attribute
239 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530240 public static String generateEnumAttributeStringWithSchemaName(
241 String name, int value) {
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530242 String enumName = getEnumJavaAttribute(name);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530243 String str = value + COMMA + SPACE + QUOTES + name + QUOTES;
244 return getJavaDoc(ENUM_ATTRIBUTE, name, false, null) +
245 FOUR_SPACE_INDENTATION + enumName.toUpperCase() + brackets(
246 OPEN_CLOSE_BRACKET_WITH_VALUE, str, null) + COMMA + NEW_LINE;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530247 }
248
Bharat saraswald14cbe82016-07-14 13:26:18 +0530249 /**
Bharat saraswald14cbe82016-07-14 13:26:18 +0530250 * Returns sorted import list.
251 *
252 * @param imports import list
253 * @return sorted import list
254 */
255 public static List<String> sortImports(List<String> imports) {
256 sort(imports);
257 return imports;
258 }
259
260 /**
261 * Returns event enum start.
262 *
263 * @return event enum start
264 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530265 static String getEventEnumTypeStart() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530266 return NEW_LINE + FOUR_SPACE_INDENTATION +
267 getDefaultDefinition(ENUM, TYPE, PUBLIC);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530268 }
269
270 /**
271 * Adds listener's imports.
272 *
273 * @param curNode currentYangNode.
274 * @param imports import list
275 * @param operation add or remove
Bharat saraswald14cbe82016-07-14 13:26:18 +0530276 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530277 public static void addListenersImport(YangNode curNode,
278 List<String> imports,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530279 Operation operation) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530280 String thisImport;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530281 TempJavaServiceFragmentFiles tempFiles =
282 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
283 .getServiceTempFiles();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530284 thisImport = tempFiles.getJavaImportData().getListenerServiceImport();
285 performOperationOnImports(imports, thisImport, operation);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530286 }
287
288 /**
289 * Performs given operations on import list.
290 *
291 * @param imports list of imports
292 * @param curImport current import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530293 * @param operation ADD or REMOVE
Bharat saraswald14cbe82016-07-14 13:26:18 +0530294 * @return import list
295 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530296 private static List<String> performOperationOnImports(List<String> imports,
297 String curImport,
298 Operation operation) {
299 switch (operation) {
300 case ADD:
301 imports.add(curImport);
302 break;
303 case REMOVE:
304 imports.remove(curImport);
305 break;
306 default:
307 throw new TranslatorException("Invalid operation type");
Bharat saraswald14cbe82016-07-14 13:26:18 +0530308 }
309 sortImports(imports);
310 return imports;
311 }
312
313 /**
Bharat saraswald14cbe82016-07-14 13:26:18 +0530314 * Returns integer attribute for enum's class to get the values.
315 *
316 * @param className enum's class name
317 * @return enum's attribute
318 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530319 static String getEnumsValueAttribute(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530320 return getJavaAttributeDefinition(null, INT, className,
321 false, PRIVATE, null) +
322 getJavaAttributeDefinition(null, STRING_DATA_TYPE, SCHEMA_NAME,
323 false, PRIVATE, null);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530324 }
325
326 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530327 * Returns attribute for augmentation.
328 *
329 * @return attribute for augmentation
330 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530331 static String addAugmentationAttribute() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530332 String[] array = {NEW_LINE, SEMI_COLON};
333 return trimAtLast(getJavaAttributeDefinition(
334 null, getAugmentMapTypeString(),
335 YANG_AUGMENTED_INFO_LOWER_CASE + MAP, false, PROTECTED,
336 null), array) + SPACE + EQUAL + SPACE + NEW + SPACE +
337 HASH_MAP + brackets(OPEN_CLOSE_DIAMOND, null, null) + brackets(
338 OPEN_CLOSE_BRACKET, null, null) + signatureClose();
339 }
340
341 /**
342 * Returns augment map return type.
343 *
344 * @return augment map return type
345 */
346 static String getAugmentMapTypeString() {
347 return MAP + DIAMOND_OPEN_BRACKET + CLASS_STRING + DIAMOND_OPEN_BRACKET +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530348 QUESTION_MARK + DIAMOND_CLOSE_BRACKET + COMMA + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530349 OBJECT_STRING + DIAMOND_CLOSE_BRACKET;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530350 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530351
352 /**
353 * Adds attribute for int ranges.
354 *
355 * @param modifier modifier for attribute
356 * @param addFirst true if int need to be added fist.
357 * @return attribute for int ranges
358 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530359 static String addStaticAttributeIntRange(String modifier,
360 boolean addFirst) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530361 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530362 return getTypeConflictAttributeStrings(modifier,
363 INT_MIN_RANGE_ATTR,
364 INT_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530365 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530366 return getTypeConflictAttributeStrings(modifier,
367 UINT_MIN_RANGE_ATTR,
368 UINT_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530369 }
370
371 /**
372 * Adds attribute for long ranges.
373 *
374 * @param modifier modifier for attribute
375 * @param addFirst if need to be added first
376 * @return attribute for long ranges
377 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530378 static String addStaticAttributeLongRange(String modifier,
379 boolean addFirst) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530380 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530381 return getTypeConflictAttributeStrings(modifier,
382 LONG_MIN_RANGE_ATTR,
383 LONG_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530384 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530385 return getTypeConflictAttributeStrings(modifier,
386 ULONG_MIN_RANGE_ATTR,
387 ULONG_MAX_RANGE_ATTR);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530388 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530389
390 /**
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530391 * Adds attribute for long ranges.
392 *
393 * @param modifier modifier for attribute
394 * @param addFirst if need to be added first
395 * @return attribute for long ranges
396 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530397 static String addStaticAttributeShortRange(String modifier,
398 boolean addFirst) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530399 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530400 return getTypeConflictAttributeStrings(modifier,
401 SHORT_MIN_RANGE_ATTR,
402 SHORT_MAX_RANGE_ATTR);
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530403 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530404 return getTypeConflictAttributeStrings(modifier,
405 UINT8_MIN_RANGE_ATTR,
406 UINT8_MAX_RANGE_ATTR);
407 }
408
409 /**
410 * Returns attribute for conflicting type in union.
411 *
412 * @param modifier modifier
413 * @param attr1 attribute one
414 * @param att2 attribute two
415 * @return attribute for conflicting type in union
416 */
417 private static String getTypeConflictAttributeStrings(String modifier,
418 String attr1,
419 String att2) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530420 return NEW_LINE + FOUR_SPACE_INDENTATION + modifier + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530421 attr1 + FOUR_SPACE_INDENTATION + modifier +
422 SPACE + att2;
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530423 }
424
425 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530426 * Returns operation type enum.
427 *
428 * @return operation type enum
429 */
430 static String getOperationTypeEnum() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530431 return " /**\n" +
432 " * Specify the node specific operation in protocols " +
433 "like NETCONF.\n" +
434 " * Applicable in protocol edit operation, not applicable" +
435 " in query operation\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530436 " */\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530437 " public enum OnosYangNodeOperationType {\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530438 " MERGE,\n" +
439 " REPLACE,\n" +
440 " CREATE,\n" +
441 " DELETE,\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530442 " REMOVE,\n" +
443 " NONE\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530444 " }\n";
445 }
446
447 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530448 * Returns operation type enum, leaf value set attribute and select leaf
449 * attribute.
Bharat saraswal8beac342016-08-04 02:00:03 +0530450 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530451 * @return operation attributes for value and select leaf flags
Bharat saraswal8beac342016-08-04 02:00:03 +0530452 */
453 static String getOperationAttributes() {
454 return " /**\n" +
455 " * Identify the leafs whose value are explicitly set\n" +
456 " * Applicable in protocol edit and query operation\n" +
457 " */\n" +
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530458 " private BitSet valueLeafFlags = new BitSet();\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +0530459 "\n" +
460 " /**\n" +
461 " * Identify the leafs to be selected, in a query operation\n" +
462 " */\n" +
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530463 " private BitSet selectLeafFlags = new BitSet();\n";
Bharat saraswal8beac342016-08-04 02:00:03 +0530464 }
465
466 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530467 * Returns operation type enum, leaf value set attribute and select leaf
468 * attribute for constructor.
Bharat saraswal8beac342016-08-04 02:00:03 +0530469 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530470 * @return operation attributes for constructor
Bharat saraswal8beac342016-08-04 02:00:03 +0530471 */
472 static String getOperationAttributeForConstructor() {
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530473 return " this.valueLeafFlags = builderObject.getValueLeafFlags();\n" +
474 " this.selectLeafFlags = builderObject.getSelectLeafFlags();\n";
Bharat saraswal8beac342016-08-04 02:00:03 +0530475 }
476
477 /**
Bharat saraswale3175d32016-08-31 17:50:11 +0530478 * Returns attribute in constructor for yang augmented info map.
479 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530480 * @return augment info map
Bharat saraswale3175d32016-08-31 17:50:11 +0530481 */
482 static String getYangAugmentedMapObjectForConstruct() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530483 return " this.yangAugmentedInfoMap = builderObject" +
484 ".yangAugmentedInfoMap();\n";
Bharat saraswale3175d32016-08-31 17:50:11 +0530485 }
Bharat saraswal97459962016-02-20 21:57:16 +0530486}