[ONOS-4348] Yang Bits, Binary and Decimal64

Change-Id: I8e4e54a19a8f9634cbc56a07579a1730174f53f6
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
index 52595c7..91849b2 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
@@ -37,10 +37,13 @@
 import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.getCurNodePackage;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
+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.BOOLEAN_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
 import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
+import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
 import static org.onosproject.yangutils.utils.UtilConstants.INT;
 import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
@@ -50,11 +53,8 @@
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
+import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
 import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_BINARY_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_BITS_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_DECIMAL64_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_TYPES_PKG;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
@@ -97,10 +97,12 @@
                 return LONG;
             case UINT64:
                 return BIG_INTEGER;
+            case BITS:
+                return BIT_SET;
             case BINARY:
-                return YANG_BINARY_CLASS;
+                return BYTE + SQUARE_BRACKETS;
             case DECIMAL64:
-                return YANG_DECIMAL64_CLASS;
+                return BIG_DECIMAL;
             case STRING:
                 return STRING_DATA_TYPE;
             case BOOLEAN:
@@ -146,7 +148,7 @@
                 case UINT64:
                     return BIG_INTEGER;
                 case DECIMAL64:
-                    return YANG_DECIMAL64_CLASS;
+                    return BIG_DECIMAL;
                 case STRING:
                     return STRING_DATA_TYPE;
                 case BOOLEAN:
@@ -156,9 +158,9 @@
                             getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
                                     pluginConfig));
                 case BITS:
-                    return YANG_BITS_CLASS;
+                    return BIT_SET;
                 case BINARY:
-                    return YANG_BINARY_CLASS;
+                    return BYTE + SQUARE_BRACKETS;
                 case LEAFREF:
                     YangType<?> referredType = getReferredTypeFromLeafref(yangType);
                     return getJavaImportClass(referredType, isListAttr, pluginConfig);
@@ -184,8 +186,6 @@
             switch (type) {
                 case UINT64:
                     return BIG_INTEGER;
-                case DECIMAL64:
-                    return YANG_DECIMAL64_CLASS;
                 case STRING:
                     return STRING_DATA_TYPE;
                 case ENUMERATION:
@@ -193,9 +193,9 @@
                             getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
                                     pluginConfig));
                 case BITS:
-                    return YANG_BITS_CLASS;
-                case BINARY:
-                    return YANG_BINARY_CLASS;
+                    return BIT_SET;
+                case DECIMAL64:
+                    return BIG_DECIMAL;
                 case LEAFREF:
                     YangType<?> referredType = getReferredTypeFromLeafref(yangType);
                     return getJavaImportClass(referredType, isListAttr, pluginConfig);
@@ -241,18 +241,18 @@
                 case UINT8:
                 case UINT16:
                 case UINT32:
+                case BINARY:
                 case STRING:
                 case BOOLEAN:
                 case EMPTY:
                     return JAVA_LANG;
                 case UINT64:
+                case DECIMAL64:
                     return JAVA_MATH;
                 case ENUMERATION:
                     return getEnumsPackage(yangType, conflictResolver);
-                case DECIMAL64:
                 case BITS:
-                case BINARY:
-                    return YANG_TYPES_PKG;
+                    return COLLECTION_IMPORTS;
                 case LEAFREF:
                     YangType<?> referredType = getReferredTypeFromLeafref(yangType);
                     return getJavaImportPackage(referredType, isListAttr, conflictResolver);
@@ -270,22 +270,20 @@
         } else {
             switch (type) {
                 case UINT64:
+                case DECIMAL64:
                     return JAVA_MATH;
+                case EMPTY:
                 case STRING:
                     return JAVA_LANG;
                 case ENUMERATION:
                     return getEnumsPackage(yangType, conflictResolver);
-                case DECIMAL64:
                 case BITS:
-                case BINARY:
-                    return YANG_TYPES_PKG;
+                    return COLLECTION_IMPORTS;
                 case LEAFREF:
                     YangType<?> referredType = getReferredTypeFromLeafref(yangType);
                     return getJavaImportPackage(referredType, isListAttr, conflictResolver);
                 case IDENTITYREF:
                     return getIdentityRefPackage(yangType, conflictResolver);
-                case EMPTY:
-                    return JAVA_LANG;
                 case UNION:
                     return getUnionPackage(yangType, conflictResolver);
                 case INSTANCE_IDENTIFIER:
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index 2f8c8d1..a5fc104 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -35,6 +35,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
 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.BUILD;
@@ -54,6 +55,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
 import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.DOUBLE;
 import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
@@ -64,6 +66,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.FROM_STRING_PARAM_NAME;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_BYTES;
 import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
 import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.HASH;
@@ -133,6 +136,7 @@
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
 
 /**
  * Represents generator for methods of generated files based on the file type.
@@ -296,6 +300,7 @@
             case INT:
             case SHORT:
             case LONG:
+            case DOUBLE:
                 return "0";
             case BOOLEAN_DATA_TYPE:
                 return FALSE;
@@ -748,10 +753,15 @@
                                              JavaAttributeInfo fromStringAttributeInfo) {
 
         String targetDataType = getReturnType(attr);
-        String parseFromStringMethod = getParseFromStringMethod(targetDataType,
-                fromStringAttributeInfo.getAttributeType());
-        return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE + parseFromStringMethod
-                + OPEN_PARENTHESIS + FROM_STRING_PARAM_NAME + CLOSE_PARENTHESIS;
+        if (fromStringAttributeInfo.getAttributeType().getDataType() == BINARY) {
+            return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE + FROM_STRING_PARAM_NAME
+                    + PERIOD + GET_BYTES + OPEN_PARENTHESIS + CLOSE_PARENTHESIS;
+        } else {
+            String parseFromStringMethod = getParseFromStringMethod(targetDataType,
+                                                                    fromStringAttributeInfo.getAttributeType());
+            return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL + SPACE + parseFromStringMethod
+                    + OPEN_PARENTHESIS + FROM_STRING_PARAM_NAME + CLOSE_PARENTHESIS;
+        }
     }
 
     /**
@@ -1092,14 +1102,14 @@
                 return LONG_WRAPPER + PERIOD + PARSE_LONG;
             case UINT64:
                 return NEW + SPACE + BIG_INTEGER;
+            case DECIMAL64:
+                return NEW + SPACE + BIG_DECIMAL;
             case STRING:
                 return EMPTY_STRING;
             case EMPTY:
             case BOOLEAN:
                 return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
-            case DECIMAL64:
             case BITS:
-            case BINARY:
             case UNION:
             case ENUMERATION:
             case DERIVED: