[ONOS-5768] defect fix in yangtools

Change-Id: Ib7b9bf1d0f845184d27d01c799687f11a8d2fc6a
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 0c16a44..6c52346 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
@@ -43,4 +43,9 @@
      * @return list of augment info
      */
     List<YangAugment> getAugmentedInfoList();
+
+    /**
+     * Clones augment info.
+     */
+    void cloneAugmentInfo();
 }
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 3b6957c..ba7e362 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -144,7 +144,7 @@
      */
     private List<YangIfFeature> ifFeatureList;
 
-    private final List<YangAugment> yangAugmentedInfo;
+    private List<YangAugment> yangAugmentedInfo;
 
     /**
      * Creates a choice node.
@@ -440,4 +440,9 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
+
+
+    public void cloneAugmentInfo() {
+        yangAugmentedInfo = new ArrayList<>();
+    }
 }
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 17976e6..e8a7190 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -160,7 +160,7 @@
      */
     private List<YangIfFeature> ifFeatureList;
 
-    private final List<YangAugment> yangAugmentedInfo;
+    private List<YangAugment> yangAugmentedInfo;
 
     /**
      * YANG application error information.
@@ -487,4 +487,7 @@
         return yangAppErrorInfo;
     }
 
+    public void cloneAugmentInfo() {
+        yangAugmentedInfo = new ArrayList<>();
+    }
 }
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 30c9ec9..85a81e0 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -516,4 +516,8 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
+
+    public void cloneAugmentInfo() {
+        yangAugmentedInfo = new ArrayList<>();
+    }
 }
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 642e8fd..07d816a 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
@@ -94,7 +94,7 @@
      */
     private List<YangLeafList> listOfLeafList;
 
-    private final List<YangAugment> yangAugmentedInfo;
+    private List<YangAugment> yangAugmentedInfo;
 
     /**
      * Create a rpc input node.
@@ -224,4 +224,8 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
+
+    public void cloneAugmentInfo() {
+        yangAugmentedInfo = new ArrayList<>();
+    }
 }
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 918bb53..c350e8f 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -16,16 +16,16 @@
 
 package org.onosproject.yangutils.datamodel;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-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;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
 
 /*
@@ -90,7 +90,7 @@
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "key" statement, which MUST be present if the list represents
      * configuration, and MAY be present otherwise, takes as an argument a
      * string that specifies a space-separated list of leaf identifiers of this
@@ -98,39 +98,39 @@
      * such leaf identifier MUST refer to a child leaf of the list. The leafs
      * can be defined directly in sub-statements to the list, or in groupings
      * used in the list.
-     *
+     * <p>
      * The combined values of all the leafs specified in the key are used to
      * uniquely identify a list entry. All key leafs MUST be given values when a
      * list entry is created. Thus, any default values in the key leafs or their
      * types are ignored. It also implies that any mandatory statement in the
      * key leafs are ignored.
-     *
+     * <p>
      * A leaf that is part of the key can be of any built-in or derived type,
      * except it MUST NOT be the built-in type "empty".
-     *
+     * <p>
      * All key leafs in a list MUST have the same value for their "config" as
      * the list itself.
-     *
+     * <p>
      * List of key leaf names.
      */
     private List<String> keyList;
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "unique" statement is used to put constraints on valid list
      * entries.  It takes as an argument a string that contains a space-
      * separated list of schema node identifiers, which MUST be given in the
      * descendant form.  Each such schema node identifier MUST refer to a leaf.
-     *
+     * <p>
      * If one of the referenced leafs represents configuration data, then
      * all of the referenced leafs MUST represent configuration data.
-     *
+     * <p>
      * The "unique" constraint specifies that the combined values of all the
      * leaf instances specified in the argument string, including leafs with
      * default values, MUST be unique within all list entry instances in
      * which all referenced leafs exist.
-     *
+     * <p>
      * List of unique leaf/leaf-list names
      */
     private List<String> uniqueList;
@@ -149,32 +149,32 @@
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "max-elements" statement, which is optional, takes as an argument a
      * positive integer or the string "unbounded", which puts a constraint on
      * valid list entries. A valid leaf-list or list always has at most
      * max-elements entries.
-     *
+     * <p>
      * If no "max-elements" statement is present, it defaults to "unbounded".
      */
     private YangMaxElement maxElements;
 
     /**
      * Reference RFC 6020.
-     *
+     * <p>
      * The "min-elements" statement, which is optional, takes as an argument a
      * non-negative integer that puts a constraint on valid list entries. A
      * valid leaf-list or list MUST have at least min-elements entries.
-     *
+     * <p>
      * If no "min-elements" statement is present, it defaults to zero.
-     *
+     * <p>
      * The behavior of the constraint depends on the type of the leaf-list's or
      * list's closest ancestor node in the schema tree that is not a non-
      * presence container:
-     *
+     * <p>
      * o If this ancestor is a case node, the constraint is enforced if any
      * other node from the case exists.
-     *
+     * <p>
      * o Otherwise, it is enforced if the ancestor node exists.
      */
     private YangMinElement minElements;
@@ -371,11 +371,11 @@
 
         if (getKeyList().contains(key)) {
             throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
-                    "   key" +
-                    getName() + " in " +
-                    getLineNumber() + " at " +
-                    getCharPosition() +
-                    " in " + getFileName() + "\"");
+                                                 "   key" +
+                                                 getName() + " in " +
+                                                 getLineNumber() + " at " +
+                                                 getCharPosition() +
+                                                 " in " + getFileName() + "\"");
         }
 
         getKeyList().add(key);
@@ -394,11 +394,11 @@
         }
         if (getUniqueList().contains(unique)) {
             throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
-                    "   unique" +
-                    getName() + " in " +
-                    getLineNumber() + " at " +
-                    getCharPosition() +
-                    " in " + getFileName() + "\"");
+                                                 "   unique" +
+                                                 getName() + " in " +
+                                                 getLineNumber() + " at " +
+                                                 getCharPosition() +
+                                                 " in " + getFileName() + "\"");
         }
         getUniqueList().add(unique);
     }
@@ -578,10 +578,10 @@
         if (isConfig && (keys.isEmpty() || leaves.isEmpty()) && !isUsesPresentInList()
                 && !isListPresentInGrouping()) {
             throw new DataModelException("A list must have atleast one key leaf if config is true; " +
-                    getName() + " in " +
-                    getLineNumber() + " at " +
-                    getCharPosition() +
-                    " in " + getFileName() + "\"");
+                                                 getName() + " in " +
+                                                 getLineNumber() + " at " +
+                                                 getCharPosition() +
+                                                 " in " + getFileName() + "\"");
         } else if (keys != null) {
             validateKey(leaves, keys);
         }
@@ -605,11 +605,11 @@
             for (YangLeaf leaf : leaves) {
                 if (leaf.isConfig()) {
                     throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
-                            "it can have \"config\" set to \"true\"." +
-                            getName() + " in " +
-                            getLineNumber() + " at " +
-                            getCharPosition() +
-                            " in " + getFileName() + "\"");
+                                                         "it can have \"config\" set to \"true\"." +
+                                                         getName() + " in " +
+                                                         getLineNumber() + " at " +
+                                                         getCharPosition() +
+                                                         " in " + getFileName() + "\"");
                 }
             }
         }
@@ -618,10 +618,10 @@
             for (YangLeafList leafList : leafLists) {
                 if (leafList.isConfig()) {
                     throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
-                            "it can have \"config\" set to \"true\"." + getName() + " in " +
-                            getLineNumber() + " at " +
-                            getCharPosition() +
-                            " in " + getFileName() + "\"");
+                                                         "it can have \"config\" set to \"true\"." + getName() + " in " +
+                                                         getLineNumber() + " at " +
+                                                         getCharPosition() +
+                                                         " in " + getFileName() + "\"");
                 }
             }
         }
@@ -649,11 +649,11 @@
                     if (key.equals(leaf.getName())) {
                         if (leaf.getDataType().getDataType() == YangDataTypes.EMPTY) {
                             throw new DataModelException(" A leaf that is part of the key must not be the built-in " +
-                                    "type \"empty\"." +
-                                    getName() + " in " +
-                                    getLineNumber() + " at " +
-                                    getCharPosition() +
-                                    " in " + getFileName() + "\"");
+                                                                 "type \"empty\"." +
+                                                                 getName() + " in " +
+                                                                 getLineNumber() + " at " +
+                                                                 getCharPosition() +
+                                                                 " in " + getFileName() + "\"");
                         }
                         leafFound = true;
                         keyLeaves.add(leaf);
@@ -664,10 +664,10 @@
 
             if (!leafFound && !isUsesPresentInList() && !isListPresentInGrouping()) {
                 throw new DataModelException("An identifier, in key, must refer to a child leaf of the list" +
-                        getName() + " in " +
-                        getLineNumber() + " at " +
-                        getCharPosition() +
-                        " in " + getFileName() + "\"");
+                                                     getName() + " in " +
+                                                     getLineNumber() + " at " +
+                                                     getCharPosition() +
+                                                     " in " + getFileName() + "\"");
             }
             leafFound = false;
         }
@@ -679,11 +679,11 @@
         for (YangLeaf keyLeaf : keyLeaves) {
             if (isConfig != keyLeaf.isConfig()) {
                 throw new DataModelException("All key leafs in a list must have the same value for their" +
-                        " \"config\" as the list itself." +
-                        getName() + " in " +
-                        getLineNumber() + " at " +
-                        getCharPosition() +
-                        " in " + getFileName() + "\"");
+                                                     " \"config\" as the list itself." +
+                                                     getName() + " in " +
+                                                     getLineNumber() + " at " +
+                                                     getCharPosition() +
+                                                     " in " + getFileName() + "\"");
             }
         }
     }
@@ -700,10 +700,10 @@
             throws DataModelException {
         if (getName().equals(identifierName)) {
             throw new DataModelException("YANG file error: Duplicate input identifier detected, same as list \"" +
-                    getName() + " in " +
-                    getLineNumber() + " at " +
-                    getCharPosition() +
-                    " in " + getFileName() + "\"");
+                                                 getName() + " in " +
+                                                 getLineNumber() + " at " +
+                                                 getCharPosition() +
+                                                 " in " + getFileName() + "\"");
         }
     }
 
@@ -793,4 +793,8 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
+
+    public void cloneAugmentInfo() {
+        yangAugmentedInfo = new ArrayList<>();
+    }
 }
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 bc665ff..9aab675 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -421,6 +421,9 @@
         clonedNode.yangSchemaNodeIdentifier =
                 clonedNode.yangSchemaNodeIdentifier.clone();
         clonedNode.ysnContextInfoMap = new HashMap<>();
+        if (clonedNode instanceof YangAugmentableNode) {
+            ((YangAugmentableNode) clonedNode).cloneAugmentInfo();
+        }
         return clonedNode;
     }
 
@@ -505,7 +508,6 @@
                      * update the traversal's current node.
                      */
                     nextNodeToClone = nextNodeToClone.getChild();
-
                 } else if (nextNodeToClone.getNextSibling() != null) {
 
                     curTraversal = SIBILING;
@@ -523,7 +525,6 @@
                                                  " at " + nextNodeToClone.getCharPosition() +
                                                  " in " + nextNodeToClone.getFileName() + "\"");
         }
-
     }
 
     /**
@@ -573,7 +574,6 @@
                                                  " at " + currentNode.getCharPosition() +
                                                  " in " + currentNode.getFileName() + "\"");
         }
-
     }
 
     /**
@@ -618,7 +618,6 @@
              * as the current node's parent
              */
             newSibling.setParent(getParent());
-
         } else {
             throw new DataModelException("Node is already part of a tree, " +
                                                  "and cannot be added as a " +
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 dbca232..982aee2 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
@@ -20,6 +20,7 @@
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -120,7 +121,7 @@
      */
     private List<YangIfFeature> ifFeatureList;
 
-    private final List<YangAugment> yangAugmentedInfo;
+    private List<YangAugment> yangAugmentedInfo;
 
     /**
      * Create a notification node.
@@ -291,4 +292,8 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
+
+    public void cloneAugmentInfo() {
+        yangAugmentedInfo = new ArrayList<>();
+    }
 }
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 280da96..ffd2920 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
@@ -92,7 +92,7 @@
      */
     private List<YangLeafList> listOfLeafList;
 
-    private final List<YangAugment> yangAugmentedInfo;
+    private List<YangAugment> yangAugmentedInfo;
 
     /**
      * Create a rpc output node.
@@ -220,4 +220,8 @@
             yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
+
+    public void cloneAugmentInfo() {
+        yangAugmentedInfo = new ArrayList<>();
+    }
 }