Defect Fixes and optimization for YANG translator.

Change-Id: I974a968f3c41e1abea9f2567aceb3d523645d0ae
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
index 2a32819..4ceb55a 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
@@ -284,6 +284,11 @@
     private YangNode curYangNode;
 
     /**
+     * Is attribute added.
+     */
+    private boolean isAttributePresent = false;
+
+    /**
      * Construct an object of temporary java code fragment.
      *
      * @param genFileType file generation type
@@ -684,6 +689,9 @@
      */
     public void setNewAttrInfo(JavaAttributeInfo newAttrInfo) {
 
+        if (newAttrInfo != null) {
+            isAttributePresent = true;
+        }
         this.newAttrInfo = newAttrInfo;
     }
 
@@ -903,9 +911,6 @@
         File file = new File(path + fileName + TEMP_FILE_EXTENSION);
         if (!file.exists()) {
             file.createNewFile();
-        } else {
-            file.delete();
-            file.createNewFile();
         }
         return file;
     }
@@ -965,7 +970,7 @@
          * TODO: check if this utility needs to be called or move to the caller
          */
         String attributeName = JavaIdentifierSyntax
-                .getCamelCase(JavaIdentifierSyntax.getLowerCase(attr.getAttributeName()));
+                .getCamelCase(JavaIdentifierSyntax.getSmallCase(attr.getAttributeName()));
         if (attr.isQualifiedName()) {
             return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(), attr.getImportInfo().getClassInfo(),
                     attributeName, attr.isListAttr());
@@ -1113,40 +1118,42 @@
             throws IOException {
 
         setNewAttrInfo(newAttrInfo);
-        if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
-            addAttribute(newAttrInfo);
-        }
+        if (isAttributePresent) {
+            if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
+                addAttribute(newAttrInfo);
+            }
 
-        if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
-            addGetterForInterface(newAttrInfo);
-        }
+            if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
+                addGetterForInterface(newAttrInfo);
+            }
 
-        if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
-            addSetterForInterface(newAttrInfo);
-        }
+            if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
+                addSetterForInterface(newAttrInfo);
+            }
 
-        if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
-            addGetterImpl(newAttrInfo, generatedJavaFiles);
-        }
+            if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
+                addGetterImpl(newAttrInfo, generatedJavaFiles);
+            }
 
-        if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
-            addSetterImpl(newAttrInfo);
-        }
+            if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
+                addSetterImpl(newAttrInfo);
+            }
 
-        if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
-            addConstructor(newAttrInfo);
-        }
+            if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
+                addConstructor(newAttrInfo);
+            }
 
-        if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
-            addHashCodeMethod(newAttrInfo);
-        }
+            if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
+                addHashCodeMethod(newAttrInfo);
+            }
 
-        if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
-            addEqualsMethod(newAttrInfo);
-        }
+            if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
+                addEqualsMethod(newAttrInfo);
+            }
 
-        if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
-            addToStringMethod(newAttrInfo);
+            if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
+                addToStringMethod(newAttrInfo);
+            }
         }
         return;
     }
@@ -1193,7 +1200,7 @@
 
         setCurYangNode(curNode);
         List<String> imports = new ArrayList<>();
-        if (curNode instanceof HasJavaImportData) {
+        if (curNode instanceof HasJavaImportData && isAttributePresent) {
             imports = ((HasJavaImportData) curNode).getJavaImportData().getImports(getNewAttrInfo());
         }
         /**
@@ -1206,13 +1213,14 @@
              * Create interface file.
              */
             setInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX)));
-            setInterfaceJavaFileHandle(generateInterfaceFile(getInterfaceJavaFileHandle(), imports, curNode));
+            setInterfaceJavaFileHandle(
+                    generateInterfaceFile(getInterfaceJavaFileHandle(), imports, curNode, isAttributePresent));
             /**
              * Create builder interface file.
              */
             setBuilderInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)));
             setBuilderInterfaceJavaFileHandle(
-                    generateBuilderInterfaceFile(getBuilderInterfaceJavaFileHandle(), curNode));
+                    generateBuilderInterfaceFile(getBuilderInterfaceJavaFileHandle(), curNode, isAttributePresent));
             /**
              * Append builder interface file to interface file and close it.
              */
@@ -1221,7 +1229,7 @@
 
         }
 
-        if (curNode instanceof HasJavaImportData) {
+        if (curNode instanceof HasJavaImportData && isAttributePresent) {
             imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForHashAndEquals());
             imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForToString());
             java.util.Collections.sort(imports);
@@ -1234,12 +1242,14 @@
              * Create builder class file.
              */
             setBuilderClassJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX)));
-            setBuilderClassJavaFileHandle(generateBuilderClassFile(getBuilderClassJavaFileHandle(), imports, curNode));
+            setBuilderClassJavaFileHandle(
+                    generateBuilderClassFile(getBuilderClassJavaFileHandle(), imports, curNode, isAttributePresent));
             /**
              * Create impl class file.
              */
             setImplClassJavaFileHandle(getJavaFileHandle(getJavaClassName(IMPL_CLASS_FILE_NAME_SUFFIX)));
-            setImplClassJavaFileHandle(generateImplClassFile(getImplClassJavaFileHandle(), curNode));
+            setImplClassJavaFileHandle(
+                    generateImplClassFile(getImplClassJavaFileHandle(), curNode, isAttributePresent));
             /**
              * Append impl class to builder class and close it.
              */
@@ -1269,46 +1279,38 @@
      */
     private void close() throws IOException {
 
-        closeFile(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
+        if ((generatedJavaFiles & INTERFACE_MASK) != 0) {
+            closeFile(getInterfaceJavaFileHandle(), false);
+        }
 
-        closeFile(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX));
-        getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)).delete();
+        if ((generatedJavaFiles & BUILDER_CLASS_MASK) != 0) {
+            closeFile(getBuilderClassJavaFileHandle(), false);
+        }
 
-        closeFile(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX));
+        if ((generatedJavaFiles & BUILDER_INTERFACE_MASK) != 0) {
+            closeFile(getBuilderInterfaceJavaFileHandle(), true);
+        }
 
-        closeFile(getJavaClassName(IMPL_CLASS_FILE_NAME_SUFFIX));
-        getJavaFileHandle(getJavaClassName(IMPL_CLASS_FILE_NAME_SUFFIX)).delete();
+        if ((generatedJavaFiles & IMPL_CLASS_MASK) != 0) {
+            closeFile(getImplClassJavaFileHandle(), true);
+        }
 
-        closeFile(getJavaClassName(TYPEDEF_CLASS_FILE_NAME_SUFFIX));
+        if ((generatedJavaFiles & GENERATE_TYPEDEF_CLASS) != 0) {
+            closeFile(getTypedefClassJavaFileHandle(), false);
+        }
 
-        closeFile(GETTER_METHOD_FILE_NAME);
-        getTemporaryFileHandle(GETTER_METHOD_FILE_NAME).delete();
-
-        closeFile(GETTER_METHOD_IMPL_FILE_NAME);
-        getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME).delete();
-
-        closeFile(SETTER_METHOD_FILE_NAME);
-        getTemporaryFileHandle(SETTER_METHOD_FILE_NAME).delete();
-
-        closeFile(SETTER_METHOD_IMPL_FILE_NAME);
-        getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME).delete();
-
-        closeFile(CONSTRUCTOR_FILE_NAME);
-        getTemporaryFileHandle(CONSTRUCTOR_FILE_NAME).delete();
-
-        closeFile(ATTRIBUTE_FILE_NAME);
-        getTemporaryFileHandle(ATTRIBUTE_FILE_NAME).delete();
-
-        closeFile(HASH_CODE_METHOD_FILE_NAME);
-        getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME).delete();
-
-        closeFile(TO_STRING_METHOD_FILE_NAME);
-        getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME).delete();
-
-        closeFile(EQUALS_METHOD_FILE_NAME);
-        getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME).delete();
-
-        clean(getTempDirPath());
+        /**
+         * Close all temporary file handles and delete the files.
+         */
+        closeFile(getGetterInterfaceTempFileHandle(), true);
+        closeFile(getGetterImplTempFileHandle(), true);
+        closeFile(getSetterInterfaceTempFileHandle(), true);
+        closeFile(getSetterImplTempFileHandle(), true);
+        closeFile(getConstructorImplTempFileHandle(), true);
+        closeFile(getAttributesTempFileHandle(), true);
+        closeFile(getHashCodeImplTempFileHandle(), true);
+        closeFile(getToStringImplTempFileHandle(), true);
+        closeFile(getEqualsImplTempFileHandle(), true);
     }
 
     /**
@@ -1317,8 +1319,14 @@
      * @param fileName temporary file's name
      * @throws IOException when failed to close the file handle
      */
-    private void closeFile(String fileName) throws IOException {
+    private void closeFile(File file, boolean toBeDeleted) throws IOException {
 
-        FileSystemUtil.updateFileHandle(new File(fileName), null, true);
+        if (file.exists()) {
+            FileSystemUtil.updateFileHandle(file, null, true);
+            if (toBeDeleted) {
+                file.delete();
+            }
+            clean(getTempDirPath());
+        }
     }
 }