--- /dev/null
+/*
+ *
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ */
+
+package org.opendaylight.controller.cluster.datastore.node;
+
+import org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory;
+import org.opendaylight.controller.cluster.datastore.util.InstanceIdentifierUtils;
+import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages;
+import org.opendaylight.yangtools.yang.data.api.codec.BitsCodec;
+import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.IdentityrefType;
+import org.opendaylight.yangtools.yang.model.util.InstanceIdentifierType;
+import org.opendaylight.yangtools.yang.model.util.Leafref;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NodeValueCodec {
+ protected static final Logger logger = LoggerFactory
+ .getLogger(NodeValueCodec.class);
+
+ public static Object toTypeSafeValue(DataSchemaNode schema, TypeDefinition type, NormalizedNodeMessages.Node node){
+
+ String value = node.getValue();
+
+ if(schema != null && value != null){
+ TypeDefinition<?> baseType = type;
+
+ while (baseType.getBaseType() != null) {
+ baseType = baseType.getBaseType();
+ }
+
+ TypeDefinitionAwareCodec<Object, ? extends TypeDefinition<?>> codec =
+ TypeDefinitionAwareCodec.from(type);
+
+ if(codec instanceof BitsCodec){
+ if(value.contains("[]")){
+ value = "";
+ } else {
+ value = value.replace("[", "");
+ value = value.replace("]", "");
+ value = value.replace(",", " ");
+ }
+ }
+
+ if (codec != null) {
+ return codec.deserialize(value);
+ } else if(baseType instanceof Leafref) {
+ return value;
+ } else if(baseType instanceof IdentityrefType) {
+ return QNameFactory.create(value);
+ } else if(baseType instanceof InstanceIdentifierType) {
+ return InstanceIdentifierUtils.fromSerializable(node.getInstanceIdentifierValue());
+ } else {
+ logger.error("Could not figure out how to transform value " + value + " for schemaType " + type);
+ }
+ }
+
+ return value;
+ }
+}