[ONOS-4351][ONOS-4524] Augment linking and defect fixed.

Change-Id: I7c8e8c90579eea4631e014c4906a543a3c249427
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
index 68a1b36..b3b22ae 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
@@ -18,7 +18,6 @@
 
 import java.util.List;
 
-import org.onosproject.yangutils.datamodel.CollisionDetector;
 import org.onosproject.yangutils.datamodel.YangAugment;
 import org.onosproject.yangutils.datamodel.YangModule;
 import org.onosproject.yangutils.datamodel.YangNode;
@@ -33,9 +32,10 @@
 
 import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
 import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangAugmentNode;
-import static org.onosproject.yangutils.parser.impl.parserutils.AugmentJavaFileNameGenUtil.clearOccurrenceCount;
-import static org.onosproject.yangutils.parser.impl.parserutils.AugmentJavaFileNameGenUtil.createValidNameForAugment;
-import static org.onosproject.yangutils.parser.impl.parserutils.AugmentJavaFileNameGenUtil.updateNameWhenHasMultipleOuccrrence;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.generateNameForAugmentNode;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.getParentsPrefix;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.parserException;
+import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerUtil.validateNodeInTargetPath;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
@@ -119,8 +119,11 @@
         if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangUses) {
             YangNode curNode = (YangNode) curData;
             YangAugment yangAugment = getYangAugmentNode(JAVA_GENERATION);
+
+            validateTargetNodePath(targetNodes, curNode, ctx);
+
             yangAugment.setTargetNode(targetNodes);
-            yangAugment.setName(detectCollisionForTargetNode(curData, targetNodes, line, charPositionInLine, listener));
+            yangAugment.setName(generateNameForAugmentNode(curData, targetNodes, listener));
 
             try {
                 curNode.addChild(yangAugment);
@@ -171,58 +174,34 @@
     }
 
     /**
-     * Detects collision for java file generation of augment node when
-     * it is updating the same target node in same parent multiple times.
-     * Returns name for generated java file of augment node
+     * Validates whether the current target node path is correct or not.
      *
-     * @param curData parsable data
      * @param targetNodes list of target nodes
      * @param line line in YANG file
      * @param charPositionInLine char position in YANG file
-     * @param listener tree walk listener
-     * @return name for generated java file for augment node
+     * @param curNode current YANG node
      */
-    private static String detectCollisionForTargetNode(Parsable curData, List<YangNodeIdentifier> targetNodes, int line,
-            int charPositionInLine, TreeWalkListener listener) {
+    private static void validateTargetNodePath(List<YangNodeIdentifier> targetNodes, YangNode curNode,
+            GeneratedYangParser.AugmentStatementContext ctx) {
 
-        String curPrefix = null;
-        if (curData instanceof YangModule) {
-            curPrefix = ((YangModule) curData).getPrefix();
-        } else if (curData instanceof YangSubModule) {
-            curPrefix = ((YangSubModule) curData).getPrefix();
-        }
-        YangNodeIdentifier nodeId = targetNodes.get(targetNodes.size() - 1);
-        boolean isPrefix = isPrefixPresent(nodeId, curPrefix);
-        String xpath = createValidNameForAugment(nodeId, isPrefix);
-
-        if (listener.getParsedDataStack().peek() instanceof CollisionDetector) {
-            try {
-                ((CollisionDetector) listener.getParsedDataStack().peek()).detectCollidingChild(xpath,
-                        AUGMENT_DATA);
-            } catch (DataModelException e) {
-                return updateNameWhenHasMultipleOuccrrence(nodeId, isPrefix);
+        YangNodeIdentifier moduleId = targetNodes.get(0);
+        if (moduleId.getPrefix() == null) {
+            if (!moduleId.getName().equals(curNode.getName())) {
+                throw parserException(ctx);
+            } else {
+                validateNodeInTargetPath(curNode, targetNodes, ctx);
+            }
+        } else {
+            String parentPrefix = getParentsPrefix(curNode);
+            if (parentPrefix != null) {
+                if (!parentPrefix.equals(moduleId.getPrefix())) {
+                    // TODO: handle in linker.
+                } else {
+                    validateNodeInTargetPath(curNode, targetNodes, ctx);
+                }
+            } else {
+                // TODO: handle in linker.
             }
         }
-
-        clearOccurrenceCount();
-        return xpath;
-    }
-
-    /**
-     * Returns true if a prefix is present and it is not equals to parents prefix.
-     *
-     * @param nodeId YANG node identifier
-     * @param parentsPrefix parent's prefix
-     * @return true if a prefix is present and it is not equals to parents prefix
-     */
-    private static boolean isPrefixPresent(YangNodeIdentifier nodeId, String parentsPrefix) {
-        return nodeId.getPrefix() != null && nodeId.getPrefix() != parentsPrefix;
-    }
-
-    /**
-     * Validates for the child nodes of augment node.
-     */
-    private static void validateForChildNodes() {
-        //TODO: implement with linker.
     }
 }