[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/YangLeaf.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
index 0391518..0c717a6 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -17,7 +17,8 @@
 package org.onosproject.yangutils.datamodel;
 
 import java.io.Serializable;
-
+import java.util.LinkedList;
+import java.util.List;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
@@ -43,16 +44,16 @@
  *       | substatement | section | cardinality |data model mapping|
  *       +--------------+---------+-------------+------------------+
  *       | config       | 7.19.1  | 0..1        | - boolean        |
- *       | default      | 7.6.4   | 0..1        | - TODO           |
+ *       | default      | 7.6.4   | 0..1        | - string         |
  *       | description  | 7.19.3  | 0..1        | - string         |
- *       | if-feature   | 7.18.2  | 0..n        | - TODO           |
+ *       | if-feature   | 7.18.2  | 0..n        | - YangIfFeature  |
  *       | mandatory    | 7.6.5   | 0..1        | - boolean        |
- *       | must         | 7.5.3   | 0..n        | - TODO           |
+ *       | must         | 7.5.3   | 0..n        | - YangMust       |
  *       | reference    | 7.19.4  | 0..1        | - string         |
  *       | status       | 7.19.2  | 0..1        | - YangStatus     |
  *       | type         | 7.6.3   | 1           | - YangType       |
  *       | units        | 7.3.3   | 0..1        | - String         |
- *       | when         | 7.19.5  | 0..1        | - TODO           |
+ *       | when         | 7.19.5  | 0..1        | - YangWhen       |
  *       +--------------+---------+-------------+------------------+
  */
 
@@ -60,7 +61,8 @@
  * Represents leaf data represented in YANG.
  */
 public class YangLeaf
-        implements YangCommonInfo, Parsable, Cloneable, Serializable {
+        implements YangCommonInfo, Parsable, Cloneable, Serializable,
+        YangMustHolder, YangIfFeatureHolder, YangWhenHolder {
 
     private static final long serialVersionUID = 806201635L;
 
@@ -111,11 +113,26 @@
     private String defaultValueInString;
 
     /**
+     * When data of the leaf.
+     */
+    private YangWhen when;
+
+    /**
      * YANG Node in which the leaf is contained.
      */
     private transient YangLeavesHolder containedIn;
 
     /**
+     * List of must statement constraints.
+     */
+    private List<YangMust> mustConstraintList;
+
+    /**
+     * List of if-feature.
+     */
+    private List<YangIfFeature> ifFeatureList;
+
+    /**
      * Creates a YANG leaf.
      */
     public YangLeaf() {
@@ -158,6 +175,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 description.
      *
      * @return the description
@@ -346,4 +383,40 @@
         // TODO auto-generated method stub, to be implemented by parser
 
     }
+
+    @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);
+    }
+
+    @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;
+    }
 }