[ONOS-4527,ONOS-4524,ONOS-4536,ONOS-4541,ONOS-4549,ONOS-4550,ONOS-4557
,ONOS-4558,ONOS-4545,ONOS-4543,ONOS-4546]
 Checkstyle error in generated code handled and defect fixed.

Change-Id: Ifef5a22f91d4ee21767f1e2c6d0dd5b5b0b8cfcc
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaServiceFragmentFiles.java b/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaServiceFragmentFiles.java
index d26d07e..5a5e27f 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaServiceFragmentFiles.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaServiceFragmentFiles.java
@@ -22,26 +22,56 @@
 import java.util.List;
 
 import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaNotification;
+import org.onosproject.yangutils.datamodel.YangNotification;
+import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
+import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
+import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
 
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
+import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventListenerFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventSubjectFile;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateManagerClassFile;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateServiceInterfaceFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
+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.getSmallCase;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcManagerMethod;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcServiceMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
+import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addAnnotationsImports;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addListnersImport;
 import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.closeFile;
+import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_REG;
 import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_SERVICE;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
+import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
 import static org.onosproject.yangutils.utils.UtilConstants.VOID;
 import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.createPackage;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateJavaDocForRpc;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
 
 /**
@@ -62,6 +92,30 @@
     private static final String RPC_IMPL_FILE_NAME = "RpcImpl";
 
     /**
+     * File name for event enum temp file.
+     */
+    private static final String EVENT_ENUM_FILE_NAME = "EventEnum";
+
+    /**
+     * File name for event method temp file.
+     */
+    private static final String EVENT_METHOD_FILE_NAME = "EventMethod";
+
+    /**
+     * File name for event subject attribute temp file.
+     */
+    private static final String EVENT_SUBJECT_ATTRIBUTE_FILE_NAME = "EventSubjectAttribute";
+
+    /**
+     * File name for event subject getter temp file.
+     */
+    private static final String EVENT_SUBJECT_GETTER_FILE_NAME = "EventSubjectGetter";
+
+    /**
+     * File name for event subject setter temp file.
+     */
+    private static final String EVENT_SUBJECT_SETTER_FILE_NAME = "EventSubjectSetter";
+    /**
      * File name for generated class file for service
      * suffix.
      */
@@ -74,6 +128,41 @@
     private static final String MANAGER_FILE_NAME_SUFFIX = "Manager";
 
     /**
+     * File name for generated class file for special type like union, typedef
+     * suffix.
+     */
+    private static final String EVENT_FILE_NAME_SUFFIX = "Event";
+
+    /**
+     * File name for generated class file for special type like union, typedef
+     * suffix.
+     */
+    private static final String EVENT_LISTENER_FILE_NAME_SUFFIX = "Listener";
+
+    /**
+     * File name for generated class file for special type like union, typedef
+     * suffix.
+     */
+    public static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
+
+    private static final String JAVA_FILE_EXTENSION = ".java";
+
+    /**
+     * Java file handle for event subject file.
+     */
+    private File eventSubjectJavaFileHandle;
+
+    /**
+     * Java file handle for event listener file.
+     */
+    private File eventListenerJavaFileHandle;
+
+    /**
+     * Java file handle for event file.
+     */
+    private File eventJavaFileHandle;
+
+    /**
      * Temporary file handle for rpc interface.
      */
     private File rpcInterfaceTempFileHandle;
@@ -94,6 +183,31 @@
     private File managerJavaFileHandle;
 
     /**
+     * Java file handle for event enum impl file.
+     */
+    private File eventEnumTempFileHandle;
+
+    /**
+     * Java file handle for event method impl file.
+     */
+    private File eventMethodTempFileHandle;
+
+    /**
+     * Java file handle for event subject attribute file.
+     */
+    private File eventSubjectAttributeTempFileHandle;
+
+    /**
+     * Java file handle for event subject getter impl file.
+     */
+    private File eventSubjectGetterTempFileHandle;
+
+    /**
+     * Java file handle for event subject setter impl file.
+     */
+    private File eventSubjectSetterTempFileHandle;
+
+    /**
      * Returns rpc method's java file handle.
      *
      * @return java file handle
@@ -166,6 +280,60 @@
     }
 
     /**
+     * Returns event's java file handle.
+     *
+     * @return java file handle
+     */
+    private File getEventJavaFileHandle() {
+        return eventJavaFileHandle;
+    }
+
+    /**
+     * Sets event's java file handle.
+     *
+     * @param eventJavaFileHandle file handle for event
+     */
+    private void setEventJavaFileHandle(File eventJavaFileHandle) {
+        this.eventJavaFileHandle = eventJavaFileHandle;
+    }
+
+    /**
+     * Returns event listeners's java file handle.
+     *
+     * @return java file handle
+     */
+    private File getEventListenerJavaFileHandle() {
+        return eventListenerJavaFileHandle;
+    }
+
+    /**
+     * Sets event's java file handle.
+     *
+     * @param eventListenerJavaFileHandle file handle for event
+     */
+    private void setEventListenerJavaFileHandle(File eventListenerJavaFileHandle) {
+        this.eventListenerJavaFileHandle = eventListenerJavaFileHandle;
+    }
+
+    /**
+     * Returns event subject's java file handle.
+     *
+     * @return java file handle
+     */
+    private File getEventSubjectJavaFileHandle() {
+        return eventSubjectJavaFileHandle;
+    }
+
+    /**
+     * Sets event's subject java file handle.
+     *
+     * @param eventSubjectJavaFileHandle file handle for event's subject
+     */
+    private void setEventSubjectJavaFileHandle(File eventSubjectJavaFileHandle) {
+        this.eventSubjectJavaFileHandle = eventSubjectJavaFileHandle;
+    }
+
+    /**
      * Creates an instance of temporary java code fragment.
      *
      * @param javaFileInfo generated file information
@@ -176,11 +344,22 @@
         super(javaFileInfo);
 
         addGeneratedTempFile(RPC_INTERFACE_MASK);
-
         addGeneratedTempFile(RPC_IMPL_MASK);
 
+        addGeneratedTempFile(EVENT_ENUM_MASK);
+        addGeneratedTempFile(EVENT_METHOD_MASK);
+        addGeneratedTempFile(EVENT_SUBJECT_ATTRIBUTE_MASK);
+        addGeneratedTempFile(EVENT_SUBJECT_GETTER_MASK);
+        addGeneratedTempFile(EVENT_SUBJECT_SETTER_MASK);
+
         setRpcInterfaceTempFileHandle(getTemporaryFileHandle(RPC_INTERFACE_FILE_NAME));
         setRpcImplTempFileHandle(getTemporaryFileHandle(RPC_IMPL_FILE_NAME));
+
+        setEventEnumTempFileHandle(getTemporaryFileHandle(EVENT_ENUM_FILE_NAME));
+        setEventMethodTempFileHandle(getTemporaryFileHandle(EVENT_METHOD_FILE_NAME));
+        setEventSubjectAttributeTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_ATTRIBUTE_FILE_NAME));
+        setEventSubjectGetterTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_GETTER_FILE_NAME));
+        setEventSubjectSetterTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_SETTER_FILE_NAME));
     }
 
     /**
@@ -199,13 +378,14 @@
         createPackage(curNode);
 
         boolean isNotification = false;
-        YangNode tempNode = curNode.getChild();
-        while (tempNode != null) {
-            if (tempNode instanceof YangJavaNotification) {
+        if (curNode instanceof YangJavaModule) {
+            if (!((YangJavaModule) curNode).getNotificationNodes().isEmpty()) {
                 isNotification = true;
-                break;
             }
-            tempNode = tempNode.getNextSibling();
+        } else if (curNode instanceof YangJavaSubModule) {
+            if (!((YangJavaSubModule) curNode).getNotificationNodes().isEmpty()) {
+                isNotification = true;
+            }
         }
 
         if (isNotification) {
@@ -221,6 +401,7 @@
             addListnersImport(curNode, imports, false, LISTENER_SERVICE);
             addListnersImport(curNode, imports, true, LISTENER_REG);
         }
+        addAnnotationsImports(imports, true);
         /**
          * Create builder class file.
          */
@@ -231,6 +412,14 @@
         if (isNotification) {
             addListnersImport(curNode, imports, false, LISTENER_REG);
         }
+        addAnnotationsImports(imports, false);
+
+        if (isNotification) {
+            generateEventJavaFile(GENERATE_EVENT_CLASS, curNode);
+            generateEventListenerJavaFile(GENERATE_EVENT_LISTENER_INTERFACE, curNode);
+            generateEventSubjectJavaFile(GENERATE_EVENT_SUBJECT_CLASS, curNode);
+        }
+
         /**
          * Close all the file handles.
          */
@@ -243,10 +432,11 @@
      * @param javaAttributeInfoOfInput rpc's input node attribute info
      * @param javaAttributeInfoOfOutput rpc's output node attribute info
      * @param rpcName name of the rpc function
+     * @param pluginConfig plugin configurations
      * @throws IOException IO operation fail
      */
     private void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput,
-            JavaAttributeInfo javaAttributeInfoOfOutput,
+            JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig,
             String rpcName) throws IOException {
         String rpcInput = EMPTY_STRING;
         String rpcOutput = VOID;
@@ -256,9 +446,11 @@
         if (javaAttributeInfoOfOutput != null) {
             rpcOutput = getCapitalCase(javaAttributeInfoOfOutput.getAttributeName());
         }
-        appendToFile(getRpcInterfaceTempFileHandle(), generateJavaDocForRpc(rpcName, RPC_INPUT_VAR_NAME, rpcOutput)
-                + getRpcServiceMethod(rpcName, rpcInput, rpcOutput) + NEW_LINE);
-        appendToFile(getRpcImplTempFileHandle(), getRpcManagerMethod(rpcName, rpcInput, rpcOutput) + NEW_LINE);
+        appendToFile(getRpcInterfaceTempFileHandle(),
+                generateJavaDocForRpc(rpcName, RPC_INPUT_VAR_NAME, rpcOutput, pluginConfig)
+                        + getRpcServiceMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
+        appendToFile(getRpcImplTempFileHandle(),
+                getRpcManagerMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
     }
 
     /**
@@ -266,14 +458,99 @@
      *
      * @param javaAttributeInfoOfInput rpc's input node attribute info
      * @param javaAttributeInfoOfOutput rpc's output node attribute info
+     * @param pluginConfig plugin configurations
      * @param rpcName name of the rpc function
      * @throws IOException IO operation fail
      */
     public void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo javaAttributeInfoOfInput,
-            JavaAttributeInfo javaAttributeInfoOfOutput,
+            JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig,
             String rpcName)
             throws IOException {
-        addRpcString(javaAttributeInfoOfInput, javaAttributeInfoOfOutput, rpcName);
+        addRpcString(javaAttributeInfoOfInput, javaAttributeInfoOfOutput, pluginConfig, rpcName);
+    }
+
+    /**
+     * Constructs java code exit.
+     *
+     * @param fileType generated file type
+     * @param curNode current YANG node
+     * @throws IOException when fails to generate java files
+     */
+    public void generateEventJavaFile(int fileType, YangNode curNode)
+            throws IOException {
+
+        List<String> imports = new ArrayList<>();
+
+        imports.add(getJavaImportData().getAbstractEventsImport());
+        String curNodeInfo =
+                getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName());
+        String nodeName = curNodeInfo + EVENT_STRING;
+
+        addEnumMethod(nodeName, curNodeInfo + EVENT_SUBJECT_NAME_SUFFIX);
+
+        /**
+         * Creates event interface file.
+         */
+        setEventJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo + EVENT_FILE_NAME_SUFFIX));
+        generateEventFile(getEventJavaFileHandle(), curNode, imports);
+
+        /**
+         * Close all the file handles.
+         */
+        freeTemporaryResources(false);
+    }
+
+    /**
+     * Constructs java code exit.
+     *
+     * @param fileType generated file type
+     * @param curNode current YANG node
+     * @throws IOException when fails to generate java files
+     */
+    public void generateEventListenerJavaFile(int fileType, YangNode curNode)
+            throws IOException {
+
+        List<String> imports = new ArrayList<>();
+
+        imports.add(getJavaImportData().getEventListenerImport());
+        String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
+                .getJavaFileInfo().getJavaName());
+        /**
+         * Creates event listener interface file.
+         */
+        setEventListenerJavaFileHandle(
+                getJavaFileHandle(curNode, curNodeInfo + EVENT_LISTENER_FILE_NAME_SUFFIX));
+        generateEventListenerFile(getEventListenerJavaFileHandle(), curNode, imports);
+
+        /**
+         * Close all the file handles.
+         */
+        freeTemporaryResources(false);
+    }
+
+    /**
+     * Constructs java code exit.
+     *
+     * @param fileType generated file type
+     * @param curNode current YANG node
+     * @throws IOException when fails to generate java files
+     */
+    public void generateEventSubjectJavaFile(int fileType, YangNode curNode)
+            throws IOException {
+
+        String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
+                .getJavaFileInfo().getJavaName());
+        /**
+         * Creates event interface file.
+         */
+        setEventSubjectJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo +
+                EVENT_SUBJECT_NAME_SUFFIX));
+        generateEventSubjectFile(getEventSubjectJavaFileHandle(), curNode);
+
+        /**
+         * Close all the file handles.
+         */
+        freeTemporaryResources(false);
     }
 
     /**
@@ -290,6 +567,18 @@
         boolean isError = isErrorOccurred;
 
         closeFile(getServiceInterfaceJavaFileHandle(), isError);
+        closeFile(getManagerJavaFileHandle(), isError);
+
+        if (getEventJavaFileHandle() != null) {
+            closeFile(getEventJavaFileHandle(), isError);
+        }
+        if (getEventListenerJavaFileHandle() != null) {
+            closeFile(getEventListenerJavaFileHandle(), isError);
+        }
+        if (getEventSubjectJavaFileHandle() != null) {
+            closeFile(getEventSubjectJavaFileHandle(), isError);
+        }
+
         closeFile(getRpcInterfaceTempFileHandle(), true);
         closeFile(getRpcImplTempFileHandle(), true);
         closeFile(getGetterInterfaceTempFileHandle(), true);
@@ -299,4 +588,206 @@
         super.freeTemporaryResources(isErrorOccurred);
 
     }
+
+    /**
+     * Returns event enum temp file.
+     *
+     * @return event enum temp file
+     */
+    public File getEventEnumTempFileHandle() {
+        return eventEnumTempFileHandle;
+    }
+
+    /**
+     * Sets event enum temp file.
+     *
+     * @param eventEnumTempFileHandle event enum temp file
+     */
+    public void setEventEnumTempFileHandle(File eventEnumTempFileHandle) {
+        this.eventEnumTempFileHandle = eventEnumTempFileHandle;
+    }
+
+    /**
+     * Returns event method temp file.
+     *
+     * @return event method temp file
+     */
+    public File getEventMethodTempFileHandle() {
+        return eventMethodTempFileHandle;
+    }
+
+    /**
+     * Sets event method temp file.
+     *
+     * @param eventMethodTempFileHandle event method temp file
+     */
+    public void setEventMethodTempFileHandle(File eventMethodTempFileHandle) {
+        this.eventMethodTempFileHandle = eventMethodTempFileHandle;
+    }
+
+    /**
+     * Returns event subject attribute temp file.
+     *
+     * @return event subject attribute temp file
+     */
+    public File getEventSubjectAttributeTempFileHandle() {
+        return eventSubjectAttributeTempFileHandle;
+    }
+
+    /**
+     * Sets event subject attribute temp file.
+     *
+     * @param eventSubjectAttributeTempFileHandle event subject attribute temp file
+     */
+    public void setEventSubjectAttributeTempFileHandle(File eventSubjectAttributeTempFileHandle) {
+        this.eventSubjectAttributeTempFileHandle = eventSubjectAttributeTempFileHandle;
+    }
+
+    /**
+     * Returns event subject getter temp file.
+     *
+     * @return event subject getter temp file
+     */
+    public File getEventSubjectGetterTempFileHandle() {
+        return eventSubjectGetterTempFileHandle;
+    }
+
+    /**
+     * Sets event subject getter temp file.
+     *
+     * @param eventSubjectGetterTempFileHandle event subject getter temp file
+     */
+    public void setEventSubjectGetterTempFileHandle(File eventSubjectGetterTempFileHandle) {
+        this.eventSubjectGetterTempFileHandle = eventSubjectGetterTempFileHandle;
+    }
+
+    /**
+     * Returns event subject setter temp file.
+     *
+     * @return event subject setter temp file
+     */
+    public File getEventSubjectSetterTempFileHandle() {
+        return eventSubjectSetterTempFileHandle;
+    }
+
+    /**
+     * Sets event subject setter temp file.
+     *
+     * @param eventSubjectSetterTempFileHandle event subject setter temp file
+     */
+    public void setEventSubjectSetterTempFileHandle(File eventSubjectSetterTempFileHandle) {
+        this.eventSubjectSetterTempFileHandle = eventSubjectSetterTempFileHandle;
+    }
+
+    /**
+     * Adds java snippet for events to event subject file.
+     *
+     * @param curNode current node
+     * @param pluginConfig plugin configurations
+     * @throws IOException when fails to do IO operations
+     */
+    public void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig) throws IOException {
+
+        String currentInfo = getCapitalCase(getCamelCase(((YangNotification) curNode).getName(),
+                pluginConfig.getConflictResolver()));
+
+        JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode.getParent(),
+                getCapitalCase(currentInfo));
+
+        JavaAttributeInfo javaAttributeInfo =
+                getAttributeInfoForTheData(qualifiedTypeInfo, getSmallCase(currentInfo),
+                        null, false, false);
+
+        /*Adds java info for event in respective temp files.*/
+        addEventEnum(currentInfo, pluginConfig);
+        addEventSubjectAttribute(javaAttributeInfo, pluginConfig);
+        addEventSubjectGetter(javaAttributeInfo, pluginConfig);
+        addEventSubjectSetter(javaAttributeInfo, pluginConfig, currentInfo);
+    }
+
+    /*Adds event to enum temp file.*/
+    private void addEventEnum(String notificationName, YangPluginConfig pluginConfig) throws IOException {
+        appendToFile(getEventEnumTempFileHandle(),
+                getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION
+                        + notificationName.toUpperCase() + COMMA + NEW_LINE);
+    }
+
+    /*Adds event method in event class*/
+    private void addEnumMethod(String eventClassname, String className) throws IOException {
+        appendToFile(getEventMethodTempFileHandle(), getEventFileContents(eventClassname, className));
+    }
+
+    /*Adds event method contents to event file.*/
+    private static String getEventFileContents(String eventClassname, String classname) {
+        return "\n" +
+                "    /**\n" +
+                "     * Creates " + classname + " event with type and subject.\n" +
+                "     *\n" +
+                "     * @param type event type\n" +
+                "     * @param subject subject " + classname + "\n" +
+                "     */\n" +
+                "    public " + eventClassname + "(Type type, " + getCapitalCase(classname) + " subject) {\n" +
+                "        super(type, subject);\n" +
+                "    }\n" +
+                "\n" +
+                "    /**\n" +
+                "     * Creates " + classname + " event with type, subject and time.\n" +
+                "     *\n" +
+                "     * @param type event type\n" +
+                "     * @param subject subject " + classname + "\n" +
+                "     * @param time time of event\n" +
+                "     */\n" +
+                "    public " + eventClassname + "(Type type, " + getCapitalCase(classname)
+                + " subject, long time) {\n" +
+                "        super(type, subject, time);\n" +
+                "    }\n" +
+                "\n";
+    }
+
+    /*Adds events to event subject file.*/
+    private void addEventSubjectAttribute(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
+            throws IOException {
+        appendToFile(getEventSubjectAttributeTempFileHandle(),
+                FOUR_SPACE_INDENTATION + parseAttribute(attr, pluginConfig));
+    }
+
+    /*Adds getter method for event in event subject class.*/
+    private void addEventSubjectGetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig) throws IOException {
+        appendToFile(getEventSubjectGetterTempFileHandle(),
+                getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
+                        + getGetterForClass(attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
+    }
+
+    /*Adds setter method for event in event subject class.*/
+    private void addEventSubjectSetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig, String className)
+            throws IOException {
+        appendToFile(getEventSubjectSetterTempFileHandle(),
+                getJavaDoc(MANAGER_SETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
+                        + getSetterForClass(attr, className, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
+    }
+
+    /**
+     * Returns a temporary file handle for the event's file type.
+     *
+     * @param fileName file name
+     * @return temporary file handle
+     * @throws IOException when fails to create new file handle
+     */
+    private File getJavaFileHandle(YangNode curNode, String name)
+            throws IOException {
+
+        JavaFileInfo parentInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+        return getFileObject(getDirPath(parentInfo), name, JAVA_FILE_EXTENSION,
+                parentInfo);
+    }
+
+    /**
+     * Returns the directory path.
+     *
+     * @return directory path
+     */
+    private String getDirPath(JavaFileInfo parentInfo) {
+        return (parentInfo.getPackageFilePath() + SLASH + parentInfo.getJavaName()).toLowerCase();
+    }
 }