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

Change-Id: I7c8e8c90579eea4631e014c4906a543a3c249427
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
index b0a65a4..59cd01b 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
@@ -28,6 +28,7 @@
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
+import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
@@ -74,13 +75,12 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addArrayListImport;
+import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addAugmentationHoldersImport;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addAugmentedInfoImport;
-import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addHasAugmentationImport;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.closeFile;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.detectCollisionBwParentAndChildForImport;
+import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isAugmentationHolderExtended;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isAugmentedInfoExtended;
-import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isHasAugmentationExtended;
-import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.prepareJavaFileGeneratorForExtendsList;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.sortImports;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
@@ -131,8 +131,7 @@
     /**
      * Contains all the interface(s)/class name which will be extended by generated files.
      */
-    private List<String> extendsList = new ArrayList<>();
-
+    private JavaExtendsListHolder javaExtendsListHolder;
     /**
      * File type extension for java classes.
      */
@@ -499,9 +498,8 @@
      * @param javaFileInfo generated java file information
      * @throws IOException when fails to create new file handle
      */
-    TempJavaFragmentFiles(JavaFileInfo javaFileInfo)
-            throws IOException {
-        setExtendsList(new ArrayList<>());
+    TempJavaFragmentFiles(JavaFileInfo javaFileInfo) throws IOException {
+        setJavaExtendsListHolder(new JavaExtendsListHolder());
         setJavaImportData(new JavaImportData());
         setJavaFileInfo(javaFileInfo);
         setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
@@ -776,30 +774,21 @@
     }
 
     /**
-     * Returns list of classes to be extended by generated files.
+     * Returns java extends list holder.
      *
-     * @return list of classes to be extended by generated files
+     * @return java extends list holder
      */
-    List<String> getExtendsList() {
-        return extendsList;
+    public JavaExtendsListHolder getJavaExtendsListHolder() {
+        return javaExtendsListHolder;
     }
 
     /**
-     * Sets class to be extended by generated file.
+     * Sets java extends list holder.
      *
-     * @param extendsList list of classes to be extended
+     * @param javaExtendsListHolder java extends list holder
      */
-    void setExtendsList(List<String> extendsList) {
-        this.extendsList = extendsList;
-    }
-
-    /**
-     * Adds class to the extends list.
-     *
-     * @param extend class to be extended
-     */
-    public void addToExtendsList(String extend) {
-        getExtendsList().add(extend);
+    public void setJavaExtendsListHolder(JavaExtendsListHolder javaExtendsListHolder) {
+        this.javaExtendsListHolder = javaExtendsListHolder;
     }
 
     /**
@@ -1323,10 +1312,6 @@
         if (isAttributePresent()) {
             imports = getJavaImportData().getImports();
         }
-        /*
-         * Prepares java file generator for extends list.
-         */
-        prepareJavaFileGeneratorForExtendsList(getExtendsList());
         createPackage(curNode);
 
         /*
@@ -1347,16 +1332,7 @@
                     }
                 }
             }
-            /*
-             * Adds import for HasAugmentation class.
-             */
-            if (isHasAugmentationExtended(getExtendsList())) {
-                addHasAugmentationImport(curNode, imports, true);
-            }
-            if (isAugmentedInfoExtended(getExtendsList())) {
-                addAugmentedInfoImport(curNode, imports, true);
-            }
-            sortImports(imports);
+
             /*
              * Create interface file.
              */
@@ -1378,10 +1354,10 @@
                 mergeJavaFiles(getBuilderInterfaceJavaFileHandle(), getInterfaceJavaFileHandle());
             }
             insertDataIntoJavaFile(getInterfaceJavaFileHandle(), getJavaClassDefClose());
-            if (isHasAugmentationExtended(getExtendsList())) {
-                addHasAugmentationImport(curNode, imports, false);
+            if (isAugmentationHolderExtended(getJavaExtendsListHolder().getExtendsList())) {
+                addAugmentationHoldersImport(curNode, imports, false);
             }
-            if (isAugmentedInfoExtended(getExtendsList())) {
+            if (isAugmentedInfoExtended(getJavaExtendsListHolder().getExtendsList())) {
                 addAugmentedInfoImport(curNode, imports, false);
             }
             if (curNode instanceof YangCase) {
@@ -1392,7 +1368,7 @@
             if (isAttributePresent()) {
                 addImportsToStringAndHasCodeMethods(curNode, imports);
             }
-            if (isHasAugmentationExtended(getExtendsList())) {
+            if (isAugmentationHolderExtended(getJavaExtendsListHolder().getExtendsList())) {
                 addAugmentedInfoImport(curNode, imports, true);
                 addArrayListImport(curNode, imports, true);
             }
@@ -1417,8 +1393,11 @@
                 mergeJavaFiles(getImplClassJavaFileHandle(), getBuilderClassJavaFileHandle());
             }
             insertDataIntoJavaFile(getBuilderClassJavaFileHandle(), getJavaClassDefClose());
+            if (isAugmentationHolderExtended(getJavaExtendsListHolder().getExtendsList())) {
+                addAugmentedInfoImport(curNode, imports, false);
+                addArrayListImport(curNode, imports, false);
+            }
         }
-
         /*
          * Close all the file handles.
          */