[ONOS-5679],[ONOS-5663] union invalid derived type defect fixed.

Change-Id: I2efb74c871103953044e62ed468b00dc1ca60b29
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
index a0ea239..eb38fb7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
@@ -16,14 +16,18 @@
 
 package org.onosproject.yangutils.datamodel;
 
-import java.util.LinkedList;
-import java.util.List;
-
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNION_DATA;
+
 /*
  * Reference RFC 6020.
  *
@@ -91,7 +95,7 @@
 
     @Override
     public YangSchemaNodeType getYangSchemaNodeType() {
-        return YangSchemaNodeType.YANG_NON_DATA_NODE;
+        return YANG_NON_DATA_NODE;
     }
 
     @Override
@@ -99,14 +103,6 @@
         return typeList;
     }
 
-    /**
-     * Sets the list of YANG type.
-     *
-     * @param typeList list of YANG type.
-     */
-    public void setTypeList(List<YangType<?>> typeList) {
-        this.typeList = typeList;
-    }
 
     /**
      * Returns running child union number.
@@ -135,19 +131,24 @@
      */
     public void addType(YangType<?> yangType)
             throws DataModelException {
-        if (yangType.getDataType() == YangDataTypes.EMPTY || yangType.getDataType() == YangDataTypes.LEAFREF) {
-            throw new DataModelException("Union member type must not be one of the built-in types \"empty\" or " +
-                    "\"leafref\"" + getName() + " in " +
-                    getLineNumber() + " at " +
-                    getCharPosition()
-                    + " in " + getFileName() + "\"");
+        YangDataTypes type = yangType.getDataType();
+        String msg = "Union member type must not be one of the built-in types" +
+                " \"empty\" or \"leafref\"";
+        switch (type) {
+            case EMPTY:
+            case LEAFREF:
+                throw new DataModelException(getErrorMsg(
+                        msg, getName(), getLineNumber(), getCharPosition(),
+                        getFileName()));
+
+            default:
+                typeList.add(yangType);
         }
-        getTypeList().add(yangType);
     }
 
     @Override
     public YangConstructType getYangConstructType() {
-        return YangConstructType.UNION_DATA;
+        return UNION_DATA;
     }
 
     /**
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
index 548dbac..913220b 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
@@ -690,7 +690,7 @@
             qualified = parentImportData.addImportInfo(typeInfo, className,
                                                        fileInfo.getPackage());
             if (!qualified && !(curNode instanceof YangChoice) &&
-                    curNode.isOpTypeReq()) {
+                    targetNode.isOpTypeReq()) {
                 String name = DEFAULT_CAPS + typeInfo.getClassInfo();
                 JavaQualifiedTypeInfoTranslator qInfo =
                         new JavaQualifiedTypeInfoTranslator();
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
index cb44ca3..7c9dfa5 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
@@ -20,6 +20,7 @@
 import org.onosproject.yangutils.datamodel.YangType;
 import org.onosproject.yangutils.datamodel.YangTypeDef;
 import org.onosproject.yangutils.datamodel.YangTypeHolder;
+import org.onosproject.yangutils.datamodel.YangUnion;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeTranslator;
@@ -30,6 +31,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
@@ -245,6 +247,32 @@
         return ofStringImplTempFileHandle;
     }
 
+    private void verifyUnionTypes(List<YangType<?>> typeList,
+                                  YangTypeHolder yangTypeHolder) {
+        String msg;
+        YangUnion union = (YangUnion) yangTypeHolder;
+        for (YangType<?> yangType : typeList) {
+            YangDataTypes type = yangType.getDataType();
+            switch (type) {
+                case EMPTY:
+                    msg = "Union member derived type must not be one of the " +
+                            "type whose built-in types is \"empty\"";
+                    break;
+                case LEAFREF:
+                    msg = "Union member derived type must not be one of the " +
+                            "type whose built-in types is \"leafref\"";
+                    break;
+                default:
+                    msg = null;
+            }
+            if (msg != null) {
+                throw new TranslatorException(getErrorMsg(
+                        msg, union.getName(), union.getLineNumber(), union
+                                .getCharPosition(), union.getFileName()));
+            }
+        }
+    }
+
     /**
      * Adds all the type in the current data model node as part of the generated temporary file.
      *
@@ -254,8 +282,10 @@
      */
     void addTypeInfoToTempFiles(YangTypeHolder yangTypeHolder, YangPluginConfig config)
             throws IOException {
-
         List<YangType<?>> typeList = yangTypeHolder.getTypeList();
+        if (yangTypeHolder instanceof YangUnion) {
+            verifyUnionTypes(typeList, yangTypeHolder);
+        }
         if (typeList != null) {
             List<YangType<?>> types = validateTypes(typeList);
             for (YangType<?> type : types) {
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index b7928ce..116c905 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -760,7 +760,7 @@
                                    imports, path);
 
         List<String> methods = new ArrayList<>();
-
+        insertDataIntoJavaFile(file, NEW_LINE);
         //Add attribute strings.
         try {
             insertDataIntoJavaFile(file, getDataFromTempFileHandle(
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index 66950b5..fe6a40b 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -459,7 +459,8 @@
                 break;
             case DEFAULT_CLASS_MASK:
                 appendHeaderContents(file, pkgString, importsList);
-                write(file, genType, DEFAULT_CLASS, curNode, className, true);
+                write(file, genType, DEFAULT_CLASS, curNode, className,
+                      curNode.isOpTypeReq());
                 break;
             case BUILDER_CLASS_MASK:
                 write(file, genType, BUILDER_CLASS, curNode, className, false);
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index 0b11fda..edf0216 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -2028,6 +2028,7 @@
      */
     public static String getToStringMethodForIdentity(String name) {
         StringBuilder builder = new StringBuilder(NEW_LINE);
+        builder.append(getJavaDoc(GETTER_METHOD, name, false, null));
         String returnVal = getQuotedString(name);
         String methodName = getCamelCase(name, null) + TO_CAPS + STRING_DATA_TYPE;
         builder.append(methodSignature(methodName, null, PUBLIC + SPACE + STATIC,
@@ -2047,6 +2048,7 @@
     public static String getFromStringMethodForIdentity(String name,
                                                         String schemaName) {
         StringBuilder builder = new StringBuilder(NEW_LINE);
+        builder.append(getJavaDoc(FROM_METHOD, name, false, null));
         String caps = getCapitalCase(name);
         String returnVal = caps + PERIOD + CLASS;
         String cond = getTwoParaEqualsString(FROM_STRING_PARAM_NAME,
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
index 2b2a203..5c499db 100644
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
+++ b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
@@ -406,7 +406,7 @@
     private static String generateForFromString(String attribute) {
         return getJavaDocStartLine(attribute, JAVA_DOC_OF
                 + attribute + SPACE + FROM_STRING_METHOD_NAME + SPACE + INPUT +
-                SPACE + STRING_DATA_TYPE) +
+                SPACE + STRING_DATA_TYPE + SPACE) +
                 getJavaDocEmptyAsteriskLine() +
                 getJavaDocParamLine(INPUT + SPACE + STRING_DATA_TYPE,
                                     FROM_STRING_PARAM_NAME) +
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
index a7320de..1c5c56c 100644
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
+++ b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
@@ -105,6 +105,6 @@
         yangPluginConfig.setCodeGenDir(DIR);
         utilManager.translateToJava(yangPluginConfig);
         compileCode(DIR1);
-        //deleteDirectory(DIR);
+        deleteDirectory(DIR);
     }
 }
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
index 3cf52b5..d4bea49 100644
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
+++ b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
@@ -758,7 +758,5 @@
         compileCode(dir);
         deleteDirectory("target/xpath/");
         assertThat(true, is(targetNode.getName().equals(targetNodeName)));
-
-        deleteDirectory("target/xpath/");
     }
 }
diff --git a/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang b/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
index 4a3d150..276efa2 100644
--- a/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
+++ b/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
@@ -9,7 +9,6 @@
      type union {
          type ipv4-address;
          type ipv6-address;
-         type leaf;
      }
   }