[ONOS-4829] Augmented data method generator implmentation.

Change-Id: I0cb68dd10a748e5b66eec0b832574f408a23ba5c
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
index 91849b2..d54fd7d 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
@@ -34,7 +34,7 @@
 import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
 import org.onosproject.yangutils.utils.io.impl.YangToJavaNamingConflictUtil;
 
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.getCurNodePackage;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getCurNodePackage;
 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.BIG_DECIMAL;
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugment.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugment.java
index ef185fa..a890ec2 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugment.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugment.java
@@ -30,7 +30,8 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
 
 /**
@@ -154,10 +155,11 @@
      */
     public String getAugmentClassName() {
         YangNodeIdentifier nodeId = getTargetNode().get(getTargetNode().size() - 1).getNodeIdentifier();
+        String name = getCapitalCase(getCamelCase(nodeId.getName(), null));
         if (nodeId.getPrefix() != null) {
-            return AUGMENTED + getCapitalCase(nodeId.getPrefix()) + getCapitalCase(nodeId.getName());
+            return AUGMENTED + getCapitalCase(nodeId.getPrefix()) + name;
         } else {
-            return AUGMENTED + getCapitalCase(nodeId.getName());
+            return AUGMENTED + name;
         }
     }
 
@@ -173,7 +175,7 @@
     /**
      * Sets extended class info.
      *
-     * @param augmentedInfo  extended class info
+     * @param augmentedInfo extended class info
      */
     private void setExtendedClassInfo(List<JavaQualifiedTypeInfo> augmentedInfo) {
         extendedClassInfo = augmentedInfo;
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java
index 4652fd4..4d4929d 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCase.java
@@ -26,7 +26,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
 
 /**
  * Represents case information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java
index 1e29349..122bb40 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoice.java
@@ -26,7 +26,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
 
 /**
  * Represents choice information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainer.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainer.java
index eac6291..3578adc 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainer.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainer.java
@@ -26,7 +26,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
 
 /**
  * Represents container information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
index 2edd8d8..fe5e40f 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
@@ -27,7 +27,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
 
 /**
  * Represents YANG java enumeration information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentity.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentity.java
index a73a5b4..6ae672b 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentity.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentity.java
@@ -31,7 +31,7 @@
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.updatePackageInfo;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java
index 7e6211a..f6bfbfc 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java
@@ -27,7 +27,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
 
 /**
  * Represents input information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaList.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaList.java
index e4a1997..d03c381 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaList.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaList.java
@@ -26,7 +26,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
 
 /**
  * Represents YANG list information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModelUtils.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModelUtils.java
deleted file mode 100644
index 582b9b5..0000000
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModelUtils.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangTypeHolder;
-import org.onosproject.yangutils.datamodel.utils.DataModelUtils;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.isRpcChildNodePresent;
-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.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
-import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-
-/**
- * Represents utility class for YANG java model.
- */
-public final class YangJavaModelUtils {
-
-    /**
-     * Creates an instance of YANG java model utility.
-     */
-    private YangJavaModelUtils() {
-    }
-
-    /**
-     * Updates YANG java file package information.
-     *
-     * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPluginConfig      YANG plugin config
-     * @throws IOException IO operations fails
-     */
-    public static void updatePackageInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                         YangPluginConfig yangPluginConfig)
-            throws IOException {
-
-        if (javaCodeGeneratorInfo instanceof YangJavaAugment) {
-            javaCodeGeneratorInfo.getJavaFileInfo()
-                    .setJavaName(((YangJavaAugment) javaCodeGeneratorInfo).getAugmentClassName());
-        } else {
-            javaCodeGeneratorInfo.getJavaFileInfo()
-                    .setJavaName(getCamelCase(((YangNode) javaCodeGeneratorInfo).getName(),
-                            yangPluginConfig.getConflictResolver()));
-        }
-        javaCodeGeneratorInfo.getJavaFileInfo().setPackage(getCurNodePackage((YangNode) javaCodeGeneratorInfo));
-        javaCodeGeneratorInfo.getJavaFileInfo().setPackageFilePath(
-                getPackageDirPathFromJavaJPackage(javaCodeGeneratorInfo.getJavaFileInfo().getPackage()));
-        javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(yangPluginConfig.getCodeGenDir());
-        javaCodeGeneratorInfo.getJavaFileInfo().setPluginConfig(yangPluginConfig);
-    }
-
-    /**
-     * Updates YANG java file package information for specified package.
-     *
-     * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPlugin            YANG plugin config
-     * @throws IOException IO operations fails
-     */
-    private static void updatePackageInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo, YangPluginConfig yangPlugin,
-                                          String pkg) throws IOException {
-        javaCodeGeneratorInfo.getJavaFileInfo()
-                .setJavaName(getCamelCase(((YangNode) javaCodeGeneratorInfo).getName(),
-                        yangPlugin.getConflictResolver()));
-        javaCodeGeneratorInfo.getJavaFileInfo().setPackage(pkg);
-        javaCodeGeneratorInfo.getJavaFileInfo().setPackageFilePath(
-                getPackageDirPathFromJavaJPackage(javaCodeGeneratorInfo.getJavaFileInfo().getPackage()));
-        javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(yangPlugin.getManagerCodeGenDir());
-        javaCodeGeneratorInfo.getJavaFileInfo().setPluginConfig(yangPlugin);
-    }
-
-    /**
-     * Updates temporary java code fragment files.
-     *
-     * @param javaCodeGeneratorInfo YANG java file info node
-     * @throws IOException IO operations fails
-     */
-    private static void createTempFragmentFile(JavaCodeGeneratorInfo javaCodeGeneratorInfo)
-            throws IOException {
-        javaCodeGeneratorInfo.setTempJavaCodeFragmentFiles(
-                new TempJavaCodeFragmentFiles(javaCodeGeneratorInfo.getJavaFileInfo()));
-    }
-
-    /**
-     * Updates leaf information in temporary java code fragment files.
-     *
-     * @param javaCodeGeneratorInfo YANG java file info node
-     * @throws IOException IO operations fails
-     */
-    private static void updateTempFragmentFiles(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                                YangPluginConfig yangPluginConfig)
-            throws IOException {
-        if (javaCodeGeneratorInfo instanceof RpcNotificationContainer) {
-            /*
-             * Module / sub module node code generation.
-             */
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
-                    .getServiceTempFiles().addCurNodeLeavesInfoToTempFiles(
-                    (YangNode) javaCodeGeneratorInfo, yangPluginConfig);
-            if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaModule) {
-                if (!((YangJavaModule) javaCodeGeneratorInfo).getNotificationNodes().isEmpty()) {
-                    updateNotificaitonNodeInfo(javaCodeGeneratorInfo, yangPluginConfig);
-                }
-            } else if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaSubModule) {
-                if (!((YangJavaSubModule) javaCodeGeneratorInfo).getNotificationNodes().isEmpty()) {
-                    updateNotificaitonNodeInfo(javaCodeGeneratorInfo, yangPluginConfig);
-                }
-            }
-
-        } else if (javaCodeGeneratorInfo instanceof YangLeavesHolder) {
-            /*
-             * Container
-             * Case
-             * Grouping
-             * Input
-             * List
-             * Notification
-             * Output
-             */
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
-                    .getBeanTempFiles().addCurNodeLeavesInfoToTempFiles(
-                    (YangNode) javaCodeGeneratorInfo, yangPluginConfig);
-        } else if (javaCodeGeneratorInfo instanceof YangTypeHolder) {
-            /*
-             * Typedef
-             * Union
-             */
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
-                    .addTypeInfoToTempFiles((YangTypeHolder) javaCodeGeneratorInfo, yangPluginConfig);
-        } else if (javaCodeGeneratorInfo instanceof YangJavaEnumeration) {
-            /*
-             * Enumeration
-             */
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getEnumerationTempFiles()
-                    .addEnumAttributeToTempFiles((YangNode) javaCodeGeneratorInfo, yangPluginConfig);
-
-        } else if (javaCodeGeneratorInfo instanceof YangChoice) {
-            /*Do nothing, only the interface needs to be generated*/
-        } else {
-            throw new TranslatorException("Unsupported Node Translation");
-        }
-    }
-
-    /**
-     * Process generate code entry of YANG node.
-     *
-     * @param javaCodeGeneratorInfo YANG java file info node
-     * @throws IOException IO operations fails
-     */
-    private static void generateTempFiles(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                          YangPluginConfig yangPluginConfig)
-            throws IOException {
-        if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("translation is not supported for the node");
-        }
-        createTempFragmentFile(javaCodeGeneratorInfo);
-        updateTempFragmentFiles(javaCodeGeneratorInfo, yangPluginConfig);
-
-    }
-
-    /**
-     * Updates notification node info in service temporary file.
-     *
-     * @param javaCodeGeneratorInfo java code generator info
-     * @param yangPluginConfig      plugin configurations
-     * @throws IOException when fails to do IO operations
-     */
-    private static void updateNotificaitonNodeInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                                   YangPluginConfig yangPluginConfig)
-            throws IOException {
-        if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaModule) {
-            for (YangNode notificaiton : ((YangJavaModule) javaCodeGeneratorInfo).getNotificationNodes()) {
-                javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
-                        .getServiceTempFiles()
-                        .addJavaSnippetOfEvent(notificaiton, yangPluginConfig);
-            }
-        }
-        if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaSubModule) {
-            for (YangNode notificaiton : ((YangJavaSubModule) javaCodeGeneratorInfo)
-                    .getNotificationNodes()) {
-                javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
-                        .getServiceTempFiles()
-                        .addJavaSnippetOfEvent(notificaiton, yangPluginConfig);
-            }
-        }
-    }
-
-    /**
-     * 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
-     * @throws IOException IO operations fails
-     */
-    public static void generateCodeAndUpdateInParent(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                                     YangPluginConfig yangPlugin, boolean isMultiInstance)
-            throws IOException {
-        if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("Invalid node for translation");
-        }
-
-        /*
-         * Generate the Java files corresponding to the current node.
-         */
-        generateCodeOfAugmentableNode(javaCodeGeneratorInfo, yangPlugin);
-
-        /*
-         * Update the current nodes info in its parent nodes generated files.
-         */
-        addCurNodeInfoInParentTempFile((YangNode) javaCodeGeneratorInfo, isMultiInstance, yangPlugin);
-    }
-
-    /**
-     * 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
-     * @throws IOException IO operations fails
-     */
-    public static void generateCodeOfAugmentableNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                                     YangPluginConfig yangPlugin)
-            throws IOException {
-        if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("invalid node for translation");
-        }
-
-        generateCodeOfNode(javaCodeGeneratorInfo, yangPlugin);
-
-        if (javaCodeGeneratorInfo instanceof YangJavaAugment) {
-            JavaQualifiedTypeInfo augmentedBuilderInfo = new JavaQualifiedTypeInfo();
-            JavaQualifiedTypeInfo augmentedBuilderClassInfo = new JavaQualifiedTypeInfo();
-            JavaQualifiedTypeInfo augmentedClassInfo = new JavaQualifiedTypeInfo();
-            JavaQualifiedTypeInfo augmentedImplInfo = new JavaQualifiedTypeInfo();
-            YangNode augmentedNode = ((YangJavaAugment) javaCodeGeneratorInfo).getAugmentedNode();
-            String name = null;
-            JavaFileInfo augmentedfileInfo = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo();
-            if (augmentedfileInfo.getJavaName() != null) {
-                name = getCapitalCase(augmentedfileInfo.getJavaName());
-                augmentedClassInfo.setClassInfo(name);
-                augmentedClassInfo.setPkgInfo(augmentedfileInfo.getPackage());
-            } else {
-                name = getCapitalCase(getCamelCase(augmentedNode.getName(), yangPlugin.getConflictResolver()));
-                augmentedClassInfo.setClassInfo(name);
-                augmentedClassInfo.setPkgInfo(getAugmentedNodesPackage(augmentedNode, yangPlugin));
-            }
-            augmentedBuilderInfo.setClassInfo(name + PERIOD + name + BUILDER);
-            augmentedBuilderInfo.setPkgInfo(augmentedClassInfo.getPkgInfo());
-            augmentedBuilderClassInfo.setClassInfo(getCapitalCase(DEFAULT) + name + PERIOD + name + BUILDER);
-            augmentedBuilderClassInfo.setPkgInfo(augmentedClassInfo.getPkgInfo());
-            augmentedImplInfo.setClassInfo(getCapitalCase(DEFAULT) + name);
-            augmentedImplInfo.setPkgInfo(augmentedBuilderInfo.getPkgInfo());
-            ((YangJavaAugment) javaCodeGeneratorInfo).addToExtendedClassInfo(augmentedBuilderInfo);
-            ((YangJavaAugment) javaCodeGeneratorInfo).addToExtendedClassInfo(augmentedImplInfo);
-            ((YangJavaAugment) javaCodeGeneratorInfo).addToExtendedClassInfo(augmentedBuilderClassInfo);
-            ((YangJavaAugment) javaCodeGeneratorInfo).addToExtendedClassInfo(augmentedClassInfo);
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().getJavaExtendsListHolder()
-                    .addToExtendsList(augmentedClassInfo, (YangNode) javaCodeGeneratorInfo);
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().getJavaExtendsListHolder()
-                    .addToExtendsList(augmentedBuilderInfo, (YangNode) javaCodeGeneratorInfo);
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().getJavaExtendsListHolder()
-                    .addToExtendsList(augmentedImplInfo, (YangNode) javaCodeGeneratorInfo);
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().getJavaExtendsListHolder()
-                    .addToExtendsList(augmentedBuilderClassInfo, (YangNode) javaCodeGeneratorInfo);
-
-        }
-
-        if (javaCodeGeneratorInfo instanceof YangCase) {
-            YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent();
-            JavaQualifiedTypeInfo parentsInfo = new JavaQualifiedTypeInfo();
-            String parentName = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName());
-            String parentPkg = ((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage();
-            parentsInfo.setClassInfo(parentName);
-            parentsInfo.setPkgInfo(parentPkg);
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles().getJavaExtendsListHolder()
-                    .addToExtendsList(parentsInfo, (YangNode) javaCodeGeneratorInfo);
-
-            javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().getBeanTempFiles()
-                    .addParentInfoInCurNodeTempFile((YangNode) javaCodeGeneratorInfo, yangPlugin);
-
-        }
-    }
-
-    private static String getAugmentedNodesPackage(YangNode node, YangPluginConfig yangPluginConfig) {
-
-        List<String> clsInfo = new ArrayList<>();
-        node = node.getParent();
-        while (node != null) {
-            if (!(node instanceof YangJavaModule)
-                    || !(node instanceof YangJavaSubModule)) {
-                if (node instanceof YangJavaAugment) {
-                    clsInfo.add(((YangJavaAugment) node).getAugmentClassName());
-                } else {
-                    clsInfo.add(getCamelCase(node.getName(), yangPluginConfig.getConflictResolver()));
-                }
-            }
-            if (node instanceof YangJavaModule
-                    || node instanceof YangJavaSubModule) {
-                break;
-            }
-            node = node.getParent();
-        }
-
-        StringBuilder pkg = new StringBuilder();
-        if (node instanceof YangJavaModule) {
-            YangJavaModule module = (YangJavaModule) node;
-            pkg.append(getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
-                    .getRevision().getRevDate(), yangPluginConfig.getConflictResolver()));
-        } else if (node instanceof YangJavaSubModule) {
-            YangJavaSubModule submodule = (YangJavaSubModule) node;
-            pkg.append(getRootPackage(submodule.getVersion(),
-                    submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
-                    submodule.getRevision().getRevDate(), yangPluginConfig.getConflictResolver()));
-        }
-        for (int i = 1; i <= clsInfo.size(); i++) {
-            pkg.append("." + clsInfo.get(clsInfo.size() - i));
-        }
-
-        return pkg.toString().toLowerCase();
-
-    }
-
-    /**
-     * Generates code for the current data model node.
-     *
-     * @param javaCodeGeneratorInfo YANG java file info node
-     * @param yangPluginConfig      YANG plugin config
-     * @throws IOException IO operations fails
-     */
-    public static void generateCodeOfNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                          YangPluginConfig yangPluginConfig)
-            throws IOException {
-        if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("invalid node for translation");
-        }
-        updatePackageInfo(javaCodeGeneratorInfo, yangPluginConfig);
-        generateTempFiles(javaCodeGeneratorInfo, yangPluginConfig);
-    }
-
-    /**
-     * 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
-     * @throws IOException IO operations fails
-     */
-    public static void generateCodeOfRootNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo,
-                                              YangPluginConfig yangPluginConfig, String rootPkg)
-            throws IOException {
-        if (!(javaCodeGeneratorInfo instanceof YangNode)) {
-            throw new TranslatorException("invalid node for translation");
-        }
-        updatePackageInfo(javaCodeGeneratorInfo, yangPluginConfig, rootPkg);
-
-        if (isRpcChildNodePresent((YangNode) javaCodeGeneratorInfo)) {
-            javaCodeGeneratorInfo.getJavaFileInfo().addGeneratedFileTypes(GENERATE_SERVICE_AND_MANAGER);
-        }
-
-        if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaModule) {
-            if (!((YangJavaModule) javaCodeGeneratorInfo)
-                    .isNotificationChildNodePresent((YangNode) javaCodeGeneratorInfo)) {
-                updateCodeGenInfoForEvent(javaCodeGeneratorInfo);
-            }
-        } else if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaSubModule) {
-            if (!((YangJavaSubModule) javaCodeGeneratorInfo)
-                    .isNotificationChildNodePresent((YangNode) javaCodeGeneratorInfo)) {
-                updateCodeGenInfoForEvent(javaCodeGeneratorInfo);
-            }
-        }
-
-        generateTempFiles(javaCodeGeneratorInfo, yangPluginConfig);
-    }
-
-    /*Updates java code generator info with events info.*/
-    private static void updateCodeGenInfoForEvent(JavaCodeGeneratorInfo javaCodeGeneratorInfo) {
-        javaCodeGeneratorInfo.getJavaFileInfo().addGeneratedFileTypes(GENERATE_EVENT_SUBJECT_CLASS);
-        javaCodeGeneratorInfo.getJavaFileInfo().addGeneratedFileTypes(GENERATE_EVENT_CLASS);
-        javaCodeGeneratorInfo.getJavaFileInfo().addGeneratedFileTypes(GENERATE_EVENT_LISTENER_INTERFACE);
-    }
-
-    /**
-     * Returns the node package string.
-     *
-     * @param curNode current java node whose package string needs to be set
-     * @return returns the root package string
-     */
-    public static String getCurNodePackage(YangNode curNode) {
-
-        String pkg;
-        if (!(curNode instanceof JavaFileInfoContainer)
-                || curNode.getParent() == null) {
-            throw new TranslatorException("missing parent node to get current node's package");
-        }
-
-        YangNode parentNode = DataModelUtils.getParentNodeInGenCode(curNode);
-        if (!(parentNode instanceof JavaFileInfoContainer)) {
-            throw new TranslatorException("missing parent java node to get current node's package");
-        }
-        JavaFileInfo parentJavaFileHandle = ((JavaFileInfoContainer) parentNode).getJavaFileInfo();
-        pkg = parentJavaFileHandle.getPackage() + PERIOD + parentJavaFileHandle.getJavaName();
-        return pkg.toLowerCase();
-    }
-
-    /**
-     * Returns true if root node contains any data node.
-     *
-     * @param node root YANG node
-     * @return true if root node contains any data node
-     */
-    public static boolean isManagerCodeGenRequired(YangNode node) {
-        YangLeavesHolder holder = (YangLeavesHolder) node;
-
-        if (holder.getListOfLeaf() != null && !holder.getListOfLeaf().isEmpty()) {
-            return true;
-        } else if (holder.getListOfLeafList() != null && !holder.getListOfLeafList().isEmpty()) {
-            return true;
-        }
-        node = node.getChild();
-        return node != null && !(node instanceof YangTypeDef) && !(node instanceof YangGrouping);
-    }
-
-    /**
-     * Return false if files are already present.
-     *
-     * @param info java file info
-     * @return false if files already present
-     */
-    public static boolean isGenerationOfCodeReq(JavaFileInfo info) {
-        File codeGenDir = new File(info.getBaseCodeGenPath()
-                + info.getPackageFilePath());
-        File[] files = codeGenDir.listFiles();
-        if (files.length >= 1) {
-            for (File file : files) {
-                if (file.getName().contentEquals(getCapitalCase(info.getJavaName() + MANAGER + ".java"))
-                        || file.getName().contentEquals(getCapitalCase(info.getJavaName() + SERVICE + ".java"))) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-}
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java
index 10cf879..6837aa4 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java
@@ -32,10 +32,11 @@
 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.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfRootNode;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.isManagerCodeGenRequired;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.isGenerationOfCodeReq;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfRootNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isManagerCodeGenRequired;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGenerationOfCodeReq;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
 
@@ -71,7 +72,7 @@
         super();
         setJavaFileInfo(new JavaFileInfo());
         setNotificationNodes(new ArrayList<>());
-        int gentype = GENERATE_SERVICE_AND_MANAGER;
+        int gentype = GENERATE_SERVICE_AND_MANAGER | GENERATE_INTERFACE_WITH_BUILDER;
         if (isNotificationChildNodePresent(this)) {
             gentype = GENERATE_SERVICE_AND_MANAGER | GENERATE_EVENT_SUBJECT_CLASS | GENERATE_EVENT_CLASS
                     | GENERATE_EVENT_LISTENER_INTERFACE;
@@ -158,7 +159,10 @@
 
         try {
             if (isManagerCodeGenRequired(this) && isGenerationOfCodeReq(getJavaFileInfo())) {
-                getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_SERVICE_AND_MANAGER, this);
+                getTempJavaCodeFragmentFiles()
+                        .generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+                getTempJavaCodeFragmentFiles()
+                        .generateJavaFile(GENERATE_SERVICE_AND_MANAGER, this);
             }
             searchAndDeleteTempDir(getJavaFileInfo().getBaseCodeGenPath() +
                     getJavaFileInfo().getPackageFilePath());
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotification.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotification.java
index 61eebfb..a56fefa 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotification.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotification.java
@@ -28,12 +28,13 @@
 import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
 
@@ -143,22 +144,23 @@
     /*Adds current notification info to the extends list so its parents service*/
     private void addNotificationToExtendsList() {
         YangNode parent = getParent();
-        JavaExtendsListHolder holder = ((TempJavaCodeFragmentFilesContainer) parent)
+        TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((TempJavaCodeFragmentFilesContainer) parent)
                 .getTempJavaCodeFragmentFiles()
-                .getServiceTempFiles().getJavaExtendsListHolder();
+                .getServiceTempFiles();
+        JavaExtendsListHolder holder = tempJavaServiceFragmentFiles.getJavaExtendsListHolder();
         JavaQualifiedTypeInfo event = new JavaQualifiedTypeInfo();
 
         String parentInfo = getCapitalCase(((JavaFileInfoContainer) parent)
                 .getJavaFileInfo().getJavaName());
         event.setClassInfo(parentInfo + EVENT_STRING);
         event.setPkgInfo(getJavaFileInfo().getPackage());
-        holder.addToExtendsList(event, parent);
+        holder.addToExtendsList(event, parent, tempJavaServiceFragmentFiles);
 
         JavaQualifiedTypeInfo eventListener = new JavaQualifiedTypeInfo();
 
         eventListener.setClassInfo(parentInfo + EVENT_LISTENER_STRING);
         eventListener.setPkgInfo(getJavaFileInfo().getPackage());
-        holder.addToExtendsList(eventListener, parent);
+        holder.addToExtendsList(eventListener, parent, tempJavaServiceFragmentFiles);
 
     }
 
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java
index ce9ed6e..4b18551 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java
@@ -27,7 +27,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
 
 /**
  * Represents output information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
index fe72d18..315f7e3 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
@@ -39,7 +39,7 @@
 import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
 import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.updatePackageInfo;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
 import static org.onosproject.yangutils.utils.UtilConstants.ACTIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.COMPONENT;
 import static org.onosproject.yangutils.utils.UtilConstants.DEACTIVATE;
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
index 835d781..f7176e2 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
@@ -34,10 +34,11 @@
 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.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfRootNode;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.isManagerCodeGenRequired;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.isGenerationOfCodeReq;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfRootNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isManagerCodeGenRequired;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGenerationOfCodeReq;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
 
@@ -72,7 +73,7 @@
     public YangJavaSubModule() {
         super();
         setJavaFileInfo(new JavaFileInfo());
-        int gentype = GENERATE_SERVICE_AND_MANAGER;
+        int gentype = GENERATE_SERVICE_AND_MANAGER | GENERATE_INTERFACE_WITH_BUILDER;
         if (isNotificationChildNodePresent(this)) {
             gentype = GENERATE_SERVICE_AND_MANAGER | GENERATE_EVENT_SUBJECT_CLASS | GENERATE_EVENT_CLASS
                     | GENERATE_EVENT_LISTENER_INTERFACE;
@@ -170,6 +171,8 @@
          */
         try {
             if (isManagerCodeGenRequired(this) && isGenerationOfCodeReq(getJavaFileInfo())) {
+
+                getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
                 getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_SERVICE_AND_MANAGER, this);
             }
             searchAndDeleteTempDir(getJavaFileInfo().getBaseCodeGenPath() +
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java
index 3d33f3d..e08ec19 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java
@@ -26,7 +26,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
 
 /**
  * Represents type define information extended to support java code generation.
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java
index cca3e4b..0dca9a7 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java
@@ -26,7 +26,7 @@
 import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
 
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
 
 /**
  * Represents union information extended to support java code generation.