[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/YangList.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
index 632c5b7..a1e13ac 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -46,21 +46,21 @@
  *                | container    | 7.5     | 0..n        |-child nodes      |
  *                | description  | 7.19.3  | 0..1        |-string           |
  *                | grouping     | 7.11    | 0..n        |-child nodes      |
- *                | if-feature   | 7.18.2  | 0..n        |-TODO             |
+ *                | if-feature   | 7.18.2  | 0..n        |-YangIfFeature    |
  *                | key          | 7.8.2   | 0..1        |-String list      |
  *                | leaf         | 7.6     | 0..n        |-YangLeaf         |
  *                | leaf-list    | 7.7     | 0..n        |-YangLeafList     |
  *                | list         | 7.8     | 0..n        |-child nodes      |
  *                | max-elements | 7.7.4   | 0..1        |-int              |
  *                | min-elements | 7.7.3   | 0..1        |-int              |
- *                | must         | 7.5.3   | 0..n        |-TODO             |
+ *                | must         | 7.5.3   | 0..n        |-YangMust         |
  *                | ordered-by   | 7.7.5   | 0..1        |-TODO             |
  *                | reference    | 7.19.4  | 0..1        |-string           |
  *                | status       | 7.19.2  | 0..1        |-YangStatus       |
  *                | typedef      | 7.3     | 0..n        |-child nodes      |
  *                | unique       | 7.8.3   | 0..n        |-TODO             |
- *                | uses         | 7.12    | 0..n        |-child nodes(TODO)|
- *                | when         | 7.19.5  | 0..1        |-TODO             |
+ *                | uses         | 7.12    | 0..n        |-child nodes      |
+ *                | when         | 7.19.5  | 0..1        |-YangWhen         |
  *                +--------------+---------+-------------+------------------+
  */
 
@@ -69,7 +69,8 @@
  */
 public class YangList
         extends YangNode
-        implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder {
+        implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder,
+        YangMustHolder, YangIfFeatureHolder {
 
     private static final long serialVersionUID = 806201609L;
 
@@ -165,10 +166,24 @@
     /**
      * Status of the node.
      */
-
     private YangStatusType status = YangStatusType.CURRENT;
 
     /**
+     * List of must statement constraints.
+     */
+    private List<YangMust> mustConstraintList;
+
+    /**
+     * When data of the node.
+     */
+    private YangWhen when;
+
+    /**
+     * List of if-feature.
+     */
+    private List<YangIfFeature> ifFeatureList;
+
+    /**
      * Creates a YANG list object.
      */
     public YangList() {
@@ -176,6 +191,24 @@
     }
 
     /**
+     * Returns the when.
+     *
+     * @return the when
+     */
+    public YangWhen getWhen() {
+        return when;
+    }
+
+    /**
+     * Sets the when.
+     *
+     * @param when the when to set
+     */
+    public void setWhen(YangWhen when) {
+        this.when = when;
+    }
+
+    /**
      * Returns the YANG list name.
      *
      * @return YANG list name
@@ -643,4 +676,40 @@
         return false;
         // TODO When grouping linking is done this method has to be modified.
     }
+
+    @Override
+    public List<YangIfFeature> getIfFeatureList() {
+        return ifFeatureList;
+    }
+
+    @Override
+    public void addIfFeatureList(YangIfFeature ifFeature) {
+        if (getIfFeatureList() == null) {
+            setIfFeatureList(new LinkedList<>());
+        }
+        getIfFeatureList().add(ifFeature);
+    }
+
+    @Override
+    public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+        this.ifFeatureList = ifFeatureList;
+    }
+
+    @Override
+    public List<YangMust> getListOfMust() {
+        return mustConstraintList;
+    }
+
+    @Override
+    public void setListOfMust(List<YangMust> mustConstraintList) {
+        this.mustConstraintList = mustConstraintList;
+    }
+
+    @Override
+    public void addMust(YangMust must) {
+        if (getListOfMust() == null) {
+            setListOfMust(new LinkedList<>());
+        }
+        getListOfMust().add(must);
+    }
 }