YANG Translator optimization
Change-Id: Ie6a6b9d371a4fc5fd973cf56d6f3c7b44a3146ba
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
index 2f79931..2639b8b 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
@@ -16,9 +16,13 @@
package org.onosproject.yangutils.translator.tojava.utils;
+import java.io.File;
import java.util.ArrayList;
+import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.translator.exception.TranslatorException;
+import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
import org.onosproject.yangutils.utils.UtilConstants;
/**
@@ -61,12 +65,52 @@
}
/**
+ * Get the contained data model parent node.
+ *
+ * @param currentNode current node which parent contained node is required
+ * @return parent node in which the current node is an attribute
+ */
+ public static YangNode getParentNodeInGenCode(YangNode currentNode) {
+
+ /*
+ * TODO: recursive parent lookup to support choice/augment/uses. TODO:
+ * need to check if this needs to be updated for
+ * choice/case/augment/grouping
+ */
+ return currentNode.getParent();
+ }
+
+ /**
+ * Get the node package string.
+ *
+ * @param curNode current java node whose package string needs to be set
+ * @return returns the root package string
+ */
+ public static String getCurNodePackage(YangNode curNode) {
+
+ String pkg;
+ if (!(curNode instanceof HasJavaFileInfo)
+ || curNode.getParent() == null) {
+ throw new RuntimeException("missing parent node to get current node's package");
+ }
+
+ YangNode parentNode = getParentNodeInGenCode(curNode);
+ if (!(parentNode instanceof HasJavaFileInfo)) {
+ throw new RuntimeException("missing parent java node to get current node's package");
+ }
+ JavaFileInfo parentJavaFileHandle = ((HasJavaFileInfo) parentNode).getJavaFileInfo();
+ pkg = parentJavaFileHandle.getPackage() + UtilConstants.PERIOD + parentJavaFileHandle.getJavaName();
+ return pkg.toLowerCase();
+ }
+
+ /**
* Returns version.
*
* @param ver YANG version
* @return version
*/
private static String getYangVersion(byte ver) {
+
return "v" + ver;
}
@@ -77,6 +121,7 @@
* @return java package name as per java rules
*/
public static String getPkgFromNameSpace(String nameSpace) {
+
ArrayList<String> pkgArr = new ArrayList<String>();
nameSpace = nameSpace.replace(UtilConstants.QUOTES, UtilConstants.EMPTY_STRING);
String properNameSpace = nameSpace.replaceAll(UtilConstants.REGEX_WITH_SPECIAL_CHAR, UtilConstants.COLAN);
@@ -96,12 +141,13 @@
* @throws TranslatorException when date is invalid.
*/
public static String getYangRevisionStr(String date) throws TranslatorException {
+
String[] revisionArr = date.split(UtilConstants.HYPHEN);
String rev = "rev";
rev = rev + revisionArr[INDEX_ZERO];
- if ((Integer.parseInt(revisionArr[INDEX_ONE]) <= MAX_MONTHS)
+ if (Integer.parseInt(revisionArr[INDEX_ONE]) <= MAX_MONTHS
&& Integer.parseInt(revisionArr[INDEX_TWO]) <= MAX_DAYS) {
for (int i = INDEX_ONE; i < revisionArr.length; i++) {
@@ -131,7 +177,7 @@
int i = 0;
for (String member : pkgArr) {
boolean presenceOfKeyword = UtilConstants.JAVA_KEY_WORDS.contains(member);
- if (presenceOfKeyword || (member.matches(UtilConstants.REGEX_FOR_FIRST_DIGIT))) {
+ if (presenceOfKeyword || member.matches(UtilConstants.REGEX_FOR_FIRST_DIGIT)) {
member = UtilConstants.UNDER_SCORE + member;
}
pkg = pkg + member;
@@ -144,23 +190,13 @@
}
/**
- * Get the package from parent's package and string.
- *
- * @param parentPkg parent's package
- * @param parentName parent's name
- * @return package string
- */
- public static String getPackageFromParent(String parentPkg, String parentName) {
- return (parentPkg + UtilConstants.PERIOD + getSubPkgFromName(parentName)).toLowerCase();
- }
-
- /**
* Get package sub name from YANG identifier name.
*
* @param name YANG identifier name
* @return java package sub name as per java rules
*/
public static String getSubPkgFromName(String name) {
+
ArrayList<String> pkgArr = new ArrayList<String>();
String[] nameArr = name.split(UtilConstants.COLAN);
@@ -177,6 +213,7 @@
* @return corresponding java identifier
*/
public static String getCamelCase(String yangIdentifier) {
+
String[] strArray = yangIdentifier.split(UtilConstants.HYPHEN);
String camelCase = strArray[0];
for (int i = 1; i < strArray.length; i++) {
@@ -193,16 +230,41 @@
* @return corresponding java identifier
*/
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.
+ * 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);
}
+
+ /**
+ * Get the java Package from package path.
+ *
+ * @param packagePath package path
+ * @return java package
+ */
+ public static String getJavaPackageFromPackagePath(String packagePath) {
+
+ return packagePath.replace(File.separator, UtilConstants.PERIOD);
+ }
+
+ /**
+ * Get the directory path corresponding to java package.
+ *
+ * @param packagePath package path
+ * @return java package
+ */
+ public static String getPackageDirPathFromJavaJPackage(String packagePath) {
+
+ return packagePath.replace(UtilConstants.PERIOD, File.separator);
+ }
}