[ONOS-4650][ONOS-4726][ONOS-4727] [ONOS-4728]Implement must parser + when parser + feature + if-feature + revision defect fix
Change-Id: I0a3aee6c1c6b72ef7da7f7f565fd0f149fe3fd42
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
index f14cfeb..16348e5 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
@@ -74,7 +74,7 @@
public class YangModule
extends YangNode
implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, YangReferenceResolver,
- RpcNotificationContainer {
+ RpcNotificationContainer, YangFeatureHolder {
private static final long serialVersionUID = 806201610L;
@@ -85,7 +85,7 @@
/**
* Reference:RFC 6020.
- * <p>
+ *
* The "contact" statement provides contact information for the module. The
* argument is a string that is used to specify contact information for the
* person or persons to whom technical queries concerning this module should
@@ -96,7 +96,7 @@
/**
* Reference:RFC 6020.
- * <p>
+ *
* The "description" statement takes as an argument a string that contains a
* human-readable textual description of this definition. The text is
* provided in a language (or languages) chosen by the module developer; for
@@ -125,13 +125,18 @@
private List<YangLeafList> listOfLeafList;
/**
+ * List of feature at root level in the module.
+ */
+ private List<YangFeature> listOfFeature;
+
+ /**
* Name space of the module.
*/
private YangNameSpace nameSpace;
/**
* Reference:RFC 6020.
- * <p>
+ *
* The "organization" statement defines the party responsible for this
* module. The argument is a string that is used to specify a textual
* description of the organization(s) under whose auspices this module was
@@ -201,6 +206,11 @@
private List<YangResolutionInfo> usesResolutionList;
/**
+ * if-feature resolution list.
+ */
+ private List<YangResolutionInfo> ifFeatureResolutionList;
+
+ /**
* Creates a YANG node of module type.
*/
public YangModule() {
@@ -208,6 +218,7 @@
super(YangNodeType.MODULE_NODE);
derivedTypeResolutionList = new LinkedList<>();
usesResolutionList = new LinkedList<>();
+ ifFeatureResolutionList = new LinkedList<>();
importList = new LinkedList<YangImport>();
includeList = new LinkedList<YangInclude>();
listOfLeaf = new LinkedList<YangLeaf>();
@@ -373,6 +384,24 @@
getListOfLeafList().add(leafList);
}
+ @Override
+ public List<YangFeature> getFeatureList() {
+ return listOfFeature;
+ }
+
+ @Override
+ public void addFeatureList(YangFeature feature) {
+ if (getFeatureList() == null) {
+ setListOfFeature(new LinkedList<>());
+ }
+ getFeatureList().add(feature);
+ }
+
+ @Override
+ public void setListOfFeature(List<YangFeature> listOfFeature) {
+ this.listOfFeature = listOfFeature;
+ }
+
/**
* Returns the name space of module elements.
*
@@ -558,10 +587,11 @@
public List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type) {
if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) {
return derivedTypeResolutionList;
- } else {
+ } else if (type == ResolvableType.YANG_USES) {
return usesResolutionList;
+ } else {
+ return ifFeatureResolutionList;
}
-
}
@Override
@@ -571,6 +601,8 @@
derivedTypeResolutionList.add(resolutionInfo);
} else if (type == ResolvableType.YANG_USES) {
usesResolutionList.add(resolutionInfo);
+ } else if (type == ResolvableType.YANG_IF_FEATURE) {
+ ifFeatureResolutionList.add(resolutionInfo);
}
}
@@ -581,6 +613,8 @@
derivedTypeResolutionList = resolutionList;
} else if (type == ResolvableType.YANG_USES) {
usesResolutionList = resolutionList;
+ } else if (type == ResolvableType.YANG_IF_FEATURE) {
+ ifFeatureResolutionList.add((YangResolutionInfo) resolutionList);
}
}