yang choice case translator + whitebox fix
Change-Id: I96f1855bc71a002335946150b51e911ae6ac2fb2
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
index cc52daa..10d98c8 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
@@ -29,6 +29,7 @@
import org.onosproject.yangutils.datamodel.YangLeavesHolder;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.datamodel.YangCase;
import org.onosproject.yangutils.translator.exception.TranslatorException;
import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
@@ -110,6 +111,8 @@
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.SLASH;
+import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
+import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.createPackage;
import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
@@ -393,6 +396,11 @@
private YangNode curYangNode;
/**
+ * Import info for case.
+ */
+ private JavaQualifiedTypeInfo caseImportInfo;
+
+ /**
* Current enum's value.
*/
private int enumValue;
@@ -1130,9 +1138,8 @@
* Adds build method for interface.
*
* @return build method for interface
- * @throws IOException when fails to append to temporary file
*/
- public String addBuildMethodForInterface() throws IOException {
+ public String addBuildMethodForInterface() {
return parseBuilderInterfaceBuildMethodString(generatedJavaClassName);
}
@@ -1140,9 +1147,8 @@
* Adds build method's implementation for class.
*
* @return build method implementation for class
- * @throws IOException when fails to append to temporary file
*/
- public String addBuildMethodImpl() throws IOException {
+ public String addBuildMethodImpl() {
return getBuildString(generatedJavaClassName) + NEW_LINE;
}
@@ -1162,9 +1168,8 @@
* @param modifier modifier for constructor.
* @param toAppend string which need to be appended with the class name
* @return default constructor for class
- * @throws IOException when fails to append to file
*/
- public String addDefaultConstructor(String modifier, String toAppend) throws IOException {
+ public String addDefaultConstructor(String modifier, String toAppend) {
return NEW_LINE + getDefaultConstructorString(generatedJavaClassName + toAppend, modifier);
}
@@ -1172,9 +1177,8 @@
* Adds default constructor for class.
*
* @return default constructor for class
- * @throws IOException when fails to append to file
*/
- public String addOfMethod() throws IOException {
+ public String addOfMethod() {
return getJavaDoc(OF_METHOD, generatedJavaClassName, false)
+ getOfMethod(generatedJavaClassName, newAttrInfo);
}
@@ -1380,6 +1384,28 @@
}
/**
+ * Adds parent's info to current node import list.
+ *
+ * @param curNode current node for which import list needs to be updated
+ */
+ public void addParentInfoInCurNodeTempFile(YangNode curNode) {
+ caseImportInfo = new JavaQualifiedTypeInfo();
+ YangNode parent = getParentNodeInGenCode(curNode);
+ if (!(parent instanceof JavaCodeGenerator)) {
+ throw new TranslatorException("missing parent node to contain current node info in generated file");
+ }
+
+ if (!(curNode instanceof HasJavaFileInfo)) {
+ throw new TranslatorException("missing java file information to get the package details "
+ + "of attribute corresponding to child node");
+ }
+
+ caseImportInfo.setClassInfo(getCaptialCase(getCamelCase(parent.getName(), null)));
+ caseImportInfo.setPkgInfo(((HasJavaFileInfo) parent).getJavaFileInfo().getPackage());
+ ((HasJavaImportData) curNode).getJavaImportData().addImportInfo(curNode, caseImportInfo);
+ }
+
+ /**
* Adds leaf attributes in generated files.
*
* @param listOfLeaves list of YANG leaf
@@ -1415,7 +1441,7 @@
* Check if the attribute is of type list, then the java.lang.list
* needs to be imported.
*/
- if (listOfLeafList.size() != 0) {
+ if (!listOfLeafList.isEmpty()) {
if (!(curNode instanceof HasJavaImportData)) {
throw new TranslatorException("missing import info in current data model node");
@@ -1651,6 +1677,18 @@
if ((fileType & INTERFACE_MASK) != 0 | (fileType & BUILDER_INTERFACE_MASK) != 0) {
/**
+ * Adds import for case.
+ */
+ if (curNode instanceof YangCase) {
+ List<String> importData = ((HasJavaImportData) curNode).getJavaImportData().getImports();
+ for (String importInfo : importData) {
+ if (!imports.contains(importInfo)) {
+ imports.add(importInfo);
+ }
+ }
+ }
+
+ /**
* Adds import for HasAugmentation class.
*/
if (isHasAugmentationExtended(getExtendsList())) {
@@ -1689,6 +1727,10 @@
if (isAugmentedInfoExtended(getExtendsList())) {
addAugmentedInfoImport(curNode, imports, false);
}
+
+ if (curNode instanceof YangCase) {
+ removeCaseImport(imports);
+ }
}
if ((fileType & BUILDER_CLASS_MASK) != 0 | (fileType & IMPL_CLASS_MASK) != 0) {
@@ -1763,6 +1805,21 @@
}
/**
+ * Removes case import info from import list.
+ *
+ * @param imports list of imports
+ * @return import for class
+ */
+ private List<String> removeCaseImport(List<String> imports) {
+ if (imports != null && caseImportInfo != null) {
+ String caseImport = IMPORT + caseImportInfo.getPkgInfo() + PERIOD + caseImportInfo.getClassInfo() +
+ SEMI_COLAN + NEW_LINE;
+ imports.remove(caseImport);
+ }
+ return imports;
+ }
+
+ /**
* Removes all temporary file handles.
*
* @param isErrorOccurred when translator fails to generate java files we need to close