[ONOS-5630][ONOS-5615][ONOS-5634][ONOS-5635][ONOS-5568] defect fix for generated code.

Change-Id: I1d07e8c836005cdc9107186df18b468bc3b13cd1
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 6b9f346..b7928ce 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
@@ -21,12 +21,10 @@
 import org.onosproject.yangutils.datamodel.YangChoice;
 import org.onosproject.yangutils.datamodel.YangEnumeration;
 import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangList;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangType;
 import org.onosproject.yangutils.datamodel.YangTypeDef;
 import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
@@ -104,6 +102,7 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
 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.getFromStringMethodClose;
@@ -111,6 +110,7 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
 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.getInterfaceLeafIdEnumSignature;
@@ -162,6 +162,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.INT;
 import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
+import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
+import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
 import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
@@ -489,7 +491,6 @@
         info.setPkgInfo(fileInfo.getPackage());
         importData.addImportInfo(info, parent.getJavaClassNameOrBuiltInType(),
                                  parent.getJavaPackage());
-        List<String> keys = ((YangList) curNode).getKeyList();
         List<JavaAttributeInfo> attrs = getListOfAttributesForKey(curNode);
 
         Iterator<JavaAttributeInfo> attrIt = attrs.iterator();
@@ -506,6 +507,9 @@
             }
         }
 
+        imports.add(getImportString(JAVA_UTIL_PKG,
+                                    JAVA_UTIL_OBJECTS_IMPORT_CLASS));
+
         initiateJavaFileGeneration(file, GENERATE_KEY_CLASS, imports, curNode,
                                    className);
         String pkg = null;
@@ -535,6 +539,22 @@
                     attr, className, GENERATE_EVENT_SUBJECT_CLASS));
             insertDataIntoJavaFile(file, NEW_LINE);
         }
+        //add hashcode and equals method.
+        insertDataIntoJavaFile(file, getHashCodeMethodOpen());
+        StringBuilder builder = new StringBuilder();
+        for (JavaAttributeInfo att : attrs) {
+            builder.append(getHashCodeMethod(att));
+        }
+        insertDataIntoJavaFile(file, getHashCodeMethodClose(builder.toString()));
+
+        insertDataIntoJavaFile(file, getEqualsMethodOpen(className));
+        StringBuilder builder2 = new StringBuilder();
+        for (JavaAttributeInfo att : attrs) {
+            builder2.append(getEqualsMethod(att)).append(NEW_LINE);
+        }
+        insertDataIntoJavaFile(file, getEqualsMethodClose(builder2.toString()));
+
+
         insertDataIntoJavaFile(file, getCompareToForKeyClass(attrs, className));
 
         insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
@@ -736,11 +756,6 @@
         String className = getCapitalCase(fileInfo.getJavaName());
         String path = fileInfo.getBaseCodeGenPath() +
                 fileInfo.getPackageFilePath();
-        YangTypeDef typeDef = (YangTypeDef) curNode;
-        List<YangType<?>> types = typeDef.getTypeList();
-        YangType type = types.get(0);
-        YangDataTypes yangDataTypes = type.getDataType();
-
         initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
                                    imports, path);
 
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 5886939..0b11fda 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
@@ -64,6 +64,7 @@
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBitSetAttr;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCatchSubString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getExceptionThrowString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
@@ -98,7 +99,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.AND;
 import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
-import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
+import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST_INIT;
 import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
 import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
@@ -129,7 +130,6 @@
 import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
 import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
 import static org.onosproject.yangutils.utils.UtilConstants.FOR;
@@ -203,7 +203,6 @@
 import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
 import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
 import static org.onosproject.yangutils.utils.UtilConstants.THIS;
-import static org.onosproject.yangutils.utils.UtilConstants.THROW_NEW;
 import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
 import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
 import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
@@ -634,23 +633,20 @@
      * @return return type
      */
     private static String getReturnType(JavaAttributeInfo attr) {
-        String returnType;
         StringBuilder builder = new StringBuilder();
 
         if (attr.isQualifiedName() &&
                 attr.getImportInfo().getPkgInfo() != null) {
-            returnType = attr.getImportInfo().getPkgInfo() + PERIOD;
-            builder.append(returnType);
+            builder.append(attr.getImportInfo().getPkgInfo()).append(PERIOD);
         }
-        returnType = attr.getImportInfo().getClassInfo();
+        builder.append(attr.getImportInfo().getClassInfo());
 
         if (attr.getAttributeType() != null &&
                 attr.getAttributeType().getDataType() == IDENTITYREF) {
-            returnType = CLASS_STRING + DIAMOND_OPEN_BRACKET +
+            return CLASS_STRING + DIAMOND_OPEN_BRACKET +
                     QUESTION_MARK + SPACE + EXTEND + SPACE +
-                    returnType + DIAMOND_CLOSE_BRACKET;
+                    builder.toString() + DIAMOND_CLOSE_BRACKET;
         }
-        builder.append(returnType);
         return builder.toString();
     }
 
@@ -822,8 +818,7 @@
      * @return from string method's close string
      */
     static String getFromStringMethodClose() {
-        return getReturnString(NULL, EIGHT_SPACE_INDENTATION) +
-                signatureClose() + methodClose(FOUR_SPACE);
+        return methodClose(FOUR_SPACE);
     }
 
     /**
@@ -841,9 +836,7 @@
                 getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
                 getParsedSubString(attr, fromAttr) +
                 getReturnOfSubString() + EIGHT_SPACE_INDENTATION +
-                getCatchSubString() +
-                getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
-                CLOSE_CURLY_BRACKET;
+                getCatchSubString(attr.getCurHolderOrCount());
     }
 
     /**
@@ -1333,8 +1326,7 @@
         String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
                 NEW_LINE;
         builder.append(method)
-                .append(getReturnString(NULL, SIXTEEN_SPACE_INDENTATION))
-                .append(signatureClose())
+                .append(getExceptionThrowString(SIXTEEN_SPACE_INDENTATION))
                 .append(methodClose(EIGHT_SPACE))
                 .append(methodClose(FOUR_SPACE));
 
@@ -1621,7 +1613,7 @@
                     break;
 
                 case LIST:
-                    type = ARRAY_LIST;
+                    type = ARRAY_LIST_INIT;
                     break;
 
                 case MAP:
@@ -1633,12 +1625,12 @@
                     break;
 
                 default:
-                    type = ARRAY_LIST;
+                    type = ARRAY_LIST_INIT;
                     break;
 
             }
         } else {
-            type = ARRAY_LIST;
+            type = ARRAY_LIST_INIT;
         }
         return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
                 EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
@@ -1802,8 +1794,8 @@
 
         condition = TMP_VAL + PERIOD + IS_EMPTY;
         sBuild.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, condition));
-        sBuild.append(TWELVE_SPACE_INDENTATION).append(THROW_NEW)
-                .append(EXCEPTION_STRING).append(methodClose(EIGHT_SPACE))
+        sBuild.append(getExceptionThrowString(TWELVE_SPACE_INDENTATION))
+                .append(methodClose(EIGHT_SPACE))
                 .append(getReturnString(TMP_VAL, EIGHT_SPACE_INDENTATION))
                 .append(signatureClose()).append(methodClose(FOUR_SPACE));
         return sBuild.toString();
@@ -2066,8 +2058,8 @@
                 .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond))
                 .append(getReturnString(returnVal, TWELVE_SPACE_INDENTATION))
                 .append(signatureClose()).append(methodClose(EIGHT_SPACE))
-                .append(EIGHT_SPACE_INDENTATION).append(THROW_NEW)
-                .append(EXCEPTION_STRING).append(methodClose(FOUR_SPACE));
+                .append(getExceptionThrowString(EIGHT_SPACE_INDENTATION))
+                .append(methodClose(FOUR_SPACE));
         return builder.toString();
     }
 
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
index 9311e2d..e44d55b 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
@@ -77,6 +77,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION;
+import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
 import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
 import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
@@ -136,6 +137,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER;
 import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
 import static org.onosproject.yangutils.utils.UtilConstants.THIS;
+import static org.onosproject.yangutils.utils.UtilConstants.THROW_NEW;
 import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
 import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
 import static org.onosproject.yangutils.utils.UtilConstants.TRY;
@@ -247,6 +249,16 @@
     }
 
     /**
+     * Returns illegal argument exception string.
+     *
+     * @param space indentation
+     * @return illegal argument exception string
+     */
+    static String getExceptionThrowString(String space) {
+        return space + THROW_NEW + EXCEPTION_STRING;
+    }
+
+    /**
      * Returns new line string with spaces.
      *
      * @param space spaces
@@ -823,12 +835,21 @@
     /**
      * Returns sub string with catch statement for union's from string method.
      *
+     * @param attrHolder attribute holder/count for from string
      * @return sub string with catch statement for union's from string method
      */
-    static String getCatchSubString() {
-        return CLOSE_CURLY_BRACKET + SPACE + CATCH + SPACE +
+    static String getCatchSubString(String attrHolder) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(CLOSE_CURLY_BRACKET).append(SPACE).append(CATCH)
+                .append(SPACE).append(
                 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE, EXCEPTION_VAR,
-                         EXCEPTION) + SPACE + OPEN_CURLY_BRACKET;
+                         EXCEPTION)).append(SPACE).append(OPEN_CURLY_BRACKET)
+                .append(NEW_LINE);
+        if (attrHolder != null) {
+            builder.append(getExceptionThrowString(TWELVE_SPACE_INDENTATION));
+        }
+        builder.append(EIGHT_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET);
+        return builder.toString();
     }
 
     /**
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
index 651d4ec..3e60817 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
@@ -1052,10 +1052,12 @@
 
     public static String getAugmentableSubTreeFiltering() {
         return "        if (yangAugmentedInfoMap.isEmpty()) {\n" +
-                "            Set<Map.Entry<Class<?>, Object>> augment =" +
+                "            java.util.Set<Map.Entry<Class<?>, Object>> " +
+                "augment =" +
                 " appInstance.yangAugmentedInfoMap().entrySet();\n" +
                 "            if (augment != null && !augment.isEmpty()) {\n" +
-                "                Iterator<Map.Entry<Class<?>, Object>> augItr =" +
+                "                java.util.Iterator<Map.Entry<Class<?>, " +
+                "Object>> augItr =" +
                 " augment.iterator();\n" +
                 "                while (augItr.hasNext()) {\n" +
                 "                    Map.Entry<Class<?>, Object> aug =" +
@@ -1071,7 +1073,8 @@
                 "                        Class<?> builderClass;\n" +
                 "                        builderClass = classLoader.loadClass(classPackage);\n" +
                 "                        Object builderObj = builderClass.newInstance();\n" +
-                "                        Method method = builderClass.getMethod(\"build\");\n" +
+                "                        java.lang.reflect.Method method = " +
+                "builderClass.getMethod(\"build\");\n" +
                 "                        Object defaultObj = method.invoke(builderObj);\n" +
                 "                        Class<?> defaultClass = defaultObj.getClass();\n" +
                 "                        method = defaultClass.getMethod(" +
@@ -1087,9 +1090,9 @@
                 "                }\n" +
                 "            }\n" +
                 "        } else {\n" +
-                "            Set<Map.Entry<Class<?>, Object>> augment = yangAugmentedInfoMap\n" +
+                "            java.util.Set<Map.Entry<Class<?>, Object>> augment = yangAugmentedInfoMap\n" +
                 "                    .entrySet();\n" +
-                "            Iterator<Map.Entry<Class<?>, Object>> augItr = augment.iterator();\n" +
+                "            java.util.Iterator<Map.Entry<Class<?>, Object>> augItr = augment.iterator();\n" +
                 "            while (augItr.hasNext()) {\n" +
                 "                Map.Entry<Class<?>, Object> aug = augItr.next();\n" +
                 "                Class<?> augClass = aug.getKey();\n" +
@@ -1204,7 +1207,8 @@
                 "                    Class<?> caseClass = classArray[0];\n" +
                 "                    try {\n" +
                 "                        Object obj1 = caseClass.newInstance();\n" +
-                "                        Method method = caseClass.getMethod(\"builder\", caseClass);\n" +
+                "                        java.lang.reflect.Method method =" +
+                " caseClass.getMethod(\"builder\", caseClass);\n" +
                 "                        Object obj = method.invoke(obj1," +
                 " (Object) null);\n" +
                 "                        method = caseClass.getMethod(\"build\", caseClass);\n" +