blob: 10ec3c2bbdaa05bfced9019ba5ada4c77d504764 [file] [log] [blame]
Bharat saraswal870c56f2016-02-20 21:57:16 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal870c56f2016-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
19import java.util.ArrayList;
janani b4a6711a2016-05-17 13:12:22 +053020import java.util.Arrays;
janani bde4ffab2016-04-15 16:18:30 +053021import java.util.List;
Bharat saraswal870c56f2016-02-20 21:57:16 +053022
Vinod Kumar S38046502016-03-23 15:30:27 +053023import org.onosproject.yangutils.datamodel.YangNode;
b.janani1fef2732016-03-04 12:29:05 +053024import org.onosproject.yangutils.translator.exception.TranslatorException;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053025import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Vinod Kumar S38046502016-03-23 15:30:27 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Bharat saraswale2d51d62016-03-23 19:40:35 +053027
28import static org.onosproject.yangutils.utils.UtilConstants.COLAN;
29import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_BASE_PKG;
30import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
31import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
32import static org.onosproject.yangutils.utils.UtilConstants.JAVA_KEY_WORDS;
33import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
34import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
janani bde4ffab2016-04-15 16:18:30 +053035import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_DIGITS_WITH_SINGLE_LETTER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053036import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_FIRST_DIGIT;
janani bde4ffab2016-04-15 16:18:30 +053037import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_HYPHEN;
38import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_IDENTIFIER_SPECIAL_CHAR;
39import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_PERIOD;
40import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_SINGLE_LETTER;
41import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_UNDERSCORE;
42import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_ALL_SPECIAL_CHAR;
janani b4a6711a2016-05-17 13:12:22 +053043import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_DIGITS;
44import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE;
45import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES;
46import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_UPPERCASE;
Bharat saraswal2f11f652016-03-25 18:19:46 +053047import static org.onosproject.yangutils.utils.UtilConstants.REVISION_PREFIX;
Bharat saraswale2d51d62016-03-23 19:40:35 +053048import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
49import static org.onosproject.yangutils.utils.UtilConstants.UNDER_SCORE;
Bharat saraswal2f11f652016-03-25 18:19:46 +053050import static org.onosproject.yangutils.utils.UtilConstants.VERSION_PREFIX;
janani bde4ffab2016-04-15 16:18:30 +053051import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUTO_PREFIX;
Bharat saraswal870c56f2016-02-20 21:57:16 +053052
53/**
Bharat saraswald9822e92016-04-05 15:13:44 +053054 * Represents an utility Class for translating the name from YANG to java convention.
Bharat saraswal870c56f2016-02-20 21:57:16 +053055 */
56public final class JavaIdentifierSyntax {
57
b.janani1fef2732016-03-04 12:29:05 +053058 private static final int MAX_MONTHS = 12;
59 private static final int MAX_DAYS = 31;
60 private static final int INDEX_ZERO = 0;
61 private static final int INDEX_ONE = 1;
62 private static final int INDEX_TWO = 2;
Bharat saraswal6ef0b762016-04-05 12:45:45 +053063 private static final int VALUE_CHECK = 10;
64 private static final String ZERO = "0";
b.janani1fef2732016-03-04 12:29:05 +053065
Bharat saraswal870c56f2016-02-20 21:57:16 +053066 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053067 * Create instance of java identifier syntax.
Bharat saraswal870c56f2016-02-20 21:57:16 +053068 */
69 private JavaIdentifierSyntax() {
70 }
71
72 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053073 * Returns the root package string.
Bharat saraswal870c56f2016-02-20 21:57:16 +053074 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +053075 * @param version YANG version
76 * @param nameSpace name space of the module
Bharat saraswal870c56f2016-02-20 21:57:16 +053077 * @param revision revision of the module defined
Vinod Kumar Sc4216002016-03-03 19:55:30 +053078 * @return returns the root package string
Bharat saraswal870c56f2016-02-20 21:57:16 +053079 */
80 public static String getRootPackage(byte version, String nameSpace, String revision) {
81
82 String pkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +053083 pkg = DEFAULT_BASE_PKG;
84 pkg = pkg + PERIOD;
Bharat saraswal870c56f2016-02-20 21:57:16 +053085 pkg = pkg + getYangVersion(version);
Bharat saraswale2d51d62016-03-23 19:40:35 +053086 pkg = pkg + PERIOD;
Bharat saraswal870c56f2016-02-20 21:57:16 +053087 pkg = pkg + getPkgFromNameSpace(nameSpace);
Bharat saraswale2d51d62016-03-23 19:40:35 +053088 pkg = pkg + PERIOD;
Bharat saraswal870c56f2016-02-20 21:57:16 +053089 pkg = pkg + getYangRevisionStr(revision);
90
Bharat saraswal4bf8b152016-02-25 02:26:43 +053091 return pkg.toLowerCase();
Bharat saraswal870c56f2016-02-20 21:57:16 +053092 }
93
94 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053095 * Returns the contained data model parent node.
Vinod Kumar S38046502016-03-23 15:30:27 +053096 *
97 * @param currentNode current node which parent contained node is required
98 * @return parent node in which the current node is an attribute
99 */
100 public static YangNode getParentNodeInGenCode(YangNode currentNode) {
101
102 /*
103 * TODO: recursive parent lookup to support choice/augment/uses. TODO:
104 * need to check if this needs to be updated for
105 * choice/case/augment/grouping
106 */
107 return currentNode.getParent();
108 }
109
110 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530111 * Returns the node package string.
Vinod Kumar S38046502016-03-23 15:30:27 +0530112 *
113 * @param curNode current java node whose package string needs to be set
114 * @return returns the root package string
115 */
116 public static String getCurNodePackage(YangNode curNode) {
117
118 String pkg;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530119 if (!(curNode instanceof JavaFileInfoContainer)
Vinod Kumar S38046502016-03-23 15:30:27 +0530120 || curNode.getParent() == null) {
Bharat saraswal6ef0b762016-04-05 12:45:45 +0530121 throw new TranslatorException("missing parent node to get current node's package");
Vinod Kumar S38046502016-03-23 15:30:27 +0530122 }
123
124 YangNode parentNode = getParentNodeInGenCode(curNode);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530125 if (!(parentNode instanceof JavaFileInfoContainer)) {
Bharat saraswal6ef0b762016-04-05 12:45:45 +0530126 throw new TranslatorException("missing parent java node to get current node's package");
Vinod Kumar S38046502016-03-23 15:30:27 +0530127 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530128 JavaFileInfo parentJavaFileHandle = ((JavaFileInfoContainer) parentNode).getJavaFileInfo();
Bharat saraswale2d51d62016-03-23 19:40:35 +0530129 pkg = parentJavaFileHandle.getPackage() + PERIOD + parentJavaFileHandle.getJavaName();
Vinod Kumar S38046502016-03-23 15:30:27 +0530130 return pkg.toLowerCase();
131 }
132
133 /**
Bharat saraswal870c56f2016-02-20 21:57:16 +0530134 * Returns version.
135 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530136 * @param ver YANG version
Bharat saraswal870c56f2016-02-20 21:57:16 +0530137 * @return version
138 */
139 private static String getYangVersion(byte ver) {
Bharat saraswal2f11f652016-03-25 18:19:46 +0530140 return VERSION_PREFIX + ver;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530141 }
142
143 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530144 * Returns package name from name space.
Bharat saraswal870c56f2016-02-20 21:57:16 +0530145 *
146 * @param nameSpace name space of YANG module
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530147 * @return java package name as per java rules
Bharat saraswal870c56f2016-02-20 21:57:16 +0530148 */
Bharat saraswald9822e92016-04-05 15:13:44 +0530149 private static String getPkgFromNameSpace(String nameSpace) {
Vinod Kumar S38046502016-03-23 15:30:27 +0530150
Bharat saraswal870c56f2016-02-20 21:57:16 +0530151 ArrayList<String> pkgArr = new ArrayList<String>();
Bharat saraswale2d51d62016-03-23 19:40:35 +0530152 nameSpace = nameSpace.replace(QUOTES, EMPTY_STRING);
janani bde4ffab2016-04-15 16:18:30 +0530153 String properNameSpace = nameSpace.replaceAll(REGEX_WITH_ALL_SPECIAL_CHAR, COLAN);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530154 String[] nameSpaceArr = properNameSpace.split(COLAN);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530155
156 for (String nameSpaceString : nameSpaceArr) {
157 pkgArr.add(nameSpaceString);
158 }
159 return getPkgFrmArr(pkgArr);
160 }
161
162 /**
163 * Returns revision string array.
164 *
165 * @param date YANG module revision
166 * @return revision string
b.janani1fef2732016-03-04 12:29:05 +0530167 * @throws TranslatorException when date is invalid.
Bharat saraswal870c56f2016-02-20 21:57:16 +0530168 */
Bharat saraswald9822e92016-04-05 15:13:44 +0530169 private static String getYangRevisionStr(String date) throws TranslatorException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530170
Bharat saraswale2d51d62016-03-23 19:40:35 +0530171 String[] revisionArr = date.split(HYPHEN);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530172
Bharat saraswal2f11f652016-03-25 18:19:46 +0530173 String rev = REVISION_PREFIX;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530174 rev = rev + revisionArr[INDEX_ZERO];
b.janani1fef2732016-03-04 12:29:05 +0530175
Vinod Kumar S38046502016-03-23 15:30:27 +0530176 if (Integer.parseInt(revisionArr[INDEX_ONE]) <= MAX_MONTHS
b.janani1fef2732016-03-04 12:29:05 +0530177 && Integer.parseInt(revisionArr[INDEX_TWO]) <= MAX_DAYS) {
178 for (int i = INDEX_ONE; i < revisionArr.length; i++) {
179
180 Integer val = Integer.parseInt(revisionArr[i]);
Bharat saraswal6ef0b762016-04-05 12:45:45 +0530181 if (val < VALUE_CHECK) {
182 rev = rev + ZERO;
b.janani1fef2732016-03-04 12:29:05 +0530183 }
184 rev = rev + val;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530185 }
b.janani1fef2732016-03-04 12:29:05 +0530186
187 return rev;
188 } else {
189 throw new TranslatorException("Date in revision is not proper: " + date);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530190 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530191 }
192
193 /**
194 * Returns the package string.
195 *
196 * @param pkgArr package array
197 * @return package string
198 */
Bharat saraswald9822e92016-04-05 15:13:44 +0530199 private static String getPkgFrmArr(ArrayList<String> pkgArr) {
Bharat saraswal870c56f2016-02-20 21:57:16 +0530200
Bharat saraswale2d51d62016-03-23 19:40:35 +0530201 String pkg = EMPTY_STRING;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530202 int size = pkgArr.size();
203 int i = 0;
204 for (String member : pkgArr) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530205 boolean presenceOfKeyword = JAVA_KEY_WORDS.contains(member);
206 if (presenceOfKeyword || member.matches(REGEX_FOR_FIRST_DIGIT)) {
janani bde4ffab2016-04-15 16:18:30 +0530207 member = YANG_AUTO_PREFIX + member;
b.janani1fef2732016-03-04 12:29:05 +0530208 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530209 pkg = pkg + member;
210 if (i != size - 1) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530211 pkg = pkg + PERIOD;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530212 }
213 i++;
214 }
215 return pkg;
216 }
217
218 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530219 * Returns package sub name from YANG identifier name.
Bharat saraswal870c56f2016-02-20 21:57:16 +0530220 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530221 * @param name YANG identifier name
222 * @return java package sub name as per java rules
Bharat saraswal870c56f2016-02-20 21:57:16 +0530223 */
224 public static String getSubPkgFromName(String name) {
Vinod Kumar S38046502016-03-23 15:30:27 +0530225
Bharat saraswal870c56f2016-02-20 21:57:16 +0530226 ArrayList<String> pkgArr = new ArrayList<String>();
Bharat saraswale2d51d62016-03-23 19:40:35 +0530227 String[] nameArr = name.split(COLAN);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530228
229 for (String nameString : nameArr) {
230 pkgArr.add(nameString);
231 }
232 return getPkgFrmArr(pkgArr);
233 }
234
235 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530236 * Returns the YANG identifier name as java identifier.
Bharat saraswal870c56f2016-02-20 21:57:16 +0530237 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530238 * @param yangIdentifier identifier in YANG file
janani b4a6711a2016-05-17 13:12:22 +0530239 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswal870c56f2016-02-20 21:57:16 +0530240 * @return corresponding java identifier
241 */
janani bde4ffab2016-04-15 16:18:30 +0530242 public static String getCamelCase(String yangIdentifier, YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar S38046502016-03-23 15:30:27 +0530243
janani bde4ffab2016-04-15 16:18:30 +0530244 if (conflictResolver != null) {
245 String replacementForHyphen = conflictResolver.getReplacementForHyphen();
246 String replacementForPeriod = conflictResolver.getReplacementForPeriod();
247 String replacementForUnderscore = conflictResolver.getReplacementForUnderscore();
248 if (replacementForPeriod != null) {
249 yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_PERIOD,
250 PERIOD + replacementForPeriod.toLowerCase() + PERIOD);
251 }
252 if (replacementForUnderscore != null) {
253 yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_UNDERSCORE,
254 UNDER_SCORE + replacementForUnderscore.toLowerCase() + UNDER_SCORE);
255 }
256 if (replacementForHyphen != null) {
257 yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_HYPHEN,
258 HYPHEN + replacementForHyphen.toLowerCase() + HYPHEN);
259 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530260 }
janani bde4ffab2016-04-15 16:18:30 +0530261 yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_IDENTIFIER_SPECIAL_CHAR, COLAN);
262 String[] strArray = yangIdentifier.split(COLAN);
263 if (strArray[0].isEmpty()) {
264 List<String> stringArrangement = new ArrayList<String>();
265 for (int i = 1; i < strArray.length; i++) {
266 stringArrangement.add(strArray[i]);
267 }
268 strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
269 }
janani b4a6711a2016-05-17 13:12:22 +0530270 return upperCaseConflictResolver(strArray);
271 }
272
273 /**
274 * Resolves the conflict when input has uppercase.
275 *
276 * @param stringArray containing strings for uppercase conflict resolver
277 * @return camel cased string
278 */
279 private static String upperCaseConflictResolver(String[] stringArray) {
280
281 for (int l = 0; l < stringArray.length; l++) {
282 String[] upperCaseSplitArray = stringArray[l].split(REGEX_WITH_UPPERCASE);
283 for (int m = 0; m < upperCaseSplitArray.length; m++) {
284 if (upperCaseSplitArray[m].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
285 int check = m;
286 while (check + 1 < upperCaseSplitArray.length) {
287 if (upperCaseSplitArray[check + 1].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
288 upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
289 check = check + 1;
290 } else if (upperCaseSplitArray[check + 1]
291 .matches(REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES)) {
292 upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
293 break;
294 } else {
295 break;
296 }
297 }
298 }
299 }
300 StringBuilder strBuilder = new StringBuilder();
301 for (String element : upperCaseSplitArray) {
302 strBuilder.append(element);
303 }
304 stringArray[l] = strBuilder.toString();
305 }
306 List<String> result = new ArrayList<String>();
307 for (String element : stringArray) {
308 String[] capitalCaseSplitArray = element.split(REGEX_WITH_UPPERCASE);
309 for (String letter : capitalCaseSplitArray) {
310 String[] arrayForAddition = letter.split(REGEX_WITH_DIGITS);
311 List<String> list = Arrays.asList(arrayForAddition);
312 for (String str : list) {
313 if (str != null && !str.isEmpty()) {
314 result.add(str);
315 }
316 }
317 }
318 }
319 stringArray = result.toArray(new String[result.size()]);
320 return applyCamelCaseRule(stringArray);
janani bde4ffab2016-04-15 16:18:30 +0530321 }
322
323 /**
324 * Applies the rule that a string does not end with a capitalized letter and capitalizes
325 * the letter next to a number in an array.
326 *
327 * @param stringArray containing strings for camel case separation
janani b4a6711a2016-05-17 13:12:22 +0530328 * @return camel case rule checked string
janani bde4ffab2016-04-15 16:18:30 +0530329 */
janani b4a6711a2016-05-17 13:12:22 +0530330 private static String applyCamelCaseRule(String[] stringArray) {
janani bde4ffab2016-04-15 16:18:30 +0530331
janani b4a6711a2016-05-17 13:12:22 +0530332 String ruleChecker = stringArray[0].toLowerCase();
janani bde4ffab2016-04-15 16:18:30 +0530333 int i;
334 if (ruleChecker.matches(REGEX_FOR_FIRST_DIGIT)) {
335 i = 0;
336 ruleChecker = EMPTY_STRING;
337 } else {
338 i = 1;
339 }
340 for (; i < stringArray.length; i++) {
341 if ((i + 1) == stringArray.length) {
342 if (stringArray[i].matches(REGEX_FOR_SINGLE_LETTER)
343 || stringArray[i].matches(REGEX_FOR_DIGITS_WITH_SINGLE_LETTER)) {
janani b4a6711a2016-05-17 13:12:22 +0530344 ruleChecker = ruleChecker + stringArray[i].toLowerCase();
janani bde4ffab2016-04-15 16:18:30 +0530345 break;
346 }
347 }
348 if (stringArray[i].matches(REGEX_FOR_FIRST_DIGIT)) {
349 for (int j = 0; j < stringArray[i].length(); j++) {
350 char letterCheck = stringArray[i].charAt(j);
351 if (Character.isLetter(letterCheck)) {
352 stringArray[i] = stringArray[i].substring(0, j)
353 + stringArray[i].substring(j, j + 1).toUpperCase() + stringArray[i].substring(j + 1);
354 break;
355 }
356 }
357 ruleChecker = ruleChecker + stringArray[i];
358 } else {
359 ruleChecker = ruleChecker + stringArray[i].substring(0, 1).toUpperCase() + stringArray[i].substring(1);
360 }
361 }
362 String ruleCheckerWithPrefix = addPrefix(ruleChecker);
363 return restrictConsecutiveCapitalCase(ruleCheckerWithPrefix);
364 }
365
366 /**
367 * Adds prefix YANG auto prefix if the string begins with digit or is a java key word.
368 *
janani b4a6711a2016-05-17 13:12:22 +0530369 * @param camelCasePrefix string for adding prefix
janani bde4ffab2016-04-15 16:18:30 +0530370 * @return prefixed camel case string
371 */
janani b4a6711a2016-05-17 13:12:22 +0530372 private static String addPrefix(String camelCasePrefix) {
janani bde4ffab2016-04-15 16:18:30 +0530373
janani b4a6711a2016-05-17 13:12:22 +0530374 if (camelCasePrefix.matches(REGEX_FOR_FIRST_DIGIT)) {
375 camelCasePrefix = YANG_AUTO_PREFIX + camelCasePrefix;
janani bde4ffab2016-04-15 16:18:30 +0530376 }
janani b4a6711a2016-05-17 13:12:22 +0530377 if (JAVA_KEY_WORDS.contains(camelCasePrefix.toLowerCase())) {
378 camelCasePrefix = YANG_AUTO_PREFIX + camelCasePrefix.substring(0, 1).toUpperCase()
379 + camelCasePrefix.substring(1);
janani bde4ffab2016-04-15 16:18:30 +0530380 }
janani b4a6711a2016-05-17 13:12:22 +0530381 return camelCasePrefix;
janani bde4ffab2016-04-15 16:18:30 +0530382 }
383
384 /**
385 * Restricts consecutive capital cased string as a rule in camel case.
386 *
387 * @param consecCapitalCaseRemover which requires the restriction of consecutive capital case
388 * @return string without consecutive capital case
389 */
janani b4a6711a2016-05-17 13:12:22 +0530390 private static String restrictConsecutiveCapitalCase(String consecCapitalCaseRemover) {
janani bde4ffab2016-04-15 16:18:30 +0530391
392 for (int k = 0; k < consecCapitalCaseRemover.length(); k++) {
393 if (k + 1 < consecCapitalCaseRemover.length()) {
394 if (Character.isUpperCase(consecCapitalCaseRemover.charAt(k))) {
395 if (Character.isUpperCase(consecCapitalCaseRemover.charAt(k + 1))) {
396 consecCapitalCaseRemover = consecCapitalCaseRemover.substring(0, k + 1)
397 + consecCapitalCaseRemover.substring(k + 1, k + 2).toLowerCase()
398 + consecCapitalCaseRemover.substring(k + 2);
399 }
400 }
401 }
402 }
403 return consecCapitalCaseRemover;
Bharat saraswal870c56f2016-02-20 21:57:16 +0530404 }
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530405
406 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530407 * Returns the YANG identifier name as java identifier with first letter
janani b4a6711a2016-05-17 13:12:22 +0530408 * in capital.
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530409 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530410 * @param yangIdentifier identifier in YANG file
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530411 * @return corresponding java identifier
412 */
janani b4a6711a2016-05-17 13:12:22 +0530413 public static String getCapitalCase(String yangIdentifier) {
414 yangIdentifier = yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
415 return restrictConsecutiveCapitalCase(yangIdentifier);
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530416 }
b.janani1fef2732016-03-04 12:29:05 +0530417
418 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530419 * Returns the YANG identifier name as java identifier with first letter
Vinod Kumar S38046502016-03-23 15:30:27 +0530420 * in small.
b.janani1fef2732016-03-04 12:29:05 +0530421 *
422 * @param yangIdentifier identifier in YANG file.
423 * @return corresponding java identifier
424 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530425 public static String getSmallCase(String yangIdentifier) {
b.janani1fef2732016-03-04 12:29:05 +0530426 return yangIdentifier.substring(0, 1).toLowerCase() + yangIdentifier.substring(1);
427 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530428
429 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530430 * Returns the java Package from package path.
Vinod Kumar S38046502016-03-23 15:30:27 +0530431 *
432 * @param packagePath package path
433 * @return java package
434 */
435 public static String getJavaPackageFromPackagePath(String packagePath) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530436 return packagePath.replace(SLASH, PERIOD);
Vinod Kumar S38046502016-03-23 15:30:27 +0530437 }
438
439 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530440 * Returns enum's java name.
441 *
442 * @param name enum's name
443 * @return enum's java name
444 */
445 public static String getEnumJavaAttribute(String name) {
446
447 String[] strArray = name.split(HYPHEN);
448 String output = EMPTY_STRING;
449 for (int i = 0; i < strArray.length; i++) {
450 output = output + strArray[i];
451 if (i > 0 && i < strArray.length - 1) {
452 output = output + UNDER_SCORE;
453 }
454 }
455 return output;
456 }
457
458 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530459 * Returns the directory path corresponding to java package.
Vinod Kumar S38046502016-03-23 15:30:27 +0530460 *
461 * @param packagePath package path
462 * @return java package
463 */
464 public static String getPackageDirPathFromJavaJPackage(String packagePath) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530465 return packagePath.replace(PERIOD, SLASH);
Vinod Kumar S38046502016-03-23 15:30:27 +0530466 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530467}