From b29e146390f425faac8ff70d99ef32eb3b28a50e Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 26 Jan 2015 16:08:14 +0100 Subject: [PATCH] Optimize ValueSerializer Instead of having a switch() statement, which forces a comparison of ValueTypes, embed the serialize() method in ValueType with package visibility. Change-Id: I1cf4aa998cc97dc7d920570744094409aa4a7f29 Signed-off-by: Robert Varga --- .../utils/serialization/ValueSerializer.java | 33 +------ .../node/utils/serialization/ValueType.java | 87 ++++++++++++++++--- 2 files changed, 76 insertions(+), 44 deletions(-) diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueSerializer.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueSerializer.java index f562d8b35d..71946b0a7a 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueSerializer.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/serialization/ValueSerializer.java @@ -9,11 +9,8 @@ package org.opendaylight.controller.cluster.datastore.node.utils.serialization; import com.google.protobuf.ByteString; -import java.math.BigDecimal; -import java.math.BigInteger; import java.util.HashSet; import java.util.Set; -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.YangInstanceIdentifier; @@ -101,35 +98,7 @@ public class ValueSerializer { private static Object deSerializeBasicTypes(int valueType, String value) { - switch(ValueType.values()[valueType]){ - case SHORT_TYPE: { - return Short.valueOf(value); - } - case BOOL_TYPE: { - return Boolean.valueOf(value); - } - case BYTE_TYPE: { - return Byte.valueOf(value); - } - case INT_TYPE : { - return Integer.valueOf(value); - } - case LONG_TYPE: { - return Long.valueOf(value); - } - case QNAME_TYPE: { - return QNameFactory.create(value); - } - case BIG_INTEGER_TYPE: { - return new BigInteger(value); - } - case BIG_DECIMAL_TYPE: { - return new BigDecimal(value); - } - default: { - return value; - } - } + return ValueType.values()[valueType].deserialize(value); } } 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 8169c9e9ae..b9e46a3a57 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 @@ -15,22 +15,83 @@ import java.math.BigDecimal; import java.math.BigInteger; 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"); + } + }; private static final Map, ValueType> TYPES; @@ -52,6 +113,8 @@ public enum ValueType { TYPES = b.build(); } + abstract Object deserialize(String str); + public static final ValueType getSerializableType(Object node) { Preconditions.checkNotNull(node, "node should not be null"); -- 2.36.6