[ONOS-4547, ONOS-4566, ONOS-4575, ONOS-4582, ONOS-4581, ONOS-4600,
ONOS-4598, ONOS-4607, ONOS-4610, ONOS-4611] Prefix addition from config
 and defect fixes.

Change-Id: Ieaab5d3e0fe9a1bfa24a2527eeec5435cf0a1b85
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
index ebcdc99..cb23994 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
@@ -271,9 +271,11 @@
      * @param yangType YANG type
      * @param isListAttr if the attribute is of list type
      * @param classInfo java import class info
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return java import package
      */
-    public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo) {
+    public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo,
+            YangToJavaNamingConflictUtil conflictResolver) {
 
         YangDataTypes type = yangType.getDataType();
 
@@ -293,7 +295,7 @@
                 case UINT64:
                     return JAVA_MATH;
                 case ENUMERATION:
-                    return getEnumsPackage(yangType);
+                    return getEnumsPackage(yangType, conflictResolver);
                 case DECIMAL64:
                 case BITS:
                 case BINARY:
@@ -305,12 +307,12 @@
                     //TODO:IDENTITYREF
                     break;
                 case UNION:
-                    return getUnionPackage(yangType);
+                    return getUnionPackage(yangType, conflictResolver);
                 case INSTANCE_IDENTIFIER:
                     //TODO:INSTANCE_IDENTIFIER
                     break;
                 case DERIVED:
-                    return getTypDefsPackage(yangType);
+                    return getTypDefsPackage(yangType, conflictResolver);
                 default:
                     throw new TranslatorException("given data type is not supported.");
             }
@@ -321,7 +323,7 @@
                 case STRING:
                     return JAVA_LANG;
                 case ENUMERATION:
-                    return getEnumsPackage(yangType);
+                    return getEnumsPackage(yangType, conflictResolver);
                 case DECIMAL64:
                 case BITS:
                 case BINARY:
@@ -335,12 +337,12 @@
                 case EMPTY:
                     return JAVA_LANG;
                 case UNION:
-                    return getUnionPackage(yangType);
+                    return getUnionPackage(yangType, conflictResolver);
                 case INSTANCE_IDENTIFIER:
                     //TODO:INSTANCE_IDENTIFIER
                     break;
                 case DERIVED:
-                    return getTypDefsPackage(yangType);
+                    return getTypDefsPackage(yangType, conflictResolver);
                 default:
                     return null;
             }
@@ -352,9 +354,10 @@
      * Returns java package for typedef node.
      *
      * @param type YANG type
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return java package for typedef node
      */
-    private static String getTypDefsPackage(YangType<?> type) {
+    private static String getTypDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
         Object var = type.getDataTypeExtendedInfo();
         if (!(var instanceof YangDerivedInfo)) {
             throw new TranslatorException("type should have been derived.");
@@ -366,7 +369,7 @@
 
         YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
         if (typedef.getJavaFileInfo().getPackage() == null) {
-            return getPackageFromParent(typedef.getParent());
+            return getPackageFromParent(typedef.getParent(), conflictResolver);
         }
         return typedef.getJavaFileInfo().getPackage();
     }
@@ -375,9 +378,10 @@
      * Returns java package for union node.
      *
      * @param type YANG type
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return java package for union node
      */
-    private static String getUnionPackage(YangType<?> type) {
+    private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
 
         if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
             throw new TranslatorException("type should have been union.");
@@ -385,7 +389,7 @@
 
         YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
         if (union.getJavaFileInfo().getPackage() == null) {
-            return getPackageFromParent(union.getParent());
+            return getPackageFromParent(union.getParent(), conflictResolver);
         }
         return union.getJavaFileInfo().getPackage();
     }
@@ -394,16 +398,17 @@
      * Returns YANG enumeration's java package.
      *
      * @param type YANG type
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return YANG enumeration's java package
      */
-    private static String getEnumsPackage(YangType<?> type) {
+    private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
 
         if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
             throw new TranslatorException("type should have been enumeration.");
         }
         YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
         if (enumeration.getJavaFileInfo().getPackage() == null) {
-            return getPackageFromParent(enumeration.getParent());
+            return getPackageFromParent(enumeration.getParent(), conflictResolver);
         }
         return enumeration.getJavaFileInfo().getPackage();
     }
@@ -412,9 +417,10 @@
      * Returns package from parent node.
      *
      * @param parent parent YANG node
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return java package from parent node
      */
-    private static String getPackageFromParent(YangNode parent) {
+    private static String getPackageFromParent(YangNode parent, YangToJavaNamingConflictUtil conflictResolver) {
         if (!(parent instanceof JavaFileInfoContainer)) {
             throw new TranslatorException("invalid child node is being processed.");
         }
@@ -423,13 +429,13 @@
             if (parent instanceof YangJavaModule) {
                 YangJavaModule module = (YangJavaModule) parent;
                 String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
-                        .getRevision().getRevDate());
+                        .getRevision().getRevDate(), conflictResolver);
                 return modulePkg + PERIOD + getCamelCase(module.getName(), null).toLowerCase();
             } else if (parent instanceof YangJavaSubModule) {
                 YangJavaSubModule submodule = (YangJavaSubModule) parent;
                 String subModulePkg = getRootPackage(submodule.getVersion(),
                         submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
-                        submodule.getRevision().getRevDate());
+                        submodule.getRevision().getRevDate(), conflictResolver);
                 return subModulePkg + PERIOD + getCamelCase(submodule.getName(), null).toLowerCase();
             }
         }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
index f0a16f6..dde4b03 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
@@ -53,6 +53,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
 import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
 import static org.onosproject.yangutils.utils.UtilConstants.SUBJECT;
@@ -241,24 +242,25 @@
                 curNode = curNode.getNextSibling();
             }
         }
-        if (yangName.contains(SERVICE)) {
+        if (yangName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
             return PUBLIC + SPACE + INTERFACE + SPACE + yangName + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
         }
-        return PUBLIC + SPACE + CLASS + SPACE + yangName + MANAGER + SPACE + IMPLEMENTS + SPACE + yangName
-                + SERVICE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+        return PUBLIC + SPACE + CLASS + SPACE + yangName + SPACE + IMPLEMENTS + SPACE
+                + yangName.substring(0, yangName.length() - 7) + SERVICE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
     }
 
     /* Provides class definition when RPC interface needs to extends any event.*/
     private static String getRpcInterfaceDefinitionWhenItExtends(String yangName,
             JavaExtendsListHolder holder) {
 
-        if (yangName.contains(SERVICE)) {
+        if (yangName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
             String[] strArray = yangName.split(SERVICE);
             return PUBLIC + SPACE + INTERFACE + SPACE + yangName + NEW_LINE + EIGHT_SPACE_INDENTATION
                     + EXTEND + SPACE + LISTENER_SERVICE + DIAMOND_OPEN_BRACKET + strArray[0] + EVENT_STRING + COMMA
                     + SPACE + strArray[0] + EVENT_LISTENER_STRING + DIAMOND_CLOSE_BRACKET + SPACE
                     + OPEN_CURLY_BRACKET + NEW_LINE;
         }
+        yangName = yangName.substring(0, yangName.length() - 7);
         return PUBLIC + SPACE + CLASS + SPACE + yangName + MANAGER + NEW_LINE + EIGHT_SPACE_INDENTATION
                 + EXTEND + SPACE + LISTENER_REG + DIAMOND_OPEN_BRACKET + yangName + EVENT_STRING + COMMA + SPACE
                 + yangName + EVENT_LISTENER_STRING + DIAMOND_CLOSE_BRACKET + NEW_LINE
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index ee7ad23..c082d26 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -97,6 +97,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
 import static org.onosproject.yangutils.utils.UtilConstants.INT;
 import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
+import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
@@ -306,7 +307,7 @@
 
         JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
 
-        String className = getCapitalCase(javaFileInfo.getJavaName());
+        String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
 
         initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
 
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
index 7e31b62..707d947 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -72,14 +72,13 @@
 import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.IMMEDIATE;
 import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
-import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
 import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_ANNOTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
@@ -317,7 +316,7 @@
         if (type == GENERATE_EVENT_CLASS
                 || type == GENERATE_EVENT_LISTENER_INTERFACE
                 || type == GENERATE_EVENT_SUBJECT_CLASS) {
-            pkgString = parsePackageString(path + PERIOD + name, importsList);
+            pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
         } else {
             pkgString = parsePackageString(path, importsList);
         }
@@ -454,8 +453,8 @@
 
         YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
         if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
-            if (!fileName.contains(SERVICE)) {
-                insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName + MANAGER, false, pluginConfig));
+            if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
+                insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
                 insertDataIntoJavaFile(file, addComponentString());
             } else {
                 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
index 10ec3c2..a4e9cfa 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
@@ -75,16 +75,18 @@
      * @param version YANG version
      * @param nameSpace name space of the module
      * @param revision revision of the module defined
-     * @return returns the root package string
+     * @param conflictResolver object of YANG to java naming conflict util
+     * @return the root package string
      */
-    public static String getRootPackage(byte version, String nameSpace, String revision) {
+    public static String getRootPackage(byte version, String nameSpace, String revision,
+            YangToJavaNamingConflictUtil conflictResolver) {
 
         String pkg;
         pkg = DEFAULT_BASE_PKG;
         pkg = pkg + PERIOD;
         pkg = pkg + getYangVersion(version);
         pkg = pkg + PERIOD;
-        pkg = pkg + getPkgFromNameSpace(nameSpace);
+        pkg = pkg + getPkgFromNameSpace(nameSpace, conflictResolver);
         pkg = pkg + PERIOD;
         pkg = pkg + getYangRevisionStr(revision);
 
@@ -144,9 +146,10 @@
      * Returns package name from name space.
      *
      * @param nameSpace name space of YANG module
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return java package name as per java rules
      */
-    private static String getPkgFromNameSpace(String nameSpace) {
+    private static String getPkgFromNameSpace(String nameSpace, YangToJavaNamingConflictUtil conflictResolver) {
 
         ArrayList<String> pkgArr = new ArrayList<String>();
         nameSpace = nameSpace.replace(QUOTES, EMPTY_STRING);
@@ -156,7 +159,7 @@
         for (String nameSpaceString : nameSpaceArr) {
             pkgArr.add(nameSpaceString);
         }
-        return getPkgFrmArr(pkgArr);
+        return getPkgFrmArr(pkgArr, conflictResolver);
     }
 
     /**
@@ -194,17 +197,19 @@
      * Returns the package string.
      *
      * @param pkgArr package array
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return package string
      */
-    private static String getPkgFrmArr(ArrayList<String> pkgArr) {
+    private static String getPkgFrmArr(ArrayList<String> pkgArr, YangToJavaNamingConflictUtil conflictResolver) {
 
         String pkg = EMPTY_STRING;
         int size = pkgArr.size();
         int i = 0;
         for (String member : pkgArr) {
-            boolean presenceOfKeyword = JAVA_KEY_WORDS.contains(member);
+            boolean presenceOfKeyword = JAVA_KEY_WORDS.contains(member.toLowerCase());
             if (presenceOfKeyword || member.matches(REGEX_FOR_FIRST_DIGIT)) {
-                member = YANG_AUTO_PREFIX + member;
+                String prefix = getPrefixForIdentifier(conflictResolver);
+                member = prefix + member;
             }
             pkg = pkg + member;
             if (i != size - 1) {
@@ -216,20 +221,40 @@
     }
 
     /**
-     * Returns package sub name from YANG identifier name.
+     * Prefix for adding with identifier and namespace, when it is a java keyword or starting with digits.
      *
-     * @param name YANG identifier name
-     * @return java package sub name as per java rules
+     * @param conflictResolver object of YANG to java naming conflict util
+     * @return prefix which needs to be added
      */
-    public static String getSubPkgFromName(String name) {
+    public static String getPrefixForIdentifier(YangToJavaNamingConflictUtil conflictResolver) {
 
-        ArrayList<String> pkgArr = new ArrayList<String>();
-        String[] nameArr = name.split(COLAN);
-
-        for (String nameString : nameArr) {
-            pkgArr.add(nameString);
+        String prefixForIdentifier = null;
+        if (conflictResolver != null) {
+            prefixForIdentifier = conflictResolver.getPrefixForIdentifier();
         }
-        return getPkgFrmArr(pkgArr);
+        if (prefixForIdentifier != null) {
+            prefixForIdentifier = prefixForIdentifier.replaceAll(REGEX_WITH_ALL_SPECIAL_CHAR, COLAN);
+            String[] strArray = prefixForIdentifier.split(COLAN);
+            try {
+                if (strArray[0].isEmpty()) {
+                    List<String> stringArrangement = new ArrayList<String>();
+                    for (int i = 1; i < strArray.length; i++) {
+                        stringArrangement.add(strArray[i]);
+                    }
+                    strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
+                }
+                prefixForIdentifier = strArray[0];
+                for (int j = 1; j < strArray.length; j++) {
+                    prefixForIdentifier = prefixForIdentifier + strArray[j].substring(0, 1).toUpperCase() +
+                            strArray[j].substring(1);
+                }
+            } catch (ArrayIndexOutOfBoundsException outOfBoundsException) {
+                throw new TranslatorException("The given prefix in pom.xml is invalid.");
+            }
+        } else {
+            prefixForIdentifier = YANG_AUTO_PREFIX;
+        }
+        return prefixForIdentifier;
     }
 
     /**
@@ -267,16 +292,18 @@
             }
             strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
         }
-        return upperCaseConflictResolver(strArray);
+        return upperCaseConflictResolver(strArray, conflictResolver);
     }
 
     /**
-     * Resolves the conflict when input has uppercase.
+     * Resolves the conflict when input has upper case.
      *
-     * @param stringArray containing strings for uppercase conflict resolver
+     * @param stringArray containing strings for upper case conflict resolver
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return camel cased string
      */
-    private static String upperCaseConflictResolver(String[] stringArray) {
+    private static String upperCaseConflictResolver(String[] stringArray,
+            YangToJavaNamingConflictUtil conflictResolver) {
 
         for (int l = 0; l < stringArray.length; l++) {
             String[] upperCaseSplitArray = stringArray[l].split(REGEX_WITH_UPPERCASE);
@@ -317,7 +344,7 @@
             }
         }
         stringArray = result.toArray(new String[result.size()]);
-        return applyCamelCaseRule(stringArray);
+        return applyCamelCaseRule(stringArray, conflictResolver);
     }
 
     /**
@@ -325,9 +352,10 @@
      * the letter next to a number in an array.
      *
      * @param stringArray containing strings for camel case separation
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return camel case rule checked string
      */
-    private static String applyCamelCaseRule(String[] stringArray) {
+    private static String applyCamelCaseRule(String[] stringArray, YangToJavaNamingConflictUtil conflictResolver) {
 
         String ruleChecker = stringArray[0].toLowerCase();
         int i;
@@ -359,23 +387,25 @@
                 ruleChecker = ruleChecker + stringArray[i].substring(0, 1).toUpperCase() + stringArray[i].substring(1);
             }
         }
-        String ruleCheckerWithPrefix = addPrefix(ruleChecker);
+        String ruleCheckerWithPrefix = addPrefix(ruleChecker, conflictResolver);
         return restrictConsecutiveCapitalCase(ruleCheckerWithPrefix);
     }
 
     /**
-     * Adds prefix YANG auto prefix if the string begins with digit or is a java key word.
+     * Adds prefix, if the string begins with digit or is a java key word.
      *
      * @param camelCasePrefix string for adding prefix
+     * @param conflictResolver object of YANG to java naming conflict util
      * @return prefixed camel case string
      */
-    private static String addPrefix(String camelCasePrefix) {
+    private static String addPrefix(String camelCasePrefix, YangToJavaNamingConflictUtil conflictResolver) {
 
+        String prefix = getPrefixForIdentifier(conflictResolver);
         if (camelCasePrefix.matches(REGEX_FOR_FIRST_DIGIT)) {
-            camelCasePrefix = YANG_AUTO_PREFIX + camelCasePrefix;
+            camelCasePrefix = prefix + camelCasePrefix;
         }
-        if (JAVA_KEY_WORDS.contains(camelCasePrefix.toLowerCase())) {
-            camelCasePrefix = YANG_AUTO_PREFIX + camelCasePrefix.substring(0, 1).toUpperCase()
+        if (JAVA_KEY_WORDS.contains(camelCasePrefix)) {
+            camelCasePrefix = prefix + camelCasePrefix.substring(0, 1).toUpperCase()
                     + camelCasePrefix.substring(1);
         }
         return camelCasePrefix;
@@ -444,13 +474,21 @@
      */
     public static String getEnumJavaAttribute(String name) {
 
-        String[] strArray = name.split(HYPHEN);
+        name = name.replaceAll(REGEX_WITH_ALL_SPECIAL_CHAR, COLAN);
+        String[] strArray = name.split(COLAN);
         String output = EMPTY_STRING;
+        if (strArray[0].isEmpty()) {
+            List<String> stringArrangement = new ArrayList<String>();
+            for (int i = 1; i < strArray.length; i++) {
+                stringArrangement.add(strArray[i]);
+            }
+            strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
+        }
         for (int i = 0; i < strArray.length; i++) {
-            output = output + strArray[i];
-            if (i > 0 && i < strArray.length - 1) {
+            if (i > 0 && i < strArray.length) {
                 output = output + UNDER_SCORE;
             }
+            output = output + strArray[i];
         }
         return output;
     }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangToJavaNamingConflictUtil.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangToJavaNamingConflictUtil.java
index bfb0d05..4f701b6 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangToJavaNamingConflictUtil.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangToJavaNamingConflictUtil.java
@@ -37,6 +37,11 @@
     private static String replacementForHyphenInIdentifier;
 
     /**
+     * Contains the prefix value for adding with the identifier.
+     */
+    private static String prefixForIdentifier;
+
+    /**
      * Creates an object for YANG to java naming conflict util.
      */
     public YangToJavaNamingConflictUtil() {
@@ -95,4 +100,22 @@
     public String getReplacementForUnderscore() {
         return replacementForUnderscoreInIdentifier;
     }
+
+    /**
+     * Sets the prefix value for adding with the identifier.
+     *
+     * @param prefix prefix for identifier
+     */
+    public void setPrefixForIdentifier(String prefix) {
+        prefixForIdentifier = prefix;
+    }
+
+    /**
+     * Returns the prefix for identifier.
+     *
+     * @return prefix for identifier
+     */
+    public String getPrefixForIdentifier() {
+        return prefixForIdentifier;
+    }
 }