[ONOS-4412]Defect fix for uppercase presence in identifier
Change-Id: Iee7f6a47230652833799e0303606d786d55f5dd8
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
index 5ab0923..10ec3c2 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
@@ -17,6 +17,7 @@
package org.onosproject.yangutils.translator.tojava.utils;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.onosproject.yangutils.datamodel.YangNode;
@@ -39,6 +40,10 @@
import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_SINGLE_LETTER;
import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_UNDERSCORE;
import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_ALL_SPECIAL_CHAR;
+import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_DIGITS;
+import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE;
+import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES;
+import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_UPPERCASE;
import static org.onosproject.yangutils.utils.UtilConstants.REVISION_PREFIX;
import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
import static org.onosproject.yangutils.utils.UtilConstants.UNDER_SCORE;
@@ -231,7 +236,7 @@
* Returns the YANG identifier name as java identifier.
*
* @param yangIdentifier identifier in YANG file
- * @param conflictResolver object of YANG to java naming confilct util
+ * @param conflictResolver object of YANG to java naming conflict util
* @return corresponding java identifier
*/
public static String getCamelCase(String yangIdentifier, YangToJavaNamingConflictUtil conflictResolver) {
@@ -262,7 +267,57 @@
}
strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
}
- return applyCamelCaseRule(strArray);
+ return upperCaseConflictResolver(strArray);
+ }
+
+ /**
+ * Resolves the conflict when input has uppercase.
+ *
+ * @param stringArray containing strings for uppercase conflict resolver
+ * @return camel cased string
+ */
+ private static String upperCaseConflictResolver(String[] stringArray) {
+
+ for (int l = 0; l < stringArray.length; l++) {
+ String[] upperCaseSplitArray = stringArray[l].split(REGEX_WITH_UPPERCASE);
+ for (int m = 0; m < upperCaseSplitArray.length; m++) {
+ if (upperCaseSplitArray[m].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
+ int check = m;
+ while (check + 1 < upperCaseSplitArray.length) {
+ if (upperCaseSplitArray[check + 1].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
+ upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
+ check = check + 1;
+ } else if (upperCaseSplitArray[check + 1]
+ .matches(REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES)) {
+ upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
+ break;
+ } else {
+ break;
+ }
+ }
+ }
+ }
+ StringBuilder strBuilder = new StringBuilder();
+ for (String element : upperCaseSplitArray) {
+ strBuilder.append(element);
+ }
+ stringArray[l] = strBuilder.toString();
+ }
+ List<String> result = new ArrayList<String>();
+ for (String element : stringArray) {
+ String[] capitalCaseSplitArray = element.split(REGEX_WITH_UPPERCASE);
+ for (String letter : capitalCaseSplitArray) {
+ String[] arrayForAddition = letter.split(REGEX_WITH_DIGITS);
+ List<String> list = Arrays.asList(arrayForAddition);
+ for (String str : list) {
+ if (str != null && !str.isEmpty()) {
+ result.add(str);
+ }
+ }
+ }
+ }
+ stringArray = result.toArray(new String[result.size()]);
+ return applyCamelCaseRule(stringArray);
}
/**
@@ -270,11 +325,11 @@
* the letter next to a number in an array.
*
* @param stringArray containing strings for camel case separation
- * @return camel cased string
+ * @return camel case rule checked string
*/
- public static String applyCamelCaseRule(String[] stringArray) {
+ private static String applyCamelCaseRule(String[] stringArray) {
- String ruleChecker = stringArray[0];
+ String ruleChecker = stringArray[0].toLowerCase();
int i;
if (ruleChecker.matches(REGEX_FOR_FIRST_DIGIT)) {
i = 0;
@@ -286,7 +341,7 @@
if ((i + 1) == stringArray.length) {
if (stringArray[i].matches(REGEX_FOR_SINGLE_LETTER)
|| stringArray[i].matches(REGEX_FOR_DIGITS_WITH_SINGLE_LETTER)) {
- ruleChecker = ruleChecker + stringArray[i];
+ ruleChecker = ruleChecker + stringArray[i].toLowerCase();
break;
}
}
@@ -311,19 +366,19 @@
/**
* Adds prefix YANG auto prefix if the string begins with digit or is a java key word.
*
- * @param camelCasePrefixer string for adding prefix
+ * @param camelCasePrefix string for adding prefix
* @return prefixed camel case string
*/
- public static String addPrefix(String camelCasePrefixer) {
+ private static String addPrefix(String camelCasePrefix) {
- if (camelCasePrefixer.matches(REGEX_FOR_FIRST_DIGIT)) {
- camelCasePrefixer = YANG_AUTO_PREFIX + camelCasePrefixer;
+ if (camelCasePrefix.matches(REGEX_FOR_FIRST_DIGIT)) {
+ camelCasePrefix = YANG_AUTO_PREFIX + camelCasePrefix;
}
- if (JAVA_KEY_WORDS.contains(camelCasePrefixer)) {
- camelCasePrefixer = YANG_AUTO_PREFIX + camelCasePrefixer.substring(0, 1).toUpperCase()
- + camelCasePrefixer.substring(1);
+ if (JAVA_KEY_WORDS.contains(camelCasePrefix.toLowerCase())) {
+ camelCasePrefix = YANG_AUTO_PREFIX + camelCasePrefix.substring(0, 1).toUpperCase()
+ + camelCasePrefix.substring(1);
}
- return camelCasePrefixer;
+ return camelCasePrefix;
}
/**
@@ -332,7 +387,7 @@
* @param consecCapitalCaseRemover which requires the restriction of consecutive capital case
* @return string without consecutive capital case
*/
- public static String restrictConsecutiveCapitalCase(String consecCapitalCaseRemover) {
+ private static String restrictConsecutiveCapitalCase(String consecCapitalCaseRemover) {
for (int k = 0; k < consecCapitalCaseRemover.length(); k++) {
if (k + 1 < consecCapitalCaseRemover.length()) {
@@ -350,13 +405,14 @@
/**
* Returns the YANG identifier name as java identifier with first letter
- * in caps.
+ * in capital.
*
* @param yangIdentifier identifier in YANG file
* @return corresponding java identifier
*/
- public static String getCaptialCase(String yangIdentifier) {
- return yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
+ public static String getCapitalCase(String yangIdentifier) {
+ yangIdentifier = yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
+ return restrictConsecutiveCapitalCase(yangIdentifier);
}
/**