Defect Fix for namespace with special character support in YANG
Change-Id: I8cc5b9dce58023c5965b07ac36cc4b5858f91699
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 00e953b..dd543ca 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
@@ -18,6 +18,7 @@
import java.util.ArrayList;
+import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.utils.UtilConstants;
/**
@@ -25,8 +26,15 @@
*/
public final class JavaIdentifierSyntax {
+ private static final int MAX_MONTHS = 12;
+ private static final int MAX_DAYS = 31;
+ private static final int INDEX_ZERO = 0;
+ private static final int INDEX_ONE = 1;
+ private static final int INDEX_TWO = 2;
+ private static final int INDEX_THREE = 3;
+
/**
- * Util class, with static functions only.
+ * Default constructor.
*/
private JavaIdentifierSyntax() {
}
@@ -71,9 +79,9 @@
*/
public static String getPkgFromNameSpace(String nameSpace) {
ArrayList<String> pkgArr = new ArrayList<String>();
- nameSpace = nameSpace.replace("\"", "");
-
- String[] nameSpaceArr = nameSpace.split(UtilConstants.COLAN);
+ nameSpace = nameSpace.replace(UtilConstants.QUOTES, UtilConstants.EMPTY_STRING);
+ String properNameSpace = nameSpace.replaceAll(UtilConstants.REGEX_WITH_SPECIAL_CHAR, UtilConstants.COLAN);
+ String[] nameSpaceArr = properNameSpace.split(UtilConstants.COLAN);
for (String nameSpaceString : nameSpaceArr) {
pkgArr.add(nameSpaceString);
@@ -86,19 +94,31 @@
*
* @param date YANG module revision
* @return revision string
+ * @throws TranslatorException when date is invalid.
*/
- public static String getYangRevisionStr(String date) {
+ public static String getYangRevisionStr(String date) throws TranslatorException {
String[] revisionArr = date.split(UtilConstants.HYPHEN);
String rev = "rev";
- for (String element : revisionArr) {
- Integer val = Integer.parseInt(element);
- if (val < 10) {
- rev = rev + "0";
+ String year = revisionArr[INDEX_ZERO];
+ char[] yearBytes = year.toCharArray();
+ rev = rev + yearBytes[INDEX_TWO] + yearBytes[INDEX_THREE];
+
+ if ((Integer.parseInt(revisionArr[INDEX_ONE]) <= MAX_MONTHS)
+ && Integer.parseInt(revisionArr[INDEX_TWO]) <= MAX_DAYS) {
+ for (int i = INDEX_ONE; i < revisionArr.length; i++) {
+
+ Integer val = Integer.parseInt(revisionArr[i]);
+ if (val < 10) {
+ rev = rev + "0";
+ }
+ rev = rev + val;
}
- rev = rev + val;
+
+ return rev;
+ } else {
+ throw new TranslatorException("Date in revision is not proper: " + date);
}
- return rev;
}
/**
@@ -109,10 +129,14 @@
*/
public static String getPkgFrmArr(ArrayList<String> pkgArr) {
- String pkg = "";
+ String pkg = UtilConstants.EMPTY_STRING;
int size = pkgArr.size();
int i = 0;
for (String member : pkgArr) {
+ boolean presenceOfKeyword = UtilConstants.JAVA_KEY_WORDS.contains(member);
+ if (presenceOfKeyword || (member.matches(UtilConstants.REGEX_FOR_FIRST_DIGIT))) {
+ member = UtilConstants.UNDER_SCORE + member;
+ }
pkg = pkg + member;
if (i != size - 1) {
pkg = pkg + UtilConstants.PERIOD;
@@ -174,4 +198,14 @@
public static String getCaptialCase(String yangIdentifier) {
return yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
}
+
+ /**
+ * Translate the YANG identifier name to java identifier with first letter in small.
+ *
+ * @param yangIdentifier identifier in YANG file.
+ * @return corresponding java identifier
+ */
+ public static String getLowerCase(String yangIdentifier) {
+ return yangIdentifier.substring(0, 1).toLowerCase() + yangIdentifier.substring(1);
+ }
}