[ONOS-5186]adding isDescendant node augmented flag in YANG node to handle augment scenario in YMS

Change-Id: I39dc042825feb4a668933fca4ed67dfaa106da1b
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
index 5fb0653..0c16a44 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
@@ -43,18 +43,4 @@
      * @return list of augment info
      */
     List<YangAugment> getAugmentedInfoList();
-
-    /**
-     * Sets the isAugmented flag.
-     *
-     * @param isAugmented the flag value to set
-     */
-    void setIsAugmented(boolean isAugmented);
-
-    /**
-     * Returns the isAugmented flag.
-     *
-     * @return if isAugmented flag
-     */
-    boolean isAugmented();
 }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
index 7e6d875..09cb104 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -138,8 +138,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Creates a choice node.
      */
@@ -430,16 +428,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
index 8aaeeaa..cd08573 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -159,8 +159,6 @@
      */
     private YangAppErrorInfo yangAppErrorInfo;
 
-    private boolean isAugmented;
-
     /**
      * Create a choice node.
      */
@@ -466,16 +464,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
         this.yangAppErrorInfo = yangAppErrorInfo;
     }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
index 16f826a..30c9ec9 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -130,8 +130,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Status of the node.
      */
@@ -508,16 +506,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
index eff6acf..a1b82fd 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
@@ -88,8 +88,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Create a rpc input node.
      */
@@ -222,16 +220,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
index f0d5c99..918bb53 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -209,8 +209,6 @@
      */
     private transient YangCompilerAnnotation compilerAnnotation;
 
-    private boolean isAugmented;
-
     /**
      * Creates a YANG list object.
      */
@@ -785,16 +783,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
index cd6cc7c..2d419c9 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -96,6 +96,11 @@
     private Map<YangSchemaNodeIdentifier, YangSchemaNode> defaultChildMap;
 
     /**
+     * Flag to check whether any descendant node is augmented.
+     */
+    private boolean isDescendantNodeAugmented;
+
+    /**
      * Returns the priority of the node.
      *
      * @return priority of the node
@@ -133,6 +138,24 @@
     }
 
     /**
+     * Returns true if descendant node is augmented.
+     *
+     * @return true if descendant node is augmented
+     */
+    public boolean isDescendantNodeAugmented() {
+        return isDescendantNodeAugmented;
+    }
+
+    /**
+     * Sets true if descendant node is augmented.
+     *
+     * @param descendantNodeAugmented true if descendant node is augmented.
+     */
+    public void setDescendantNodeAugmented(boolean descendantNodeAugmented) {
+        isDescendantNodeAugmented = descendantNodeAugmented;
+    }
+
+    /**
      * Returns the node type.
      *
      * @return node type
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
index 0802366..b70190c 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
@@ -115,8 +115,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Create a notification node.
      */
@@ -279,16 +277,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
index 52044df..d3d9cb7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
@@ -87,8 +87,6 @@
 
     private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
 
-    private boolean isAugmented;
-
     /**
      * Create a rpc output node.
      */
@@ -221,16 +219,6 @@
     }
 
     @Override
-    public void setIsAugmented(boolean isAugmented) {
-        this.isAugmented = isAugmented;
-    }
-
-    @Override
-    public boolean isAugmented() {
-        return isAugmented;
-    }
-
-    @Override
     public void setLeafNameSpaceAndAddToParentSchemaMap() {
         // Add namespace for all leafs.
         for (YangLeaf yangLeaf : getListOfLeaf()) {
diff --git a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
index f0d4608..1281bb8 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
@@ -1249,8 +1249,8 @@
                 if (targetNode instanceof YangAugmentableNode) {
                     detectCollisionForAugmentedNode(targetNode, augment);
                     ((YangAugmentableNode) targetNode).addAugmentation(augment);
-                    ((YangAugmentableNode) targetNode).setIsAugmented(true);
                     augment.setAugmentedNode(targetNode);
+                    setAugmentedFlagInAncestors(targetNode);
                     Resolvable resolvable = (Resolvable) entityToResolve;
                     resolvable.setResolvableStatus(RESOLVED);
                 } else {
@@ -1842,4 +1842,16 @@
         return null;
     }
 
+    /**
+     * Sets descendant node augmented flag in ancestors.
+     *
+     * @param targetNode augmented YANG node
+     */
+    private void setAugmentedFlagInAncestors(YangNode targetNode) {
+        targetNode = targetNode.getParent();
+        while (targetNode != null) {
+            targetNode.setDescendantNodeAugmented(true);
+            targetNode = targetNode.getParent();
+        }
+    }
 }