[ONOS-4070] Translator of YANG union.

Change-Id: I5216687b6ea7cb6baeb3ef8e905719468370a1f4
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index 4228a2e..6aa3ead 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -19,7 +19,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
-
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
@@ -30,17 +29,21 @@
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
 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.GeneratedTempFileType.UNION_FROM_STRING_IMPL_MASK;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefStart;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getJavaPackageFromPackagePath;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
@@ -49,11 +52,11 @@
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
 import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
 
 /**
@@ -70,10 +73,10 @@
     /**
      * Returns a file object for generated file.
      *
-     * @param fileName file name
-     * @param filePath file package path
+     * @param fileName  file name
+     * @param filePath  file package path
      * @param extension file extension
-     * @param handle cached file handle
+     * @param handle    cached file handle
      * @return file object
      */
     public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
@@ -85,7 +88,7 @@
      * Returns data stored in temporary files.
      *
      * @param generatedTempFiles temporary file types
-     * @param curNode current YANG node
+     * @param curNode            current YANG node
      * @return data stored in temporary files
      * @throws IOException when failed to get the data from temporary file handle
      */
@@ -121,6 +124,16 @@
         } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
             return tempJavaCodeFragmentFiles
                     .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getToStringImplTempFileHandle());
+        } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
+            return tempJavaCodeFragmentFiles
+                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles
+                            .getConstructorForTypeTempFileHandle());
+        } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
+            return tempJavaCodeFragmentFiles
+                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getOfStringImplTempFileHandle());
+        } else if ((generatedTempFiles & UNION_FROM_STRING_IMPL_MASK) != 0) {
+            return tempJavaCodeFragmentFiles
+                    .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getUnionFromStringImplTempFileHandle());
         }
         return null;
     }
@@ -128,15 +141,15 @@
     /**
      * Initiates generation of file based on generated file type.
      *
-     * @param file generated file
+     * @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
+     * @param type      generated file type
+     * @param imports   imports for the file
+     * @param pkg       generated file package
      * @throws IOException when fails to generate a file
      */
     public static void initiateJavaFileGeneration(File file, String className, int type, List<String> imports,
-            String pkg) throws IOException {
+                                                  String pkg) throws IOException {
 
         try {
             file.createNewFile();
@@ -149,42 +162,41 @@
     /**
      * 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 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 pkg) throws IOException {
 
         String pkgString = parsePackageString(pkg, importsList);
 
         if ((type & IMPL_CLASS_MASK) != 0) {
-
             write(file, fileName, type, IMPL_CLASS);
         } else if ((type & BUILDER_INTERFACE_MASK) != 0) {
-
             write(file, fileName, type, BUILDER_INTERFACE);
         } else if ((type & GENERATE_TYPEDEF_CLASS) != 0) {
             appendHeaderContents(file, pkgString, importsList);
             write(file, fileName, type, IMPL_CLASS);
         } else if ((type & INTERFACE_MASK) != 0) {
-
             appendHeaderContents(file, pkgString, importsList);
             write(file, fileName, type, INTERFACE);
         } else if ((type & BUILDER_CLASS_MASK) != 0) {
-
             appendHeaderContents(file, pkgString, importsList);
             write(file, fileName, type, BUILDER_CLASS);
+        } else if ((type & GENERATE_UNION_CLASS) != 0) {
+            appendHeaderContents(file, pkgString, importsList);
+            write(file, fileName, type, IMPL_CLASS);
         }
     }
 
     /**
      * Removes base directory path from package and generates package string for file.
      *
-     * @param javaPkg generated java package
+     * @param javaPkg     generated java package
      * @param importsList list of imports
      * @return package string
      */
@@ -208,10 +220,11 @@
     /**
      * 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 file        generated file
+     * @param pkg         generated package
      * @param importsList list of imports
-     * @throws IOException when fails to append contents.
+     * @throws IOException when fails to append contents
      */
     private static void appendHeaderContents(File file, String pkg, List<String> importsList) throws IOException {
 
@@ -234,15 +247,14 @@
     /**
      * Writes data to the specific generated file.
      *
-     * @param file generated file
-     * @param fileName file name
-     * @param genType generated file type
+     * @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, JavaDocType javaDocType)
             throws IOException {
-
         insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false));
         insertDataIntoJavaFile(file, getJavaClassDefStart(genType, fileName));
     }