[ONOS-4286],[ONOS-3911] YANG typedef and YANG augment
                        translator implementation.

Change-Id: I3e21d1cb52bcb90b935b672eee42b836c21f448b
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 4a381d2..39e0a04 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
@@ -17,11 +17,13 @@
 package org.onosproject.yangutils.parser.impl.listeners;
 
 import java.util.List;
+
 import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangSubModule;
+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.parser.Parsable;
 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
@@ -35,21 +37,22 @@
 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.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.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidAbsoluteSchemaNodeId;
 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;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidAbsoluteSchemaNodeId;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
 import static org.onosproject.yangutils.utils.YangConstructType.AUGMENT_DATA;
-import static org.onosproject.yangutils.utils.YangConstructType.DATA_DEF_DATA;
-import static org.onosproject.yangutils.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.utils.YangConstructType.WHEN_DATA;
 import static org.onosproject.yangutils.utils.YangConstructType.CASE_DATA;
+import static org.onosproject.yangutils.utils.YangConstructType.DATA_DEF_DATA;
+import static org.onosproject.yangutils.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yangutils.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yangutils.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yangutils.utils.YangConstructType.WHEN_DATA;
 
 /*
  * Reference: RFC6020 and YANG ANTLR Grammar
@@ -73,11 +76,13 @@
  */
 
 /**
- * Implements listener based call back function corresponding to the "augment"
+ * Represents listener based call back function corresponding to the "augment"
  * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
  */
 public final class AugmentListener {
 
+    private static final String AUGMENTED = "Augmented";
+
     /**
      * Creates a new augment listener.
      */
@@ -110,11 +115,12 @@
         detectCollidingChildUtil(listener, line, charPositionInLine, "", AUGMENT_DATA);
 
         Parsable curData = listener.getParsedDataStack().peek();
-        if (curData instanceof YangModule || curData instanceof YangSubModule) {
+        if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangUses) {
 
             YangNode curNode = (YangNode) curData;
             YangAugment yangAugment = getYangAugmentNode(JAVA_GENERATION);
             yangAugment.setTargetNode(targetNodes);
+            yangAugment.setName(getValidNameForAugment(targetNodes));
             try {
                 curNode.addChild(yangAugment);
             } catch (DataModelException e) {
@@ -163,4 +169,30 @@
         validateMutuallyExclusiveChilds(ctx.dataDefStatement(), DATA_DEF_DATA, ctx.caseStatement(),
                                         CASE_DATA, AUGMENT_DATA, ctx.augment().getText());
     }
+
+    /**
+     * Returns a name identifier for augment.
+     *
+     * @param targetNode list of target nodes
+     * @return name identifier
+     */
+    private static String getValidNameForAugment(List<YangNodeIdentifier> targetNodes) {
+        String name = "";
+        YangNodeIdentifier nodeId = targetNodes.get(targetNodes.size() - 1);
+
+        if (nodeId.getPrefix() != null) {
+            name = AUGMENTED + getCaptialCase(nodeId.getPrefix()) + getCaptialCase(nodeId.getName());
+        } else {
+           //TODO: name = name + ((HasAugmentation)getParentNode()).getAugmentPrefix(nodeId);
+        }
+        return name;
+    }
+
+    /**
+     * Validates for the child nodes of augment node.
+     */
+    private static void validateForChildNodes() {
+        //TODO: implement with linker.
+        return;
+    }
 }