X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Fserialization%2FValueType.java;h=9eec8a300a81f2fc304beb7d9978ec7aef26b331;hp=2007544b7edd96d3498d303e3ad0ffd8469ada36;hb=0717c782e9621409f9623f43ba9f6173e4382a44;hpb=3f339053ea2d734bbd5e00c17132b43b8b7d4060 diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueType.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueType.java index 2007544b7e..9eec8a300a 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueType.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueType.java @@ -8,54 +8,128 @@ package org.opendaylight.controller.cluster.datastore.node.utils.serialization; -import com.google.common.base.Preconditions; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; - +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.HashMap; import java.util.Map; import java.util.Set; +import org.opendaylight.controller.cluster.datastore.node.utils.QNameFactory; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; public enum ValueType { - SHORT_TYPE, - BYTE_TYPE, - INT_TYPE, - LONG_TYPE, - BOOL_TYPE, - QNAME_TYPE, - BITS_TYPE, - YANG_IDENTIFIER_TYPE, - STRING_TYPE, - BIG_INTEGER_TYPE, - BIG_DECIMAL_TYPE, - BINARY_TYPE; + SHORT_TYPE { + @Override + Object deserialize(final String str) { + return Short.valueOf(str); + } + }, + BYTE_TYPE { + @Override + Object deserialize(final String str) { + return Byte.valueOf(str); + } + }, + INT_TYPE { + @Override + Object deserialize(final String str) { + return Integer.valueOf(str); + } + }, + LONG_TYPE { + @Override + Object deserialize(final String str) { + return Long.valueOf(str); + } + }, + BOOL_TYPE { + @Override + Object deserialize(final String str) { + return Boolean.valueOf(str); + } + }, + QNAME_TYPE { + @Override + Object deserialize(final String str) { + return QNameFactory.create(str); + } + }, + BITS_TYPE { + @Override + Object deserialize(final String str) { + throw new UnsupportedOperationException("Should have been caught by caller"); + } + }, + YANG_IDENTIFIER_TYPE { + @Override + Object deserialize(final String str) { + throw new UnsupportedOperationException("Should have been caught by caller"); + } + }, + STRING_TYPE { + @Override + Object deserialize(final String str) { + return str; + } + }, + BIG_INTEGER_TYPE { + @Override + Object deserialize(final String str) { + return new BigInteger(str); + } + }, + BIG_DECIMAL_TYPE { + @Override + Object deserialize(final String str) { + return new BigDecimal(str); + } + }, + BINARY_TYPE { + @Override + Object deserialize(final String str) { + throw new UnsupportedOperationException("Should have been caught by caller"); + } + }, + NULL_TYPE { + @Override + Object deserialize(final String str) { + return null; + } + }; - private static Map, ValueType> types = new HashMap<>(); + private static final Map, ValueType> TYPES; static { - types.put(String.class, STRING_TYPE); - types.put(Byte.class, BYTE_TYPE); - types.put(Integer.class, INT_TYPE); - types.put(Long.class, LONG_TYPE); - types.put(Boolean.class, BOOL_TYPE); - types.put(QName.class, QNAME_TYPE); - types.put(Set.class, BITS_TYPE); - types.put(YangInstanceIdentifier.class, YANG_IDENTIFIER_TYPE); - types.put(Short.class,SHORT_TYPE); - types.put(BigInteger.class, BIG_INTEGER_TYPE); - types.put(BigDecimal.class, BIG_DECIMAL_TYPE); - types.put(byte[].class, BINARY_TYPE); + final Builder, ValueType> b = ImmutableMap.builder(); + + b.put(String.class, STRING_TYPE); + b.put(Byte.class, BYTE_TYPE); + b.put(Integer.class, INT_TYPE); + b.put(Long.class, LONG_TYPE); + b.put(Boolean.class, BOOL_TYPE); + b.put(QName.class, QNAME_TYPE); + b.put(YangInstanceIdentifier.class, YANG_IDENTIFIER_TYPE); + b.put(Short.class,SHORT_TYPE); + b.put(BigInteger.class, BIG_INTEGER_TYPE); + b.put(BigDecimal.class, BIG_DECIMAL_TYPE); + b.put(byte[].class, BINARY_TYPE); + + TYPES = b.build(); } - public static final ValueType getSerializableType(Object node){ - Preconditions.checkNotNull(node, "node should not be null"); + abstract Object deserialize(String str); - ValueType type = types.get(node.getClass()); - if(type != null) { + public static final ValueType getSerializableType(Object node) { + if(node == null){ + return NULL_TYPE; + } + + final ValueType type = TYPES.get(node.getClass()); + if (type != null) { return type; - } else if(node instanceof Set){ + } + if (node instanceof Set) { return BITS_TYPE; }