[ONOS-4411,ONOS-4413,ONOS-4526] Yang Enumeration Translator and Defect fixes.
Change-Id: Ie5b6b5d6d6df283a57ae06b1979f0d03022f3baf
diff --git a/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index 965367c..dc7920a 100644
--- a/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
@@ -41,7 +41,6 @@
public static final String INTERFACE_JAVA_DOC = " * Abstraction of an entity which represents the"
+ " functionality of ";
-
/**
* JavaDocs for event.
*/
@@ -52,7 +51,6 @@
*/
public static final String EVENT_LISTENER_JAVA_DOC = " * Abstraction for event listener of ";
-
/**
* JavaDocs for builder interface class.
*/
@@ -169,6 +167,11 @@
public static final String NEW_LINE = "\n";
/**
+ * Static attribute for default.
+ */
+ public static final String DEFAULT = "default";
+
+ /**
* Static attribute for multiple new line.
*/
public static final String MULTIPLE_NEW_LINE = "\n\n";
@@ -434,6 +437,16 @@
public static final String CLEAR = "clear";
/**
+ * Static attribute for switch syntax.
+ */
+ public static final String SWITCH = "switch";
+
+ /**
+ * Static attribute for case syntax.
+ */
+ public static final String CASE = "case";
+
+ /**
* Static attribute for temp val syntax.
*/
public static final String TMP_VAL = "tmpVal";
@@ -703,7 +716,6 @@
*/
public static final String SERVICE = "Service";
-
/**
* Static attribute for interface syntax.
*/
@@ -875,7 +887,7 @@
public static final String ARRAY_LIST = "ArrayList";
/**
- * comment to be added for autogenerated impl methods.
+ * Comment to be added for autogenerated impl methods.
*/
public static final String YANG_UTILS_TODO = "//TODO: YANG utils generated code";
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
index 1dced05..7d8fd84 100644
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
@@ -24,8 +24,9 @@
import java.io.PrintWriter;
import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getJavaPackageFromPackagePath;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
@@ -35,7 +36,6 @@
import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
import static org.onosproject.yangutils.utils.UtilConstants.MULTIPLE_NEW_LINE;
import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE_INFO_JAVADOC_OF_CHILD;
import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addPackageInfo;
@@ -62,7 +62,7 @@
public static boolean doesPackageExist(String pkg) {
File pkgDir = new File(getPackageDirPathFromJavaJPackage(pkg));
File pkgWithFile = new File(pkgDir + SLASH + "package-info.java");
- return (pkgDir.exists() && pkgWithFile.isFile());
+ return pkgDir.exists() && pkgWithFile.isFile();
}
/**
@@ -71,26 +71,24 @@
* @param yangNode YANG node for which code is being generated
* @throws IOException any IO exception
*/
- public static void createPackage(YangNode yangNode)
- throws IOException {
-
- YangNode parent = getParentNodeInGenCode(yangNode);
- JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) yangNode).getJavaFileInfo();
- String absolutePath = getAbsolutePackagePath(javaFileInfo.getBaseCodeGenPath(),
- javaFileInfo.getPackageFilePath());
-
- String pkgInfo;
- if (parent != null) {
- pkgInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName()
- + PACKAGE_INFO_JAVADOC_OF_CHILD;
- } else {
- pkgInfo = javaFileInfo.getJavaName();
+ public static void createPackage(YangNode yangNode) throws IOException {
+ if (!(yangNode instanceof JavaFileInfoContainer)) {
+ throw new TranslatorException("current node must have java file info");
}
-
- if (!doesPackageExist(absolutePath)) {
+ String pkgInfo;
+ JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) yangNode).getJavaFileInfo();
+ String pkg = getAbsolutePackagePath(javaFileInfo.getBaseCodeGenPath(), javaFileInfo.getPackageFilePath());
+ if (!doesPackageExist(pkg)) {
try {
- File pack = createDirectories(absolutePath);
- addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(absolutePath));
+ File pack = createDirectories(pkg);
+ YangNode parent = getParentNodeInGenCode(yangNode);
+ if (parent != null) {
+ pkgInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName();
+ addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(pkg), true);
+ } else {
+ pkgInfo = ((JavaFileInfoContainer) yangNode).getJavaFileInfo().getJavaName();
+ addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(pkg), false);
+ }
} catch (IOException e) {
throw new IOException("failed to create package-info file");
}
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
index fdf876d..335de7f 100644
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
@@ -19,7 +19,6 @@
import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS_JAVA_DOC;
import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE_JAVA_DOC;
@@ -54,12 +53,14 @@
import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
import static org.onosproject.yangutils.utils.UtilConstants.OF;
import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE_INFO_JAVADOC;
+import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE_INFO_JAVADOC_OF_CHILD;
import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_STRING;
import static org.onosproject.yangutils.utils.UtilConstants.RPC_OUTPUT_STRING;
import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
+import static org.onosproject.yangutils.utils.UtilConstants.VOID;
/**
* Represents javadoc for the generated classes.
@@ -108,11 +109,16 @@
GETTER_METHOD,
/**
- * For rpc.
+ * For rpc service.
*/
RPC_INTERFACE,
/**
+ * For rpc manager.
+ */
+ RPC_MANAGER,
+
+ /**
* For event.
*/
EVENT,
@@ -203,7 +209,7 @@
return generateForBuilderInterface(name);
}
case PACKAGE_INFO: {
- return generateForPackage(name);
+ return generateForPackage(name, isList);
}
case GETTER_METHOD: {
return generateForGetters(name, isList);
@@ -239,7 +245,10 @@
return generateForEnumAttr(name);
}
case RPC_INTERFACE: {
- return generateForRpcInterface(name);
+ return generateForRpcService(name);
+ }
+ case RPC_MANAGER: {
+ return generateForImplClass(name);
}
case EVENT: {
return generateForEvent(name);
@@ -274,13 +283,14 @@
*/
public static String generateJavaDocForRpc(String rpcName, String inputName, String outputName) {
rpcName = getCamelCase(rpcName, null);
- inputName = getCaptialCase(inputName);
- outputName = getCaptialCase(outputName);
- return NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_RPC
+ String javadoc = NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_RPC
+ rpcName + PERIOD + NEW_LINE + FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK
- + getInputString(inputName, rpcName) + getOutputString(outputName, rpcName) + FOUR_SPACE_INDENTATION
- + JAVA_DOC_END_LINE;
+ + getInputString(inputName, rpcName);
+ if (!outputName.equals(VOID)) {
+ javadoc = javadoc + getOutputString(outputName, rpcName);
+ }
+ return javadoc + FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE;
}
/**
@@ -315,7 +325,7 @@
* @param interfaceName interface name
* @return javaDocs
*/
- private static String generateForRpcInterface(String interfaceName) {
+ private static String generateForRpcService(String interfaceName) {
return NEW_LINE + JAVA_DOC_FIRST_LINE + INTERFACE_JAVA_DOC + interfaceName + PERIOD + NEW_LINE
+ JAVA_DOC_END_LINE;
}
@@ -436,7 +446,7 @@
return NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_OF
+ attribute + SPACE + FROM_STRING_METHOD_NAME + SPACE + INPUT + SPACE + STRING_DATA_TYPE + PERIOD
+ NEW_LINE + FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK + FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM
- + FROM_STRING_PARAM_NAME + SPACE + INPUT + SPACE + STRING_DATA_TYPE + PERIOD + NEW_LINE
+ + FROM_STRING_PARAM_NAME + SPACE + INPUT + SPACE + STRING_DATA_TYPE + NEW_LINE
+ FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + OBJECT + SPACE + OF + SPACE + attribute + NEW_LINE
+ FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE;
}
@@ -512,10 +522,15 @@
* Generates javaDocs for package-info.
*
* @param packageName package name
+ * @param isChildNode is it child node
* @return javaDocs
*/
- private static String generateForPackage(String packageName) {
- return JAVA_DOC_FIRST_LINE + PACKAGE_INFO_JAVADOC + packageName + PERIOD + NEW_LINE + JAVA_DOC_END_LINE;
+ private static String generateForPackage(String packageName, boolean isChildNode) {
+ String javaDoc = JAVA_DOC_FIRST_LINE + PACKAGE_INFO_JAVADOC + packageName;
+ if (isChildNode) {
+ javaDoc = javaDoc + PACKAGE_INFO_JAVADOC_OF_CHILD;
+ }
+ return javaDoc + PERIOD + NEW_LINE + JAVA_DOC_END_LINE;
}
/**
@@ -536,11 +551,10 @@
* @return javaDocs
*/
private static String generateForConstructors(String className) {
- return NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE
- + FOUR_SPACE_INDENTATION + JAVA_DOC_CONSTRUCTOR + className + IMPL + PERIOD + NEW_LINE
- + FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK + FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM
- + BUILDER.toLowerCase() + OBJECT + SPACE + BUILDER_OBJECT + className + NEW_LINE
- + FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE;
+ return NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_CONSTRUCTOR
+ + className + IMPL + PERIOD + NEW_LINE + FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK
+ + FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM + BUILDER.toLowerCase() + OBJECT + SPACE + BUILDER_OBJECT
+ + className + NEW_LINE + FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE;
}
/**
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
index 192df4e..a076fbe 100644
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
@@ -23,7 +23,9 @@
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
+import java.util.LinkedList;
import java.util.List;
+import java.util.Stack;
import org.apache.commons.io.FileUtils;
import org.apache.maven.model.Resource;
@@ -80,9 +82,11 @@
* @param path directory path
* @param classInfo class info for the package
* @param pack package of the directory
+ * @param isChildNode is it a child node
* @throws IOException when fails to create package info file
*/
- public static void addPackageInfo(File path, String classInfo, String pack) throws IOException {
+ public static void addPackageInfo(File path, String classInfo, String pack, boolean isChildNode)
+ throws IOException {
if (pack.contains(ORG)) {
String[] strArray = pack.split(ORG);
@@ -97,7 +101,7 @@
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(CopyrightHeader.getCopyrightHeader());
- bufferedWriter.write(getJavaDoc(PACKAGE_INFO, classInfo, false));
+ bufferedWriter.write(getJavaDoc(PACKAGE_INFO, classInfo, isChildNode));
bufferedWriter.write(PACKAGE + SPACE + pack + SEMI_COLAN);
bufferedWriter.close();
@@ -119,12 +123,46 @@
try {
FileUtils.deleteDirectory(generatedDirectory);
} catch (IOException e) {
- throw new IOException("Failed to delete the generated files in " + generatedDirectory + " directory");
+ throw new IOException(
+ "Failed to delete the generated files in " + generatedDirectory + " directory");
}
}
}
/**
+ * Searches and deletes generated temporary directories.
+ *
+ * @param root root directory
+ * @throws IOException when fails to do IO operations.
+ */
+ public static void searchAndDeleteTempDir(String root) throws IOException {
+ List<File> store = new LinkedList<>();
+ Stack<String> stack = new Stack<>();
+ stack.push(root);
+
+ while (!stack.empty()) {
+ root = stack.pop();
+ File file = new File(root);
+ File[] filelist = file.listFiles();
+ if (filelist == null || filelist.length == 0) {
+ continue;
+ }
+ for (File current : filelist) {
+ if (current.isDirectory()) {
+ stack.push(current.toString());
+ if (current.getName().endsWith("-Temp")) {
+ store.add(current);
+ }
+ }
+ }
+ }
+
+ for (File dir : store) {
+ dir.delete();
+ }
+ }
+
+ /**
* Adds generated source directory to the compilation root.
*
* @param source directory