[ONOS-4711] Move YANG data types to data types to remove dependency

Change-Id: I2297fc1fa69c7609765fc970d5614447db8e9f88
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/BuiltInTypeObjectFactory.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/BuiltInTypeObjectFactory.java
new file mode 100644
index 0000000..cece4ad
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/BuiltInTypeObjectFactory.java
@@ -0,0 +1,88 @@
+/*-
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yangutils.datamodel;
+
+import java.io.Serializable;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.DataTypeException;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt16;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt32;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt64;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt8;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint16;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint32;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint8;
+
+/**
+ * Factory to create an object of required type.
+ */
+public final class BuiltInTypeObjectFactory implements Serializable {
+
+    private static final long serialVersionUID = 8006201671L;
+
+    /**
+     * Utility factory class, hence the object creation is forbidden.
+     */
+    private BuiltInTypeObjectFactory() {
+    }
+
+    /**
+     * Given the value represented in string return the corresponding types
+     * object with the value initialized.
+     *
+     * @param valueInStr  value represented in string
+     * @param builtInType built in data type
+     * @param <T>         the data type of the target object
+     * @return the target data type object with the value initialized
+     */
+    public static <T extends YangBuiltInDataTypeInfo<?>> T getDataObjectFromString(String valueInStr,
+                                                                                   YangDataTypes builtInType) {
+
+        switch (builtInType) {
+            case INT8: {
+                return (T) new YangInt8(valueInStr);
+            }
+            case INT16: {
+                return (T) new YangInt16(valueInStr);
+            }
+            case INT32: {
+                return (T) new YangInt32(valueInStr);
+            }
+            case INT64: {
+                return (T) new YangInt64(valueInStr);
+            }
+            case UINT8: {
+                return (T) new YangUint8(valueInStr);
+            }
+            case UINT16: {
+                return (T) new YangUint16(valueInStr);
+            }
+            case UINT32: {
+                return (T) new YangUint32(valueInStr);
+            }
+            case UINT64: {
+                return (T) new YangUint64(valueInStr);
+            }
+            default: {
+                throw new DataTypeException("YANG file error : Unsupported data type");
+            }
+        }
+
+    }
+
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataNode.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataNode.java
new file mode 100644
index 0000000..80dede4
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataNode.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.datamodel;
+
+/**
+ * Abstraction of YANG data node, used by YMS to abstractly refer the data
+ * nodes in YANG data tree.
+ */
+public interface YangDataNode {
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
index bedeead..da04b1a 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
@@ -20,22 +20,23 @@
 
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 
 import com.google.common.base.Strings;
 
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BITS;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BOOLEAN;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.EMPTY;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.ENUMERATION;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.ENUMERATION;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UNION;
 import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
 import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.isOfRangeRestrictedType;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
 import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processLengthRestriction;
 import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processRangeRestriction;
 
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
index 0c717a6..b01ff63 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -62,7 +62,7 @@
  */
 public class YangLeaf
         implements YangCommonInfo, Parsable, Cloneable, Serializable,
-        YangMustHolder, YangIfFeatureHolder, YangWhenHolder {
+        YangMustHolder, YangIfFeatureHolder, YangWhenHolder, YangDataNode {
 
     private static final long serialVersionUID = 806201635L;
 
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
index febae0e..11e55db 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
@@ -58,7 +58,7 @@
  */
 public class YangLeafList
         implements YangCommonInfo, Parsable, Cloneable, Serializable,
-        YangMustHolder, YangWhenHolder, YangIfFeatureHolder {
+        YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangDataNode {
 
     private static final long serialVersionUID = 806201637L;
 
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
index a1e13ac..d09f8d5 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -22,6 +22,7 @@
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
 
@@ -70,7 +71,7 @@
 public class YangList
         extends YangNode
         implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder,
-        YangMustHolder, YangIfFeatureHolder {
+        YangMustHolder, YangIfFeatureHolder, YangDataNode {
 
     private static final long serialVersionUID = 806201609L;
 
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
index 20b1686..820b0b4 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -16,14 +16,13 @@
 package org.onosproject.yangutils.datamodel;
 
 import java.io.Serializable;
-
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 
 /**
  * Represents base class of a node in data model tree.
  */
 public abstract class YangNode
-        implements Cloneable, Serializable {
+        implements Cloneable, Serializable, YangDataNode {
 
     private static final long serialVersionUID = 806201601L;
 
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
index 654ac93..b49dda6 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
@@ -19,14 +19,13 @@
 import java.io.Serializable;
 import java.util.LinkedList;
 import java.util.List;
-
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString;
-
+import static org.onosproject.yangutils.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /*-
@@ -208,7 +207,6 @@
                 return true;
             }
         }
-
         return false;
     }
 
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
index a19167a..530087f 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
@@ -17,13 +17,15 @@
 package org.onosproject.yangutils.datamodel;
 
 import java.io.Serializable;
-
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 
-import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
+import static org.onosproject.yangutils.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
 
 /*
  * Reference:RFC 6020.
@@ -271,4 +273,101 @@
             throw new DataModelException(e.getMessage());
         }
     }
+
+    /**
+     * Validates the input data value against the permissible value for the
+     * type as per the YANG file.
+     *
+     * @param value input data value
+     * @return status of validation
+     */
+    public boolean isValidValue(String value) {
+        switch (getDataType()) {
+            case INT8:
+            case INT16:
+            case INT32:
+            case INT64:
+            case UINT8:
+            case UINT16:
+            case UINT32:
+            case UINT64: {
+                isValidValueForRangeRestrictedType(value);
+            }
+            case DECIMAL64: {
+                // TODO
+            }
+            case STRING: {
+                // TODO implement in string restriction similar to range restriction
+            }
+            case ENUMERATION: {
+                // TODO validate using list of YANG enum of enumeration class in extended info.
+            }
+            case BINARY: {
+                // TODO validate based on extended info
+            }
+            case BITS: {
+                // TODO validate based on extended info
+            }
+            case BOOLEAN: {
+                // TODO true or false
+            }
+            case LEAFREF: {
+                // TODO validate based on extended info
+            }
+            case IDENTITYREF: {
+                // TODO TBD
+            }
+            case EMPTY: {
+                // TODO true or false
+            }
+            case UNION: {
+                // TODO validate based on extended info
+            }
+            case INSTANCE_IDENTIFIER: {
+                // TODO TBD
+            }
+            case DERIVED: {
+                if (isOfRangeRestrictedType(((YangDerivedInfo) getDataTypeExtendedInfo()).getEffectiveBuiltInType())) {
+                    try {
+                        if (((YangDerivedInfo) getDataTypeExtendedInfo()).getResolvedExtendedInfo() == null) {
+                            getDataObjectFromString(value,
+                                    ((YangDerivedInfo) getDataTypeExtendedInfo()).getEffectiveBuiltInType());
+                            return true;
+                        } else {
+                            return ((YangRangeRestriction) ((YangDerivedInfo) getDataTypeExtendedInfo())
+                                    .getResolvedExtendedInfo()).isValidValueString(value);
+                        }
+                    } catch (Exception e) {
+                        return false;
+                    }
+                } else {
+                    // TODO
+                }
+            }
+            default: {
+                // TODO
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Validates the input data value for range restricted types against the
+     * permissible value for the type as per the YANG file.
+     *
+     * @param value input data value
+     * @return status of validation
+     */
+    private boolean isValidValueForRangeRestrictedType(String value) {
+        try {
+            if (getDataTypeExtendedInfo() == null) {
+                getDataObjectFromString(value, getDataType());
+                return true;
+            } else {
+                return ((YangRangeRestriction) getDataTypeExtendedInfo()).isValidValueString(value);
+            }
+        } catch (Exception e) {
+            return false;
+        }
+    }
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
index d4c0306..f20d5cc 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
@@ -22,6 +22,7 @@
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
 
 /*
  * Reference RFC 6020.
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/RestrictionResolver.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/RestrictionResolver.java
index c9863c0..7a44d1f 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/RestrictionResolver.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/RestrictionResolver.java
@@ -16,26 +16,16 @@
 
 package org.onosproject.yangutils.datamodel.utils;
 
-import static org.onosproject.yangutils.datamodel.YangDataTypes.DECIMAL64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT16;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT8;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT16;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT32;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT8;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LENGTH_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.RANGE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString;
-
 import java.util.regex.Pattern;
-
-import org.onosproject.yangutils.datamodel.YangDataTypes;
 import org.onosproject.yangutils.datamodel.YangRangeInterval;
 import org.onosproject.yangutils.datamodel.YangRangeRestriction;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
+
+import static org.onosproject.yangutils.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
+import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LENGTH_DATA;
+import static org.onosproject.yangutils.datamodel.utils.YangConstructType.RANGE_DATA;
 
 /**
  * Represents restriction resolver which provide common utility used by parser
@@ -71,9 +61,9 @@
      * @throws DataModelException a violation in data model rule
      */
     public static YangRangeRestriction processRangeRestriction(YangRangeRestriction refRangeRestriction,
-            int lineNumber, int charPositionInLine,
-            boolean hasReferredRestriction,
-            String curRangeString, YangDataTypes effectiveType)
+                                                               int lineNumber, int charPositionInLine,
+                                                               boolean hasReferredRestriction,
+                                                               String curRangeString, YangDataTypes effectiveType)
             throws DataModelException {
         YangBuiltInDataTypeInfo<?> startValue;
         YangBuiltInDataTypeInfo<?> endValue;
@@ -157,9 +147,9 @@
      * @throws DataModelException a violation in data model rule
      */
     public static YangRangeRestriction processLengthRestriction(YangRangeRestriction refLengthRestriction,
-            int lineNumber, int charPositionInLine,
-            boolean hasReferredRestriction,
-            String curLengthString) throws DataModelException {
+                                                                int lineNumber, int charPositionInLine,
+                                                                boolean hasReferredRestriction,
+                                                                String curLengthString) throws DataModelException {
 
         YangBuiltInDataTypeInfo<?> startValue;
         YangBuiltInDataTypeInfo<?> endValue;
@@ -232,24 +222,6 @@
     }
 
     /**
-     * Returns whether the data type is of range restricted type.
-     *
-     * @param dataType data type to be checked
-     * @return true, if data type can have range restrictions, false otherwise
-     */
-    public static boolean isOfRangeRestrictedType(YangDataTypes dataType) {
-        return dataType == INT8
-                || dataType == INT16
-                || dataType == INT32
-                || dataType == INT64
-                || dataType == UINT8
-                || dataType == UINT16
-                || dataType == UINT32
-                || dataType == UINT64
-                || dataType == DECIMAL64;
-    }
-
-    /**
      * Removes doubles quotes and concatenates if string has plus symbol.
      *
      * @param yangStringData string from yang file
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/BuiltInTypeObjectFactory.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/BuiltInTypeObjectFactory.java
deleted file mode 100644
index 1f28565..0000000
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/BuiltInTypeObjectFactory.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*-
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
-/**
- * Factory to create an object of required type.
- */
-public final class BuiltInTypeObjectFactory implements Serializable {
-
-    private static final long serialVersionUID = 8006201671L;
-
-    /**
-     * Utility factory class, hence the object creation is forbidden.
-     */
-    private BuiltInTypeObjectFactory() {
-    }
-
-    /**
-     * Given the value represented in string return the corresponding types
-     * object with the value initialized.
-     *
-     * @param valueInStr  value represented in string
-     * @param builtInType built in data type
-     * @param <T>         the data type of the target object
-     * @return the target data type object with the value initialized
-     */
-    public static <T extends YangBuiltInDataTypeInfo<?>> T getDataObjectFromString(String valueInStr,
-            YangDataTypes builtInType) {
-
-        switch (builtInType) {
-        case INT8: {
-            return (T) new YangInt8(valueInStr);
-        }
-        case INT16: {
-            return (T) new YangInt16(valueInStr);
-        }
-        case INT32: {
-            return (T) new YangInt32(valueInStr);
-        }
-        case INT64: {
-            return (T) new YangInt64(valueInStr);
-        }
-        case UINT8: {
-            return (T) new YangUint8(valueInStr);
-        }
-        case UINT16: {
-            return (T) new YangUint16(valueInStr);
-        }
-        case UINT32: {
-            return (T) new YangUint32(valueInStr);
-        }
-        case UINT64: {
-            return (T) new YangUint64(valueInStr);
-        }
-        default: {
-            throw new DataTypeException("YANG file error : Unsupported data type");
-        }
-        }
-
-    }
-
-}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java
index b082c16..20c3260 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java
@@ -15,8 +15,6 @@
  */
 package org.onosproject.yangutils.datamodel.utils.builtindatatype;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Represents the list of utility functions to be supported by YANG built in
  * data type implementations.
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypeUtils.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypeUtils.java
new file mode 100644
index 0000000..7578547
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypeUtils.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.datamodel.utils.builtindatatype;
+
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT64;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT8;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
+
+/**
+ * Represents YANG data type utilities.
+ */
+public final class YangDataTypeUtils {
+
+    /**
+     * Restricts creation of YANG data type utils instance.
+     */
+    private YangDataTypeUtils() {
+    }
+
+    /**
+     * Returns whether the data type is of range restricted type.
+     *
+     * @param dataType data type to be checked
+     * @return true, if data type can have range restrictions, false otherwise
+     */
+    public static boolean isOfRangeRestrictedType(YangDataTypes dataType) {
+        return dataType == INT8
+                || dataType == INT16
+                || dataType == INT32
+                || dataType == INT64
+                || dataType == UINT8
+                || dataType == UINT16
+                || dataType == UINT32
+                || dataType == UINT64
+                || dataType == DECIMAL64;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataTypes.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypes.java
similarity index 98%
rename from utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataTypes.java
rename to utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypes.java
index 32408d9..01b9028 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataTypes.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypes.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.yangutils.datamodel;
+package org.onosproject.yangutils.datamodel.utils.builtindatatype;
 
 /**
  * Represents ENUM to identify the YANG data type.
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
index c005b8d..9124356 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
@@ -18,8 +18,6 @@
 
 import java.io.Serializable;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's int16 data type processing.
  *
@@ -94,5 +92,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.INT16;
     }
-
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
index 45ae3d1..f8a3275 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
@@ -18,8 +18,6 @@
 
 import java.io.Serializable;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's int32 data type processing.
  *
@@ -94,5 +92,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.INT32;
     }
-
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
index 9f97bf8..26e9237 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
@@ -18,8 +18,6 @@
 
 import java.io.Serializable;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's int8 data type processing.
  *
@@ -94,5 +92,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.INT64;
     }
-
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
index aad8c0b..455e343 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
@@ -18,8 +18,6 @@
 
 import java.io.Serializable;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's int8 data type processing.
  *
@@ -94,5 +92,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.INT8;
     }
-
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
index c5a1ff3..310f9d6 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
@@ -18,8 +18,6 @@
 
 import java.io.Serializable;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's Uint16 data type processing.
  *
@@ -60,7 +58,7 @@
      *
      * @param valueInString value of the object in string
      */
-    YangUint16(String valueInString) {
+    public YangUint16(String valueInString) {
 
         if (valueInString.matches(MIN_KEYWORD)) {
             value = MIN_VALUE;
@@ -102,5 +100,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.UINT16;
     }
-
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
index 031f45a..287d284 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
@@ -18,8 +18,6 @@
 
 import java.io.Serializable;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's Uint32 data type processing.
  *
@@ -53,7 +51,7 @@
      *
      * @param valueInString value of the object in string
      */
-    YangUint32(String valueInString) {
+    public YangUint32(String valueInString) {
 
         if (valueInString.matches(MIN_KEYWORD)) {
             value = MIN_VALUE;
@@ -95,5 +93,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.UINT32;
     }
-
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
index 3a0a71f..49a5153 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
@@ -20,8 +20,6 @@
 import java.math.BigInteger;
 import java.util.regex.Pattern;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's Uint16 data type processing.
  *
@@ -67,7 +65,7 @@
      *
      * @param valueInString value of the object in string
      */
-    YangUint64(String valueInString) {
+    public YangUint64(String valueInString) {
 
         if (valueInString.matches(MIN_KEYWORD)) {
             value = MIN_VALUE;
@@ -107,5 +105,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.UINT64;
     }
-
 }
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
index 8de263a..f2f4604 100644
--- a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
@@ -18,8 +18,6 @@
 
 import java.io.Serializable;
 
-import org.onosproject.yangutils.datamodel.YangDataTypes;
-
 /**
  * Handles the YANG's Uint8 data type processing.
  *
@@ -60,7 +58,7 @@
      *
      * @param valueInString value of the object in string
      */
-    YangUint8(String valueInString) {
+    public YangUint8(String valueInString) {
 
         if (valueInString.matches(MIN_KEYWORD)) {
             value = MIN_VALUE;
@@ -102,5 +100,4 @@
     public YangDataTypes getYangType() {
         return YangDataTypes.UINT8;
     }
-
 }