[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/YangJavaModelUtils.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
index 7739e52..0826c80 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
@@ -16,18 +16,20 @@
package org.onosproject.yangutils.translator.tojava;
-import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
+import org.onosproject.yangutils.datamodel.YangAtomicPath;
import org.onosproject.yangutils.datamodel.YangAugment;
import org.onosproject.yangutils.datamodel.YangCase;
import org.onosproject.yangutils.datamodel.YangChoice;
import org.onosproject.yangutils.datamodel.YangLeavesHolder;
+import org.onosproject.yangutils.datamodel.YangModule;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
+import org.onosproject.yangutils.datamodel.YangSubModule;
import org.onosproject.yangutils.datamodel.YangTranslatorOperatorNode;
import org.onosproject.yangutils.datamodel.YangTypeHolder;
import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
@@ -44,13 +46,11 @@
import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
-import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_CLASS_IMPORT_PKG;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
/**
* Represents utility class for YANG java model.
@@ -74,15 +74,36 @@
YangPluginConfig yangPluginConfig)
throws IOException {
if (javaCodeGeneratorInfo instanceof YangJavaAugmentTranslator) {
- javaCodeGeneratorInfo.getJavaFileInfo()
- .setJavaName(getAugmentClassName((YangJavaAugmentTranslator) javaCodeGeneratorInfo,
- yangPluginConfig));
+ updatePackageForAugmentInfo(javaCodeGeneratorInfo, yangPluginConfig);
} else {
javaCodeGeneratorInfo.getJavaFileInfo()
.setJavaName(getCamelCase(((YangNode) javaCodeGeneratorInfo).getName(),
yangPluginConfig.getConflictResolver()));
+ javaCodeGeneratorInfo.getJavaFileInfo().setPackage(getCurNodePackage((YangNode) javaCodeGeneratorInfo));
}
- javaCodeGeneratorInfo.getJavaFileInfo().setPackage(getCurNodePackage((YangNode) javaCodeGeneratorInfo));
+ javaCodeGeneratorInfo.getJavaFileInfo().setPackageFilePath(
+ getPackageDirPathFromJavaJPackage(javaCodeGeneratorInfo.getJavaFileInfo().getPackage()));
+
+ javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(yangPluginConfig.getCodeGenDir());
+ javaCodeGeneratorInfo.getJavaFileInfo().setPluginConfig(yangPluginConfig);
+
+ }
+
+ /**
+ * Updates YANG java file package information.
+ *
+ * @param javaCodeGeneratorInfo YANG java file info node
+ * @param yangPluginConfig YANG plugin config
+ * @throws IOException IO operations fails
+ */
+ private static void updatePackageForAugmentInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
+ YangPluginConfig yangPluginConfig)
+ throws IOException {
+ javaCodeGeneratorInfo.getJavaFileInfo()
+ .setJavaName(getAugmentClassName((YangJavaAugmentTranslator) javaCodeGeneratorInfo,
+ yangPluginConfig));
+ javaCodeGeneratorInfo.getJavaFileInfo().setPackage(
+ getAugmentsNodePackage((YangNode) javaCodeGeneratorInfo, yangPluginConfig));
javaCodeGeneratorInfo.getJavaFileInfo().setPackageFilePath(
getPackageDirPathFromJavaJPackage(javaCodeGeneratorInfo.getJavaFileInfo().getPackage()));
javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(yangPluginConfig.getCodeGenDir());
@@ -90,6 +111,28 @@
}
/**
+ * Returns package for augment node.
+ *
+ * @param yangNode augment node
+ * @param yangPluginConfig plugin configurations
+ * @return package for augment node
+ */
+ private static String getAugmentsNodePackage(YangNode yangNode, YangPluginConfig yangPluginConfig) {
+ YangAugment augment = (YangAugment) yangNode;
+ StringBuilder augmentPkg = new StringBuilder();
+ augmentPkg.append(getCurNodePackage(augment));
+
+ String pkg = PERIOD;
+ for (YangAtomicPath atomicPath : augment.getTargetNode()) {
+ pkg = pkg + getCamelCase(atomicPath.getNodeIdentifier().getName(), yangPluginConfig.getConflictResolver())
+ + PERIOD;
+ }
+ pkg = trimAtLast(pkg, PERIOD);
+ augmentPkg.append(pkg.toLowerCase());
+ return augmentPkg.toString();
+ }
+
+ /**
* Updates YANG java file package information for specified package.
*
* @param javaCodeGeneratorInfo YANG java file info node
@@ -104,7 +147,7 @@
javaCodeGeneratorInfo.getJavaFileInfo().setPackage(pkg);
javaCodeGeneratorInfo.getJavaFileInfo().setPackageFilePath(
getPackageDirPathFromJavaJPackage(javaCodeGeneratorInfo.getJavaFileInfo().getPackage()));
- javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(yangPlugin.getManagerCodeGenDir());
+ javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(yangPlugin.getCodeGenDir());
javaCodeGeneratorInfo.getJavaFileInfo().setPluginConfig(yangPlugin);
}
@@ -129,6 +172,12 @@
private static void updateTempFragmentFiles(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
YangPluginConfig yangPluginConfig)
throws IOException {
+
+ if (javaCodeGeneratorInfo instanceof YangModule
+ || javaCodeGeneratorInfo instanceof YangSubModule) {
+ javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().setRooNode(true);
+ }
+
if (javaCodeGeneratorInfo instanceof RpcNotificationContainer) {
/*
* Module / sub module node code generation.
@@ -268,20 +317,23 @@
generateCodeOfNode(javaCodeGeneratorInfo, yangPlugin);
TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles();
- if (javaCodeGeneratorInfo instanceof YangJavaAugmentTranslator) {
- JavaQualifiedTypeInfoTranslator yangAugmentedInfo = new JavaQualifiedTypeInfoTranslator();
- yangAugmentedInfo.setClassInfo(YANG_AUGMENTED_INFO);
- yangAugmentedInfo.setPkgInfo(YANG_AUGMENTED_INFO_CLASS_IMPORT_PKG);
- javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().getJavaExtendsListHolder()
- .addToExtendsList(yangAugmentedInfo, (YangNode) javaCodeGeneratorInfo,
- tempJavaCodeFragmentFiles.getBeanTempFiles());
- }
if (javaCodeGeneratorInfo instanceof YangCase) {
YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent();
+ if (parent instanceof YangAugment) {
+ parent = ((YangAugment) parent).getAugmentedNode();
+ }
JavaQualifiedTypeInfoTranslator parentsInfo = new JavaQualifiedTypeInfoTranslator();
- String parentName = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName());
- String parentPkg = ((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage();
+ JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ String parentName;
+ String parentPkg;
+ if (parentInfo.getPackage() != null) {
+ parentName = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName());
+ parentPkg = ((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage();
+ } else {
+ parentName = getCapitalCase(getCamelCase(parent.getName(), yangPlugin.getConflictResolver()));
+ parentPkg = getNodesPackage(parent, yangPlugin);
+ }
parentsInfo.setClassInfo(parentName);
parentsInfo.setPkgInfo(parentPkg);
javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().getJavaExtendsListHolder()
@@ -363,17 +415,18 @@
* @param node root YANG node
* @return true if root node contains any data node
*/
- public static boolean isManagerCodeGenRequired(YangNode node) {
+ public static boolean isRootNodesCodeGenRequired(YangNode node) {
List<YangNode> childNodes = new ArrayList<>();
- node = node.getChild();
- while (node != null) {
- childNodes.add(node);
- node = node.getNextSibling();
+ YangNode tempNode = node.getChild();
+ while (tempNode != null) {
+ childNodes.add(tempNode);
+ tempNode = tempNode.getNextSibling();
}
if (childNodes.size() == 0) {
- return false;
+ YangLeavesHolder leavesHolder = (YangLeavesHolder) node;
+ return !leavesHolder.getListOfLeaf().isEmpty() || !leavesHolder.getListOfLeafList().isEmpty();
} else if (childNodes.size() == 1) {
return !(childNodes.get(0) instanceof YangTranslatorOperatorNode);
}
@@ -389,33 +442,13 @@
}
/**
- * Return false if files are already present.
+ * Returns nodes package.
*
- * @param info java file info
- * @return false if files already present
- */
- public static boolean isGenerationOfCodeReq(JavaFileInfo info) {
- File codeGenDir = new File(info.getBaseCodeGenPath()
- + info.getPackageFilePath());
- File[] files = codeGenDir.listFiles();
- if (files != null && files.length >= 1) {
- for (File file : files) {
- if (file.getName().contentEquals(getCapitalCase(info.getJavaName() + MANAGER + ".java"))) {
- return false;
- }
- }
- }
- return true;
- }
-
- /**
- * Returns augmented nodes package.
- *
- * @param node augmented node
+ * @param node YANG node
* @param yangPluginConfig plugin config
* @return java package
*/
- public static String getAugmentedNodesPackage(YangNode node, YangPluginConfig yangPluginConfig) {
+ public static String getNodesPackage(YangNode node, YangPluginConfig yangPluginConfig) {
List<String> clsInfo = new ArrayList<>();
while (node.getParent() != null) {
@@ -424,7 +457,6 @@
} else {
clsInfo.add(getCamelCase(node.getName(), yangPluginConfig.getConflictResolver()));
}
-
node = node.getParent();
}
@@ -434,10 +466,10 @@
pkg.append(getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
.getRevision().getRevDate(), yangPluginConfig.getConflictResolver()));
} else if (node instanceof YangJavaSubModuleTranslator) {
- YangJavaSubModuleTranslator submodule = (YangJavaSubModuleTranslator) node;
- pkg.append(getRootPackage(submodule.getVersion(),
- submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
- submodule.getRevision().getRevDate(), yangPluginConfig.getConflictResolver()));
+ YangJavaSubModuleTranslator subModule = (YangJavaSubModuleTranslator) node;
+ pkg.append(getRootPackage(subModule.getVersion(),
+ subModule.getNameSpaceFromModule(subModule.getBelongsTo()),
+ subModule.getRevision().getRevDate(), yangPluginConfig.getConflictResolver()));
}
String concat = "";
for (int i = 1; i <= clsInfo.size(); i++) {
@@ -456,12 +488,15 @@
* @return augment class name
*/
public static String getAugmentClassName(YangAugment augment, YangPluginConfig yangPluginConfig) {
- YangNodeIdentifier nodeId = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier();
- String name = getCapitalCase(getCamelCase(nodeId.getName(), yangPluginConfig.getConflictResolver()));
- if (nodeId.getPrefix() != null) {
- return AUGMENTED + getCapitalCase(nodeId.getPrefix()) + name;
+ YangNodeIdentifier yangNodeIdentifier = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier();
+ String name = getCapitalCase(getCamelCase(yangNodeIdentifier.getName(), yangPluginConfig
+ .getConflictResolver()));
+ if (yangNodeIdentifier.getPrefix() != null) {
+ return AUGMENTED + getCapitalCase(yangNodeIdentifier.getPrefix()) + name;
} else {
return AUGMENTED + name;
}
}
+
}