[ONOS-5003][ONOS-5004][ONOS-5005]Generated Code modification for YangUtils+added interface for augmentation method and other api changes.
Change-Id: I954b9c99e182f21d01fcc5cd76fbac7d61a6c3aa
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
index afcb61a..77ff157 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
@@ -17,11 +17,18 @@
package org.onosproject.yangutils.translator.tojava;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
import org.onosproject.yangutils.datamodel.TraversalType;
+import org.onosproject.yangutils.datamodel.YangAugment;
+import org.onosproject.yangutils.datamodel.YangCase;
+import org.onosproject.yangutils.datamodel.YangChoice;
import org.onosproject.yangutils.datamodel.YangInput;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNodeType;
import org.onosproject.yangutils.datamodel.YangOutput;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
@@ -31,6 +38,11 @@
import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
+import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangCaseNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentClassName;
+import static org.onosproject.yangutils.utils.UtilConstants.CASE;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
/**
@@ -88,6 +100,11 @@
TraversalType curTraversal = ROOT;
while (codeGenNode != null) {
+ if (codeGenNode instanceof YangAugment) {
+ if (((YangAugment) codeGenNode).getAugmentedNode() instanceof YangChoice) {
+ addCaseNodeToChoiceTarget((YangAugment) codeGenNode);
+ }
+ }
if (curTraversal != PARENT) {
if (!(codeGenNode instanceof JavaCodeGenerator)) {
throw new TranslatorException("Unsupported node to generate code");
@@ -126,8 +143,8 @@
try {
generateCodeExit(codeGenNode, yangPlugin);
} catch (Exception e) {
- close(codeGenNode, yangPlugin);
- throw new TranslatorException(e.getMessage());
+ close(codeGenNode, yangPlugin);
+ throw new TranslatorException(e.getMessage());
}
curTraversal = PARENT;
codeGenNode = codeGenNode.getParent();
@@ -285,7 +302,7 @@
searchAndDeleteTempDir(javaFileInfo.getBaseCodeGenPath() +
javaFileInfo.getPackageFilePath());
} else {
- searchAndDeleteTempDir(yangPlugin.getManagerCodeGenDir());
+ searchAndDeleteTempDir(yangPlugin.getCodeGenDir());
}
}
}
@@ -347,4 +364,43 @@
}
return null;
}
+
+ /**
+ * Adds a case node in augment when augmenting a choice node.
+ *
+ * @param augment augment node
+ */
+ private static void addCaseNodeToChoiceTarget(YangAugment augment) {
+ YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
+
+ YangPluginConfig pluginConfig = new YangPluginConfig();
+ javaCase.setName(getAugmentClassName(augment, pluginConfig) + getCapitalCase(CASE));
+
+ if (augment.getListOfLeaf() != null) {
+ augment.getListOfLeaf().forEach(javaCase::addLeaf);
+ augment.getListOfLeaf().clear();
+ }
+ if (augment.getListOfLeafList() != null) {
+ augment.getListOfLeafList().forEach(javaCase::addLeafList);
+ augment.getListOfLeafList().clear();
+ }
+ YangNode child = augment.getChild();
+ List<YangNode> childNodes = new ArrayList<>();
+ while (child != null) {
+ child.setParent(javaCase);
+ childNodes.add(child);
+ child = child.getNextSibling();
+ }
+ augment.setChild(null);
+ try {
+ augment.addChild(javaCase);
+ for (YangNode node : childNodes) {
+ node.setNextSibling(null);
+ node.setPreviousSibling(null);
+ javaCase.addChild(node);
+ }
+ } catch (DataModelException e) {
+ System.out.print("failed to add child node due to " + javaCase.getName() + " " + e.getLocalizedMessage());
+ }
+ }
}