yang choice case translator + whitebox fix
Change-Id: I96f1855bc71a002335946150b51e911ae6ac2fb2
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
index 7e010db..add5504 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
@@ -132,16 +132,14 @@
/**
* Free other YANG nodes of data-model tree when error occurs while file generation of current node.
- *
- * @throws DataModelException when fails to do datamodel operations
*/
- public static void freeRestResources() throws DataModelException {
+ public static void freeRestResources() {
YangNode curNode = getCurNode();
YangNode tempNode = curNode;
TraversalType curTraversal = ROOT;
- while (!(curNode == tempNode.getParent())) {
+ while (curNode != tempNode.getParent()) {
if (curTraversal != PARENT && curNode.getChild() != null) {
curTraversal = CHILD;
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaImportData.java b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaImportData.java
index 7d8f4e0..723b937 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaImportData.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaImportData.java
@@ -162,6 +162,29 @@
}
/**
+ * Returns import for class.
+ *
+ * @return imports for class
+ */
+ public List<String> getImports() {
+ String importString;
+ List<String> imports = new ArrayList<>();
+
+ for (JavaQualifiedTypeInfo importInfo : getImportSet()) {
+ if (!importInfo.getPkgInfo().equals(EMPTY_STRING) && importInfo.getClassInfo() != null
+ && !importInfo.getPkgInfo().equals(JAVA_LANG)) {
+ importString = IMPORT + importInfo.getPkgInfo() + PERIOD + importInfo.getClassInfo() + SEMI_COLAN
+ + NEW_LINE;
+
+ imports.add(importString);
+ }
+ }
+
+ sort(imports);
+ return imports;
+ }
+
+ /**
* Returns import for hash and equals method.
*
* @return import for hash and equals method
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfo.java b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfo.java
index 77170dc..9b0ccca 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfo.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfo.java
@@ -110,14 +110,14 @@
* Current leaves holder is adding a leaf info as a attribute to the
* current class.
*/
- String className = AttributesJavaDataType.getJavaImportClass(attrType, isListAttr);
+ String className = getJavaImportClass(attrType, isListAttr);
if (className != null) {
/*
* Corresponding to the attribute type a class needs to be imported,
* since it can be a derived type or a usage of wrapper classes.
*/
importInfo.setClassInfo(className);
- String classPkg = AttributesJavaDataType.getJavaImportPackage(attrType, isListAttr, className);
+ String classPkg = getJavaImportPackage(attrType, isListAttr, className);
if (classPkg == null) {
throw new TranslatorException("import package cannot be null when the class is used");
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java b/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
index cc52daa..10d98c8 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
+++ b/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
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java
index 26727bd..8729f17 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java
@@ -139,8 +139,7 @@
* Creates a java file using the YANG case info.
*/
@Override
- public void generateCodeExit() {
- // TODO Auto-generated method stub
-
+ public void generateCodeExit() throws IOException {
+ getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
}
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java
index d5a00d5..0299e6c 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java
@@ -24,7 +24,7 @@
import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode;
/**
@@ -56,7 +56,7 @@
super();
setJavaFileInfo(new JavaFileInfo());
setJavaImportData(new JavaImportData());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ getJavaFileInfo().setGeneratedFileTypes(INTERFACE_MASK);
}
/**
@@ -133,15 +133,13 @@
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
generateCodeOfNode(this, yangPlugin, false);
- // TODO:getTempJavaCodeFragmentFiles().addCurNodeLeavesInfoToTempFiles(this);
}
/**
* Creates a java file using the YANG choice info.
*/
@Override
- public void generateCodeExit() {
- // TODO Auto-generated method stub
-
+ public void generateCodeExit() throws IOException {
+ getTempJavaCodeFragmentFiles().generateJavaFile(INTERFACE_MASK, this);
}
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
index ec58b26..9fa13d4 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
@@ -109,7 +109,7 @@
}
String def = PUBLIC + SPACE + INTERFACE + SPACE + yangName + SPACE + EXTEND + SPACE;
for (String extend : getExtendsList()) {
- def = def + extend + COMMA;
+ def = def + extend + COMMA + SPACE;
}
def = trimAtLast(def, COMMA);
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index 03be712..99ab915 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -373,7 +373,7 @@
private static String getReturnType(JavaAttributeInfo attr) {
String returnType = EMPTY_STRING;
- if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
+ if (attr.isQualifiedName() && attr.getImportInfo().getPkgInfo() != null) {
returnType = attr.getImportInfo().getPkgInfo() + PERIOD;
}
returnType = returnType + attr.getImportInfo().getClassInfo();
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
index ccb8370..a82d7d4 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
@@ -141,7 +141,7 @@
*/
public static void prepareJavaFileGeneratorForExtendsList(List<String> extendsList) {
- if (!extendsList.isEmpty() && !extendsList.equals(null)) {
+ if (extendsList != null && !extendsList.isEmpty()) {
JavaFileGenerator.setExtendsList(extendsList);
JavaFileGenerator.setIsExtendsList(true);
} else {
@@ -157,10 +157,7 @@
* @return true or false
*/
public static boolean isHasAugmentationExtended(List<String> extendsList) {
- if (extendsList != null && extendsList.contains(HAS_AUGMENTATION)) {
- return true;
- }
- return false;
+ return (extendsList != null && extendsList.contains(HAS_AUGMENTATION));
}
/**
@@ -170,10 +167,7 @@
* @return true or false
*/
public static boolean isAugmentedInfoExtended(List<String> extendsList) {
- if (extendsList != null && extendsList.contains(AUGMENTED_INFO)) {
- return true;
- }
- return false;
+ return (extendsList != null && extendsList.contains(AUGMENTED_INFO));
}
/**
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
index cd6a7cd..4f3cb45 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
@@ -39,6 +39,7 @@
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
import static org.onosproject.yangutils.utils.UtilConstants.HAS_AUGMENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
/**
@@ -159,8 +160,10 @@
updatePackageInfo((HasJavaFileInfo) javaCodeGeneratorInfo, yangPlugin);
generateTempFiles(javaCodeGeneratorInfo, yangPlugin.getCodeGenDir());
- javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
- .addCurNodeInfoInParentTempFile((YangNode) javaCodeGeneratorInfo, isMultiInstance);
+ if (!(javaCodeGeneratorInfo instanceof YangCase)) {
+ javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
+ .addCurNodeInfoInParentTempFile((YangNode) javaCodeGeneratorInfo, isMultiInstance);
+ }
/**
* For augmentation of nodes.
@@ -176,6 +179,21 @@
} else if (javaCodeGeneratorInfo instanceof YangAugment) {
javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().addToExtendsList(AUGMENTED_INFO);
}
+
+ if (javaCodeGeneratorInfo instanceof YangCase) {
+ YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent();
+ String curNodeName = ((YangCase) javaCodeGeneratorInfo).getName();
+ if (!parent.getName().equals(curNodeName)) {
+ javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().addToExtendsList(getCaptialCase(getCamelCase(
+ parent.getName(), null)));
+ javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().addParentInfoInCurNodeTempFile((YangNode)
+ javaCodeGeneratorInfo);
+ } else {
+ String parentPackage = ((HasJavaFileInfo) parent).getJavaFileInfo().getPackage();
+ String caseExtendInfo = parentPackage + PERIOD + parent.getName();
+ javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().addToExtendsList(caseExtendInfo);
+ }
+ }
}
/**
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangPluginConfig.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangPluginConfig.java
index 49be81c..f827698 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangPluginConfig.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangPluginConfig.java
@@ -22,12 +22,6 @@
public final class YangPluginConfig {
/**
- * Creates an object for YANG plugin config.
- */
- public YangPluginConfig() {
- }
-
- /**
* Contains the code generation directory.
*/
private String codeGenDir;
@@ -38,6 +32,12 @@
private YangToJavaNamingConflictUtil conflictResolver;
/**
+ * Creates an object for YANG plugin config.
+ */
+ public YangPluginConfig() {
+ }
+
+ /**
* Sets the path of the java code where it has to be generated.
*
* @param codeGenDir path of the directory