[ONOS-4636]YANG Grouping linking bug fix + YANG Code review comment fix

Change-Id: I68ee8dd08266a02593e217cef1a9bb010037d673
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
index 9e7cc5c..19ed11d 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.yangutils.translator.tojava.utils;
 
+import java.util.Stack;
+
 import org.onosproject.yangutils.datamodel.YangDataTypes;
 import org.onosproject.yangutils.datamodel.YangDerivedInfo;
 import org.onosproject.yangutils.datamodel.YangEnumeration;
@@ -26,6 +28,7 @@
 import org.onosproject.yangutils.translator.exception.TranslatorException;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
@@ -34,6 +37,8 @@
 
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
 import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
@@ -119,7 +124,7 @@
      * Returns from string method parsed string.
      *
      * @param targetDataType target data type
-     * @param yangType YANG type
+     * @param yangType       YANG type
      * @return parsed string
      */
     public static String getParseFromStringMethod(String targetDataType, YangType<?> yangType) {
@@ -163,8 +168,8 @@
     /**
      * Returns java import class.
      *
-     * @param yangType YANG type
-     * @param isListAttr if the attribute need to be a list
+     * @param yangType     YANG type
+     * @param isListAttr   if the attribute need to be a list
      * @param pluginConfig plugin configurations
      * @return java import class
      */
@@ -199,8 +204,8 @@
                     return BOOLEAN_WRAPPER;
                 case ENUMERATION:
                     return getCapitalCase(
-                        getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
-                                pluginConfig));
+                            getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
+                                    pluginConfig));
                 case BITS:
                     return YANG_BITS_CLASS;
                 case BINARY:
@@ -215,13 +220,13 @@
                     return BOOLEAN_WRAPPER;
                 case UNION:
                     return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
-                        pluginConfig));
+                            pluginConfig));
                 case INSTANCE_IDENTIFIER:
                     //TODO:INSTANCE_IDENTIFIER
                     break;
                 case DERIVED:
-                return getCapitalCase(
-                        getCamelCase(yangType.getDataTypeName(), pluginConfig));
+                    return getCapitalCase(
+                            getCamelCase(yangType.getDataTypeName(), pluginConfig));
                 default:
                     throw new TranslatorException("given data type is not supported.");
             }
@@ -235,8 +240,8 @@
                     return STRING_DATA_TYPE;
                 case ENUMERATION:
                     return getCapitalCase(
-                        getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
-                                pluginConfig));
+                            getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
+                                    pluginConfig));
                 case BITS:
                     return YANG_BITS_CLASS;
                 case BINARY:
@@ -251,13 +256,13 @@
                     return BOOLEAN_DATA_TYPE;
                 case UNION:
                     return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
-                        pluginConfig));
+                            pluginConfig));
                 case INSTANCE_IDENTIFIER:
                     //TODO:INSTANCE_IDENTIFIER
                     break;
                 case DERIVED:
-                return getCapitalCase(
-                        getCamelCase(yangType.getDataTypeName(), pluginConfig));
+                    return getCapitalCase(
+                            getCamelCase(yangType.getDataTypeName(), pluginConfig));
                 default:
                     return null;
             }
@@ -268,8 +273,8 @@
     /**
      * Returns java import package.
      *
-     * @param yangType YANG type
-     * @param isListAttr if the attribute is of list type
+     * @param yangType         YANG type
+     * @param isListAttr       if the attribute is of list type
      * @param conflictResolver object of YANG to java naming conflict util
      * @return java import package
      */
@@ -352,7 +357,7 @@
     /**
      * Returns java package for typedef node.
      *
-     * @param type YANG type
+     * @param type             YANG type
      * @param conflictResolver object of YANG to java naming conflict util
      * @return java package for typedef node
      */
@@ -376,7 +381,7 @@
     /**
      * Returns java package for union node.
      *
-     * @param type YANG type
+     * @param type             YANG type
      * @param conflictResolver object of YANG to java naming conflict util
      * @return java package for union node
      */
@@ -396,7 +401,7 @@
     /**
      * Returns YANG enumeration's java package.
      *
-     * @param type YANG type
+     * @param type             YANG type
      * @param conflictResolver object of YANG to java naming conflict util
      * @return YANG enumeration's java package
      */
@@ -415,29 +420,87 @@
     /**
      * Returns package from parent node.
      *
-     * @param parent parent YANG node
+     * @param parent           parent YANG node
      * @param conflictResolver object of YANG to java naming conflict util
      * @return java package from parent node
      */
-    private static String getPackageFromParent(YangNode parent, YangToJavaNamingConflictUtil conflictResolver) {
+    private static String getPackageFromParent(YangNode parent,
+            YangToJavaNamingConflictUtil conflictResolver) {
         if (!(parent instanceof JavaFileInfoContainer)) {
             throw new TranslatorException("invalid child node is being processed.");
         }
         JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
         if (parentInfo.getPackage() == null) {
-            if (parent instanceof YangJavaModule) {
-                YangJavaModule module = (YangJavaModule) parent;
-                String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
-                        .getRevision().getRevDate(), conflictResolver);
-                return modulePkg + PERIOD + getCamelCase(module.getName(), conflictResolver).toLowerCase();
-            } else if (parent instanceof YangJavaSubModule) {
-                YangJavaSubModule submodule = (YangJavaSubModule) parent;
-                String subModulePkg = getRootPackage(submodule.getVersion(),
-                        submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
-                        submodule.getRevision().getRevDate(), conflictResolver);
-                return subModulePkg + PERIOD + getCamelCase(submodule.getName(), conflictResolver).toLowerCase();
-            }
+            updateJavaFileInfo(parent, conflictResolver);
         }
         return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
     }
+
+    /**
+     * Update the referred data model nodes java file info, this will be called,
+     * when the linked node is yet to translate. Then resolve until the parent hierarchy.
+     *
+     * @param yangNode         node whose java info needs to be updated
+     * @param conflictResolver yang plugin config
+     */
+    public static void updateJavaFileInfo(YangNode yangNode,
+            YangToJavaNamingConflictUtil conflictResolver) {
+        Stack<YangNode> nodesToUpdatePackage = new Stack<YangNode>();
+
+        /*
+         * Add the nodes to be updated for package info in a stack.
+         */
+        while (yangNode != null
+                && ((JavaFileInfoContainer) yangNode)
+                .getJavaFileInfo().getPackage() == null) {
+            nodesToUpdatePackage.push(yangNode);
+            yangNode = yangNode.getParent();
+        }
+
+        /*
+         * If the package is not updated till root node, then root package needs to
+         * be updated.
+         */
+        if (yangNode == null) {
+            yangNode = nodesToUpdatePackage.pop();
+            String pkg;
+            if (yangNode instanceof YangJavaModule) {
+                YangJavaModule module = (YangJavaModule) yangNode;
+                pkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
+                        .getRevision().getRevDate(), conflictResolver);
+            } else if (yangNode instanceof YangJavaSubModule) {
+                YangJavaSubModule submodule = (YangJavaSubModule) yangNode;
+                pkg = getRootPackage(submodule.getVersion(),
+                        submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
+                        submodule.getRevision().getRevDate(), conflictResolver);
+            } else {
+                throw new TranslatorException("Invalid root node of data model tree");
+            }
+
+            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                    .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
+            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                    .setPackage(pkg);
+            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                    .setPackageFilePath(getPackageDirPathFromJavaJPackage(
+                            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                                    .getPackage()));
+        }
+
+        /**
+         * Parent of the node in stack is updated with java info,
+         * all the nodes can be popped and updated
+         */
+        while (nodesToUpdatePackage.size() != 0) {
+            yangNode = nodesToUpdatePackage.pop();
+            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                    .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
+            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                    .setPackage(getCurNodePackage(yangNode));
+            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                    .setPackageFilePath(getPackageDirPathFromJavaJPackage(
+                            ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+                                    .getPackage()));
+        }
+    }
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaExtendsListHolder.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaExtendsListHolder.java
index 3ee83fd..36986b8 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaExtendsListHolder.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaExtendsListHolder.java
@@ -27,6 +27,7 @@
 import org.onosproject.yangutils.translator.tojava.JavaImportData;
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
 
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.getTempJavaFragement;
 
 /**
@@ -58,7 +59,7 @@
     /**
      * Sets extends list.
      *
-     * @param extendsList list of classes need to be extended
+     * @param extendedClass map of classes need to be extended
      */
     private void setExtendedClassStore(Map<JavaQualifiedTypeInfo, Boolean> extendedClass) {
         this.extendedClassStore = extendedClass;
@@ -73,14 +74,13 @@
     public void addToExtendsList(JavaQualifiedTypeInfo info, YangNode node) {
         JavaFileInfo fileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo();
 
-        if (!fileInfo.getPackage().equals(info.getPkgInfo())) {
-            JavaImportData importData = getTempJavaFragement(node).getJavaImportData();
-            importData.addImportInfo(info);
+        JavaImportData importData = getTempJavaFragement(node).getJavaImportData();
+        boolean qualified = importData.addImportInfo(info,
+                getCapitalCase(fileInfo.getJavaName()), fileInfo.getPackage());
 
             /*true means import should be added*/
-            getExtendedClassStore().put(info, true);
-        }
-        getExtendedClassStore().put(info, false);
+        getExtendedClassStore().put(info, qualified);
+
         addToExtendsList(info);
     }
 
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 0b951db..0ecc49e 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
@@ -83,7 +83,6 @@
 import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
 import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
-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.ENUM_CLASS;
@@ -94,6 +93,7 @@
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
 
@@ -111,10 +111,10 @@
     /**
      * Returns a file object for generated file.
      *
-     * @param filePath file package path
-     * @param fileName file name
+     * @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) {
@@ -125,7 +125,7 @@
     /**
      * Returns data stored in temporary files.
      *
-     * @param generatedTempFiles temporary file types
+     * @param generatedTempFiles    temporary file types
      * @param tempJavaFragmentFiles temp java fragment files
      * @return data stored in temporary files
      * @throws IOException when failed to get the data from temporary file handle
@@ -253,11 +253,11 @@
     /**
      * Initiates generation of file based on generated file type.
      *
-     * @param file generated file
-     * @param className generated file class name
-     * @param genType generated file type
-     * @param imports imports for the file
-     * @param pkg generated file package
+     * @param file         generated file
+     * @param className    generated file class name
+     * @param genType      generated file type
+     * @param imports      imports for the file
+     * @param pkg          generated file package
      * @param pluginConfig plugin configurations
      * @throws IOException when fails to generate a file
      */
@@ -276,17 +276,22 @@
     /**
      * Initiates generation of file based on generated file type.
      *
-     * @param file generated file
-     * @param genType generated file type
-     * @param imports imports for the file
-     * @param curNode current YANG node
+     * @param file      generated file
+     * @param genType   generated file type
+     * @param imports   imports for the file
+     * @param curNode   current YANG node
      * @param className class name
      * @throws IOException when fails to generate a file
      */
     public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
-            YangNode curNode, String className) throws IOException {
+            YangNode curNode, String className)
+            throws IOException {
 
         try {
+            if (file.exists()) {
+                throw new IOException(file.getName() + " is reused due to YANG naming");
+            }
+
             file.createNewFile();
             appendContents(file, genType, imports, curNode, className);
         } catch (IOException e) {
@@ -297,15 +302,16 @@
     /**
      * Appends all the contents into a generated java file.
      *
-     * @param file generated file
-     * @param genType generated file type
+     * @param file        generated file
+     * @param genType     generated file type
      * @param importsList list of java imports
-     * @param curNode current YANG node
-     * @param className class name
+     * @param curNode     current YANG node
+     * @param className   class name
      * @throws IOException
      */
     private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
-            String className) throws IOException {
+            String className)
+            throws IOException {
 
         JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
 
@@ -321,39 +327,39 @@
             pkgString = parsePackageString(path, importsList);
         }
         switch (genType) {
-        case INTERFACE_MASK:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, genType, INTERFACE, curNode, className);
-            break;
-        case GENERATE_SERVICE_AND_MANAGER:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, genType, RPC_INTERFACE, curNode, className);
-            break;
-        case GENERATE_EVENT_CLASS:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, genType, EVENT, curNode, className);
-            break;
-        case GENERATE_EVENT_LISTENER_INTERFACE:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, genType, EVENT_LISTENER, curNode, className);
-            break;
-        case GENERATE_EVENT_SUBJECT_CLASS:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
-            break;
-        default:
-            break;
+            case INTERFACE_MASK:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, genType, INTERFACE, curNode, className);
+                break;
+            case GENERATE_SERVICE_AND_MANAGER:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, genType, RPC_INTERFACE, curNode, className);
+                break;
+            case GENERATE_EVENT_CLASS:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, genType, EVENT, curNode, className);
+                break;
+            case GENERATE_EVENT_LISTENER_INTERFACE:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, genType, EVENT_LISTENER, curNode, className);
+                break;
+            case GENERATE_EVENT_SUBJECT_CLASS:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
+                break;
+            default:
+                break;
         }
     }
 
     /**
      * Appends all the contents into a generated java file.
      *
-     * @param file generated file
-     * @param fileName generated file name
-     * @param genType generated file type
-     * @param importsList list of java imports
-     * @param pkg generated file package
+     * @param file         generated file
+     * @param fileName     generated file name
+     * @param genType      generated file type
+     * @param importsList  list of java imports
+     * @param pkg          generated file package
      * @param pluginConfig plugin configurations
      * @throws IOException when fails to append contents
      */
@@ -364,37 +370,37 @@
         String pkgString = parsePackageString(pkg, importsList);
 
         switch (genType) {
-        case IMPL_CLASS_MASK:
-            write(file, fileName, genType, IMPL_CLASS, pluginConfig);
-            break;
-        case BUILDER_INTERFACE_MASK:
-            write(file, fileName, genType, BUILDER_INTERFACE, pluginConfig);
-            break;
-        case GENERATE_TYPEDEF_CLASS:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, fileName, genType, IMPL_CLASS, pluginConfig);
-            break;
-        case BUILDER_CLASS_MASK:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, fileName, genType, BUILDER_CLASS, pluginConfig);
-            break;
-        case GENERATE_UNION_CLASS:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, fileName, genType, IMPL_CLASS, pluginConfig);
-            break;
-        case GENERATE_ENUM_CLASS:
-            appendHeaderContents(file, pkgString, importsList);
-            write(file, fileName, genType, ENUM_CLASS, pluginConfig);
-            break;
-        default:
-            break;
+            case IMPL_CLASS_MASK:
+                write(file, fileName, genType, IMPL_CLASS, pluginConfig);
+                break;
+            case BUILDER_INTERFACE_MASK:
+                write(file, fileName, genType, BUILDER_INTERFACE, pluginConfig);
+                break;
+            case GENERATE_TYPEDEF_CLASS:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, fileName, genType, IMPL_CLASS, pluginConfig);
+                break;
+            case BUILDER_CLASS_MASK:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, fileName, genType, BUILDER_CLASS, pluginConfig);
+                break;
+            case GENERATE_UNION_CLASS:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, fileName, genType, IMPL_CLASS, pluginConfig);
+                break;
+            case GENERATE_ENUM_CLASS:
+                appendHeaderContents(file, pkgString, importsList);
+                write(file, fileName, genType, ENUM_CLASS, pluginConfig);
+                break;
+            default:
+                break;
         }
     }
 
     /**
      * 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
      */
@@ -416,8 +422,8 @@
      * 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
      */
@@ -443,11 +449,11 @@
     /**
      * Writes data to the specific generated file.
      *
-     * @param file generated file
-     * @param genType generated file type
+     * @param file        generated file
+     * @param genType     generated file type
      * @param javaDocType java doc type
-     * @param curNode current YANG node
-     * @param fileName file name
+     * @param curNode     current YANG node
+     * @param fileName    file name
      * @throws IOException when fails to write into a file
      */
     private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
@@ -470,10 +476,10 @@
     /**
      * Writes data to the specific generated file.
      *
-     * @param file generated file
-     * @param fileName file name
-     * @param genType generated file type
-     * @param javaDocType java doc type
+     * @param file         generated file
+     * @param fileName     file name
+     * @param genType      generated file type
+     * @param javaDocType  java doc type
      * @param pluginConfig plugin configurations
      * @throws IOException
      */
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
index 617ac99..f70ec53 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
@@ -29,12 +29,7 @@
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
 import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugment;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaInput;
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaOutput;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
-
-import static java.util.Collections.sort;
 
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
@@ -69,6 +64,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.TYPE;
 import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle;
 
+import static java.util.Collections.sort;
+
 /**
  * Represents utilities for temporary java code fragments.
  */
@@ -83,8 +80,8 @@
     /**
      * Adds import for AugmentationHolders class.
      *
-     * @param curNode current YANG node
-     * @param imports list of imports
+     * @param curNode   current YANG node
+     * @param imports   list of imports
      * @param operation add or delete import
      */
     public static void addAugmentationHoldersImport(YangNode curNode, List<String> imports, boolean operation) {
@@ -95,8 +92,8 @@
     /**
      * Adds import for AugmentedInfo class.
      *
-     * @param curNode current YANG node
-     * @param imports list of imports
+     * @param curNode   current YANG node
+     * @param imports   list of imports
      * @param operation add or delete import
      */
     public static void addAugmentedInfoImport(YangNode curNode, List<String> imports, boolean operation) {
@@ -126,8 +123,8 @@
     /**
      * Updated imports with augmented nodes import.
      *
-     * @param curNode current YANG node
-     * @param imports list of imports
+     * @param curNode   current YANG node
+     * @param imports   list of imports
      * @param operation to add or to delete
      */
     public static void addAugmentedNodesImport(YangNode curNode, List<String> imports, boolean operation) {
@@ -156,7 +153,7 @@
     /**
      * Returns imports for augmented node.
      *
-     * @param parent parent YANG node
+     * @param parent      parent YANG node
      * @param targetNodes list of target nodes
      * @param isImplClass if impl class's import required
      * @return imports for augmented node
@@ -204,8 +201,8 @@
     /**
      * Adds import for array list.
      *
-     * @param curNode current YANG node
-     * @param imports list of imports
+     * @param curNode   current YANG node
+     * @param imports   list of imports
      * @param operation add or delete import
      */
     public static void addArrayListImport(YangNode curNode, List<String> imports, boolean operation) {
@@ -224,8 +221,8 @@
     /**
      * Adds listener's imports.
      *
-     * @param curNode currentYangNode.
-     * @param imports import list
+     * @param curNode   currentYangNode.
+     * @param imports   import list
      * @param operation add or remove
      * @param classInfo class info to be added to import list
      */
@@ -244,7 +241,7 @@
     /**
      * Adds annotations imports.
      *
-     * @param imports list if imports
+     * @param imports   list if imports
      * @param operation to add or to delete
      */
     public static void addAnnotationsImports(List<String> imports, boolean operation) {
@@ -269,7 +266,7 @@
     /**
      * Performs given operations on import list.
      *
-     * @param imports list of imports
+     * @param imports   list of imports
      * @param curImport current import
      * @param operation add or remove
      * @return import list
@@ -314,7 +311,7 @@
     /**
      * Closes the file handle for temporary file.
      *
-     * @param file file to be closed
+     * @param file        file to be closed
      * @param toBeDeleted flag to indicate if file needs to be deleted
      * @throws IOException when failed to close the file handle
      */
@@ -330,33 +327,6 @@
     }
 
     /**
-     * Detects collision between parent and child node which have same name.
-     * When parent and child node both have the same name in that case child node should be used with
-     * qualified name.
-     *
-     * @param curNode current YANG node
-     * @param qualifiedTypeInfo current node's qualified info
-     * @return true if collision is detected
-     */
-    public static boolean detectCollisionBwParentAndChildForImport(YangNode curNode,
-            JavaQualifiedTypeInfo qualifiedTypeInfo) {
-
-        YangNode parent = curNode.getParent();
-        if (parent instanceof YangJavaModule
-                || parent instanceof YangJavaSubModule
-                || parent instanceof YangJavaInput
-                || parent instanceof YangJavaOutput) {
-            return false;
-        }
-        String parentsClassInfo = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName());
-        String childsClassInfo = qualifiedTypeInfo.getClassInfo();
-        if (childsClassInfo.equals(parentsClassInfo)) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
      * Returns sorted import list.
      *
      * @param imports import list
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
index 8e02082..3f378c7 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
@@ -19,8 +19,6 @@
 import java.io.IOException;
 
 import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangAugmentationHolder;
 import org.onosproject.yangutils.datamodel.YangCase;
 import org.onosproject.yangutils.datamodel.YangChoice;
 import org.onosproject.yangutils.datamodel.YangLeavesHolder;
@@ -45,9 +43,6 @@
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION_HOLDER;
-import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
-import static org.onosproject.yangutils.utils.UtilConstants.PROVIDED_AUGMENTATION_CLASS_IMPORT_PKG;
 
 /**
  * Represents utility class for YANG java model.
@@ -64,7 +59,7 @@
      * Updates YANG java file package information.
      *
      * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPluginConfig YANG plugin config
+     * @param yangPluginConfig      YANG plugin config
      * @throws IOException IO operations fails
      */
     public static void updatePackageInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
@@ -85,7 +80,7 @@
      * Updates YANG java file package information for specified package.
      *
      * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPlugin YANG plugin config
+     * @param yangPlugin            YANG plugin config
      * @throws IOException IO operations fails
      */
     private static void updatePackageInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo, YangPluginConfig yangPlugin,
@@ -128,7 +123,7 @@
              */
             javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
                     .getServiceTempFiles().addCurNodeLeavesInfoToTempFiles(
-                            (YangNode) javaCodeGeneratorInfo, yangPluginConfig);
+                    (YangNode) javaCodeGeneratorInfo, yangPluginConfig);
             if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaModule) {
                 if (!((YangJavaModule) javaCodeGeneratorInfo).getNotificationNodes().isEmpty()) {
                     updateNotificaitonNodeInfo(javaCodeGeneratorInfo, yangPluginConfig);
@@ -151,7 +146,7 @@
              */
             javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
                     .getBeanTempFiles().addCurNodeLeavesInfoToTempFiles(
-                            (YangNode) javaCodeGeneratorInfo, yangPluginConfig);
+                    (YangNode) javaCodeGeneratorInfo, yangPluginConfig);
         } else if (javaCodeGeneratorInfo instanceof YangTypeHolder) {
             /*
              * Typedef
@@ -194,11 +189,12 @@
      * Updates notification node info in service temporary file.
      *
      * @param javaCodeGeneratorInfo java code generator info
-     * @param yangPluginConfig plugin configurations
+     * @param yangPluginConfig      plugin configurations
      * @throws IOException when fails to do IO operations
      */
     private static void updateNotificaitonNodeInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-            YangPluginConfig yangPluginConfig) throws IOException {
+            YangPluginConfig yangPluginConfig)
+            throws IOException {
         if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaModule) {
             for (YangNode notificaiton : ((YangJavaModule) javaCodeGeneratorInfo).getNotificationNodes()) {
                 javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
@@ -220,8 +216,8 @@
      * Generates code for the current ata model node and adds itself as an attribute in the parent.
      *
      * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPlugin YANG plugin config
-     * @param isMultiInstance flag to indicate whether it's a list
+     * @param yangPlugin            YANG plugin config
+     * @param isMultiInstance       flag to indicate whether it's a list
      * @throws IOException IO operations fails
      */
     public static void generateCodeAndUpdateInParent(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
@@ -246,7 +242,7 @@
      * Generates code for the current data model node and adds support for it to be augmented.
      *
      * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPlugin YANG plugin config
+     * @param yangPlugin            YANG plugin config
      * @throws IOException IO operations fails
      */
     public static void generateCodeOfAugmentableNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
@@ -259,8 +255,9 @@
         generateCodeOfNode(javaCodeGeneratorInfo, yangPlugin);
 
         /*
+        TODO: Need to use this, when augmentation is added in YMS
          * For augmentation of nodes.
-         */
+
         if (javaCodeGeneratorInfo instanceof YangAugmentationHolder) {
             JavaQualifiedTypeInfo augmentationHoldersInfo = new JavaQualifiedTypeInfo();
             augmentationHoldersInfo.setClassInfo(AUGMENTATION_HOLDER);
@@ -276,7 +273,7 @@
                     .addToExtendsList(augmentedInfo, (YangNode) javaCodeGeneratorInfo);
 
         }
-
+        */
         if (javaCodeGeneratorInfo instanceof YangCase) {
             YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent();
             JavaQualifiedTypeInfo parentsInfo = new JavaQualifiedTypeInfo();
@@ -297,7 +294,7 @@
      * Generates code for the current data model node.
      *
      * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPluginConfig YANG plugin config
+     * @param yangPluginConfig      YANG plugin config
      * @throws IOException IO operations fails
      */
     public static void generateCodeOfNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
@@ -314,8 +311,8 @@
      * Generates code for the root module/sub-module node.
      *
      * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPluginConfig YANG plugin config
-     * @param rootPkg package of the root node
+     * @param yangPluginConfig      YANG plugin config
+     * @param rootPkg               package of the root node
      * @throws IOException IO operations fails
      */
     public static void generateCodeOfRootNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo,