[ONOS-4799],[ONOS-4351] Augment inter file linker and Generated Code refactored.

Change-Id: Id1f3ac9c90a632373f51cc75d499c3110216be17
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
index b6172ed..f049be0 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
@@ -18,18 +18,20 @@
 
 import java.util.List;
 
+import org.onosproject.yangutils.datamodel.YangAtomicPath;
 import org.onosproject.yangutils.datamodel.YangAugment;
 import org.onosproject.yangutils.datamodel.YangModule;
 import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
 import org.onosproject.yangutils.datamodel.YangSubModule;
 import org.onosproject.yangutils.datamodel.YangUses;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
+import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
 import org.onosproject.yangutils.parser.exceptions.ParserException;
 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
 
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
 import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
 import static org.onosproject.yangutils.datamodel.utils.YangConstructType.AUGMENT_DATA;
 import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CASE_DATA;
@@ -38,22 +40,17 @@
 import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
 import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
 import static org.onosproject.yangutils.datamodel.utils.YangConstructType.WHEN_DATA;
-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;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
-        .constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
-        .constructListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidAbsoluteSchemaNodeId;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateMutuallyExclusiveChilds;
@@ -106,7 +103,7 @@
         checkStackIsNotEmpty(listener, MISSING_HOLDER, AUGMENT_DATA, ctx.augment().getText(), ENTRY);
 
         // Validate augment argument string
-        List<YangNodeIdentifier> targetNodes = getValidAbsoluteSchemaNodeId(ctx.augment().getText(),
+        List<YangAtomicPath> targetNodes = getValidAbsoluteSchemaNodeId(ctx.augment().getText(),
                 AUGMENT_DATA, ctx);
 
         // Validate sub statement cardinality.
@@ -126,7 +123,7 @@
             // TODO: handle in linker.
 
             yangAugment.setTargetNode(targetNodes);
-            yangAugment.setName(generateNameForAugmentNode(curData, targetNodes, listener));
+            yangAugment.setName(removeQuotesAndHandleConcat(ctx.augment().getText()));
 
             try {
                 curNode.addChild(yangAugment);
@@ -135,6 +132,13 @@
                         AUGMENT_DATA, ctx.augment().getText(), ENTRY, e.getMessage()));
             }
             listener.getParsedDataStack().push(yangAugment);
+
+            // Add resolution information to the list
+            YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangAugment>(yangAugment,
+                    curNode, line,
+                    charPositionInLine);
+            addToResolutionList(resolutionInfo, ctx);
+
         } else {
             throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, AUGMENT_DATA,
                     ctx.augment().getText(), ENTRY));
@@ -177,35 +181,19 @@
     }
 
     /**
-     * Validates whether the current target node path is correct or not.
+     * Add to resolution list.
      *
-     * @param targetNodes list of target nodes
-     * @param curNode current Node
-     * @param ctx augment context
-     * @param curNode current YANG node
+     * @param resolutionInfo resolution information.
+     * @param ctx            context object of the grammar rule
      */
-    private static void validateTargetNodePath(List<YangNodeIdentifier> targetNodes, YangNode curNode,
-            GeneratedYangParser.AugmentStatementContext ctx) {
+    private static void addToResolutionList(YangResolutionInfoImpl<YangAugment> resolutionInfo,
+                                            GeneratedYangParser.AugmentStatementContext ctx) {
 
-        YangNodeIdentifier moduleId = targetNodes.get(0);
-        if (moduleId.getPrefix() == null) {
-            if (!moduleId.getName().equals(curNode.getName())) {
-                throw parserException(ctx);
-            } else {
-                //validateNodeInTargetPath(curNode, targetNodes, ctx);
-                // TODO: handle in linker.
-            }
-        } 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.
-            }
+        try {
+            addResolutionInfo(resolutionInfo);
+        } catch (DataModelException e) {
+            throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+                    AUGMENT_DATA, ctx.augment().getText(), EXIT, e.getMessage()));
         }
     }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
index 48ac0de..5ad6133 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
@@ -709,10 +709,10 @@
      * @param ctx yang construct's context to get the line number and character position
      * @return target nodes list of absolute schema node id
      */
-    public static List<YangNodeIdentifier> getValidAbsoluteSchemaNodeId(String argumentString,
+    public static List<YangAtomicPath> getValidAbsoluteSchemaNodeId(String argumentString,
             YangConstructType yangConstructType, ParserRuleContext ctx) {
 
-        List<YangNodeIdentifier> targetNodes = new LinkedList<>();
+        List<YangAtomicPath> targetNodes = new ArrayList<>();
         YangNodeIdentifier yangNodeIdentifier;
         String tmpSchemaNodeId = removeQuotesAndHandleConcat(argumentString);
 
@@ -728,7 +728,9 @@
         String[] tmpData = tmpSchemaNodeId.replaceFirst(CARET + SLASH, EMPTY_STRING).split(SLASH);
         for (String nodeIdentifiers : tmpData) {
             yangNodeIdentifier = getValidNodeIdentifier(nodeIdentifiers, yangConstructType, ctx);
-            targetNodes.add(yangNodeIdentifier);
+            YangAtomicPath yangAbsPath = new YangAtomicPath();
+            yangAbsPath.setNodeIdentifier(yangNodeIdentifier);
+            targetNodes.add(yangAbsPath);
         }
         return targetNodes;
     }
@@ -780,4 +782,4 @@
             throw parserException;
         }
     }
-}
\ No newline at end of file
+}