[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/translator/tojava/utils/JavaFileGenerator.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index 7a30be8..08b3072 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -40,16 +40,21 @@
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
+import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isHasAugmentationExtended;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
 import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
@@ -67,12 +72,58 @@
 public final class JavaFileGenerator {
 
     /**
-     * Creates an instance of java file generator.
+     * Flag to check whether generated interface file need to extends any class.
      */
+    private static boolean isExtendsList = false;
+
+    /**
+     * List of classes to be extended by generated interface file.
+     */
+    private static List<String> extendsList = new ArrayList<>();
+
+    /**
+    * Creates an instance of java file generator.
+    */
     private JavaFileGenerator() {
     }
 
     /**
+     * Returns true if extends list is not empty.
+     *
+     * @return true or false
+     */
+    public static boolean isExtendsList() {
+        return isExtendsList;
+    }
+
+    /**
+     * Sets the value of is extends list.
+     *
+     * @param isExtends true or false
+     */
+    public static void setIsExtendsList(boolean isExtends) {
+        isExtendsList = isExtends;
+    }
+
+    /**
+     * Returns list of extended classes.
+     *
+     * @return list of extended classes
+     */
+    public static List<String> getExtendsList() {
+        return extendsList;
+    }
+
+    /**
+     * Sets the list of extended classes.
+     *
+     * @param extendList list of extended classes
+     */
+    public static void setExtendsList(List<String> extendList) {
+        extendsList = extendList;
+    }
+
+    /**
      * Returns generated interface file for current node.
      *
      * @param file file
@@ -91,6 +142,7 @@
         String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
 
         initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
+
         if (isAttrPresent) {
             /**
              * Add getter methods to interface file.
@@ -258,6 +310,12 @@
                         + " while impl class file generation");
             }
 
+            /**
+             * Add attribute for augmented info's list.
+             */
+            if (isHasAugmentationExtended(getExtendsList())) {
+                insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
+            }
             insertDataIntoJavaFile(file, NEW_LINE);
             try {
                 /**
@@ -298,6 +356,16 @@
             throw new IOException("No data found in temporary java code fragment files for " + className
                     + " while impl class file generation");
         }
+
+        /**
+         * Add method for augment info's list.
+         */
+        if (isHasAugmentationExtended(getExtendsList())) {
+            methods.add(getAddAugmentInfoMethodImpl());
+            methods.add(getAugmentInfoListImpl());
+            methods.add(getRemoveAugmentationImpl());
+        }
+
         /**
          * Add methods in impl class.
          */
@@ -310,7 +378,7 @@
     }
 
     /**
-     * Generate class file for type def.
+     * Generates class file for type def.
      *
      * @param file generated file
      * @param curNode current YANG node
@@ -364,11 +432,6 @@
             methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
 
             /**
-             * Setter method.
-             */
-            methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addTypeDefsSetter());
-
-            /**
              * Hash code method.
              */
             methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
@@ -388,7 +451,7 @@
 
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
-                    + " while tyoe def class file generation");
+                    + " while type def class file generation");
         }
 
         for (String method : methods) {