[ONOS-7299]YANG Runtime and Serializer: LeafType handling

Change-Id: I83e007975165fbf7e9e5e6377a268078a2ce47ca
diff --git a/runtime/pom.xml b/runtime/pom.xml
index 5b91611..be493dd 100644
--- a/runtime/pom.xml
+++ b/runtime/pom.xml
@@ -136,4 +136,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
index ee8de3d..7fae4ce 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/SerializerHelper.java
@@ -24,6 +24,7 @@
 import org.onosproject.yang.model.InnerNode;
 import org.onosproject.yang.model.LeafNode;
 import org.onosproject.yang.model.LeafSchemaContext;
+import org.onosproject.yang.model.LeafType;
 import org.onosproject.yang.model.ListSchemaContext;
 import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.model.SchemaContext;
@@ -318,6 +319,8 @@
             boolean initWithRId = false;
             HelperContext info = (HelperContext) builder.appInfo();
             ExtResourceIdBldr curBldr = info.getResourceIdBuilder();
+            LeafSchemaContext schema;
+            LeafType lType;
 
             if (curBldr != null) {
                 rIdBldr = info.getResourceIdBuilder();
@@ -357,18 +360,24 @@
                         if (((YangLeaf) childSchema).isKeyLeaf()) {
                             throw new IllegalArgumentException(E_RESID);
                         }
-                        valObject = getLeaf(value, childSchema);
-                        valNamespace = getValidValNamespace(value, childSchema,
+                        schema = (LeafSchemaContext) childSchema;
+                        valObject = getLeaf(value, schema);
+                        valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
-                        builder = LeafNode.builder(name, namespace).type(nodeType)
-                                .value(valObject).valueNamespace(valNamespace);
+                        lType = schema.getLeafType(value);
+                        builder = LeafNode.builder(name, namespace)
+                                .type(nodeType).value(valObject)
+                                .valueNamespace(valNamespace).leafType(lType);
                         break;
                     case MULTI_INSTANCE_LEAF_VALUE_NODE:
-                        valObject = getLeafList(value, childSchema);
-                        valNamespace = getValidValNamespace(value, childSchema,
+                        schema = (LeafSchemaContext) childSchema;
+                        valObject = getLeafList(value, schema);
+                        valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
-                        builder = LeafNode.builder(name, namespace).type(nodeType)
-                                .value(valObject).valueNamespace(valNamespace);
+                        lType = schema.getLeafType(value);
+                        builder = LeafNode.builder(name, namespace)
+                                .type(nodeType).value(valObject)
+                                .valueNamespace(valNamespace).leafType(lType);
                         builder = builder.addLeafListValue(valObject);
                         break;
                     default:
@@ -383,24 +392,28 @@
             } else {
                 switch (nodeType) {
                     case SINGLE_INSTANCE_LEAF_VALUE_NODE:
-                        valObject = getLeaf(value, childSchema);
-                        valNamespace = getValidValNamespace(value, childSchema,
+                        schema = (LeafSchemaContext) childSchema;
+                        valObject = getLeaf(value, schema);
+                        valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
+                        lType = schema.getLeafType(value);
                         if (((YangLeaf) childSchema).isKeyLeaf()) {
                             builder = builder.addKeyLeaf(
                                     name, namespace, valObject);
                         }
                         builder = builder.createChildBuilder(
                                 name, namespace, valObject, valNamespace)
-                                .type(nodeType);
+                                .type(nodeType).leafType(lType);
                         break;
                     case MULTI_INSTANCE_LEAF_VALUE_NODE:
-                        valObject = getLeafList(value, childSchema);
-                        valNamespace = getValidValNamespace(value, childSchema,
+                        schema = (LeafSchemaContext) childSchema;
+                        valObject = getLeafList(value, schema);
+                        valNamespace = getValidValNamespace(value, schema,
                                                             valNamespace);
+                        lType = schema.getLeafType(value);
                         builder = builder.createChildBuilder(
                                 name, namespace, valObject, valNamespace)
-                                .type(nodeType);
+                                .type(nodeType).leafType(lType);
                         builder = builder.addLeafListValue(valObject);
                         break;
                     default:
@@ -422,40 +435,36 @@
      * value.
      *
      * @param val value in string
-     * @param ctx schema context
+     * @param ctx leaf schema context
      * @return object of value
      * @throws IllegalArgumentException a violation of data type rules
      */
-    private static Object getLeafList(String val, SchemaContext ctx)
+    private static Object getLeafList(String val, LeafSchemaContext ctx)
             throws IllegalArgumentException {
-        LeafSchemaContext schema;
         try {
-            schema = (LeafSchemaContext) ctx;
-            ((YangLeafList) schema).getDataType().isValidValue(val);
+            ((YangLeafList) ctx).getDataType().isValidValue(val);
         } catch (DataModelException e) {
             throw new IllegalArgumentException(e.getMessage());
         }
-        return schema.fromString(val);
+        return ctx.fromString(val);
     }
 
     /**
      * Returns the corresponding datatype value object for given leaf value.
      *
      * @param val value in string
-     * @param ctx schema context
+     * @param ctx leaf schema context
      * @return object of value
      * @throws IllegalArgumentException a violation of data type rules
      */
-    private static Object getLeaf(String val, SchemaContext ctx)
+    private static Object getLeaf(String val, LeafSchemaContext ctx)
             throws IllegalArgumentException {
-        LeafSchemaContext schema;
         try {
-            schema = (LeafSchemaContext) ctx;
-            ((YangLeaf) schema).getDataType().isValidValue(val);
+            ((YangLeaf) ctx).getDataType().isValidValue(val);
         } catch (DataModelException e) {
             throw new IllegalArgumentException(e.getMessage());
         }
-        return schema.fromString(val);
+        return ctx.fromString(val);
     }
 
 
@@ -463,16 +472,15 @@
      * Returns valid value namespace which is module's namespace.
      *
      * @param val    value in string
-     * @param ctx    schema context
+     * @param ctx    leaf schema context
      * @param actual valNamespace either module name of namespace
      * @return validated value module's namespace
      * @throws IllegalArgumentException if input namespace is invalid
      */
-    private static String getValidValNamespace(String val, SchemaContext ctx,
+    private static String getValidValNamespace(String val, LeafSchemaContext ctx,
                                                String actual)
             throws IllegalArgumentException {
-        LeafSchemaContext schema = (LeafSchemaContext) ctx;
-        YangNamespace expected = schema.getValueNamespace(val);
+        YangNamespace expected = ctx.getValueNamespace(val);
         if (actual == null) {
             if (expected == null ||
                     expected.getModuleNamespace().equals(ctx.getSchemaId().namespace())) {
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
index 8294b75..a3bbe9c 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
@@ -33,6 +33,7 @@
 import org.onosproject.yang.model.InnerNode;
 import org.onosproject.yang.model.LeafNode;
 import org.onosproject.yang.model.LeafSchemaContext;
+import org.onosproject.yang.model.LeafType;
 import org.onosproject.yang.model.YangNamespace;
 
 import java.util.ArrayList;
@@ -909,12 +910,19 @@
      */
     List<DataNode.Builder> addLeafList(Set<Object> leafListVal,
                                        YangLeafList leafList) {
+        LeafType ltype;
         if (extBuilder != null) {
             for (Object val : leafListVal) {
+                if (val != null) {
+                    ltype = leafList.getLeafType(val.toString());
+                } else {
+                    ltype = leafList.getLeafType(null);
+                }
                 String valNamespace = getValNamespace(val, leafList);
                 DataNode.Builder leaf = extBuilder.createChildBuilder(
                         leafList.getName(), leafList.getNameSpace()
-                                .getModuleNamespace(), val, valNamespace);
+                                .getModuleNamespace(), val, valNamespace)
+                        .leafType(ltype);
                 leaf.type(MULTI_INSTANCE_LEAF_VALUE_NODE);
                 leaf.addLeafListValue(val);
                 extBuilder = leaf.exitNode();
@@ -924,11 +932,16 @@
         //In case of root node leaf lists.
         List<DataNode.Builder> builders = new ArrayList<>();
         for (Object val : leafListVal) {
+            if (val != null) {
+                ltype = leafList.getLeafType(val.toString());
+            } else {
+                ltype = leafList.getLeafType(null);
+            }
             String valNamespace = getValNamespace(val, leafList);
             DataNode.Builder leaf = LeafNode.builder(
                     leafList.getName(), leafList.getNameSpace()
                             .getModuleNamespace()).value(val)
-                    .valueNamespace(valNamespace);
+                    .valueNamespace(valNamespace).leafType(ltype);
             leaf.type(MULTI_INSTANCE_LEAF_VALUE_NODE);
             leaf.addLeafListValue(val);
             builders.add(leaf);
@@ -972,6 +985,12 @@
      */
     DataNode.Builder createLeafNode(YangLeaf yangLeaf, Object val) {
         String valNamespace = getValNamespace(val, yangLeaf);
+        LeafType ltype;
+        if (val != null) {
+            ltype = yangLeaf.getLeafType(val.toString());
+        } else {
+            ltype = yangLeaf.getLeafType(null);
+        }
         if (extBuilder != null) {
             //Add leaf to key leaves.
             if (yangLeaf.isKeyLeaf()) {
@@ -981,7 +1000,8 @@
             //build leaf node and add to parent node.
             DataNode.Builder leaf = extBuilder.createChildBuilder(
                     yangLeaf.getName(), yangLeaf.getNameSpace()
-                            .getModuleNamespace(), val, valNamespace);
+                            .getModuleNamespace(), val, valNamespace)
+                    .leafType(ltype);
             leaf.type(SINGLE_INSTANCE_LEAF_VALUE_NODE);
 
             extBuilder = leaf.exitNode();
@@ -990,7 +1010,7 @@
         return LeafNode.builder(yangLeaf.getName(), yangLeaf.getNameSpace()
                 .getModuleNamespace())
                 .type(SINGLE_INSTANCE_LEAF_VALUE_NODE)
-                .value(val).valueNamespace(valNamespace);
+                .value(val).valueNamespace(valNamespace).leafType(ltype);
     }
 
     /**
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModelConverterUtil.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModelConverterUtil.java
index ade1435..7c52154 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModelConverterUtil.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModelConverterUtil.java
@@ -260,7 +260,7 @@
      *
      * @param holder    leaf/leaf-list holder
      * @param holderObj leaf/leaf-list holder object
-     * @param leaf leaf schema object?
+     * @param leaf      leaf schema object?
      * @param name      leaf/leaf-list name
      * @param fieldObj  object of the leaf/leaf-list field
      * @param dataType  type of the leaf/leaf-list
@@ -312,6 +312,16 @@
             case LEAFREF:
                 YangLeafRef leafRef = (YangLeafRef) dataType
                         .getDataTypeExtendedInfo();
+                Object refLeaf = leafRef.getReferredLeafOrLeafList();
+                if (refLeaf instanceof YangLeaf) {
+                    holder = ((YangSchemaNode) ((YangLeaf) refLeaf)
+                            .getContainedIn());
+                    name = ((YangLeaf) refLeaf).getName();
+                } else if (refLeaf instanceof YangLeafList) {
+                    holder = ((YangSchemaNode) ((YangLeafList) refLeaf)
+                            .getContainedIn());
+                    name = ((YangLeafList) refLeaf).getName();
+                }
                 return getObjFromType(holder, holderObj, leaf, name, fieldObj,
                                       leafRef.getEffectiveDataType());
 
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
index cc45613..dbe6443 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
@@ -24,6 +24,7 @@
 import org.onosproject.yang.model.KeyLeaf;
 import org.onosproject.yang.model.LeafListKey;
 import org.onosproject.yang.model.LeafNode;
+import org.onosproject.yang.model.LeafType;
 import org.onosproject.yang.model.ListKey;
 import org.onosproject.yang.model.NodeKey;
 import org.onosproject.yang.model.ResourceId;
@@ -242,6 +243,35 @@
     }
 
     /**
+     * Validates the give data node content.
+     *  @param node  data node
+     * @param n     name
+     * @param ns    namespace
+     * @param type  leaf node type
+     * @param value value of leaf
+     * @param isleaf
+     */
+    public static void validateDataNode(DataNode node, String n, String ns,
+                                        LeafType type,
+                                        String value, boolean isleaf) {
+        NodeKey k = node.key();
+        SchemaId id = k.schemaId();
+        assertEquals(id.name(), n);
+        assertEquals(id.namespace(), ns);
+        if (isleaf) {
+            assertEquals(node.type(), SINGLE_INSTANCE_LEAF_VALUE_NODE);
+        } else {
+            assertEquals(node.type(), MULTI_INSTANCE_LEAF_VALUE_NODE);
+        }
+        assertEquals(((LeafNode) node).leafType(), type);
+        if (((LeafNode) node).value() == null) {
+            assertNull(value);
+        } else {
+            assertEquals(((LeafNode) node).value().toString(), value);
+        }
+    }
+
+    /**
      * Validates the give key leaf content.
      *
      * @param key key leaf
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
index 29f3333..27de52e 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
@@ -25,12 +25,14 @@
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.DataNode.Builder;
 import org.onosproject.yang.model.DefaultResourceData;
+import org.onosproject.yang.model.InnerNode;
 import org.onosproject.yang.model.ModelObject;
 import org.onosproject.yang.model.ModelObjectData;
 import org.onosproject.yang.model.ResourceData;
 
 import java.util.Base64;
 import java.util.BitSet;
+import java.util.Iterator;
 import java.util.List;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -38,17 +40,36 @@
 import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun0.Tpdfun0Enum.ASTERISK;
 import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun0.Tpdfun0Enum.SUCCESSFUL_EXIT;
 import static org.onosproject.yang.gen.v1.simpledatatypesll.rev20131112.simpledatatypesll.cont1.Lfenum1Enum.GRACE_PERIOD_EXPIRED;
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.model.LeafType.BINARY;
+import static org.onosproject.yang.model.LeafType.BITS;
+import static org.onosproject.yang.model.LeafType.BOOLEAN;
+import static org.onosproject.yang.model.LeafType.DECIMAL64;
+import static org.onosproject.yang.model.LeafType.EMPTY;
+import static org.onosproject.yang.model.LeafType.ENUMERATION;
+import static org.onosproject.yang.model.LeafType.IDENTITYREF;
+import static org.onosproject.yang.model.LeafType.INSTANCE_IDENTIFIER;
+import static org.onosproject.yang.model.LeafType.INT16;
+import static org.onosproject.yang.model.LeafType.INT32;
+import static org.onosproject.yang.model.LeafType.INT64;
+import static org.onosproject.yang.model.LeafType.INT8;
+import static org.onosproject.yang.model.LeafType.STRING;
+import static org.onosproject.yang.model.LeafType.UINT16;
+import static org.onosproject.yang.model.LeafType.UINT32;
+import static org.onosproject.yang.model.LeafType.UINT64;
+import static org.onosproject.yang.model.LeafType.UINT8;
 import static org.onosproject.yang.runtime.SerializerHelper.addDataNode;
 import static org.onosproject.yang.runtime.SerializerHelper.exitDataNode;
 import static org.onosproject.yang.runtime.SerializerHelper.initializeDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
 
 /**
  * Tests the YANG object building for different data types.
  */
 public class YobSimpleDataTypeTest {
 
-    private static final String DATA_TYPE_NAME_SPACE = "simple:data:types";
-    private static final String DATA_TYPE_NAME_SPACE_LL =
+    public static final String DT_NS = "simple:data:types";
+    private static final String DT_LL =
             "simple:data:types:ll";
     private static final String VALUE_NAMESPACE = "yms:test:ytb:data:types";
     TestYangSerializerContext context = new TestYangSerializerContext();
@@ -58,170 +79,170 @@
     private DataNode buildDataNodeForSimpleDataTypes() {
         dBlr = initializeDataNode(context);
         value = null;
-        dBlr = addDataNode(dBlr, "cont", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "cont", DT_NS, value, null);
 
         value = "-128";
-        dBlr = addDataNode(dBlr, "lfnint8Min", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint8Min", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "127";
-        dBlr = addDataNode(dBlr, "lfnint8Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint8Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-32768";
-        dBlr = addDataNode(dBlr, "lfnint16Min", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint16Min", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "32767";
-        dBlr = addDataNode(dBlr, "lfnint16Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint16Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-2147483648";
-        dBlr = addDataNode(dBlr, "lfnint32Min", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint32Min", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "2147483647";
-        dBlr = addDataNode(dBlr, "lfnint32Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint32Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "10090";
-        dBlr = addDataNode(dBlr, "lfnint64Min", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint64Min", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "100700";
-        dBlr = addDataNode(dBlr, "lfnint64Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnint64Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "255";
-        dBlr = addDataNode(dBlr, "lfnuint8Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnuint8Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "65535";
-        dBlr = addDataNode(dBlr, "lfnuint16Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnuint16Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "10000";
-        dBlr = addDataNode(dBlr, "lfnuint32Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfnuint32Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "32656256558";
-        dBlr = addDataNode(dBlr, "lfuint64Max", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfuint64Max", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "string1";
-        dBlr = addDataNode(dBlr, "lfstr", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfstr", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "string2";
-        dBlr = addDataNode(dBlr, "lfstr1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfstr1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "true";
-        dBlr = addDataNode(dBlr, "lfbool1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfbool1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "false";
-        dBlr = addDataNode(dBlr, "lfbool2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfbool2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "false";
-        dBlr = addDataNode(dBlr, "lfbool3", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfbool3", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-922337203685477580.8";
-        dBlr = addDataNode(dBlr, "lfdecimal1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfdecimal1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-92233720368547758.08";
-        dBlr = addDataNode(dBlr, "lfdecimal2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfdecimal2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-9223372036854775.808";
-        dBlr = addDataNode(dBlr, "lfdecimal3", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfdecimal3", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-922337203685477.5808";
-        dBlr = addDataNode(dBlr, "lfdecimal4", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfdecimal4", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-9223372036854.775808";
-        dBlr = addDataNode(dBlr, "lfdecimal6", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfdecimal6", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "3.3ms";
-        dBlr = addDataNode(dBlr, "lfenum", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfenum", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "bit1";
-        dBlr = addDataNode(dBlr, "lfbits", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfbits", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "aGV5";
-        dBlr = addDataNode(dBlr, "lfbinary", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfbinary", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "path";
-        dBlr = addDataNode(dBlr, "lfref1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfref1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "100";
-        dBlr = addDataNode(dBlr, "lfref2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfref2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "";
-        dBlr = addDataNode(dBlr, "lfempty", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfempty", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "cost";
-        dBlr = addDataNode(dBlr, "lfunion1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "-92233720368547758.08";
-        dBlr = addDataNode(dBlr, "lfunion2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "true";
-        dBlr = addDataNode(dBlr, "lfunion4", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion4", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "color";
-        dBlr = addDataNode(dBlr, "lfunion5", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion5", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "b1";
-        dBlr = addDataNode(dBlr, "lfunion7", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion7", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "bandwidth";
-        dBlr = addDataNode(dBlr, "lfunion8", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion8", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "200";
-        dBlr = addDataNode(dBlr, "lfunion9", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion9", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "true";
-        dBlr = addDataNode(dBlr, "lfunion10", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion10", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "b1";
-        dBlr = addDataNode(dBlr, "lfunion11", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion11", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "true";
-        dBlr = addDataNode(dBlr, "lfunion12", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion12", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "b2";
-        dBlr = addDataNode(dBlr, "lfunion13", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion13", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "one";
-        dBlr = addDataNode(dBlr, "lfunion14", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfunion14", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "iden";
-        dBlr = addDataNode(dBlr, "identityref1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "identityref1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "pro";
@@ -229,175 +250,340 @@
         dBlr = exitDataNode(dBlr);
 
         value = "successful exit";
-        dBlr = addDataNode(dBlr, "lfenum1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfenum1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "*";
-        dBlr = addDataNode(dBlr, "lfenum2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lfenum2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         value = "/cont";
-        dBlr = addDataNode(dBlr, "inst-iden", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "inst-iden", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
 
         dBlr = getLeafRefData(dBlr);
+        validateDataNodeForSimpleDataTypes(dBlr.build());
         dBlr = exitDataNode(dBlr);
         return dBlr.build();
     }
 
+    public static void validateDataNodeForSimpleDataTypes(DataNode node) {
+        DataNode n = node;
+        validateDataNode(n, "cont", DT_NS, SINGLE_INSTANCE_NODE,
+                         true, null);
+        Iterator<DataNode> it3 = ((InnerNode) n).childNodes().values()
+                .iterator();
+        n = it3.next();
+        validateDataNode(n, "lfnint8Min", DT_NS, INT8, "-128", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint8Max", DT_NS, INT8, "127", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint16Min", DT_NS, INT16, "-32768", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint16Max", DT_NS, INT16, "32767", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint32Min", DT_NS, INT32, "-2147483648", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint32Max", DT_NS, INT32, "2147483647", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint64Min", DT_NS, INT64, "10090", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint64Max", DT_NS, INT64, "100700", true);
+        n = it3.next();
+        validateDataNode(n, "lfnuint8Max", DT_NS, UINT8, "255", true);
+        n = it3.next();
+        validateDataNode(n, "lfnuint16Max", DT_NS, UINT16, "65535", true);
+        n = it3.next();
+        validateDataNode(n, "lfnuint32Max", DT_NS, UINT32, "10000", true);
+        n = it3.next();
+        validateDataNode(n, "lfuint64Max", DT_NS, UINT64, "32656256558", true);
+        n = it3.next();
+        validateDataNode(n, "lfstr", DT_NS, STRING, "string1", true);
+        n = it3.next();
+        validateDataNode(n, "lfstr1", DT_NS, STRING, "string2", true);
+        n = it3.next();
+        validateDataNode(n, "lfbool1", DT_NS, BOOLEAN, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfbool2", DT_NS, BOOLEAN, "false", true);
+        n = it3.next();
+        validateDataNode(n, "lfbool3", DT_NS, BOOLEAN, "false", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal1", DT_NS, DECIMAL64,
+                         "-922337203685477580.8", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal2", DT_NS, DECIMAL64,
+                         "-92233720368547758.08", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal3", DT_NS, DECIMAL64,
+                         "-9223372036854775.808", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal4", DT_NS, DECIMAL64,
+                         "-922337203685477.5808", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal6", DT_NS, DECIMAL64,
+                         "-9223372036854.775808", true);
+        n = it3.next();
+        validateDataNode(n, "lfenum", DT_NS, ENUMERATION, "3.3ms", true);
+        n = it3.next();
+        validateDataNode(n, "lfbits", DT_NS, BITS, "bit1", true);
+        n = it3.next();
+        validateDataNode(n, "lfbinary", DT_NS, BINARY, "aGV5", true);
+        n = it3.next();
+        validateDataNode(n, "lfref1", DT_NS, STRING, "path", true);
+        n = it3.next();
+        validateDataNode(n, "lfref2", DT_NS, INT8, "100", true);
+        n = it3.next();
+        validateDataNode(n, "lfempty", DT_NS, EMPTY, null, true);
+        n = it3.next();
+        validateDataNode(n, "lfunion1", DT_NS, STRING, "cost", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion2", DT_NS, DECIMAL64,
+                         "-92233720368547758.08", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion4", DT_NS, BOOLEAN, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion5", DT_NS, STRING, "color", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion7", DT_NS, BITS, "b1", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion8", DT_NS, STRING, "bandwidth", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion9", DT_NS, UINT16, "200", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion10", DT_NS, BOOLEAN, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion11", DT_NS, BITS, "b1", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion12", DT_NS, EMPTY, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion13", DT_NS, BITS, "b2", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion14", DT_NS, ENUMERATION, "one", true);
+        n = it3.next();
+        validateDataNode(n, "identityref1", DT_NS, IDENTITYREF, "iden", true);
+        n = it3.next();
+        validateDataNode(n, "identityref2", DT_NS, IDENTITYREF, "pro", true);
+        n = it3.next();
+        validateDataNode(n, "lfenum1", DT_NS, ENUMERATION, "successful exit", true);
+        n = it3.next();
+        validateDataNode(n, "lfenum2", DT_NS, ENUMERATION, "*", true);
+        n = it3.next();
+        validateDataNode(n, "inst-iden", DT_NS, INSTANCE_IDENTIFIER, "/cont", true);
+        validateLeafRef(it3);
+    }
+
+    static void validateLeafRef(Iterator<DataNode> it3) {
+
+        DataNode n = it3.next();
+        validateDataNode(n, "lref1", DT_NS, INT8, "8", true);
+        n = it3.next();
+        validateDataNode(n, "lref2", DT_NS, IDENTITYREF, "val", true);
+        n = it3.next();
+        validateDataNode(n, "lref3", DT_NS, ENUMERATION, "zero", true);
+        n = it3.next();
+        validateDataNode(n, "lref4", DT_NS, BITS, "b2 b3", true);
+        n = it3.next();
+        validateDataNode(n, "lref5", DT_NS, DECIMAL64, "-92233720368547758.08",
+                         true);
+        n = it3.next();
+        validateDataNode(n, "lref6", DT_NS, INT8, "10", true);
+        n = it3.next();
+        validateDataNode(n, "lref7", DT_NS, ENUMERATION, "enum4", true);
+        n = it3.next();
+        validateDataNode(n, "lref8", DT_NS, DECIMAL64, "-9223372036854.775808",
+                         true);
+        n = it3.next();
+        validateDataNode(n, "lref9", DT_NS, BINARY, "MTAxMDEwMTAx", true);
+        n = it3.next();
+        validateDataNode(n, "lref10", DT_NS, EMPTY, null, true);
+        n = it3.next();
+        validateDataNode(n, "lref11", DT_NS, EMPTY, null, true);
+        n = it3.next();
+        validateDataNode(n, "lref12", DT_NS, BITS, "b3", true);
+        n = it3.next();
+        validateDataNode(n, "lref13", DT_NS, EMPTY, null, true);
+        n = it3.next();
+        validateDataNode(n, "lref14", DT_NS, BITS, "b1 b2 b3", true);
+        n = it3.next();
+        validateDataNode(n, "lref15", DT_NS, INSTANCE_IDENTIFIER, "/cont", true);
+        n = it3.next();
+        validateDataNode(n, "lref16", DT_NS, IDENTITYREF, "physical", true);
+        n = it3.next();
+        validateDataNode(n, "lref17", DT_NS, UINT64, "784985", true);
+        n = it3.next();
+        validateDataNode(n, "lref18", DT_NS, BINARY, "MTExMTExMTE=", true);
+        n = it3.next();
+        validateDataNode(n, "lref19", DT_NS, ENUMERATION, "hundred", true);
+        n = it3.next();
+        validateDataNode(n, "lref20", DT_NS, STRING, "leafref", true);
+        n = it3.next();
+        validateDataNode(n, "iref1", DT_NS, IDENTITYREF, "val", true);
+        n = it3.next();
+        validateDataNode(n, "iref3", DT_NS, IDENTITYREF, "physical", true);
+        n = it3.next();
+        validateDataNode(n, "iref2", DT_NS, IDENTITYREF, "pro", false);
+        n = it3.next();
+        validateDataNode(n, "iref4", DT_NS, IDENTITYREF, "virtual", false);
+    }
+
     private Builder getLeafRefData(Builder dBlr) {
         value = "8";
-        dBlr = addDataNode(dBlr, "lref1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "val";
-        dBlr = addDataNode(dBlr, "lref2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "zero";
-        dBlr = addDataNode(dBlr, "lref3", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref3", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "b2 b3";
-        dBlr = addDataNode(dBlr, "lref4", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref4", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "-92233720368547758.08";
-        dBlr = addDataNode(dBlr, "lref5", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref5", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "10";
-        dBlr = addDataNode(dBlr, "lref6", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref6", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "enum4";
-        dBlr = addDataNode(dBlr, "lref7", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref7", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "-9223372036854.775808";
-        dBlr = addDataNode(dBlr, "lref8", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref8", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "MTAxMDEwMTAx";
-        dBlr = addDataNode(dBlr, "lref9", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref9", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "";
-        dBlr = addDataNode(dBlr, "lref10", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref10", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "";
-        dBlr = addDataNode(dBlr, "lref11", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref11", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "b3";
-        dBlr = addDataNode(dBlr, "lref12", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref12", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "";
-        dBlr = addDataNode(dBlr, "lref13", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref13", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "b1 b2 b3";
-        dBlr = addDataNode(dBlr, "lref14", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref14", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "/cont";
-        dBlr = addDataNode(dBlr, "lref15", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref15", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "physical";
-        dBlr = addDataNode(dBlr, "lref16", DATA_TYPE_NAME_SPACE, value,
+        dBlr = addDataNode(dBlr, "lref16", DT_NS, value,
                            VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
         value = "784985";
-        dBlr = addDataNode(dBlr, "lref17", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref17", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "MTExMTExMTE=";
-        dBlr = addDataNode(dBlr, "lref18", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref18", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "hundred";
-        dBlr = addDataNode(dBlr, "lref19", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref19", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "leafref";
-        dBlr = addDataNode(dBlr, "lref20", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref20", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "val";
-        dBlr = addDataNode(dBlr, "iref1", DATA_TYPE_NAME_SPACE, value, null);
-        dBlr = exitDataNode(dBlr);
-        value = "pro";
-        dBlr = addDataNode(dBlr, "iref2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "iref1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "physical";
-        dBlr = addDataNode(dBlr, "iref3", DATA_TYPE_NAME_SPACE, value,
+        dBlr = addDataNode(dBlr, "iref3", DT_NS, value,
                            VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
+        value = "pro";
+        dBlr = addDataNode(dBlr, "iref2", DT_NS, value, null);
+        dBlr = exitDataNode(dBlr);
         value = "virtual";
-        dBlr = addDataNode(dBlr, "iref4", DATA_TYPE_NAME_SPACE, value,
+        dBlr = addDataNode(dBlr, "iref4", DT_NS, value,
                            VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
-        dBlr = addDataNode(dBlr, "cont3", DATA_TYPE_NAME_SPACE, null, null);
+        dBlr = addDataNode(dBlr, "cont3", DT_NS, null, null);
+        dBlr = getLeafListBuilder(dBlr);
+        dBlr = exitDataNode(dBlr);
+        return dBlr;
+    }
+
+    private Builder getLeafListBuilder(Builder dBlr) {
         value = "108";
-        dBlr = addDataNode(dBlr, "llref1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "val";
-        dBlr = addDataNode(dBlr, "llref2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "one";
-        dBlr = addDataNode(dBlr, "llref3", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref3", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "b1 b3";
-        dBlr = addDataNode(dBlr, "llref4", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref4", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "-922337203685470058.08";
-        dBlr = addDataNode(dBlr, "llref5", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref5", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "121";
-        dBlr = addDataNode(dBlr, "llref6", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref6", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "3.3ms";
-        dBlr = addDataNode(dBlr, "llref7", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref7", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "-9223372036000.775808";
-        dBlr = addDataNode(dBlr, "llref8", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref8", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "MTExMTExMTE=";
-        dBlr = addDataNode(dBlr, "llref9", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref9", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "";
-        dBlr = addDataNode(dBlr, "llref11", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref11", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "b2";
-        dBlr = addDataNode(dBlr, "llref12", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref12", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "";
-        dBlr = addDataNode(dBlr, "llref13", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref13", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "b1";
-        dBlr = addDataNode(dBlr, "llref14", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref14", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "/cont/con2";
-        dBlr = addDataNode(dBlr, "llref15", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref15", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "virtual";
-        dBlr = addDataNode(dBlr, "llref16", DATA_TYPE_NAME_SPACE, value,
+        dBlr = addDataNode(dBlr, "llref16", DT_NS, value,
                            "yms:test:ytb:data:types", null);
         dBlr = exitDataNode(dBlr);
         value = "78498522";
-        dBlr = addDataNode(dBlr, "llref17", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref17", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "MDEwMTAxMDEw";
-        dBlr = addDataNode(dBlr, "llref18", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref18", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "ten";
-        dBlr = addDataNode(dBlr, "llref19", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref19", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "leaflistref";
-        dBlr = addDataNode(dBlr, "llref20", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "llref20", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "check";
-        dBlr = addDataNode(dBlr, "lref21", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "lref21", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "val";
-        dBlr = addDataNode(dBlr, "iref1", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "iref1", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "pro";
-        dBlr = addDataNode(dBlr, "iref2", DATA_TYPE_NAME_SPACE, value, null);
+        dBlr = addDataNode(dBlr, "iref2", DT_NS, value, null);
         dBlr = exitDataNode(dBlr);
         value = "physical";
-        dBlr = addDataNode(dBlr, "iref3", DATA_TYPE_NAME_SPACE, value,
+        dBlr = addDataNode(dBlr, "iref3", DT_NS, value,
                            VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
         value = "virtual";
-        dBlr = addDataNode(dBlr, "iref4", DATA_TYPE_NAME_SPACE, value,
+        dBlr = addDataNode(dBlr, "iref4", DT_NS, value,
                            VALUE_NAMESPACE, null);
         dBlr = exitDataNode(dBlr);
-        dBlr = exitDataNode(dBlr);
         return dBlr;
     }
 
@@ -405,7 +591,7 @@
     private DataNode buildDnForLeafListSimpleDataTypes() {
         dBlr = initializeDataNode(context);
         value = null;
-        dBlr = addDataNode(dBlr, "cont1", DATA_TYPE_NAME_SPACE_LL, value, null);
+        dBlr = addDataNode(dBlr, "cont1", DT_LL, value, null);
 
         value = "-128";
         dBlr = addDataNode(dBlr, "lfnint8Min", null, value, null);
@@ -578,12 +764,115 @@
         value = "*";
         dBlr = addDataNode(dBlr, "lfenum2", null, value, null);
         dBlr = exitDataNode(dBlr);
-
+        validateLeafListDataTypes(dBlr.build());
         dBlr = exitDataNode(dBlr);
 
         return dBlr.build();
     }
 
+    private void validateLeafListDataTypes(DataNode node) {
+        DataNode n = node;
+        validateDataNode(n, "cont1", DT_LL, SINGLE_INSTANCE_NODE,
+                         true, null);
+        Iterator<DataNode> it3 = ((InnerNode) n).childNodes().values()
+                .iterator();
+        n = it3.next();
+        validateDataNode(n, "lfnint8Min", DT_LL, INT8, "-128", false);
+        n = it3.next();
+        validateDataNode(n, "lfnint8Max", DT_LL, INT8, "127", false);
+        n = it3.next();
+        validateDataNode(n, "lfnint16Min", DT_LL, INT16, "-32768", false);
+        n = it3.next();
+        validateDataNode(n, "lfnint16Max", DT_LL, INT16, "32767", false);
+        n = it3.next();
+        validateDataNode(n, "lfnint32Min", DT_LL, INT32, "-2147483648", false);
+        n = it3.next();
+        validateDataNode(n, "lfnint32Max", DT_LL, INT32, "2147483647", false);
+        n = it3.next();
+        validateDataNode(n, "lfnint64Min", DT_LL, INT64, "10090", false);
+        n = it3.next();
+        validateDataNode(n, "lfnint64Max", DT_LL, INT64, "100700", false);
+        n = it3.next();
+        validateDataNode(n, "lfnuint8Max", DT_LL, UINT8, "255", false);
+        n = it3.next();
+        validateDataNode(n, "lfnuint16Max", DT_LL, UINT16, "65535", false);
+        n = it3.next();
+        validateDataNode(n, "lfnuint32Max", DT_LL, UINT32, "10000", false);
+        n = it3.next();
+        validateDataNode(n, "lfuint64Max", DT_LL, UINT64, "32656256558", false);
+        n = it3.next();
+        validateDataNode(n, "lfstr", DT_LL, STRING, "string1", false);
+        n = it3.next();
+        validateDataNode(n, "lfstr1", DT_LL, STRING, "string2", false);
+        n = it3.next();
+        validateDataNode(n, "lfbool1", DT_LL, BOOLEAN, "true", false);
+        n = it3.next();
+        validateDataNode(n, "lfbool2", DT_LL, BOOLEAN, "false", false);
+        n = it3.next();
+        validateDataNode(n, "lfbool3", DT_LL, BOOLEAN, "false", false);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal1", DT_LL, DECIMAL64,
+                         "-922337203685477580.8", false);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal2", DT_LL, DECIMAL64,
+                         "-92233720368547758.08", false);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal3", DT_LL, DECIMAL64,
+                         "-9223372036854775.808", false);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal4", DT_LL, DECIMAL64,
+                         "-922337203685477.5808", false);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal6", DT_LL, DECIMAL64,
+                         "-9223372036854.775808", false);
+        n = it3.next();
+        validateDataNode(n, "lfenum", DT_LL, ENUMERATION, "enum1", false);
+        n = it3.next();
+        validateDataNode(n, "lfbits", DT_LL, BITS, "bit1", false);
+        n = it3.next();
+        validateDataNode(n, "lfbinary", DT_LL, BINARY, "aGVsbG8=", false);
+        n = it3.next();
+        validateDataNode(n, "lfref1", DT_LL, STRING, "path", false);
+        n = it3.next();
+        validateDataNode(n, "lfref2", DT_LL, INT8, "100", false);
+        n = it3.next();
+        validateDataNode(n, "lfempty", DT_LL, EMPTY, null, false);
+        n = it3.next();
+        validateDataNode(n, "lfunion1", DT_LL, STRING, "cost", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion2", DT_LL, DECIMAL64,
+                         "-92233720368547758.08", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion4", DT_LL, BOOLEAN, "true", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion5", DT_LL, STRING, "color", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion7", DT_LL, BITS, "b1", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion8", DT_LL, STRING, "bandwidth", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion9", DT_LL, UINT16, "200", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion10", DT_LL, BOOLEAN, "true", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion11", DT_LL, BITS, "b1", false);
+        n = it3.next();
+        // need to be handled later
+        validateDataNode(n, "lfunion12", DT_LL, EMPTY, "true", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion13", DT_LL, BITS, "b2", false);
+        n = it3.next();
+        validateDataNode(n, "lfunion14", DT_LL, ENUMERATION, "one", false);
+        n = it3.next();
+        validateDataNode(n, "identityref1", DT_LL, IDENTITYREF, "iden", false);
+        n = it3.next();
+        validateDataNode(n, "lfenum1", DT_LL, ENUMERATION,
+                         "grace period expired", false);
+        n = it3.next();
+        validateDataNode(n, "lfenum2", DT_LL, ENUMERATION, "*", false);
+    }
+
+
     @Test
     public void allDataTypesTest() {
         DataNode dataNode = buildDataNodeForSimpleDataTypes();
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YtbSimpleDataTypeTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YtbSimpleDataTypeTest.java
new file mode 100644
index 0000000..d827f6c
--- /dev/null
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YtbSimpleDataTypeTest.java
@@ -0,0 +1,447 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * 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.yang.runtime.impl;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.DefaultCont;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Iden;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Pro;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Tpdfbit;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Tpdfun0;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Tpdfun1;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Tpdfun2;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Tpdfun3;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Tpdfun4;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Val;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.LfenumEnum;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion10Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion11Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion14Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion1Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion2Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion4Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion5Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion8Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.Lfunion9Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.gr.Cont3;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.gr.DefaultCont3;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun1.Tpdfun1Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun2.Tpdfun2Union;
+import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun3.Tpdfun3Union;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Def1;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Def2;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Def3;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Physical;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Type;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Virtual;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.def1.Def1Union;
+import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.DefaultModelObjectData.Builder;
+import org.onosproject.yang.model.InnerNode;
+import org.onosproject.yang.model.ResourceData;
+import org.onosproject.yang.model.ResourceId;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.BitSet;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.lfunion14union.Lfunion14UnionEnum1.ONE;
+import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.cont.lfunion14union.Lfunion14UnionEnum1.ZERO;
+import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun0.Tpdfun0Enum.ASTERISK;
+import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun0.Tpdfun0Enum.SUCCESSFUL_EXIT;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.def1.def1union.Def1UnionEnum1.HUNDRED;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.def1.def1union.Def1UnionEnum1.TEN;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.def1.def1union.Def1UnionEnum1.YANGAUTOPREFIX3_3MS;
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.model.LeafType.BINARY;
+import static org.onosproject.yang.model.LeafType.BITS;
+import static org.onosproject.yang.model.LeafType.BOOLEAN;
+import static org.onosproject.yang.model.LeafType.DECIMAL64;
+import static org.onosproject.yang.model.LeafType.EMPTY;
+import static org.onosproject.yang.model.LeafType.ENUMERATION;
+import static org.onosproject.yang.model.LeafType.IDENTITYREF;
+import static org.onosproject.yang.model.LeafType.INSTANCE_IDENTIFIER;
+import static org.onosproject.yang.model.LeafType.INT16;
+import static org.onosproject.yang.model.LeafType.INT32;
+import static org.onosproject.yang.model.LeafType.INT64;
+import static org.onosproject.yang.model.LeafType.INT8;
+import static org.onosproject.yang.model.LeafType.STRING;
+import static org.onosproject.yang.model.LeafType.UINT16;
+import static org.onosproject.yang.model.LeafType.UINT32;
+import static org.onosproject.yang.model.LeafType.UINT64;
+import static org.onosproject.yang.model.LeafType.UINT8;
+import static org.onosproject.yang.runtime.impl.MockYangSchemaNodeProvider.processSchemaRegistry;
+import static org.onosproject.yang.runtime.impl.MockYangSchemaNodeProvider.registry;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
+import static org.onosproject.yang.runtime.impl.YobSimpleDataTypeTest.DT_NS;
+import static org.onosproject.yang.runtime.impl.YobSimpleDataTypeTest.validateLeafRef;
+
+/**
+ * Unit test cases for resource id conversion from model object id.
+ */
+public class YtbSimpleDataTypeTest {
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+    private ResourceData rscData;
+    private DefaultDataTreeBuilder treeBuilder;
+    private ResourceId id;
+    private Builder data;
+    DefaultYangModelRegistry reg;
+
+    /**
+     * Prior setup for each UT.
+     */
+    @Before
+    public void setUp() {
+        processSchemaRegistry();
+        reg = registry();
+        treeBuilder = new DefaultDataTreeBuilder(reg);
+    }
+
+
+    /**
+     * Processes simple datatype with different datatype combination.
+     */
+    @Test
+    public void processDataTypeValidationTest() {
+
+        DefaultCont cont = new DefaultCont();
+
+        byte value = -128;
+        cont.lfnint8Min(value);
+        value = 127;
+        cont.lfnint8Max(value);
+        short val = -32768;
+        cont.lfnint16Min(val);
+        val = 32767;
+        cont.lfnint16Max(val);
+        cont.lfnint32Min(-2147483648);
+        cont.lfnint32Max(2147483647);
+        cont.lfnint64Min(10090L);
+        cont.lfnint64Max(100700L);
+        val = 255;
+        cont.lfnuint8Max(val);
+        cont.lfnuint16Max(65535);
+        cont.lfnuint32Max(10000L);
+        cont.lfuint64Max((BigInteger.valueOf(32656256558L)));
+        cont.lfstr("string1");
+        cont.lfstr1("string2");
+        cont.lfbool1(true);
+        cont.lfbool2(false);
+        cont.lfbool3(false);
+        cont.lfdecimal1(new BigDecimal("-922337203685477580.8"));
+        cont.lfdecimal2(new BigDecimal("-92233720368547758.08"));
+        cont.lfdecimal3(new BigDecimal("-9223372036854775.808"));
+        cont.lfdecimal4(new BigDecimal("-922337203685477.5808"));
+        cont.lfdecimal6(new BigDecimal("-9223372036854.775808"));
+        cont.lfenum(LfenumEnum.YANGAUTOPREFIX3_3MS);
+        BitSet bits = new BitSet();
+        bits.set(0, true);
+        cont.lfbits(bits);
+        cont.lfbinary("hey".getBytes());
+        cont.lfref1("path");
+        value = 100;
+        cont.lfref2(value);
+        cont.lfempty(true);
+        cont.lfunion1(new Lfunion1Union("cost"));
+        cont.lfunion2(new Lfunion2Union(
+                new BigDecimal("-92233720368547758.08")));
+        cont.lfunion4(new Lfunion4Union("true"));
+        cont.lfunion5(new Lfunion5Union("color"));
+        cont.lfunion7(new Tpdfun3(new Tpdfun3Union(new Tpdfbit(bits))));
+        cont.lfunion8(new Lfunion8Union("bandwidth"));
+        cont.lfunion9(new Lfunion9Union(200));
+        cont.lfunion10(new Lfunion10Union(true));
+        cont.lfunion11(new Lfunion11Union(new Tpdfun2(new Tpdfun2Union(
+                new Tpdfun3(new Tpdfun3Union(new Tpdfbit(bits)))))));
+        cont.lfunion12(new Tpdfun2(new Tpdfun2Union(new Tpdfun4(true))));
+        BitSet bits1 = new BitSet();
+        bits1.set(1, true);
+        cont.lfunion13(new Tpdfbit(bits1));
+        cont.lfunion14(new Lfunion14Union(ONE));
+        cont.identityref1(Iden.class);
+        cont.identityref2(Pro.class);
+        cont.lfenum1(new Tpdfun0(SUCCESSFUL_EXIT));
+        cont.lfenum2(new Tpdfun0(ASTERISK));
+        cont.instIden("/cont");
+        value = 8;
+        cont.lref1(value);
+        cont.lref2(Val.class);
+        cont.lref3(new Lfunion14Union(ZERO));
+        BitSet bits2 = new BitSet();
+        bits2.set(1, 3, true);
+        cont.lref4(new Tpdfbit(bits2));
+        cont.lref5(new Lfunion11Union(new Tpdfun1(new Tpdfun1Union(
+                new BigDecimal("-92233720368547758.08")))));
+        value = 10;
+        cont.lref6(value);
+        cont.lref7(LfenumEnum.ENUM4);
+        cont.lref8(new BigDecimal("-9223372036854.775808"));
+        byte[] arr = Base64.getDecoder().decode("MTAxMDEwMTAx");
+        cont.lref9(arr);
+        cont.lref10(true);
+        cont.lref11(new Def3(true));
+        BitSet bits3 = new BitSet();
+        bits3.set(2, true);
+        cont.lref12(new Def2(bits3));
+        cont.lref13(true);
+        BitSet bits4 = new BitSet();
+        bits4.set(0, 3, true);
+        cont.lref14(bits4);
+        cont.lref15("/cont");
+        cont.lref16(Physical.class);
+        cont.lref17(new Def1(new Def1Union(BigInteger.valueOf(784985))));
+        arr = Base64.getDecoder().decode("MTExMTExMTE=");
+        cont.lref18(arr);
+        cont.lref19(new Def1(new Def1Union(HUNDRED)));
+        cont.lref20("leafref");
+        cont.iref1(Val.class);
+        List<Class<? extends Iden>> l = new ArrayList<>();
+        l.add(Pro.class);
+        cont.iref2(l);
+        cont.iref3(Physical.class);
+        List<Class<? extends Type>> l1 = new ArrayList<>();
+        l1.add(Virtual.class);
+        cont.iref4(l1);
+
+        Cont3 cont3 = getCont3Object();
+        cont.cont3(cont3);
+        data = new Builder();
+        data.addModelObject(cont);
+        rscData = treeBuilder.getResourceData(data.build());
+
+        List<DataNode> nodes = rscData.dataNodes();
+        DataNode n = nodes.get(0);
+        validateDataNodeForSimpleDataTypes(n);
+        DataNode n1 = nodes.get(0);
+    }
+
+    private Cont3 getCont3Object() {
+        DefaultCont3 cont3 = new DefaultCont3();
+        cont3.addToLlref1(108);
+        cont3.addToLlref2("val");
+        cont3.addToLlref3(ONE);
+        BitSet bits2 = new BitSet();
+        bits2.set(0, true);
+        bits2.set(2, true);
+        cont3.addToLlref4(new Tpdfbit(bits2));
+        cont3.addToLlref5(new BigDecimal("-92233720368547758.08"));
+        cont3.addToLlref6(121);
+        cont3.addToLlref7(YANGAUTOPREFIX3_3MS);
+        cont3.addToLlref8(new BigDecimal("-9223372036000.775808"));
+        byte[] arr = Base64.getDecoder().decode("MTExMTExMTE=");
+        cont3.addToLlref9(arr);
+        cont3.addToLlref10(true);
+        cont3.addToLlref11(true);
+        BitSet bits4 = new BitSet();
+        bits4.set(1, true);
+        cont3.addToLlref12(new Tpdfbit(bits4));
+        cont3.addToLlref13(true);
+        BitSet bits3 = new BitSet();
+        bits3.set(0, true);
+        cont3.addToLlref14(bits3);
+        cont3.addToLlref15("/cont/con2");
+        cont3.addToLlref16(Virtual.class);
+        cont3.addToLlref17(78498522);
+        cont3.addToLlref18(Base64.getDecoder().decode("MDEwMTAxMDEw"));
+        cont3.addToLlref19(TEN);
+        cont3.addToLlref20("leaflistref");
+        cont3.iref1(Val.class);
+        List<Class<? extends Iden>> l = new ArrayList<>();
+        l.add(Pro.class);
+        cont3.iref2(l);
+        cont3.iref3(Physical.class);
+        cont3.addToIref4(Virtual.class);
+        return cont3;
+    }
+
+    public void validateDataNodeForSimpleDataTypes(DataNode node) {
+        DataNode n = node;
+        validateDataNode(n, "cont", DT_NS, SINGLE_INSTANCE_NODE,
+                         true, null);
+        Iterator<DataNode> it3 = ((InnerNode) n).childNodes().values()
+                .iterator();
+        n = it3.next();
+        validateDataNode(n, "lfnint8Min", DT_NS, INT8, "-128", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint8Max", DT_NS, INT8, "127", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint16Min", DT_NS, INT16, "-32768", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint16Max", DT_NS, INT16, "32767", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint32Min", DT_NS, INT32, "-2147483648", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint32Max", DT_NS, INT32, "2147483647", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint64Min", DT_NS, INT64, "10090", true);
+        n = it3.next();
+        validateDataNode(n, "lfnint64Max", DT_NS, INT64, "100700", true);
+        n = it3.next();
+        validateDataNode(n, "lfnuint8Max", DT_NS, UINT8, "255", true);
+        n = it3.next();
+        validateDataNode(n, "lfnuint16Max", DT_NS, UINT16, "65535", true);
+        n = it3.next();
+        validateDataNode(n, "lfnuint32Max", DT_NS, UINT32, "10000", true);
+        n = it3.next();
+        validateDataNode(n, "lfuint64Max", DT_NS, UINT64, "32656256558", true);
+        n = it3.next();
+        validateDataNode(n, "lfstr", DT_NS, STRING, "string1", true);
+        n = it3.next();
+        validateDataNode(n, "lfstr1", DT_NS, STRING, "string2", true);
+        n = it3.next();
+        validateDataNode(n, "lfbool1", DT_NS, BOOLEAN, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfbool2", DT_NS, BOOLEAN, "false", true);
+        n = it3.next();
+        validateDataNode(n, "lfbool3", DT_NS, BOOLEAN, "false", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal1", DT_NS, DECIMAL64,
+                         "-922337203685477580.8", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal2", DT_NS, DECIMAL64,
+                         "-92233720368547758.08", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal3", DT_NS, DECIMAL64,
+                         "-9223372036854775.808", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal4", DT_NS, DECIMAL64,
+                         "-922337203685477.5808", true);
+        n = it3.next();
+        validateDataNode(n, "lfdecimal6", DT_NS, DECIMAL64,
+                         "-9223372036854.775808", true);
+        n = it3.next();
+        validateDataNode(n, "lfenum", DT_NS, ENUMERATION, "3.3ms", true);
+        n = it3.next();
+        validateDataNode(n, "lfbits", DT_NS, BITS, "bit1", true);
+        n = it3.next();
+        validateDataNode(n, "lfbinary", DT_NS, BINARY, "aGV5", true);
+        n = it3.next();
+        validateDataNode(n, "lfref1", DT_NS, STRING, "path", true);
+        n = it3.next();
+        validateDataNode(n, "lfref2", DT_NS, INT8, "100", true);
+        n = it3.next();
+        validateDataNode(n, "lfempty", DT_NS, EMPTY, null, true);
+        n = it3.next();
+        validateDataNode(n, "lfunion1", DT_NS, STRING, "cost", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion2", DT_NS, DECIMAL64,
+                         "-92233720368547758.08", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion4", DT_NS, BOOLEAN, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion5", DT_NS, STRING, "color", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion7", DT_NS, BITS, "b1", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion8", DT_NS, STRING, "bandwidth", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion9", DT_NS, UINT16, "200", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion10", DT_NS, BOOLEAN, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion11", DT_NS, BITS, "b1", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion12", DT_NS, EMPTY, "true", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion13", DT_NS, BITS, "b2", true);
+        n = it3.next();
+        validateDataNode(n, "lfunion14", DT_NS, ENUMERATION, "one", true);
+        n = it3.next();
+        validateDataNode(n, "identityref1", DT_NS, IDENTITYREF, "iden", true);
+        n = it3.next();
+        validateDataNode(n, "identityref2", DT_NS, IDENTITYREF, "pro", true);
+        n = it3.next();
+        validateDataNode(n, "lfenum1", DT_NS, ENUMERATION, "successful exit", true);
+        n = it3.next();
+        validateDataNode(n, "lfenum2", DT_NS, ENUMERATION, "*", true);
+        n = it3.next();
+        validateDataNode(n, "inst-iden", DT_NS, INSTANCE_IDENTIFIER, "/cont", true);
+        validateLeafRef(it3);
+        n = it3.next();
+        validateDataNode(n, "cont3", DT_NS, SINGLE_INSTANCE_NODE,
+                         true, null);
+        Iterator<DataNode> it4 = ((InnerNode) n).childNodes().values()
+                .iterator();
+        validateLiftListDatatype(it4);
+    }
+
+    private void validateLiftListDatatype(Iterator<DataNode> it3) {
+        DataNode n = it3.next();
+        validateDataNode(n, "iref1", DT_NS, IDENTITYREF, "val", true);
+        n = it3.next();
+        validateDataNode(n, "iref3", DT_NS, IDENTITYREF, "physical", true);
+        n = it3.next();
+        validateDataNode(n, "llref1", DT_NS, INT8, "108", false);
+        n = it3.next();
+        validateDataNode(n, "llref2", DT_NS, IDENTITYREF, "val", false);
+        n = it3.next();
+        validateDataNode(n, "llref3", DT_NS, ENUMERATION, "one", false);
+        n = it3.next();
+        validateDataNode(n, "llref4", DT_NS, BITS, "b1 b3", false);
+        n = it3.next();
+        validateDataNode(n, "llref5", DT_NS, DECIMAL64,
+                         "-92233720368547758.08",
+                         false);
+        n = it3.next();
+        validateDataNode(n, "llref6", DT_NS, INT8, "121", false);
+        n = it3.next();
+        validateDataNode(n, "llref7", DT_NS, ENUMERATION, "3.3ms", false);
+        n = it3.next();
+        validateDataNode(n, "llref8", DT_NS, DECIMAL64,
+                         "-9223372036000.775808",
+                         false);
+        n = it3.next();
+        validateDataNode(n, "llref9", DT_NS, BINARY, "MTExMTExMTE=", false);
+        n = it3.next();
+        validateDataNode(n, "llref10", DT_NS, EMPTY, null, false);
+        n = it3.next();
+        validateDataNode(n, "llref11", DT_NS, EMPTY, null, false);
+        n = it3.next();
+        validateDataNode(n, "llref12", DT_NS, BITS, "b2", false);
+        n = it3.next();
+        validateDataNode(n, "llref13", DT_NS, EMPTY, null, false);
+        n = it3.next();
+        validateDataNode(n, "llref14", DT_NS, BITS, "b1", false);
+        n = it3.next();
+        validateDataNode(n, "llref15", DT_NS, INSTANCE_IDENTIFIER,
+                         "/cont/con2", false);
+        n = it3.next();
+        validateDataNode(n, "llref16", DT_NS, IDENTITYREF, "virtual", false);
+        n = it3.next();
+        validateDataNode(n, "llref17", DT_NS, UINT64, "78498522", false);
+        n = it3.next();
+        validateDataNode(n, "llref18", DT_NS, BINARY, "MDEwMTAxMDEw", false);
+        n = it3.next();
+        validateDataNode(n, "llref19", DT_NS, ENUMERATION, "ten", false);
+        n = it3.next();
+        validateDataNode(n, "llref20", DT_NS, STRING, "leaflistref", false);
+        n = it3.next();
+
+        validateDataNode(n, "iref2", DT_NS, IDENTITYREF, "pro", false);
+        n = it3.next();
+        validateDataNode(n, "iref4", DT_NS, IDENTITYREF, "virtual", false);
+    }
+}