[ONOS-4149],[ONOS-3909] YANG list translator impl and bug fixes.

Change-Id: Ia1a94142a3a114815766f661ed850bf9cacde66f
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 ab537c8..299f5ac 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
@@ -21,17 +21,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.io.FileUtils;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
 import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.UtilConstants;
-import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
-import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
-import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
-import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
@@ -47,17 +40,25 @@
 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.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.getBuildString;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
 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.getToStringMethodClose;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
+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;
+import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
+import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
 
 /**
@@ -72,20 +73,6 @@
     }
 
     /**
-     * Returns a file object for generated file.
-     *
-     * @param fileName file name
-     * @param filePath file package path
-     * @param extension file extension
-     * @param handle cached file handle
-     * @return file object
-     */
-    public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
-
-        return new File(handle.getBaseCodeGenPath() + filePath + File.separator + fileName + extension);
-    }
-
-    /**
      * Returns generated interface file for current node.
      *
      * @param file file
@@ -101,13 +88,16 @@
         String className = getCaptialCase(javaFileInfo.getJavaName());
         String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
 
-        initiateFile(file, className, INTERFACE_MASK, imports, path);
+        initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
 
         /**
          * Add getter methods to interface file.
          */
         try {
-            appendMethod(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
+            /**
+             * Getter methods.
+             */
+            insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
                     + " while interface file generation");
@@ -130,15 +120,19 @@
         String className = getCaptialCase(javaFileInfo.getJavaName());
         String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
 
-        initiateFile(file, className, BUILDER_INTERFACE_MASK, null, path);
+        initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
         List<String> methods = new ArrayList<>();
 
         try {
-            methods.add(UtilConstants.FOUR_SPACE_INDENTATION
-                    + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
-            methods.add(UtilConstants.NEW_LINE);
-            methods.add(UtilConstants.FOUR_SPACE_INDENTATION
-                    + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK, curNode));
+            /**
+             * Getter methods.
+             */
+            methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
+            /**
+             * Setter methods.
+             */
+            methods.add(NEW_LINE);
+            methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK, curNode));
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
                     + " while builder interface file generation");
@@ -147,16 +141,17 @@
         /**
          * Add build method to builder interface file.
          */
-        methods.add(parseBuilderInterfaceBuildMethodString(className));
+        methods.add(
+                ((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodForInterface());
 
         /**
          * Add getters and setters in builder interface.
          */
         for (String method : methods) {
-            appendMethod(file, method);
+            insertDataIntoJavaFile(file, method);
         }
 
-        insert(file, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
+        insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
         return file;
     }
 
@@ -176,7 +171,7 @@
         String className = getCaptialCase(javaFileInfo.getJavaName());
         String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
 
-        initiateFile(file, className, BUILDER_CLASS_MASK, imports, path);
+        initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
 
         List<String> methods = new ArrayList<>();
 
@@ -184,16 +179,22 @@
          * Add attribute strings.
          */
         try {
-            insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
-                    + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
+            insertDataIntoJavaFile(file,
+                    NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
                     + " while builder class file generation");
         }
 
         try {
+            /**
+             * Getter methods.
+             */
             methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
-            methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK, curNode) + UtilConstants.NEW_LINE);
+            /**
+             * Setter methods.
+             */
+            methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK, curNode) + NEW_LINE);
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
                     + " while builder class file generation");
@@ -202,15 +203,15 @@
         /**
          * Add default constructor and build method impl.
          */
-        methods.add(getBuildString(className) + UtilConstants.NEW_LINE);
-        methods.add(UtilConstants.NEW_LINE
-                + getDefaultConstructorString(className + UtilConstants.BUILDER, UtilConstants.PUBLIC));
+        methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodImpl());
+        methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
+                .addDefaultConstructor(PUBLIC, BUILDER));
 
         /**
          * Add methods in builder class.
          */
         for (String method : methods) {
-            appendMethod(file, method);
+            insertDataIntoJavaFile(file, method);
         }
         return file;
     }
@@ -231,7 +232,7 @@
         String className = getCaptialCase(javaFileInfo.getJavaName());
         String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
 
-        initiateFile(file, className, IMPL_CLASS_MASK, null, path);
+        initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
 
         List<String> methods = new ArrayList<>();
 
@@ -239,25 +240,32 @@
          * Add attribute strings.
          */
         try {
-            insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
-                    + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
+            insertDataIntoJavaFile(file,
+                    NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
                     + " while impl class file generation");
         }
 
-        insert(file, UtilConstants.NEW_LINE);
+        insertDataIntoJavaFile(file, NEW_LINE);
         try {
-
+            /**
+             * Getter methods.
+             */
             methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
-
+            /**
+             * Hash code method.
+             */
             methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
-                    getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(UtilConstants.NEW_LINE,
-                            UtilConstants.EMPTY_STRING))));
-
-            methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + UtilConstants.IMPL)
-                    + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
-
+                    getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
+            /**
+             * Equals method.
+             */
+            methods.add(getEqualsMethodClose(
+                    getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
+            /**
+             * To string method.
+             */
             methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
                     + getToStringMethodClose());
 
@@ -267,8 +275,11 @@
         }
 
         try {
+            /**
+             * Constructor.
+             */
             methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK, curNode)
-                    + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET);
+                    + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
         } catch (IOException e) {
             throw new IOException("No data found in temporary java code fragment files for " + className
                     + " while impl class file generation");
@@ -277,262 +288,100 @@
          * Add methods in impl class.
          */
         for (String method : methods) {
-            appendMethod(file, UtilConstants.FOUR_SPACE_INDENTATION + method + UtilConstants.NEW_LINE);
+            insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
         }
-        insert(file, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
+        insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
 
         return file;
     }
 
     /**
-     * Return data stored in temporary files.
+     * Generate class file for type def.
      *
+     * @param file generated file
      * @param curNode current YANG node
-     * @param generatedTempFiles mask for the types of files being generated
-     * @return data stored in temporary files
-     * @throws IOException when failed to get the data from temporary file
-     *             handle
-     */
-    private static String getDataFromTempFileHandle(int generatedTempFiles, YangNode curNode) throws IOException {
+     * @param imports imports for file
+     * @return type def class file
+     * @throws IOException when fails to generate class file
+    */
+    public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports) throws IOException {
 
-        TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((HasTempJavaCodeFragmentFiles) curNode)
-                .getTempJavaCodeFragmentFiles();
+        JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
 
-        if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getAttributesTempFileHandle());
-        } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getGetterInterfaceTempFileHandle());
-        } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getSetterInterfaceTempFileHandle());
-        } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getGetterImplTempFileHandle());
-        } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getSetterImplTempFileHandle());
-        } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getConstructorImplTempFileHandle());
-        } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getHashCodeImplTempFileHandle());
-        } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getEqualsImplTempFileHandle());
-        } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
-            return tempJavaCodeFragmentFiles
-                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getToStringImplTempFileHandle());
-        }
-        return null;
-    }
+        String className = getCaptialCase(javaFileInfo.getJavaName());
+        String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
 
-    /**
-     * Initiate generation of file based on generated file type.
-     *
-     * @param file generated file
-     * @param className generated file class name
-     * @param type generated file type
-     * @param imports imports for the file
-     * @param pkg generated file package
-     * @throws IOException when fails to generate a file
-     */
-    private static void initiateFile(File file, String className, int type, List<String> imports,
-            String pkg) throws IOException {
+        initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
 
-        try {
-            file.createNewFile();
-            appendContents(file, className, type, imports, pkg);
-        } catch (IOException e) {
-            throw new IOException("Failed to create " + file.getName() + " class file.");
-        }
-    }
+        List<String> methods = new ArrayList<>();
 
-    /**
-     * Appends the temp files to main files.
-     *
-     * @param appendFile temp file
-     * @param srcFile main file
-     * @throws IOException when fails to append contents
-     */
-    public static void appendFileContents(File appendFile, File srcFile) throws IOException {
-
-        try {
-            FileSystemUtil.appendFileContents(appendFile, srcFile);
-        } catch (IOException e) {
-            throw new IOException("Failed to append " + appendFile + " in " + srcFile);
-        }
-    }
-
-    /**
-     * Append methods to the generated files.
-     *
-     * @param file file in which method needs to be appended
-     * @param method method which needs to be appended
-     * @throws IOException IO operation failure
-     */
-    private static void appendMethod(File file, String method) throws IOException {
-
-        insert(file, method);
-    }
-
-    /**
-     * Appends all the contents into a generated java file.
-     *
-     * @param file generated file
-     * @param fileName generated file name
-     * @param type generated file type
-     * @param pkg generated file package
-     * @param importsList list of java imports.
-     * @throws IOException when fails to append contents
-     */
-    private static void appendContents(File file, String fileName, int type, List<String> importsList,
-            String pkg) throws IOException {
-
-        String pkgString = parsePackageString(pkg, importsList);
-
-        if ((type & IMPL_CLASS_MASK) != 0) {
-
-            write(file, fileName, type, JavaDocType.IMPL_CLASS);
-        } else if ((type & BUILDER_INTERFACE_MASK) != 0) {
-
-            write(file, fileName, type, JavaDocType.BUILDER_INTERFACE);
-        } else if ((type & GENERATE_TYPEDEF_CLASS) != 0) {
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, fileName, type, JavaDocType.IMPL_CLASS);
-        } else if ((type & INTERFACE_MASK) != 0) {
-
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, fileName, type, JavaDocType.INTERFACE);
-        } else if ((type & BUILDER_CLASS_MASK) != 0) {
-
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, fileName, type, JavaDocType.BUILDER_CLASS);
-        }
-    }
-
-    /**
-     * Removes base directory path from package and generates package string for
-     * file.
-     *
-     * @param pkg generated package
-     * @param importsList list of imports
-     * @return package string
-     */
-    private static String parsePackageString(String pkg, List<String> importsList) {
-
-        if (pkg.contains(UtilConstants.ORG)) {
-            String[] strArray = pkg.split(UtilConstants.ORG);
-            pkg = UtilConstants.ORG + strArray[1].replace(UtilConstants.SLASH, UtilConstants.PERIOD);
-        }
-        if (importsList != null) {
-            if (!importsList.isEmpty()) {
-                return UtilConstants.PACKAGE + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN
-                        + UtilConstants.NEW_LINE;
-            } else {
-                return UtilConstants.PACKAGE + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN;
-            }
-        } else {
-            return UtilConstants.PACKAGE + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN;
-        }
-    }
-
-    /**
-     * Appends other contents to interface, builder and typedef classes. for
-     * example : ONOS copyright, imports and package.
-     *
-     * @param file generated file
-     * @param pkg generated package
-     * @param importsList list of imports
-     * @throws IOException when fails to append contents.
-     */
-    private static void appendHeaderContents(File file, String pkg, List<String> importsList) throws IOException {
-
-        insert(file, CopyrightHeader.getCopyrightHeader());
-        insert(file, pkg);
-
-        /*
-         * TODO: add the file header using
-         * JavaCodeSnippetGen.getFileHeaderComment
+        /**
+         * Add attribute strings.
          */
-
-        if (importsList != null) {
-            insert(file, UtilConstants.NEW_LINE);
-            for (String imports : importsList) {
-                insert(file, imports);
-            }
-        }
-    }
-
-    /**
-     * Write data to the specific generated file.
-     *
-     * @param file generated file
-     * @param fileName file name
-     * @param genType generated file type
-     * @param javaDocType java doc type
-     * @throws IOException when fails to write into a file
-     */
-    private static void write(File file, String fileName, int genType, JavaDocGen.JavaDocType javaDocType)
-            throws IOException {
-
-        insert(file, JavaDocGen.getJavaDoc(javaDocType, fileName, false));
-        insert(file, JavaCodeSnippetGen.getJavaClassDefStart(genType, fileName));
-    }
-
-    /**
-     * Insert in the generated file.
-     *
-     * @param file file in which need to be inserted
-     * @param data data which need to be inserted
-     * @throws IOException when fails to insert into file
-     */
-    public static void insert(File file, String data) throws IOException {
-
         try {
-            FileSystemUtil.updateFileHandle(file, data, false);
+            insertDataIntoJavaFile(file,
+                    NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
         } catch (IOException e) {
-            throw new IOException("Failed to insert in " + file + "file");
+            throw new IOException("No data found in temporary java code fragment files for " + className
+                    + " while type def class file generation");
         }
-    }
 
-    /**
-     * Closes the files handle for generate files.
-     *
-     * @param file generate files
-     * @throws IOException when failed to close the file handle
-     */
-    public static void closeFileHandles(File file) throws IOException {
+        /**
+         * Default constructor.
+         */
+        methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
+                .addDefaultConstructor(PRIVATE, EMPTY_STRING));
 
+        /**
+         * Constructor.
+         */
+        methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
+                .addTypeDefConstructor());
+
+        /**
+         * Of method.
+         */
+        methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addOfMethod());
         try {
-            FileSystemUtil.updateFileHandle(file, null, true);
+
+            /**
+             * Getter method.
+             */
+            methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
+
+            /**
+             * Setter method.
+             */
+            methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addTypeDefsSetter());
+
+            /**
+             * Hash code method.
+             */
+            methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
+                    getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
+
+            /**
+             * Equals method.
+             */
+            methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
+                    + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
+
+            /**
+             * To string method.
+             */
+            methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
+                    + getToStringMethodClose());
+
         } catch (IOException e) {
-            throw new IOException("Failed to close file handle for " + file + "file");
+            throw new IOException("No data found in temporary java code fragment files for " + className
+                    + " while tyoe def class file generation");
         }
-    }
 
-    /**
-     * Removes temp files.
-     *
-     * @param file file to be removed
-     */
-    public static void clean(File file) {
-
-        if (file.exists()) {
-            file.delete();
+        for (String method : methods) {
+            insertDataIntoJavaFile(file, method);
         }
-    }
+        insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
 
-    /**
-     * Removes temp files.
-     *
-     * @param tempDir temp directory
-     * @throws IOException when fails to delete the directory
-     */
-    public static void cleanTempFiles(File tempDir) throws IOException {
-
-        FileUtils.deleteDirectory(tempDir);
+        return file;
     }
 }