[ONOS-4839] update file priority for input files
Change-Id: I4aa0cbbfb0f168efd7c1895c9bb0c6589088eefd
diff --git a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
index f63d8df..8cfe779 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
@@ -16,9 +16,15 @@
package org.onosproject.yangutils.linker.impl;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Set;
import org.onosproject.yangutils.datamodel.ResolvableType;
+import org.onosproject.yangutils.datamodel.YangImport;
+import org.onosproject.yangutils.datamodel.YangInclude;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangReferenceResolver;
import org.onosproject.yangutils.datamodel.YangSubModule;
@@ -73,6 +79,9 @@
// Add reference to include list.
addRefToYangFilesIncludeList(yangNodeSet);
+ // Update the priority for all the files.
+ updateFilePriority(yangNodeSet);
+
// TODO check for circular import/include.
// Carry out inter-file linking.
@@ -154,7 +163,10 @@
*/
public void processInterFileLinking(Set<YangNode> yangNodeSet)
throws LinkerException {
- for (YangNode yangNode : yangNodeSet) {
+ List<YangNode> yangNodeSortedList = new LinkedList<>();
+ yangNodeSortedList.addAll(yangNodeSet);
+ Collections.sort(yangNodeSortedList);
+ for (YangNode yangNode : yangNodeSortedList) {
try {
((YangReferenceResolver) yangNode)
.resolveInterFileLinking(ResolvableType.YANG_IF_FEATURE);
@@ -178,4 +190,53 @@
}
}
}
+
+ /**
+ * Updates the priority for all the input files.
+ *
+ * @param yangNodeSet set of YANG files info
+ */
+ public void updateFilePriority(Set<YangNode> yangNodeSet) {
+ for (YangNode yangNode : yangNodeSet) {
+ updateFilePriorityOfNode(yangNode);
+ }
+ }
+
+ /**
+ * Updates priority of the node.
+ *
+ * @param yangNode YANG node information
+ */
+ public void updateFilePriorityOfNode(YangNode yangNode) {
+ int curNodePriority = yangNode.getPriority();
+ if (yangNode instanceof YangReferenceResolver) {
+ List<YangImport> yangImportList = ((YangReferenceResolver) yangNode).getImportList();
+ if (yangImportList != null && !yangImportList.isEmpty()) {
+ Iterator<YangImport> importInfoIterator = yangImportList.iterator();
+ // Run through the imported list to update priority.
+ while (importInfoIterator.hasNext()) {
+ YangImport yangImport = importInfoIterator.next();
+ YangNode importedNode = yangImport.getImportedNode();
+ if (curNodePriority >= importedNode.getPriority()) {
+ importedNode.setPriority(curNodePriority + 1);
+ updateFilePriorityOfNode(importedNode);
+ }
+ }
+ }
+
+ List<YangInclude> yangIncludeList = ((YangReferenceResolver) yangNode).getIncludeList();
+ if (yangIncludeList != null && !yangIncludeList.isEmpty()) {
+ Iterator<YangInclude> includeInfoIterator = yangIncludeList.iterator();
+ // Run through the imported list to update priority.
+ while (includeInfoIterator.hasNext()) {
+ YangInclude yangInclude = includeInfoIterator.next();
+ YangNode includedNode = yangInclude.getIncludedNode();
+ if (curNodePriority >= includedNode.getPriority()) {
+ includedNode.setPriority(curNodePriority + 1);
+ updateFilePriorityOfNode(includedNode);
+ }
+ }
+ }
+ }
+ }
}
diff --git a/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangPluginConfig.java b/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangPluginConfig.java
index 8199a8e..963bb8d 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangPluginConfig.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/utils/io/impl/YangPluginConfig.java
@@ -59,7 +59,7 @@
/**
* Sets the string sbi or nbi for code generation.
*
- * @par code generation is for sbi
+ * @param codeGenerateForsbi generation is for sbi
*/
public void setCodeGenerateForsbi(String codeGenerateForsbi) {
this.codeGenerateForsbi = codeGenerateForsbi;