diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
index e2d27ac..70869b2 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
@@ -18,7 +18,6 @@
 
 import org.onosproject.yangutils.datamodel.YangDataTypes;
 import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.translator.tojava.AttributeInfo;
 import org.onosproject.yangutils.utils.UtilConstants;
 
 /**
@@ -33,41 +32,14 @@
     }
 
     /**
-     * Returns YANG type.
+     * Returns java type.
      *
      * @param yangType YANG type
-     * @return YANG type
+     * @return java type
      */
-    public static YangType<?> getJavaDataType(YangType<?> yangType) {
-        yangType.setDataTypeName(yangType.getDataTypeName().replace("\"", ""));
-        if (yangType.getDataType() != null) {
-            yangType.setDataTypeName(parseYangDataType(yangType.getDataType()));
-        }
-        return yangType;
-    }
+    public static String getJavaDataType(YangType<?> yangType) {
+        YangDataTypes type = yangType.getDataType();
 
-    /**
-     * Returns list string as attribute name when attribute is a list.
-     *
-     * @param attr attribute info.
-     * @return list attribute
-     */
-    @SuppressWarnings("rawtypes")
-    public static YangType<?> getListString(AttributeInfo attr) {
-        String listString = JavaCodeSnippetGen.getListAttribute(attr.getAttributeType().getDataTypeName());
-        YangType<?> type = new YangType();
-        type.setDataTypeName(listString);
-        attr.setAttributeType(type);
-        return type;
-    }
-
-    /**
-     * Parses YANG data type and returns corresponding java data type.
-     *
-     * @param type YANG data type
-     * @return java data type
-     */
-    private static String parseYangDataType(YangDataTypes type) {
         if (type.equals(YangDataTypes.INT8)) {
             return UtilConstants.BYTE;
         } else if (type.equals(YangDataTypes.INT16)) {
@@ -111,4 +83,161 @@
         }
         return null;
     }
+
+    /**
+     * Returns java import class.
+     *
+     * @param yangType YANG type
+     * @param isListAttr if the attribute need to be a list
+     * @return java import class
+     */
+    public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr) {
+        YangDataTypes type = yangType.getDataType();
+
+        if (isListAttr) {
+            if (type.equals(YangDataTypes.INT8)) {
+                return UtilConstants.BYTE_WRAPPER;
+            } else if (type.equals(YangDataTypes.INT16)) {
+                return UtilConstants.SHORT_WRAPPER;
+            } else if (type.equals(YangDataTypes.INT32)) {
+                return UtilConstants.INTEGER_WRAPPER;
+            } else if (type.equals(YangDataTypes.INT64)) {
+                return UtilConstants.LONG_WRAPPER;
+            } else if (type.equals(YangDataTypes.UINT8)) {
+                return UtilConstants.SHORT_WRAPPER;
+            } else if (type.equals(YangDataTypes.UINT16)) {
+                return UtilConstants.INTEGER_WRAPPER;
+            } else if (type.equals(YangDataTypes.UINT32)) {
+                return UtilConstants.LONG_WRAPPER;
+            } else if (type.equals(YangDataTypes.UINT64)) {
+                //TODO: BIGINTEGER.
+            } else if (type.equals(YangDataTypes.DECIMAL64)) {
+                //TODO: DECIMAL64.
+            } else if (type.equals(YangDataTypes.STRING)) {
+                return UtilConstants.STRING;
+            } else if (type.equals(YangDataTypes.BOOLEAN)) {
+                return UtilConstants.BOOLEAN_WRAPPER;
+            } else if (type.equals(YangDataTypes.ENUMERATION)) {
+                //TODO: ENUMERATION.
+            } else if (type.equals(YangDataTypes.BITS)) {
+                //TODO:BITS
+            } else if (type.equals(YangDataTypes.BINARY)) {
+                //TODO:BINARY
+            } else if (type.equals(YangDataTypes.LEAFREF)) {
+                //TODO:LEAFREF
+            } else if (type.equals(YangDataTypes.IDENTITYREF)) {
+                //TODO:IDENTITYREF
+            } else if (type.equals(YangDataTypes.EMPTY)) {
+                //TODO:EMPTY
+            } else if (type.equals(YangDataTypes.UNION)) {
+                //TODO:UNION
+            } else if (type.equals(YangDataTypes.INSTANCE_IDENTIFIER)) {
+                //TODO:INSTANCE_IDENTIFIER
+            } else if (type.equals(YangDataTypes.DERIVED)) {
+                //TODO:DERIVED
+            }
+        } else {
+            if (type.equals(YangDataTypes.UINT64)) {
+                //TODO: BIGINTEGER.
+            } else if (type.equals(YangDataTypes.DECIMAL64)) {
+                //TODO: DECIMAL64.
+            } else if (type.equals(YangDataTypes.STRING)) {
+                return UtilConstants.STRING;
+            } else if (type.equals(YangDataTypes.ENUMERATION)) {
+                //TODO: ENUMERATION.
+            } else if (type.equals(YangDataTypes.BITS)) {
+                //TODO:BITS
+            } else if (type.equals(YangDataTypes.BINARY)) {
+                //TODO:BINARY
+            } else if (type.equals(YangDataTypes.LEAFREF)) {
+                //TODO:LEAFREF
+            } else if (type.equals(YangDataTypes.IDENTITYREF)) {
+                //TODO:IDENTITYREF
+            } else if (type.equals(YangDataTypes.EMPTY)) {
+                //TODO:EMPTY
+            } else if (type.equals(YangDataTypes.UNION)) {
+                //TODO:UNION
+            } else if (type.equals(YangDataTypes.INSTANCE_IDENTIFIER)) {
+                //TODO:INSTANCE_IDENTIFIER
+            } else if (type.equals(YangDataTypes.DERIVED)) {
+                //TODO:DERIVED
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns java import package.
+     *
+     * @param yangType YANG type
+     * @param isListAttr if the attribute is of list type
+     * @return java import package
+     */
+    public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr) {
+        YangDataTypes type = yangType.getDataType();
+
+        if (isListAttr) {
+            if (type.equals(YangDataTypes.INT8)
+                    || type.equals(YangDataTypes.INT16)
+                    || type.equals(YangDataTypes.INT32)
+                    || type.equals(YangDataTypes.INT64)
+                    || type.equals(YangDataTypes.UINT8)
+                    || type.equals(YangDataTypes.UINT16)
+                    || type.equals(YangDataTypes.UINT32)
+                    || type.equals(YangDataTypes.STRING)
+                    || type.equals(YangDataTypes.BOOLEAN)) {
+                return UtilConstants.JAVA_LANG;
+            } else if (type.equals(YangDataTypes.UINT64)) {
+                //TODO: BIGINTEGER.
+            } else if (type.equals(YangDataTypes.DECIMAL64)) {
+                //TODO: DECIMAL64.
+            } else if (type.equals(YangDataTypes.ENUMERATION)) {
+                //TODO: ENUMERATION.
+            } else if (type.equals(YangDataTypes.BITS)) {
+                //TODO:BITS
+            } else if (type.equals(YangDataTypes.BINARY)) {
+                //TODO:BINARY
+            } else if (type.equals(YangDataTypes.LEAFREF)) {
+                //TODO:LEAFREF
+            } else if (type.equals(YangDataTypes.IDENTITYREF)) {
+                //TODO:IDENTITYREF
+            } else if (type.equals(YangDataTypes.EMPTY)) {
+                //TODO:EMPTY
+            } else if (type.equals(YangDataTypes.UNION)) {
+                //TODO:UNION
+            } else if (type.equals(YangDataTypes.INSTANCE_IDENTIFIER)) {
+                //TODO:INSTANCE_IDENTIFIER
+            } else if (type.equals(YangDataTypes.DERIVED)) {
+                //TODO:DERIVED
+            }
+        } else {
+
+            if (type.equals(YangDataTypes.UINT64)) {
+                //TODO: BIGINTEGER.
+            } else if (type.equals(YangDataTypes.DECIMAL64)) {
+                //TODO: DECIMAL64.
+            } else if (type.equals(YangDataTypes.STRING)) {
+                return UtilConstants.JAVA_LANG;
+            } else if (type.equals(YangDataTypes.ENUMERATION)) {
+                //TODO: ENUMERATION.
+            } else if (type.equals(YangDataTypes.BITS)) {
+                //TODO:BITS
+            } else if (type.equals(YangDataTypes.BINARY)) {
+                //TODO:BINARY
+            } else if (type.equals(YangDataTypes.LEAFREF)) {
+                //TODO:LEAFREF
+            } else if (type.equals(YangDataTypes.IDENTITYREF)) {
+                //TODO:IDENTITYREF
+            } else if (type.equals(YangDataTypes.EMPTY)) {
+                //TODO:EMPTY
+            } else if (type.equals(YangDataTypes.UNION)) {
+                //TODO:UNION
+            } else if (type.equals(YangDataTypes.INSTANCE_IDENTIFIER)) {
+                //TODO:INSTANCE_IDENTIFIER
+            } else if (type.equals(YangDataTypes.DERIVED)) {
+                //TODO:DERIVED
+            }
+        }
+        return null;
+    }
 }
