[ONOS-4839] update file priority for translator and OP param file impl defect fix

Change-Id: Ieaef43f915996ed0a34dfa17c338ab612716b2bc
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index 14e71ad..f76d9b2 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -19,9 +19,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.onosproject.yangutils.datamodel.YangAtomicPath;
 import org.onosproject.yangutils.datamodel.YangAugment;
@@ -36,6 +34,7 @@
 import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
+import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
@@ -81,9 +80,7 @@
 import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentedNodesPackage;
 import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
 import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
@@ -97,9 +94,9 @@
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OPERATION_CLASS;
 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.JavaDocType.OPERATION_CLASS;
 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;
@@ -123,15 +120,15 @@
     /**
      * Returns a file object for generated file.
      *
-     * @param fileName  file name
      * @param filePath  file package path
+     * @param fileName  file name
      * @param extension file extension
-     * @param handle    cached file handle
+     * @param baseCodePath    cached file handle
      * @return file object
      */
-    public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
+    public static File getFileObject(String filePath, String fileName, String extension, String baseCodePath) {
 
-        return new File(handle.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
+        return new File(baseCodePath + filePath + SLASH + fileName + extension);
     }
 
     /**
@@ -143,8 +140,8 @@
      * @return data stored in temporary files
      * @throws IOException when failed to get the data from temporary file handle
      */
-    public static String getDataFromTempFileHandle(int generatedTempFiles,
-                                                   TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
+    static String getDataFromTempFileHandle(int generatedTempFiles,
+                                            TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
             throws IOException {
 
         TempJavaTypeFragmentFiles typeFragmentFiles = null;
@@ -164,6 +161,11 @@
             serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
         }
 
+        TempJavaEventFragmentFiles eventFragmentFiles = null;
+        if (tempJavaFragmentFiles instanceof TempJavaEventFragmentFiles) {
+            eventFragmentFiles = (TempJavaEventFragmentFiles) tempJavaFragmentFiles;
+        }
+
         if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
             return tempJavaFragmentFiles
                     .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
@@ -247,39 +249,39 @@
                     .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle(),
                             absolutePath);
         } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
-            if (serviceFragmentFiles == null) {
-                throw new TranslatorException("Required rpc implementation info is missing.");
+            if (eventFragmentFiles == null) {
+                throw new TranslatorException("Required event enum implementation info is missing.");
             }
-            return serviceFragmentFiles
-                    .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventEnumTempFileHandle(),
+            return eventFragmentFiles
+                    .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventEnumTempFileHandle(),
                             absolutePath);
         } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
-            if (serviceFragmentFiles == null) {
-                throw new TranslatorException("Required rpc implementation info is missing.");
+            if (eventFragmentFiles == null) {
+                throw new TranslatorException("Required event method implementation info is missing.");
             }
-            return serviceFragmentFiles
-                    .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventMethodTempFileHandle(),
+            return eventFragmentFiles
+                    .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventMethodTempFileHandle(),
                             absolutePath);
         } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
-            if (serviceFragmentFiles == null) {
-                throw new TranslatorException("Required rpc implementation info is missing.");
+            if (eventFragmentFiles == null) {
+                throw new TranslatorException("Required event subject getter implementation info is missing.");
             }
-            return serviceFragmentFiles
-                    .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectGetterTempFileHandle(),
+            return eventFragmentFiles
+                    .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectGetterTempFileHandle(),
                             absolutePath);
         } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
-            if (serviceFragmentFiles == null) {
-                throw new TranslatorException("Required rpc implementation info is missing.");
+            if (eventFragmentFiles == null) {
+                throw new TranslatorException("Required event subject setter implementation info is missing.");
             }
-            return serviceFragmentFiles
-                    .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectSetterTempFileHandle(),
+            return eventFragmentFiles
+                    .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectSetterTempFileHandle(),
                             absolutePath);
         } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
-            if (serviceFragmentFiles == null) {
-                throw new TranslatorException("Required rpc implementation info is missing.");
+            if (eventFragmentFiles == null) {
+                throw new TranslatorException("Required event subject attribute implementation info is missing.");
             }
-            return serviceFragmentFiles
-                    .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectAttributeTempFileHandle(),
+            return eventFragmentFiles
+                    .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectAttributeTempFileHandle(),
                             absolutePath);
         }
         return null;
@@ -300,11 +302,15 @@
                                                   String pkg, YangPluginConfig pluginConfig)
             throws IOException {
 
+        boolean isFileCreated;
         try {
-            file.createNewFile();
+            isFileCreated = file.createNewFile();
+            if (!isFileCreated) {
+                throw new IOException("Failed to create " + file.getName() + " class file.");
+            }
             appendContents(file, className, genType, imports, pkg, pluginConfig);
         } catch (IOException e) {
-            throw new IOException("Failed to create " + file.getName() + " class file.");
+            throw new IOException("Failed to append contents in " + file.getName() + " class file.");
         }
     }
 
@@ -322,11 +328,15 @@
                                                   YangNode curNode, String className)
             throws IOException {
 
+        boolean isFileCreated;
         try {
-            file.createNewFile();
+            isFileCreated = file.createNewFile();
+            if (!isFileCreated) {
+                throw new IOException("Failed to create " + file.getName() + " class file.");
+            }
             appendContents(file, genType, imports, curNode, className);
         } catch (IOException e) {
-            throw new IOException("Failed to create " + file.getName() + " class file.");
+            throw new IOException("Failed to append contents in " + file.getName() + " class file.");
         }
     }
 
@@ -349,11 +359,7 @@
         String name = javaFileInfo.getJavaName();
         String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
 
-        YangNode augmentedNode = null;
-        if (curNode instanceof YangAugment) {
-            augmentedNode = ((YangAugment) curNode).getAugmentedNode();
-        }
-        String pkgString = null;
+        String pkgString;
         if (genType == GENERATE_EVENT_CLASS
                 || genType == GENERATE_EVENT_LISTENER_INTERFACE
                 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
@@ -363,11 +369,7 @@
         }
         switch (genType) {
             case INTERFACE_MASK:
-                if (augmentedNode != null) {
-                    appendHeaderContents(file, pkgString, importsList, augmentedNode);
-                } else {
-                    appendHeaderContents(file, pkgString, importsList);
-                }
+                appendHeaderContents(file, pkgString, importsList);
                 write(file, genType, INTERFACE, curNode, className);
                 break;
             case IMPL_CLASS_MASK:
@@ -470,8 +472,8 @@
     }
 
     /**
-     * Appends other contents to interface, impl and typedef classes.
-     * for example : ONOS copyright, imports and package.
+     * Appends other contents to interface, impl and typedef classes. for example : ONOS copyright, imports and
+     * package.
      *
      * @param file        generated file
      * @param pkg         generated package
@@ -485,7 +487,7 @@
         insertDataIntoJavaFile(file, pkg);
 
         /*
-         * TODO: add the file header using
+         * TODO: add the file header using comments for snippet of yang file.
          * JavaCodeSnippetGen.getFileHeaderComment
          */
 
@@ -498,39 +500,6 @@
     }
 
     /**
-     * Appends other contents to interface and impl classes when augmented node is not null.
-     * for example : ONOS copyright, imports and package.
-     *
-     * @param file          generated file
-     * @param pkg           generated package
-     * @param augmentedNode augmented node
-     * @param importsList   list of imports
-     * @throws IOException when fails to append contents
-     */
-    private static void appendHeaderContents(File file, String pkg, List<String> importsList, YangNode augmentedNode)
-            throws IOException {
-
-        insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
-        insertDataIntoJavaFile(file, pkg);
-
-        /*
-         * TODO: add the file header using
-         * JavaCodeSnippetGen.getFileHeaderComment
-         */
-
-        if (importsList != null) {
-            insertDataIntoJavaFile(file, NEW_LINE);
-            for (String imports : importsList) {
-                if (!imports.contains(getCapitalCase(DEFAULT) + getCapitalCase(getCamelCase(augmentedNode.getName(),
-                        null)))
-                        && !imports.contains(getCapitalCase(getCamelCase(augmentedNode.getName(), null)) + BUILDER)) {
-                    insertDataIntoJavaFile(file, imports);
-                }
-            }
-        }
-    }
-
-    /**
      * Writes data to the specific generated file.
      *
      * @param file        generated file
@@ -575,32 +544,12 @@
     }
 
     /**
-     * Returns resolved augments for manager classes.
-     *
-     * @param parent parent node
-     * @return resolved augments for manager classes
-     */
-    public static Map<YangAtomicPath, YangAugment> getResolvedAugmentsForManager(YangNode parent) {
-        Map<YangAtomicPath, YangAugment> resolvedAugmentsForManager = new HashMap<>();
-        YangNodeIdentifier nodeId;
-        List<YangAtomicPath> targets = new ArrayList<>();
-        for (YangAugment augment : getListOfAugments(parent)) {
-            nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
-            if (validateNodeIdentifierInSet(nodeId, targets)) {
-                targets.add(augment.getTargetNode().get(0));
-                resolvedAugmentsForManager.put(augment.getTargetNode().get(0), augment);
-            }
-        }
-        return resolvedAugmentsForManager;
-    }
-
-    /**
      * Returns set of node identifiers.
      *
      * @param parent parent node
      * @return set of node identifiers
      */
-    public static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
+    static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
 
         List<YangAtomicPath> targets = new ArrayList<>();
         YangNodeIdentifier nodeId;
@@ -649,7 +598,6 @@
      * @param parent parent node
      */
     public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
-        Map<YangAtomicPath, YangAugment> resolvedAugmentsForManager = getResolvedAugmentsForManager(parent);
         List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
         TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
                 .getTempJavaCodeFragmentFiles();
@@ -658,7 +606,7 @@
         String curNodeName;
         JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
         for (YangAtomicPath nodeId : targets) {
-            augmentedNode = resolvedAugmentsForManager.get(nodeId).getResolveNodeInPath().get(nodeId);
+            augmentedNode = nodeId.getResolvedNode().getParent();
             if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
                 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
             } else {
@@ -682,8 +630,8 @@
      * @param pluginConfig  plugin configurations
      * @return qualified type info of augmented node
      */
-    public static JavaQualifiedTypeInfo getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode, String curNodeName,
-                                                                            YangPluginConfig pluginConfig) {
+    private static JavaQualifiedTypeInfo getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode, String curNodeName,
+                                                                             YangPluginConfig pluginConfig) {
         JavaQualifiedTypeInfo javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
                 getCapitalCase(curNodeName));
         if (javaQualifiedTypeInfo.getPkgInfo() == null) {
@@ -719,7 +667,7 @@
      * @param parent        parent node
      * @return augmented class name for data methods in manager and service
      */
-    public static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
+    static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
         String curNodeName;
         JavaQualifiedTypeInfo javaQualifiedTypeInfo;
         JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
@@ -751,7 +699,7 @@
      * @param pluginConfig plugin configurations
      * @return parent node name for data methods in manager and service
      */
-    public static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
+    static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
         JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
         if (parentInfo.getJavaName() != null) {
             return getCapitalCase(parentInfo.getJavaName());