[ONOS-4829] Augmented data method generator implmentation.
Change-Id: I0cb68dd10a748e5b66eec0b832574f408a23ba5c
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index c6fd897..6f4fa9b 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -18,14 +18,23 @@
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.onosproject.yangutils.datamodel.YangAtomicPath;
import org.onosproject.yangutils.datamodel.YangAugment;
import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
import org.onosproject.yangutils.translator.exception.TranslatorException;
+import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yangutils.translator.tojava.JavaImportData;
+import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
+import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
@@ -67,6 +76,8 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentedNodesPackage;
import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
@@ -553,4 +564,191 @@
insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
}
+ /**
+ * Returns resolved augments for manager classes.
+ *
+ * @param parent parent node
+ * @return resolved augments for manager classes
+ */
+ public static Map<YangAtomicPath, YangAugment> getResolvedAugmentsForManager(YangNode parent) {
+ Map<YangAtomicPath, YangAugment> resolvedAugmentsForManager = new HashMap<>();
+ YangNodeIdentifier nodeId;
+ List<YangAtomicPath> targets = new ArrayList<>();
+ for (YangAugment augment : getListOfAugments(parent)) {
+ nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
+ if (validateNodeIdentifierInSet(nodeId, targets)) {
+ targets.add(augment.getTargetNode().get(0));
+ resolvedAugmentsForManager.put(augment.getTargetNode().get(0), augment);
+ }
+ }
+ return resolvedAugmentsForManager;
+ }
+
+ /**
+ * Returns set of node identifiers.
+ *
+ * @param parent parent node
+ * @return set of node identifiers
+ */
+ public static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
+
+ List<YangAtomicPath> targets = new ArrayList<>();
+ YangNodeIdentifier nodeId;
+ List<YangAugment> augments = getListOfAugments(parent);
+ for (YangAugment augment : augments) {
+ nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
+
+ if (validateNodeIdentifierInSet(nodeId, targets)) {
+ targets.add(augment.getTargetNode().get(0));
+ }
+ }
+ return targets;
+ }
+
+ /* Returns list of augments.*/
+ private static List<YangAugment> getListOfAugments(YangNode parent) {
+ List<YangAugment> augments = new ArrayList<>();
+ YangNode child = parent.getChild();
+ while (child != null) {
+ if (child instanceof YangAugment) {
+ augments.add((YangAugment) child);
+ }
+ child = child.getNextSibling();
+ }
+ return augments;
+ }
+
+ /*Validates the set for duplicate names of node identifiers.*/
+ private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
+ boolean isPresent = true;
+ for (YangAtomicPath target : targets) {
+ if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
+ if (target.getNodeIdentifier().getPrefix() != null) {
+ isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
+ } else {
+ isPresent = nodeId.getPrefix() != null;
+ }
+ }
+ }
+ return isPresent;
+ }
+
+ /**
+ * Adds resolved augmented node imports to manager class.
+ *
+ * @param parent parent node
+ */
+ public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
+ Map<YangAtomicPath, YangAugment> resolvedAugmentsForManager = getResolvedAugmentsForManager(parent);
+ List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
+ TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
+ .getTempJavaCodeFragmentFiles();
+ YangNode augmentedNode;
+ JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+ String curNodeName;
+ JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ for (YangAtomicPath nodeId : targets) {
+ augmentedNode = resolvedAugmentsForManager.get(nodeId).getResolveNodeInPath().get(nodeId);
+ if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
+ curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
+ } else {
+ curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
+ .getConflictResolver()));
+ }
+
+ javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
+ parentInfo.getPluginConfig());
+ tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
+ parentInfo.getJavaName(), parentInfo.getPackage());
+
+ }
+ }
+
+ /**
+ * Returns qualified type info of augmented node.
+ *
+ * @param augmentedNode augmented node
+ * @param curNodeName current node name
+ * @param pluginConfig plugin configurations
+ * @return qualified type info of augmented node
+ */
+ public static JavaQualifiedTypeInfo getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode, String curNodeName,
+ YangPluginConfig pluginConfig) {
+ JavaQualifiedTypeInfo javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
+ getCapitalCase(curNodeName));
+ if (javaQualifiedTypeInfo.getPkgInfo() == null) {
+ javaQualifiedTypeInfo.setPkgInfo(getAugmentedNodesPackage(augmentedNode,
+ pluginConfig));
+ }
+ return javaQualifiedTypeInfo;
+ }
+
+ /**
+ * Validates if augmented node is imported in parent node.
+ *
+ * @param javaQualifiedTypeInfo qualified type info
+ * @param importData import data
+ * @return true if present in imports
+ */
+ private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfo javaQualifiedTypeInfo,
+ JavaImportData importData) {
+ for (JavaQualifiedTypeInfo curImportInfo : importData.getImportSet()) {
+ if (curImportInfo.getClassInfo()
+ .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
+ return curImportInfo.getPkgInfo()
+ .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Return augmented class name for data methods in manager and service.
+ *
+ * @param augmentedNode augmented node
+ * @param parent parent node
+ * @return augmented class name for data methods in manager and service
+ */
+ public static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
+ String curNodeName;
+ JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+ JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
+ TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
+ .getTempJavaCodeFragmentFiles().getServiceTempFiles();
+ if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
+ curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
+ } else {
+ curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
+ .getConflictResolver()));
+ }
+
+ javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
+ getCapitalCase(curNodeName),
+ parentInfo.getPluginConfig());
+ if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
+ tempJavaServiceFragmentFiles.getJavaImportData())) {
+ return javaQualifiedTypeInfo.getClassInfo();
+ } else {
+ return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
+ }
+ }
+
+ /**
+ * Returns parent node name for data methods in manager and service.
+ *
+ * @param parent parent node
+ * @param pluginConfig plugin configurations
+ * @return parent node name for data methods in manager and service
+ */
+ public static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
+ JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ if (parentInfo.getJavaName() != null) {
+ return getCapitalCase(parentInfo.getJavaName());
+ }
+ return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
+ .getConflictResolver()));
+
+ }
+
}