[ONOS-5413]From string and to string method generation for YTB to handle in yms

Change-Id: Ib066598ca40ff642113481617369d82a6d94620a
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/BitsJavaInfoHandler.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/BitsJavaInfoHandler.java
new file mode 100644
index 0000000..b0ce250
--- /dev/null
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/BitsJavaInfoHandler.java
@@ -0,0 +1,148 @@
+/*
+ * 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.utils;
+
+import org.onosproject.yangutils.datamodel.YangBit;
+import org.onosproject.yangutils.datamodel.YangBits;
+import org.onosproject.yangutils.datamodel.YangEnum;
+import org.onosproject.yangutils.datamodel.YangEnumeration;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumerationTranslator;
+
+import java.io.IOException;
+import java.util.Map;
+
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
+
+/**
+ * Represents bits YANG type info.
+ */
+public class BitsJavaInfoHandler {
+
+    private JavaAttributeInfo attr;
+    private YangType<?> yangType;
+
+    /**
+     * Creates an instance of bits java info handler.
+     *
+     * @param attr     java attribute
+     * @param yangType YANG type
+     */
+    public BitsJavaInfoHandler(JavaAttributeInfo attr, YangType<?> yangType) {
+        this.attr = attr;
+        this.yangType = yangType;
+    }
+
+    /**
+     * Returns bits type enum file.
+     *
+     * @param attr    attribute
+     * @param type    data type
+     * @param curNode current node
+     * @throws IOException when fails to do IO operations
+     */
+    static void generateBitsFile(JavaAttributeInfo attr, YangType type,
+                                 YangNode curNode) throws IOException {
+        JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) curNode)
+                .getJavaFileInfo();
+        String className = fileInfo.getJavaName() +
+                getCapitalCase(attr.getAttributeName());
+        JavaFileInfoTranslator attrInfo = new JavaFileInfoTranslator();
+        attrInfo.setJavaName(className);
+        attrInfo.setPackage(fileInfo.getPackage());
+        attrInfo.setBaseCodeGenPath(fileInfo.getBaseCodeGenPath());
+        attrInfo.setGeneratedFileTypes(GENERATE_ENUM_CLASS);
+        attrInfo.setPackageFilePath(fileInfo.getPackageFilePath());
+        attrInfo.setPluginConfig(fileInfo.getPluginConfig());
+        TempJavaCodeFragmentFiles codeFile = new TempJavaCodeFragmentFiles(attrInfo);
+        YangJavaEnumerationTranslator enumeration = new YangJavaEnumerationTranslator() {
+            @Override
+            public String getJavaPackage() {
+                return attr.getImportInfo().getPkgInfo();
+            }
+
+            @Override
+            public String getJavaClassNameOrBuiltInType() {
+                return className;
+            }
+
+            @Override
+            public String getJavaAttributeName() {
+                return className;
+            }
+        };
+
+        enumeration.setName(className);
+        enumeration.setJavaFileInfo(attrInfo);
+        enumeration.setTempJavaCodeFragmentFiles(codeFile);
+        YangBits yangBits = (YangBits) type.getDataTypeExtendedInfo();
+        Integer key;
+        YangBit bit;
+        String bitName;
+        for (Map.Entry<Integer, YangBit> entry : yangBits.getBitPositionMap()
+                .entrySet()) {
+            key = entry.getKey();
+            bit = entry.getValue();
+            if (bit != null) {
+                bitName = bit.getBitName();
+                createAndAddEnum(bitName, key, enumeration);
+            }
+        }
+
+        codeFile.getEnumTempFiles()
+                .addEnumAttributeToTempFiles(enumeration, fileInfo.getPluginConfig());
+        codeFile.getEnumTempFiles().setEnumClass(false);
+        codeFile.generateJavaFile(GENERATE_ENUM_CLASS, enumeration);
+    }
+
+    private static void createAndAddEnum(String name, int value,
+                                         YangEnumeration enumeration) {
+        YangEnum yangEnum = new YangEnum();
+        yangEnum.setNamedValue(name);
+        yangEnum.setValue(value);
+        try {
+            enumeration.addEnumInfo(yangEnum);
+        } catch (DataModelException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Returns java attribute for bits.
+     *
+     * @return java attribute for bits
+     */
+    public JavaAttributeInfo getAttr() {
+        return attr;
+    }
+
+    /**
+     * Returns YANG type for bits.
+     *
+     * @return yang type for bits
+     */
+    public YangType<?> getYangType() {
+        return yangType;
+    }
+}
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
index 7f1cfce..4c711bf 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
@@ -164,7 +164,8 @@
      * @return enum file class definition
      */
     private static String getEnumClassDefinition(String yangName) {
-        return getDefaultDefinition(ENUM, yangName, PUBLIC);
+        return trimAtLast(getDefaultDefinition(ENUM, yangName, PUBLIC),
+                          NEW_LINE);
     }
 
     /**
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
index 5671dd7..916dd42 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
@@ -36,6 +36,7 @@
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
 import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
+import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
 import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
 import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
@@ -56,6 +57,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.NEW;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
@@ -66,6 +68,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
 import static org.onosproject.yangutils.utils.UtilConstants.SET;
+import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
@@ -233,8 +236,8 @@
     /**
      * Returns string for enum's attribute for enum class.
      *
-     * @param name   name of attribute
-     * @param value  value of the enum
+     * @param name  name of attribute
+     * @param value value of the enum
      * @return string for enum's attribute
      */
     public static String generateEnumAttributeStringWithSchemaName(
@@ -320,7 +323,7 @@
         return getJavaAttributeDefinition(null, INT, className,
                                           false, PRIVATE, null) +
                 getJavaAttributeDefinition(null, STRING_DATA_TYPE, SCHEMA_NAME,
-                                           false, PRIVATE, null);
+                                           false, PRIVATE, null) + NEW_LINE;
     }
 
     /**
@@ -417,9 +420,9 @@
     private static String getTypeConflictAttributeStrings(String modifier,
                                                           String attr1,
                                                           String att2) {
-        return NEW_LINE + FOUR_SPACE_INDENTATION + modifier + SPACE +
+        return FOUR_SPACE_INDENTATION + modifier + SPACE +
                 attr1 + FOUR_SPACE_INDENTATION + modifier +
-                SPACE + att2;
+                SPACE + att2 + NEW_LINE;
     }
 
     /**
@@ -483,4 +486,19 @@
         return "        this.yangAugmentedInfoMap = builderObject" +
                 ".yangAugmentedInfoMap();\n";
     }
+
+    /**
+     * Returns set value parameter for union class.
+     *
+     * @return set value parameter for union class.
+     */
+    static String getSetValueParaForUnionClass() {
+        String[] array = {NEW_LINE, SEMI_COLON};
+        return new StringBuilder().append(trimAtLast(
+                getJavaAttributeDefinition(null, BIT_SET, SET_VALUE_PARA,
+                                           false, PRIVATE, null), array))
+                .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+                .append(SPACE).append(BIT_SET).append(OPEN_CLOSE_BRACKET_STRING)
+                .append(signatureClose()).toString();
+    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index a9ce9b4..979df3a 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -18,8 +18,6 @@
 
 import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
 import org.onosproject.yangutils.datamodel.YangAugmentableNode;
-import org.onosproject.yangutils.datamodel.YangBit;
-import org.onosproject.yangutils.datamodel.YangBits;
 import org.onosproject.yangutils.datamodel.YangCase;
 import org.onosproject.yangutils.datamodel.YangChoice;
 import org.onosproject.yangutils.datamodel.YangDerivedInfo;
@@ -28,29 +26,27 @@
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangType;
 import org.onosproject.yangutils.datamodel.YangTypeDef;
+import org.onosproject.yangutils.datamodel.YangUnion;
 import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yangutils.translator.tojava.JavaImportData;
 import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
-import org.onosproject.yangutils.utils.UtilConstants;
 import org.onosproject.yangutils.utils.io.YangPluginConfig;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 import static java.util.Collections.sort;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
 import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
 import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
@@ -86,13 +82,9 @@
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
 import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
 import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
 import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
-import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
-import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
 import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
@@ -100,16 +92,19 @@
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getYangAugmentedMapObjectForConstruct;
+import static org.onosproject.yangutils.translator.tojava.utils.BitsJavaInfoHandler.generateBitsFile;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
@@ -127,6 +122,7 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapImpl;
@@ -135,15 +131,10 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.processSubtreeFilteringInterface;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGettersForValueAndSelectLeaf;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOmitNullValueString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOperationAttributesGetters;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
 import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
 import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
@@ -155,52 +146,33 @@
 import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
 import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
 import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
-import static org.onosproject.yangutils.utils.UtilConstants.ADD;
-import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
 import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.GET;
-import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
-import static org.onosproject.yangutils.utils.UtilConstants.IF;
 import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.INT;
 import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
 import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
 import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
 import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
 import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
-import static org.onosproject.yangutils.utils.UtilConstants.TO;
-import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
 import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
@@ -330,7 +302,6 @@
 
         JavaFileInfoTranslator fileInfo =
                 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-        YangPluginConfig pluginConfig = fileInfo.getPluginConfig();
 
         boolean leavesPresent;
         YangLeavesHolder leavesHolder;
@@ -387,7 +358,7 @@
         //Add build method to builder interface file.
         methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
                             .getTempJavaCodeFragmentFiles()
-                            .addBuildMethodForInterface(pluginConfig));
+                            .addBuildMethodForInterface());
 
         //Add getters and setters in builder interface.
         for (String method : methods) {
@@ -413,7 +384,6 @@
 
         JavaFileInfoTranslator fileInfo =
                 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-        YangPluginConfig config = fileInfo.getPluginConfig();
 
         boolean leavesPresent;
         YangLeavesHolder leavesHolder;
@@ -493,8 +463,7 @@
         methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
                             .getTempJavaCodeFragmentFiles()
                             .addBuildMethodImpl());
-        methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER
-        ));
+        methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
 
         //Add methods in builder class.
         for (String method : methods) {
@@ -614,8 +583,7 @@
             throw new IOException(getErrorMsg(className, IMPL_CLASS));
         }
 
-        methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT
-        ));
+        methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
 
         methods.add(builderMethod(className));
         if (leavesPresent) {
@@ -693,6 +661,11 @@
             methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
                     TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
                                 getToStringMethodClose());
+
+            for (BitsJavaInfoHandler handler : getBeanFiles(curNode)
+                    .getBitsHandler()) {
+                generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
+            }
         } catch (IOException e) {
             throw new IOException(getErrorMsg(className, IMPL_CLASS));
         }
@@ -713,8 +686,6 @@
 
         JavaFileInfoTranslator fileInfo =
                 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-        YangPluginConfig config = fileInfo.getPluginConfig();
-
         // import
         String className = getCapitalCase(fileInfo.getJavaName());
         String path = fileInfo.getBaseCodeGenPath() +
@@ -738,8 +709,7 @@
         }
 
         //Default constructor.
-        methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING
-        ));
+        methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
 
         try {
 
@@ -768,7 +738,7 @@
                                                       getTypeFiles(curNode), path)));
 
             // To string method.
-            addTypedefToString(curNode, methods, path, type);
+            addTypedefToString(curNode, methods, path);
 
             JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
 
@@ -810,65 +780,21 @@
      * @param curNode current node
      * @param methods list of methods string
      * @param path    file path
-     * @param type    YANG type
      * @throws IOException a violation in IO rule
      */
     private static void addTypedefToString(YangNode curNode,
-                                           List<String> methods, String path,
-                                           YangType type) throws IOException {
-        String methodSig = methodSignature(TO + STRING_DATA_TYPE, EMPTY_STRING,
-                                           PUBLIC, null, STRING_DATA_TYPE, null,
-                                           CLASS_TYPE);
-        String methodClose = signatureClose() + methodClose(FOUR_SPACE);
-        String openClose = brackets(OPEN_CLOSE_BRACKET, null,
-                                    null);
+                                           List<String> methods, String path)
+            throws IOException {
         //To string method.
-        if (type.getDataType() == BINARY) {
-            JavaQualifiedTypeInfoTranslator typeInfo =
-                    getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase
-                            (UtilConstants.BINARY));
-
-            JavaAttributeInfo attr =
-                    getAttributeInfoForTheData(typeInfo,
-                                               UtilConstants.BINARY,
-                                               null, false, false);
-            String attributeName = attr.getAttributeName();
-            String bitsToStringMethod = getOverRideString() + methodSig +
-                    getReturnString(BASE64, EIGHT_SPACE_INDENTATION) +
-                    PERIOD + GET_ENCODER + brackets(OPEN_CLOSE_BRACKET, null,
-                                                    null) +
-                    PERIOD + ENCODE_TO_STRING + brackets(
-                    OPEN_CLOSE_BRACKET_WITH_VALUE, attributeName, null) +
-                    methodClose;
-            methods.add(bitsToStringMethod);
-        } else if (type.getDataType() == BITS) {
-            JavaQualifiedTypeInfoTranslator typeInfo =
-                    getQualifiedTypeInfoOfCurNode(curNode,
-                                                  getCapitalCase(UtilConstants.BITS));
-
-            JavaAttributeInfo attr =
-                    getAttributeInfoForTheData(typeInfo,
-                                               UtilConstants.BITS,
-                                               null, false, false);
-            String attributeName = attr.getAttributeName();
-            String bitsToStringMethod =
-                    getOverRideString() + methodSig +
-                            getToStringForBits(attr.getAttributeName(),
-                                                   (YangBits) type.getDataTypeExtendedInfo()) +
-                            getReturnString(attributeName, EIGHT_SPACE_INDENTATION) +
-                            PERIOD + TO + STRING_DATA_TYPE + openClose +
-                            methodClose;
-            methods.add(bitsToStringMethod);
-        } else {
-            methods.add(getToStringMethodOpen() +
-                                getDataFromTempFileHandle(
-                                        TO_STRING_IMPL_MASK,
-                                        ((TempJavaCodeFragmentFilesContainer)
-                                                curNode)
-                                                .getTempJavaCodeFragmentFiles()
-                                                .getTypeTempFiles(), path) +
-                                getToStringMethodClose());
+        methods.add(getToStringMethodOpen() +
+                            getDataFromTempFileHandle(
+                                    TO_STRING_IMPL_MASK, getTypeFiles(curNode), path) +
+                            getToStringMethodClose());
+        for (BitsJavaInfoHandler handler : getTypeFiles(curNode)
+                .getBitsHandler()) {
+            generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
         }
+
     }
 
     /**
@@ -886,7 +812,6 @@
 
         JavaFileInfoTranslator fileInfo =
                 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-        YangPluginConfig config = fileInfo.getPluginConfig();
 
         String className = getCapitalCase(fileInfo.getJavaName());
         String path = fileInfo.getBaseCodeGenPath() +
@@ -926,9 +851,11 @@
             shortConflict = shortAttr.isShortConflict();
         }
         if (longConflict) {
-            imports.add(tempFiles.getJavaImportData()
-                                .getBigIntegerImport());
-            sort(imports);
+            String impt = tempFiles.getJavaImportData().getBigIntegerImport();
+            if (!imports.contains(impt)) {
+                imports.add(impt);
+                sort(imports);
+            }
         }
 
         initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
@@ -945,8 +872,7 @@
         }
 
         //Default constructor.
-        methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING
-        ));
+        methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
 
         try {
 
@@ -977,11 +903,13 @@
                                     path)));
 
             //To string method.
-            methods.add(getToStringMethodOpen() + getOmitNullValueString() +
-                                getDataFromTempFileHandle(
-                                        TO_STRING_IMPL_MASK,
-                                        getTypeFiles(curNode), path) +
-                                getToStringMethodClose());
+            methods.add(getUnionToStringMethod(
+                    ((YangUnion) curNode).getTypeList()));
+
+            for (BitsJavaInfoHandler handler : getTypeFiles(curNode)
+                    .getBitsHandler()) {
+                generateBitsFile(handler.getAttr(), handler.getYangType(), curNode);
+            }
 
             //From string method.
             methods.add(getFromStringMethodSignature(className) +
@@ -1054,6 +982,7 @@
 
         insertDataIntoJavaFile(file, getDataFromTempFileHandle(
                 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
+        insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
     }
 
     /**
@@ -1061,23 +990,31 @@
      *
      * @param file    generated file
      * @param curNode current YANG node
+     * @param imports import list
      * @return class file for type enum
      * @throws IOException when fails to generate class file
      */
-    public static File generateEnumClassFile(File file, YangNode curNode)
+    public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
             throws IOException {
 
         JavaFileInfoTranslator fileInfo =
                 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-        YangPluginConfig config = fileInfo.getPluginConfig();
 
         String className = fileInfo.getJavaName();
         String path = fileInfo.getBaseCodeGenPath() +
                 fileInfo.getPackageFilePath();
+        TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
+                curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
+        JavaImportData data = enumFile.getJavaImportData();
+        if (!enumFile.isEnumClass()) {
+            imports.add(data.getImportForToBitSet());
+            imports.add(data.getImportForPattern());
+            imports.add(data.getImportForToString());
+
+        }
 
         initiateJavaFileGeneration(file, getCapitalCase(className),
-                                   GENERATE_ENUM_CLASS, null, path
-        );
+                                   GENERATE_ENUM_CLASS, imports, path);
 
         //Add attribute strings.
         try {
@@ -1092,6 +1029,7 @@
                                               ENUM_CLASS));
         }
 
+        insertDataIntoJavaFile(file, NEW_LINE);
         // Add an attribute to get the enum's values.
         insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
 
@@ -1113,24 +1051,17 @@
         insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
                                                 null) +
                 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
+
         insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, SCHEMA_NAME, false,
                                                 null) +
                 getGetter(STRING_DATA_TYPE, SCHEMA_NAME, GENERATE_ENUM_CLASS) +
                 NEW_LINE);
 
-        try {
-            insertDataIntoJavaFile(file,
-                                   getFromStringMethodSignature(
-                                           getCapitalCase(className)) +
-                                           getDataFromTempFileHandle(
-                                                   FROM_STRING_IMPL_MASK,
-                                                   ((TempJavaCodeFragmentFilesContainer) curNode)
-                                                           .getTempJavaCodeFragmentFiles()
-                                                           .getEnumTempFiles(),
-                                                   path) + getFromStringMethodClose());
-        } catch (IOException e) {
-            throw new IOException(getErrorMsg(getCapitalCase(className),
-                                              ENUM_CLASS));
+        if (!enumFile.isEnumClass()) {
+            insertDataIntoJavaFile(file, getBitSetEnumClassFromString
+                    (getCapitalCase(className)));
+            insertDataIntoJavaFile(file, getBitSetEnumClassToString(
+                    getCapitalCase(className), (YangEnumeration) curNode));
         }
 
         insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
@@ -1174,13 +1105,11 @@
             if (isGetSetOfRootNodeRequired(curNode)) {
                 //Getter methods.
                 methods.add(getGetterString(rootAttribute,
-                                            GENERATE_SERVICE_AND_MANAGER
-                ) +
+                                            GENERATE_SERVICE_AND_MANAGER) +
                                     NEW_LINE);
                 // Setter methods.
                 methods.add(getSetterString(rootAttribute, className,
-                                            GENERATE_SERVICE_AND_MANAGER
-                ) +
+                                            GENERATE_SERVICE_AND_MANAGER) +
                                     NEW_LINE);
             }
 
@@ -1341,42 +1270,7 @@
      */
     private static boolean leavesPresent(YangLeavesHolder holder) {
         return holder.getListOfLeaf() != null &&
-                !holder.getListOfLeaf().isEmpty() ||
-                holder.getListOfLeafList() != null &&
-                        !holder.getListOfLeafList().isEmpty();
+                !holder.getListOfLeaf().isEmpty();
     }
 
-    /**
-     * Generates toString code for bits.
-     *
-     * @param attributeName generated variable for bits
-     * @param yangBits parsed yang bits
-     * @return generated toString code for bits.
-     */
-    private static String getToStringForBits(String attributeName, YangBits yangBits) {
-        String lines = EIGHT_SPACE_INDENTATION + STRING_DATA_TYPE + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
-                QUOTES + QUOTES + SEMI_COLON + NEW_LINE;
-        Integer key;
-        YangBit bit;
-        String bitName;
-        for (Map.Entry<Integer, YangBit> entry : yangBits.getBitPositionMap().entrySet()) {
-            key = entry.getKey();
-            bit = entry.getValue();
-            if (bit == null) {
-                return null;
-            }
-
-            bitName = bit.getBitName();
-            // Add if condition to check bit position
-            lines += EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + attributeName +
-                    PERIOD + GET + OPEN_PARENTHESIS + key + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS +
-                    SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + TMP_VAL + SPACE +
-                    ADD + EQUAL + SPACE + QUOTES + bitName + SPACE + QUOTES + SEMI_COLON + NEW_LINE +
-                    EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
-        }
-
-        lines += EIGHT_SPACE_INDENTATION + TMP_VAL + PERIOD + TRIM_STRING + EMPTY_PARAMETER_FUNCTION_CALL +
-                SEMI_COLON + NEW_LINE;
-        return lines;
-    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index c43e41d..a35ea24 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -17,12 +17,11 @@
 package org.onosproject.yangutils.translator.tojava.utils;
 
 import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangBit;
-import org.onosproject.yangutils.datamodel.YangBits;
 import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
 import org.onosproject.yangutils.datamodel.YangEnum;
 import org.onosproject.yangutils.datamodel.YangEnumeration;
 import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangType;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
@@ -31,14 +30,15 @@
 
 import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 
 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.GeneratedJavaFileType.GENERATE_UNION_CLASS;
 import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
 import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
 import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
 import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
+import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentMapTypeString;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
@@ -54,13 +54,27 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
 import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.INTERFACE_TYPE;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBitSetAttr;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCatchSubString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLesserThanCondition;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getListAttribute;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getMoreObjectAttr;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewLineAndSpace;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOmitNullValueString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getParseFromStringMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getPatternQuoteString;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getQuotedString;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnOfSubString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSetValueParaCondition;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTrySubString;
+import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getValueLeafSetString;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifAndAndCondition;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
 import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
@@ -77,6 +91,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
 import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yangutils.utils.UtilConstants.BITS;
+import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
 import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
@@ -93,8 +109,6 @@
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
 import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
-import static org.onosproject.yangutils.utils.UtilConstants.ELSE_IF;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
@@ -111,10 +125,10 @@
 import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.HASH;
 import static org.onosproject.yangutils.utils.UtilConstants.HASH_CODE_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.HELPER;
 import static org.onosproject.yangutils.utils.UtilConstants.IF;
 import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
 import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_LEAF;
 import static org.onosproject.yangutils.utils.UtilConstants.LEAF;
 import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
@@ -124,27 +138,25 @@
 import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yangutils.utils.UtilConstants.NOT;
 import static org.onosproject.yangutils.utils.UtilConstants.NULL;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJ;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.OF;
 import static org.onosproject.yangutils.utils.UtilConstants.ONE;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
 import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
 import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
-import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
-import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
 import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
 import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTE_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.REPLACE_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
 import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
 import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
@@ -152,7 +164,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
 import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
 import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.SINGLE_QUOTE;
+import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
 import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
 import static org.onosproject.yangutils.utils.UtilConstants.SPLIT_STRING;
@@ -163,19 +175,17 @@
 import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
 import static org.onosproject.yangutils.utils.UtilConstants.THIS;
 import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
-import static org.onosproject.yangutils.utils.UtilConstants.TO;
 import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
+import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
 import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
 import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
 import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
 import static org.onosproject.yangutils.utils.UtilConstants.VOID;
 import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
 import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
 import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
@@ -200,8 +210,6 @@
  * Represents generator for methods of generated files based on the file type.
  */
 public final class MethodsGenerator {
-    private static final String BITS_STRING_ARRAY_VAR = "bitsTemp";
-    private static final String BIT_TEMP_VAR = "bitTemp";
     private static final String BIT_NAMES_VAR = "bitNames";
     private static final String BIT_NAME_VAR = "bitName";
 
@@ -348,8 +356,8 @@
             return getGetter(attrQualifiedType, attributeName,
                              generatedJavaFiles);
         }
-        String attrParam = StringGenerator.getListAttribute(attrQualifiedType,
-                                                            attr.getCompilerAnnotation());
+        String attrParam = getListAttribute(attrQualifiedType,
+                                            attr.getCompilerAnnotation());
         return getGetter(attrParam, attributeName, generatedJavaFiles);
     }
 
@@ -371,7 +379,7 @@
                     //Append method body.
                     .append(methodBody(MANAGER_METHODS, null, null,
                                        EIGHT_SPACE_INDENTATION, null,
-                                       type, false))
+                                       type, false, null))
                     .append(signatureClose())
                     //Append method close.
                     .append(methodClose(FOUR_SPACE));
@@ -383,7 +391,7 @@
                 //Append method body.
                 .append(methodBody(GETTER, name, name,
                                    EIGHT_SPACE_INDENTATION, null,
-                                   type, false))
+                                   type, false, null))
                 .append(signatureClose())
                 //Append method close.
                 .append(methodClose(FOUR_SPACE));
@@ -411,8 +419,8 @@
             return getSetter(className, attributeName, attrQualifiedType,
                              generatedJavaFiles, isTypeNull, false);
         }
-        String attrParam = StringGenerator.getListAttribute(attrQualifiedType,
-                                                            attr.getCompilerAnnotation());
+        String attrParam = getListAttribute(attrQualifiedType,
+                                            attr.getCompilerAnnotation());
         return getSetter(className, attributeName, attrParam,
                          generatedJavaFiles, isTypeNull, true);
     }
@@ -440,7 +448,7 @@
                     //Append method body.
                     .append(methodBody(MANAGER_METHODS, null, null,
                                        EIGHT_SPACE_INDENTATION, null, null,
-                                       false))
+                                       false, null))
                     .append(methodClose(FOUR_SPACE));
             return builder.toString();
         }
@@ -451,7 +459,7 @@
                     //Append method body.
                     .append(methodBody(SETTER, name, name,
                                        EIGHT_SPACE_INDENTATION, null, null,
-                                       false))
+                                       false, null))
                     .append(methodClose(FOUR_SPACE));
             return builder.toString();
         }
@@ -459,14 +467,14 @@
                                        PUBLIC, name, getCapitalCase(className) +
                                                BUILDER, type, CLASS_TYPE));
         if (!isTypeNull && !isList) {
-            builder.append(StringGenerator.getValueLeafSetString(name));
+            builder.append(getValueLeafSetString(name));
         } else {
             builder.append(EMPTY_STRING);
         }
         //Append method body.
         builder.append(methodBody(SETTER, name, name,
                                   EIGHT_SPACE_INDENTATION, null, null,
-                                  true))
+                                  true, null))
                 //Append method close.
                 .append(methodClose(FOUR_SPACE));
         return builder.toString();
@@ -496,7 +504,7 @@
         return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
                                name, VOID, type, CLASS_TYPE) +
                 methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
-                           null, false) + methodClose(FOUR_SPACE);
+                           null, false, null) + methodClose(FOUR_SPACE);
     }
 
     /**
@@ -517,7 +525,7 @@
             return getGetterInterfaceString(returnType, yangName,
                                             genType);
         }
-        String listAttr = StringGenerator.getListAttribute(returnType, annotation);
+        String listAttr = getListAttribute(returnType, annotation);
         return getGetterInterfaceString(listAttr, yangName, genType);
     }
 
@@ -560,7 +568,7 @@
                                             genType);
         }
 
-        String listAttr = StringGenerator.getListAttribute(attrType, annotation);
+        String listAttr = getListAttribute(attrType, annotation);
         return getSetterInterfaceString(className, attrName, listAttr, genType);
     }
 
@@ -653,11 +661,11 @@
             case GENERATE_SERVICE_AND_MANAGER:
                 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
                                   attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
-                                  false);
+                                  false, null);
             default:
                 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
                                   attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
-                                  null, false);
+                                  null, false, null);
         }
     }
 
@@ -697,7 +705,7 @@
                                CLASS_TYPE) +
                 methodBody(MethodBodyTypes.BUILD, type, BUILD,
                            EIGHT_SPACE_INDENTATION, EMPTY_STRING,
-                           null, false) +
+                           null, false, null) +
                 methodClose(FOUR_SPACE);
     }
 
@@ -721,14 +729,13 @@
      * @return string method's open string
      */
     static String getToStringMethodOpen() {
-        String line;
         StringBuilder builder = new StringBuilder(getOverRideString());
-        builder.append(methodSignature(TO + STRING_DATA_TYPE, EMPTY_STRING,
+        builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
                                        PUBLIC, null, STRING_DATA_TYPE, null,
                                        CLASS_TYPE));
-        line = getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
-                               EIGHT_SPACE_INDENTATION) + NEW_LINE;
-        builder.append(line);
+        builder.append(getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
+                                       EIGHT_SPACE_INDENTATION)).append(NEW_LINE)
+                .append(getOmitNullValueString());
         return builder.toString();
     }
 
@@ -738,7 +745,7 @@
      * @return to string method close string
      */
     static String getToStringMethodClose() {
-        return TWELVE_SPACE_INDENTATION + PERIOD + TO + STRING_DATA_TYPE +
+        return TWELVE_SPACE_INDENTATION + PERIOD + TO_STRING_METHOD +
                 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
                 methodClose(FOUR_SPACE);
     }
@@ -746,13 +753,12 @@
     /**
      * Returns to string method for class.
      *
-     * @param attr attribute info
-     * @return to string method
+     * @param attr java attribute
+     * @return to string method for class
      */
     public static String getToStringMethod(JavaAttributeInfo attr) {
-        String attributeName = attr.getAttributeName();
-        return methodBody(TO_STRING, attributeName, null,
-                          TWELVE_SPACE_INDENTATION, null, null, false);
+        return methodBody(TO_STRING, attr.getAttributeName(), null,
+                          TWELVE_SPACE_INDENTATION, null, null, false, null);
     }
 
     /**
@@ -785,19 +791,18 @@
      * @param attr     attribute info
      * @param fromAttr attribute info for the from string wrapper
      *                 type
+     * @param name     class name
      * @return from string method's body string
      */
     public static String getFromStringMethod(JavaAttributeInfo attr,
-                                             JavaAttributeInfo fromAttr) {
+                                             JavaAttributeInfo fromAttr, String name) {
 
-        return EIGHT_SPACE_INDENTATION + StringGenerator.getTrySubString() +
-                StringGenerator.getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
-                getParsedSubString(attr, fromAttr) +
-                StringGenerator.getNewLineAndSpace(FOUR_SPACE_INDENTATION) +
-                StringGenerator.getReturnOfSubString() +
-                StringGenerator.getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
-                StringGenerator.getCatchSubString() +
-                StringGenerator.getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
+        return EIGHT_SPACE_INDENTATION + getTrySubString() +
+                getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
+                getParsedSubString(attr, fromAttr, name) +
+                getReturnOfSubString() + EIGHT_SPACE_INDENTATION +
+                getCatchSubString() +
+                getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
                 CLOSE_CURLY_BRACKET;
     }
 
@@ -805,35 +810,52 @@
      * Returns sub string with parsed statement for union's from string method.
      *
      * @param attr attribute info
+     * @param name class name
      * @return sub string with parsed statement for union's from string method
      */
     private static String getParsedSubString(JavaAttributeInfo attr,
-                                             JavaAttributeInfo fromStringAttr) {
+                                             JavaAttributeInfo fromStringAttr, String name) {
 
         String targetDataType = getReturnType(attr);
-        StringBuilder builder = new StringBuilder();
         YangDataTypes types = fromStringAttr.getAttributeType()
                 .getDataType();
+        StringBuilder method = new StringBuilder();
         switch (types) {
             case BITS:
-                return getFromStringForBits(attr, (YangBits) fromStringAttr.getAttributeType()
-                    .getDataTypeExtendedInfo());
+                return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
+                        SPACE + getCapitalCase(name) + getCapitalCase(attr.getAttributeName()) +
+                        PERIOD + FROM_STRING_METHOD_NAME +
+                        brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
+                                 FROM_STRING_PARAM_NAME, null) + signatureClose();
             case BINARY:
-                return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE +
-                        BASE64 + PERIOD + GET_DECODER + OPEN_PARENTHESIS +
-                        CLOSE_PARENTHESIS + PERIOD + DECODE + OPEN_PARENTHESIS +
-                        FROM_STRING_PARAM_NAME + CLOSE_PARENTHESIS + SEMI_COLON
-                        + NEW_LINE;
+                return method.append(targetDataType).append(SPACE).append(TMP_VAL)
+                        .append(SPACE).append(EQUAL).append(SPACE).append(
+                                geStringConverterForBinary(FROM_STRING_PARAM_NAME))
+                        .append(signatureClose()).toString();
             default:
                 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
-                        SPACE + StringGenerator.getParseFromStringMethod(
+                        SPACE + getParseFromStringMethod(
                         targetDataType, fromStringAttr.getAttributeType()) +
-                        OPEN_PARENTHESIS + FROM_STRING_PARAM_NAME +
-                        CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
+                        brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
+                                 FROM_STRING_PARAM_NAME, null) + signatureClose();
         }
     }
 
     /**
+     * Returns to string converter for binary type.
+     *
+     * @param var variable name
+     * @return to string method body
+     */
+    private static String geStringConverterForBinary(String var) {
+        StringBuilder builder = new StringBuilder();
+        return builder.append(BASE64).append(PERIOD)
+                .append(GET_DECODER).append(OPEN_CLOSE_BRACKET_STRING).append(PERIOD)
+                .append(DECODE).append(brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
+                                                var, null)).toString();
+    }
+
+    /**
      * Returns hash code method open strings.
      *
      * @return hash code method open string
@@ -971,7 +993,7 @@
         return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
                                VALUE, name, type, CLASS_TYPE) +
                 methodBody(MethodBodyTypes.OF_METHOD, name, null,
-                           EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false) +
+                           EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false, null) +
                 methodClose(FOUR_SPACE);
     }
 
@@ -980,14 +1002,17 @@
      *
      * @param attr      attribute info
      * @param className class name
+     * @param genType   generate file type
+     * @param count     type count
      * @return string and java doc for constructor of type class
      */
     public static String getTypeConstructorStringAndJavaDoc(
-            JavaAttributeInfo attr, String className) {
+            JavaAttributeInfo attr, String className, int genType, int count) {
         String attrType = getReturnType(attr);
         String attrName = attr.getAttributeName();
         return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
-                getTypeConstructorString(attrType, attrName, className);
+                getTypeConstructorString(attrType, attrName, className,
+                                         genType, count);
     }
 
     /**
@@ -998,11 +1023,12 @@
      * @param genType  class name
      * @param type     conflict validate type
      * @param addFirst whether int came first or uInt came first
+     * @param count    type count
      * @return string and java doc for constructor of type class
      */
     public static String getTypeConstructorStringAndJavaDoc(
             JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
-            ValidatorTypeForUnionTypes type, boolean addFirst) {
+            ValidatorTypeForUnionTypes type, boolean addFirst, int count) {
 
         String attrType = getReturnType(attr1);
         String attrName1 = "";
@@ -1016,9 +1042,9 @@
         }
         if (attr2 != null) {
             if (addFirst) {
-                attrName1 = attr2.getAttributeName();
-            } else {
                 attrName2 = attr2.getAttributeName();
+            } else {
+                attrName1 = attr2.getAttributeName();
             }
         }
 
@@ -1037,7 +1063,7 @@
         return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
                 getTypeConstructorString(attrType, attrName1,
                                          attrName2, genType,
-                                         type, addFirst);
+                                         type, addFirst, count);
     }
 
     /**
@@ -1046,14 +1072,26 @@
      * @param type      data type
      * @param name      attribute name
      * @param className class name
+     * @param genType   generated file type
+     * @param count     type count
      * @return type constructor string
      */
     private static String getTypeConstructorString(String type, String name,
-                                                   String className) {
-        return methodSignature(className, EMPTY_STRING, PUBLIC, name,
-                               null, type, CLASS_TYPE) +
-                methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
-                           EMPTY_STRING, null, false) + methodClose(FOUR_SPACE);
+                                                   String className, int genType, int count) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(
+                methodSignature(className, EMPTY_STRING, PUBLIC, name,
+                                null, type, CLASS_TYPE));
+        if (genType == GENERATE_UNION_CLASS) {
+            builder.append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
+                    .append(PERIOD).append(SET_METHOD_PREFIX).append(
+                    brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, count + EMPTY_STRING,
+                             null)).append(signatureClose());
+        }
+        builder.append(methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
+                                  EMPTY_STRING, null, false, null))
+                .append(methodClose(FOUR_SPACE));
+        return builder.toString();
     }
 
     /**
@@ -1062,26 +1100,30 @@
      * @param type      data type
      * @param attr1     attribute attr1
      * @param className class attr1
+     * @param count     type count
      * @return type constructor string
      */
     private static String getTypeConstructorString(
             String type, String attr1, String attr2, String className,
-            ValidatorTypeForUnionTypes validatorType, boolean addInt) {
-
+            ValidatorTypeForUnionTypes validatorType, boolean addInt, int count) {
         StringBuilder constructor = new StringBuilder(
-                methodSignature(className, EMPTY_STRING, null, type,
+                methodSignature(className, EMPTY_STRING, PUBLIC, attr1,
                                 null, type, CLASS_TYPE))
+                .append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
+                .append(PERIOD).append(SET_METHOD_PREFIX).append(
+                        brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, count + EMPTY_STRING,
+                                 null)).append(signatureClose())
                 .append(ifConditionForIntInTypeDefConstructor(validatorType,
-                                                              addInt))
+                                                              addInt, attr1))
                 .append(methodBody(SETTER, attr1, null,
                                    TWELVE_SPACE_INDENTATION, EMPTY_STRING,
-                                   null, false));
+                                   null, false, attr1));
         String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE +
                 ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
         constructor.append(str)
                 .append(methodBody(SETTER, attr2, null,
                                    TWELVE_SPACE_INDENTATION, EMPTY_STRING,
-                                   null, false))
+                                   null, false, attr1))
                 .append(methodClose(FOUR_SPACE))
                 .append(methodClose(EIGHT_SPACE));
 
@@ -1096,8 +1138,8 @@
     static String getAddAugmentInfoMethodInterface() {
         StringBuilder builder = new StringBuilder(generateForAddAugmentation());
         LinkedHashMap<String, String> map = new LinkedHashMap<>();
-        map.put(OBJECT_STRING, VALUE);
-        map.put(CLASS_STRING, CLASS + OBJECT_STRING);
+        map.put(VALUE, OBJECT_STRING);
+        map.put(CLASS + OBJECT_STRING, CLASS_STRING);
         builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
                                                 EMPTY_STRING, EMPTY_STRING,
                                                 VOID, map, INTERFACE_TYPE));
@@ -1112,13 +1154,13 @@
     static String getAddAugmentInfoMethodImpl() {
         StringBuilder builder = new StringBuilder(getOverRideString());
         LinkedHashMap<String, String> map = new LinkedHashMap<>();
-        map.put(OBJECT_STRING, VALUE);
-        map.put(CLASS_STRING, CLASS + OBJECT_STRING);
+        map.put(VALUE, OBJECT_STRING);
+        map.put(CLASS + OBJECT_STRING, CLASS_STRING);
         builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
                                                 EMPTY_STRING, PUBLIC,
                                                 VOID, map, CLASS_TYPE))
                 .append(methodBody(AUGMENTED_MAP_ADD, null, null,
-                                   EIGHT_SPACE_INDENTATION, null, null, false))
+                                   EIGHT_SPACE_INDENTATION, null, null, false, null))
                 .append(methodClose(FOUR_SPACE))
                 .append(NEW_LINE);
         return builder.toString();
@@ -1147,7 +1189,7 @@
                                 PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
                                 CLASS_STRING, CLASS_TYPE) +
                 methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
-                           EIGHT_SPACE_INDENTATION, null, null, false) +
+                           EIGHT_SPACE_INDENTATION, null, null, false, null) +
                 methodClose(FOUR_SPACE);
     }
 
@@ -1175,7 +1217,7 @@
                 YANG_AUGMENTED_INFO_LOWER_CASE + MAP, EMPTY_STRING, PUBLIC, null,
                 getAugmentMapTypeString(), null, CLASS_TYPE) +
                 methodBody(AUGMENTED_MAP_GETTER, null, null,
-                           EIGHT_SPACE_INDENTATION, null, null, false) +
+                           EIGHT_SPACE_INDENTATION, null, null, false, null) +
                 methodClose(FOUR_SPACE);
     }
 
@@ -1189,17 +1231,17 @@
         StringBuilder builder = new StringBuilder();
         String clsName = getSmallCase(className);
         LinkedHashMap<String, String> map = new LinkedHashMap<>();
-        map.put(INT, clsName);
-        map.put(STRING_DATA_TYPE, SCHEMA_NAME);
+        map.put(clsName, INT);
+        map.put(SCHEMA_NAME, STRING_DATA_TYPE);
         builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
                                                 EMPTY_STRING, null,
                                                 map, CLASS_TYPE))
                 .append(methodBody(SETTER, clsName, EMPTY_STRING,
                                    EIGHT_SPACE_INDENTATION, EMPTY_STRING,
-                                   EMPTY_STRING, false))
+                                   EMPTY_STRING, false, null))
                 .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
                                    EIGHT_SPACE_INDENTATION, EMPTY_STRING,
-                                   EMPTY_STRING, false))
+                                   EMPTY_STRING, false, null))
                 .append(methodClose(FOUR_SPACE));
 
         return builder.toString();
@@ -1439,7 +1481,7 @@
                                                 String name,
                                                 boolean isRoot) {
         String attrName = attr.getAttributeName();
-        String retString = "";
+        String retString = EMPTY_STRING;
         if (!isRoot) {
             retString = getOverRideString();
         }
@@ -1505,8 +1547,8 @@
                 "     * @return match result\n" +
                 "     */\n";
         LinkedHashMap<String, String> map = new LinkedHashMap<>();
-        map.put(name, getSmallCase(name));
-        map.put(BOOLEAN_DATA_TYPE, SELECT_ALL_CHILD);
+        map.put(getSmallCase(name), name);
+        map.put(SELECT_ALL_CHILD, BOOLEAN_DATA_TYPE);
 
         return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
                                                  EMPTY_STRING, EMPTY_STRING,
@@ -1604,56 +1646,115 @@
     /**
      * Generates fromString code for bits.
      *
-     * @param attr attribute information
-     * @param yangBits parsed yang bits
      * @return generated fromString code for bits.
      */
-    private static String getFromStringForBits(JavaAttributeInfo attr, YangBits yangBits) {
-        String targetDataType = getReturnType(attr);
-        String key;
-        YangBit bit;
+    private static String getFromStringForBits(String bitClassName) {
+        StringBuilder sBuild = new StringBuilder();
+        sBuild.append(methodSignature(FROM_STRING_METHOD_NAME, null,
+                                      PUBLIC + SPACE + STATIC,
+                                      FROM_STRING_PARAM_NAME,
+                                      BIT_SET, STRING_DATA_TYPE, CLASS_TYPE))
+                .append(EIGHT_SPACE_INDENTATION)
+                .append(getBitSetAttr(EMPTY_STRING));
         // Split the input string and check each bit name falls in configured yang file
-        String lines = targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE + NEW + SPACE + targetDataType +
-                OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE +
-                TWELVE_SPACE_INDENTATION + STRING_DATA_TYPE + SQUARE_BRACKETS + SPACE + BIT_NAMES_VAR + SPACE +
-                EQUAL + SPACE + FROM_STRING_PARAM_NAME + PERIOD + TRIM_STRING + EMPTY_PARAMETER_FUNCTION_CALL +
-                PERIOD + SPLIT_STRING + OPEN_PARENTHESIS + PATTERN + PERIOD + QUOTE_STRING +
-                OPEN_PARENTHESIS +  QUOTES + SPACE + QUOTES + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
-                NEW_LINE +
-                TWELVE_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS + STRING_DATA_TYPE + SPACE + BIT_NAME_VAR +
-                SPACE + COLON + SPACE + BIT_NAMES_VAR + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
-        boolean firstIf = true;
-        String ifCondition = IF;
-        for (Map.Entry<String, YangBit> entry : yangBits.getBitNameMap().entrySet()) {
-            key = entry.getKey();
-            bit = entry.getValue();
-            if (bit == null) {
-                return null;
-            }
-            if (firstIf) {
-                lines += SIXTEEN_SPACE_INDENTATION;
-            }
-            // Add condition checking for bit name
-            lines += ifCondition + SPACE + OPEN_PARENTHESIS + BIT_NAME_VAR + PERIOD +
-                    EQUALS_STRING + OPEN_PARENTHESIS + QUOTES + key + QUOTES + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS +
-                    SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
-                    TWENTY_SPACE_INDENTATION + TMP_VAL + PERIOD + SET_METHOD_PREFIX + OPEN_PARENTHESIS +
-                    bit.getPosition() + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
-                    CLOSE_CURLY_BRACKET;
-            if (firstIf) {
-                ifCondition = SPACE + ELSE_IF;
-                firstIf = false;
-            }
-        }
+        sBuild.append(EIGHT_SPACE_INDENTATION).append(STRING_DATA_TYPE)
+                .append(SQUARE_BRACKETS).append(SPACE).append(BIT_NAMES_VAR)
+                .append(SPACE).append(EQUAL).append(SPACE).append(FROM_STRING_PARAM_NAME)
+                .append(PERIOD).append(TRIM_STRING).append(OPEN_CLOSE_BRACKET_STRING)
+                .append(PERIOD).append(SPLIT_STRING).append(brackets(
+                OPEN_CLOSE_BRACKET_WITH_VALUE, getPatternQuoteString(SPACE),
+                null)).append(signatureClose()).append(getForLoopString(
+                EIGHT_SPACE_INDENTATION, STRING_DATA_TYPE, BIT_NAME_VAR,
+                BIT_NAMES_VAR));
 
-        if (!firstIf) {
-            // This means at least one if condition is added in code generation
-            // Now add else condition for validation
-            lines += SPACE + ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWENTY_SPACE_INDENTATION + RETURN +
-                    SPACE + NULL + SEMI_COLON + NEW_LINE + SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
-        }
+        String small = getSmallCase(bitClassName);
+        sBuild.append(TWELVE_SPACE_INDENTATION).append(bitClassName).append
+                (SPACE).append(small).append(SPACE).append(EQUAL).append
+                (SPACE).append(bitClassName).append(PERIOD).append(OF).append
+                (brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, BIT_NAME_VAR, null))
+                .append(signatureClose());
+        String condition = small + SPACE + NOT + EQUAL + SPACE + NULL;
+        sBuild.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, condition))
+                .append(TWELVE_SPACE_INDENTATION)
+                .append(TMP_VAL).append(PERIOD).append(SET_METHOD_PREFIX)
+                .append(OPEN_PARENTHESIS)
+                .append(small).append(PERIOD).append(small).append(
+                OPEN_CLOSE_BRACKET_STRING).append(CLOSE_PARENTHESIS)
+                .append(signatureClose()).append(methodClose(TWELVE_SPACE))
+                .append(methodClose(EIGHT_SPACE));
+        sBuild.append(getReturnString(TMP_VAL, EIGHT_SPACE_INDENTATION))
+                .append(signatureClose()).append(methodClose(FOUR_SPACE));
+        return sBuild.toString();
+    }
 
-        lines += NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
-        return lines;
+    /**
+     * Returns union class's to string method.
+     *
+     * @param types list of types
+     * @return union class's to string method
+     */
+    static String getUnionToStringMethod(List<YangType<?>> types) {
+
+        StringBuilder builder = new StringBuilder(getOverRideString());
+        builder.append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
+                                       STRING_DATA_TYPE, null, CLASS_TYPE))
+                .append(getMoreObjectAttr());
+        for (YangType type : types) {
+            builder.append(getIfConditionBegin(
+                    EIGHT_SPACE_INDENTATION, getSetValueParaCondition(
+                            types.indexOf(type))))
+                    .append(TWELVE_SPACE_INDENTATION).append(HELPER).append(
+                    methodBody(TO_STRING, getCamelCase(type.getDataTypeName()
+                            , null), null, EMPTY_STRING, null, null, false, null))
+                    .append(signatureClose()).append(methodClose(EIGHT_SPACE));
+        }
+        builder.append(getReturnString(HELPER, EIGHT_SPACE_INDENTATION))
+                .append(PERIOD).append(TO_STRING_METHOD)
+                .append(OPEN_CLOSE_BRACKET_STRING).append(signatureClose())
+                .append(methodClose(FOUR_SPACE));
+        return builder.toString();
+    }
+
+    /**
+     * Returns from string method for bits class.
+     *
+     * @param className bits class name
+     * @return from string method for bits class
+     */
+    static String getBitSetEnumClassFromString(String className) {
+        return getJavaDoc(FROM_METHOD, className, false, null) +
+                getFromStringForBits(className);
+    }
+
+    static String getBitSetEnumClassToString(String className,
+                                             YangEnumeration enumeration) {
+
+        StringBuilder builder = new StringBuilder();
+        builder.append(methodSignature(TO_STRING_METHOD, null, PUBLIC, BITS,
+                                       STRING_DATA_TYPE, BIT_SET, CLASS_TYPE))
+                .append(getMoreObjectAttr());
+        String condition;
+        String name;
+        for (YangEnum yangEnum : enumeration.getEnumSet()) {
+            name = yangEnum.getNamedValue();
+            condition = BITS + PERIOD + GET + OPEN_PARENTHESIS +
+                    className + PERIOD + getEnumJavaAttribute(name).toUpperCase()
+                    + PERIOD + getSmallCase(className)
+                    + OPEN_CLOSE_BRACKET_STRING + CLOSE_PARENTHESIS;
+
+
+            builder.append(getIfConditionBegin(
+                    EIGHT_SPACE_INDENTATION, condition))
+                    .append(TWELVE_SPACE_INDENTATION).append(HELPER).append(
+                    PERIOD).append(ADD_STRING).append(OPEN_PARENTHESIS)
+                    .append(getQuotedString(name)).append(COMMA).append(SPACE)
+                    .append(getQuotedString(name)).append(CLOSE_PARENTHESIS)
+                    .append(signatureClose()).append(methodClose(EIGHT_SPACE));
+        }
+        builder.append(getReturnString(HELPER, EIGHT_SPACE_INDENTATION))
+                .append(PERIOD).append(TO_STRING_METHOD)
+                .append(OPEN_CLOSE_BRACKET_STRING).append(signatureClose())
+                .append(methodClose(FOUR_SPACE));
+        return builder.toString();
     }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
index 6d5a14c..c0d05b0 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
@@ -41,9 +41,11 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIfConditionForAddToListMethod;
 import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.AND;
+import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
 import static org.onosproject.yangutils.utils.UtilConstants.AT;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
 import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
 import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
@@ -74,6 +76,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
 import static org.onosproject.yangutils.utils.UtilConstants.GET;
+import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.IF;
 import static org.onosproject.yangutils.utils.UtilConstants.IMPLEMENTS;
 import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
@@ -88,12 +91,14 @@
 import static org.onosproject.yangutils.utils.UtilConstants.LONG_MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.MAP;
+import static org.onosproject.yangutils.utils.UtilConstants.MORE_OBJ_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.OF;
 import static org.onosproject.yangutils.utils.UtilConstants.OMIT_NULL_VALUE_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
@@ -102,19 +107,24 @@
 import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
 import static org.onosproject.yangutils.utils.UtilConstants.PARSE_LONG;
 import static org.onosproject.yangutils.utils.UtilConstants.PARSE_SHORT;
+import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PUT;
 import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
 import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTE_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
 import static org.onosproject.yangutils.utils.UtilConstants.SET;
+import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
+import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER;
+import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
 import static org.onosproject.yangutils.utils.UtilConstants.THIS;
 import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
 import static org.onosproject.yangutils.utils.UtilConstants.TRY;
@@ -136,7 +146,6 @@
 /**
  * Represents string generator for translator.
  */
-@SuppressWarnings("HardcodedFileSeparator")
 public final class StringGenerator {
 
     private StringGenerator() {
@@ -203,8 +212,8 @@
     static String getNewInstance(String returnType, String varName,
                                  String space, String value) {
         return space + returnType + SPACE + varName + SPACE + EQUAL + SPACE +
-                NEW + returnType + brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
-                                            value, null) + signatureClose();
+                NEW + SPACE + returnType + brackets(
+                OPEN_CLOSE_BRACKET_WITH_VALUE, value, null) + signatureClose();
     }
 
     /**
@@ -270,20 +279,24 @@
      * @param prefix          prefix for internal method
      * @param paramType       parameter type
      * @param isBuilderSetter is for builder setter
+     * @param setterVal       value to set in setter
      * @return body of the method
      */
     static String methodBody(MethodBodyTypes type, String paraName,
                              String methodName,
                              String space, String prefix,
-                             String paramType, boolean isBuilderSetter) {
+                             String paramType, boolean isBuilderSetter, String setterVal) {
         StringBuilder builder = new StringBuilder();
         String body;
         switch (type) {
             case GETTER:
                 return getReturnString(paraName, space);
             case SETTER:
+                if (setterVal == null) {
+                    setterVal = paraName;
+                }
                 body = space + THIS + PERIOD + paraName + SPACE + EQUAL + SPACE +
-                        paraName + signatureClose();
+                        setterVal + signatureClose();
                 builder.append(body);
                 if (isBuilderSetter) {
                     body = getReturnString(THIS + signatureClose(), space);
@@ -341,8 +354,7 @@
                                 OPEN_CLOSE_BRACKET_WITH_VALUE, VALUE, null)
                                 + signatureClose(), space);
             case TO_STRING:
-                return space + PERIOD + ADD_STRING + OPEN_PARENTHESIS + QUOTES +
-                        paraName + QUOTES + COMMA + SPACE + paraName +
+                return getToStringMethodsAddString(space, paraName) + paraName +
                         CLOSE_PARENTHESIS;
             case EQUALS_METHOD:
             default:
@@ -351,6 +363,18 @@
     }
 
     /**
+     * Returns to string method's add string.
+     *
+     * @param space    indentation
+     * @param paraName parameter name
+     * @return to string method's add string
+     */
+    static String getToStringMethodsAddString(String space, String paraName) {
+        return space + PERIOD + ADD_STRING + OPEN_PARENTHESIS +
+                getQuotedString(paraName) + COMMA + SPACE;
+    }
+
+    /**
      * Returns end of line.
      *
      * @return end of line
@@ -462,6 +486,9 @@
             method = modifier + SPACE;
         }
         methodBuilder.append(method);
+        if (prefix == null) {
+            prefix = EMPTY_STRING;
+        }
         if (methodReturnType != null) {
             method = methodReturnType + SPACE + prefix + methodName;
         } else {
@@ -471,7 +498,7 @@
         methodBuilder.append(method)
                 .append(OPEN_PARENTHESIS);
         for (Map.Entry<String, String> param : params.entrySet()) {
-            methodBuilder.append(methodParam(param.getKey(), param.getValue()));
+            methodBuilder.append(methodParam(param.getValue(), param.getKey()));
             methodBuilder.append(commaWithSpace());
         }
         String para = methodBuilder.toString();
@@ -505,6 +532,9 @@
         if (modifier != null) {
             method = modifier + SPACE;
         }
+        if (prefix == null) {
+            prefix = EMPTY_STRING;
+        }
         methodBuilder.append(method);
         if (methodReturnType != null) {
             method = methodReturnType + SPACE + prefix + methodName;
@@ -637,10 +667,11 @@
      *
      * @param type     type of conflict
      * @param addFirst true int/long need to be added first
+     * @param val      value to set
      * @return if condition string for typedef constructor
      */
     static String ifConditionForIntInTypeDefConstructor(ValidatorTypeForUnionTypes type,
-                                                        boolean addFirst) {
+                                                        boolean addFirst, String val) {
         String condition =
                 EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
                         VALIDATE_RANGE + OPEN_PARENTHESIS;
@@ -649,28 +680,28 @@
             case INT_TYPE_CONFLICT:
                 if (addFirst) {
                     condition = condition + INT_MIN_RANGE + COMMA + SPACE +
-                            INT_MAX_RANGE + COMMA + SPACE + VALUE;
+                            INT_MAX_RANGE + COMMA + SPACE + val;
                 } else {
                     condition = condition + UINT_MIN_RANGE + COMMA + SPACE +
-                            UINT_MAX_RANGE + COMMA + SPACE + VALUE;
+                            UINT_MAX_RANGE + COMMA + SPACE + val;
                 }
                 break;
             case LONG_TYPE_CONFLICT:
                 if (addFirst) {
                     condition = condition + LONG_MIN_RANGE + COMMA + SPACE +
-                            LONG_MAX_RANGE + COMMA + SPACE + VALUE;
+                            LONG_MAX_RANGE + COMMA + SPACE + val;
                 } else {
                     condition = condition + ULONG_MIN_RANGE + COMMA + SPACE +
-                            ULONG_MAX_RANGE + COMMA + SPACE + VALUE;
+                            ULONG_MAX_RANGE + COMMA + SPACE + val;
                 }
                 break;
             case SHORT_TYPE_CONFLICT:
                 if (addFirst) {
                     condition = condition + SHORT_MIN_RANGE + COMMA + SPACE +
-                            SHORT_MAX_RANGE + COMMA + SPACE + VALUE;
+                            SHORT_MAX_RANGE + COMMA + SPACE + val;
                 } else {
                     condition = condition + UINT8_MIN_RANGE + COMMA + SPACE +
-                            UINT8_MAX_RANGE + COMMA + SPACE + VALUE;
+                            UINT8_MAX_RANGE + COMMA + SPACE + val;
                 }
                 break;
             default:
@@ -717,10 +748,10 @@
             case EMPTY:
             case BOOLEAN:
                 return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
-            case BITS:
-            case UNION:
             case ENUMERATION:
+                return targetDataType + PERIOD + OF;
             case DERIVED:
+            case UNION:
                 return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
             default:
                 throw new TranslatorException("given data type is not " +
@@ -752,7 +783,7 @@
      * @return sub string with return statement for union's from string method
      */
     static String getReturnOfSubString() {
-        return getReturnString(OF, EIGHT_SPACE_INDENTATION) +
+        return getReturnString(OF, TWELVE_SPACE_INDENTATION) +
                 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, TMP_VAL, null) +
                 signatureClose();
     }
@@ -1054,4 +1085,109 @@
                 .append(line).append(AT).append(position).append(IN)
                 .append(fileName).toString();
     }
+
+    /**
+     * Returns string builder attribute string;
+     *
+     * @param init  first param to be appended to string builder
+     * @param space indentation space
+     * @return string builder attribute
+     */
+    static String getStringBuilderAttr(String init, String space) {
+        StringBuilder builder = new StringBuilder(space);
+        builder.append(STRING_BUILDER).append(SPACE).append(STRING_BUILDER_VAR)
+                .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+                .append(SPACE).append(STRING_BUILDER).append(
+                brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, getQuotedString(init), null))
+                .append(signatureClose());
+        return builder.toString();
+    }
+
+    /**
+     * Returns quoted string.
+     *
+     * @param name name to be quoted
+     * @return quoted string
+     */
+    static String getQuotedString(String name) {
+        return QUOTES + name + QUOTES;
+    }
+
+    /**
+     * Returns string builder's append string.
+     *
+     * @param append data to be append
+     * @param space  indentation
+     * @return string builder's append string
+     */
+    static String getStringBuilderAppendString(String append, String space) {
+        return space + STRING_BUILDER_VAR + PERIOD + APPEND + OPEN_PARENTHESIS +
+                append + CLOSE_PARENTHESIS + signatureClose();
+    }
+
+    /**
+     * Returns pattern quote string.
+     *
+     * @param type type for pattern is needed
+     * @return pattern quote string
+     */
+    static String getPatternQuoteString(String type) {
+        return PATTERN + PERIOD + QUOTE_STRING + brackets(
+                OPEN_CLOSE_BRACKET_WITH_VALUE, getQuotedString(type), null);
+    }
+
+    /**
+     * Returns bitset attribute.
+     *
+     * @param indentation indentation
+     * @return bitset attribute
+     */
+    static String getBitSetAttr(String indentation) {
+        StringBuilder builder = new StringBuilder(indentation);
+        return builder.append(BITSET).append(SPACE).append(TMP_VAL)
+                .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+                .append(SPACE).append(BITSET).append(OPEN_CLOSE_BRACKET_STRING)
+                .append(signatureClose()).toString();
+    }
+
+    /**
+     * Returns for loop string
+     *
+     * @param space indentation
+     * @param type  data type
+     * @param var   variable
+     * @param data  data variable/collection
+     * @return for loop string
+     */
+    static String getForLoopString(String space, String type, String var,
+                                   String data) {
+        return space + FOR + SPACE + OPEN_PARENTHESIS + type + SPACE + var +
+                SPACE + COLON + SPACE + data + CLOSE_PARENTHESIS +
+                methodSignatureClose(CLASS_TYPE);
+    }
+
+    /**
+     * Returns set value parameter's get string for union to string method.
+     *
+     * @param count count of type
+     * @return get string
+     */
+    static String getSetValueParaCondition(int count) {
+        return SET_VALUE_PARA + PERIOD + GET + brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
+                                                        count + EMPTY_STRING, null);
+    }
+
+    /**
+     * Returns more object attr for union to string method.
+     *
+     * @return more object attr for union to string method
+     */
+    static String getMoreObjectAttr() {
+        StringBuilder attr = new StringBuilder(EIGHT_SPACE_INDENTATION);
+        String[] array = {NEW_LINE};
+        attr.append(MORE_OBJ_ATTR).append(GOOGLE_MORE_OBJECT_METHOD_STRING)
+                .append(NEW_LINE).append(FOUR_SPACE_INDENTATION).append(trimAtLast(
+                getOmitNullValueString(), array)).append(signatureClose());
+        return attr.toString();
+    }
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
index e1b4913..f7229a2 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
@@ -57,7 +57,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.CONTINUE;
 import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
@@ -144,7 +144,7 @@
         attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
                                                               type);
         return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS
-                + GET_VALUE_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL +
+                + GET_VALUE_LEAF_FLAGS + OPEN_CLOSE_BRACKET_STRING +
                 PERIOD + GET_METHOD_PREFIX + OPEN_PARENTHESIS +
                 LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() +
                 PERIOD + GET_LEAF_INDEX + CLOSE_PARENTHESIS +
@@ -163,7 +163,7 @@
                 TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE +
                 EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE +
                 SPACE + IF + SPACE + OPEN_PARENTHESIS +
-                GET_SELECT_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL +
+                GET_SELECT_LEAF_FLAGS + OPEN_CLOSE_BRACKET_STRING +
                 PERIOD + GET_METHOD_PREFIX + OPEN_PARENTHESIS +
                 LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() +
                 PERIOD + GET_LEAF_INDEX + CLOSE_PARENTHESIS + SPACE +
@@ -174,7 +174,7 @@
                 SPACE + TRUE + SEMI_COLON + NEW_LINE +
                 TWELVE_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
                 PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE +
-                PERIOD + attributeName + EMPTY_PARAMETER_FUNCTION_CALL +
+                PERIOD + attributeName + OPEN_CLOSE_BRACKET_STRING +
                 CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE +
                 EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
     }
@@ -648,7 +648,7 @@
 
         method += EIGHT_SPACE_INDENTATION + RETURN + SPACE +
                 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD +
-                EMPTY_PARAMETER_FUNCTION_CALL + SEMI_COLON + NEW_LINE +
+                OPEN_CLOSE_BRACKET_STRING + SEMI_COLON + NEW_LINE +
                 FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
 
         return method;
@@ -686,7 +686,7 @@
 
         method += SIXTEEN_SPACE_INDENTATION + type + SPACE + "result = " +
                 name + PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS +
-                APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL
+                APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING
                 + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
                 NEW_LINE;
 
@@ -737,7 +737,7 @@
                                                    type + SPACE + name,
                                                    APP_INSTANCE + PERIOD +
                                                            name +
-                                                           EMPTY_PARAMETER_FUNCTION_CALL);
+                                                           OPEN_CLOSE_BRACKET_STRING);
 
         method = method + SIXTEEN_SPACE_INDENTATION +
                 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
@@ -749,7 +749,7 @@
         //If need to explicitly participate in query
         method += StringGenerator
                 .getElseIfConditionBegin(EIGHT_SPACE_INDENTATION,
-                                         name + EMPTY_PARAMETER_FUNCTION_CALL +
+                                         name + OPEN_CLOSE_BRACKET_STRING +
                                                  SPACE + NOT + EQUAL +
                                                  SPACE + NULL);
 
@@ -762,7 +762,7 @@
         //If there is any parameter in the query condition
         method += StringGenerator
                 .getIfConditionBegin(TWELVE_SPACE_INDENTATION, NOT + name +
-                        EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
+                        OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY);
 
         if (isLeafList) {
             /*
@@ -771,12 +771,12 @@
             method += StringGenerator
                     .getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
                                          APP_INSTANCE + PERIOD + name +
-                                                 EMPTY_PARAMETER_FUNCTION_CALL +
+                                                 OPEN_CLOSE_BRACKET_STRING +
                                                  SPACE + EQUAL + EQUAL + SPACE +
                                                  NULL + SPACE + OR_OPERATION
                                                  + SPACE + APP_INSTANCE +
                                                  PERIOD + name +
-                                                 EMPTY_PARAMETER_FUNCTION_CALL +
+                                                 OPEN_CLOSE_BRACKET_STRING +
                                                  PERIOD + IS_EMPTY);
 
             method += TWENTY_SPACE_INDENTATION + RETURN + SPACE + FALSE +
@@ -787,7 +787,7 @@
             // for instance iterator
             method += StringGenerator.getCollectionIteratorForLoopBegin(
                     SIXTEEN_SPACE_INDENTATION, type + SPACE + name,
-                    name + EMPTY_PARAMETER_FUNCTION_CALL);
+                    name + OPEN_CLOSE_BRACKET_STRING);
 
             method += TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE +
                     "flag" + SPACE + EQUAL + SPACE + FALSE + SEMI_COLON +
@@ -800,7 +800,7 @@
                                                                "2",
                                                        APP_INSTANCE + PERIOD +
                                                                name +
-                                                               EMPTY_PARAMETER_FUNCTION_CALL);
+                                                               OPEN_CLOSE_BRACKET_STRING);
 
             //the content match leaf list attribute value matches
             method += StringGenerator
@@ -842,12 +842,12 @@
             method += StringGenerator
                     .getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
                                          APP_INSTANCE + PERIOD + name +
-                                                 EMPTY_PARAMETER_FUNCTION_CALL +
+                                                 OPEN_CLOSE_BRACKET_STRING +
                                                  SPACE + NOT + EQUAL + SPACE +
                                                  NULL + SPACE + AND_OPERATION +
                                                  SPACE + NOT + APP_INSTANCE +
                                                  PERIOD + name +
-                                                 EMPTY_PARAMETER_FUNCTION_CALL +
+                                                 OPEN_CLOSE_BRACKET_STRING +
                                                  PERIOD + IS_EMPTY);
 
             /*
@@ -857,13 +857,13 @@
                     .getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
                                                        type + SPACE + name,
                                                        name +
-                                                               EMPTY_PARAMETER_FUNCTION_CALL);
+                                                               OPEN_CLOSE_BRACKET_STRING);
 
             //loop all the app instance(s)
             method += StringGenerator.getCollectionIteratorForLoopBegin(
                     TWENTY_FOUR_SPACE_INDENTATION, type + SPACE + name + "2",
                     APP_INSTANCE + PERIOD + name +
-                            EMPTY_PARAMETER_FUNCTION_CALL);
+                            OPEN_CLOSE_BRACKET_STRING);
 
             method += TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE +
                     "result = " + name + PERIOD +
@@ -903,12 +903,12 @@
         method += StringGenerator
                 .getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
                                      APP_INSTANCE + PERIOD + name
-                                             + EMPTY_PARAMETER_FUNCTION_CALL +
+                                             + OPEN_CLOSE_BRACKET_STRING +
                                              SPACE + NOT + EQUAL + SPACE +
                                              NULL + SPACE + AND_OPERATION +
                                              SPACE + NOT + APP_INSTANCE +
                                              PERIOD + name +
-                                             EMPTY_PARAMETER_FUNCTION_CALL +
+                                             OPEN_CLOSE_BRACKET_STRING +
                                              PERIOD + IS_EMPTY);
 
         method = method + StringGenerator
@@ -916,7 +916,7 @@
                                                    type + SPACE + name,
                                                    APP_INSTANCE + PERIOD +
                                                            name +
-                                                           EMPTY_PARAMETER_FUNCTION_CALL);
+                                                           OPEN_CLOSE_BRACKET_STRING);
 
         method = method + TWENTY_FOUR_SPACE_INDENTATION +
                 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorUtils.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorUtils.java
index cc7781d..f854f99 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorUtils.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorUtils.java
@@ -118,7 +118,7 @@
      * @param curNode current YANG node
      * @return type files
      */
-    static TempJavaTypeFragmentFiles getTypeFiles(YangNode curNode) {
+    public static TempJavaTypeFragmentFiles getTypeFiles(YangNode curNode) {
         return ((TempJavaCodeFragmentFilesContainer) curNode)
                 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
     }