[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/YangContainer.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
index e23bf02..7bb34e2 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -70,17 +70,17 @@
  *                | 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   |
  *                | leaf         | 7.6     | 0..n        | -YangLeaf        |
  *                | leaf-list    | 7.7     | 0..n        | -YangLeafList    |
  *                | list         | 7.8     | 0..n        | -child nodes     |
- *                | must         | 7.5.3   | 0..n        | -TODO            |
+ *                | must         | 7.5.3   | 0..n        | -YangMust        |
  *                | presence     | 7.5.5   | 0..1        | -boolean         |
  *                | reference    | 7.19.4  | 0..1        | -string          |
  *                | status       | 7.19.2  | 0..1        | -YangStatus      |
  *                | typedef      | 7.3     | 0..n        | -child nodes     |
  *                | uses         | 7.12    | 0..n        | -child nodes     |
- *                | when         | 7.19.5  | 0..1        | -TODO            |
+ *                | when         | 7.19.5  | 0..1        | -YangWhen        |
  *                +--------------+---------+-------------+------------------+
  */
 
@@ -89,7 +89,8 @@
  */
 public class YangContainer
         extends YangNode
-        implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder {
+        implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder,
+        YangMustHolder, YangWhenHolder, YangIfFeatureHolder {
 
     private static final long serialVersionUID = 806201605L;
 
@@ -135,6 +136,21 @@
     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;
+
+    /**
      * Create a container node.
      */
     public YangContainer() {
@@ -142,6 +158,26 @@
     }
 
     /**
+     * Returns the when.
+     *
+     * @return the when
+     */
+    @Override
+    public YangWhen getWhen() {
+        return when;
+    }
+
+    /**
+     * Sets the when.
+     *
+     * @param when the when to set
+     */
+    @Override
+    public void setWhen(YangWhen when) {
+        this.when = when;
+    }
+
+    /**
      * Returns the YANG name of container.
      *
      * @return the name of container as defined in YANG file
@@ -445,4 +481,41 @@
                     + getName() + "\"");
         }
     }
+
+    @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);
+    }
+
 }