From: msunal Date: Wed, 4 Dec 2013 14:58:02 +0000 (+0100) Subject: Added API with codecs for yang build-in types X-Git-Tag: yangtools-0.6.0~145^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=c836eb6037dd847b43498cbb91d9707fd38c5bcd;p=yangtools.git Added API with codecs for yang build-in types - this API should be implemented by consumer/provider who wants to make conversion from own type to build-in yang type and vice versa - TypeDefinitionAwareCodec contains conversion between build-in types (except leafref, identityref, instance-identifier) and String Signed-off-by: Martin Sunal --- diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BinaryCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BinaryCodec.java new file mode 100644 index 0000000000..ce254e9f7b --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BinaryCodec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface BinaryCodec { + + public T serialize(byte[] data); + + public byte[] deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BitsCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BitsCodec.java new file mode 100644 index 0000000000..5f393ca975 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BitsCodec.java @@ -0,0 +1,11 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + +import java.util.Set; + + +public interface BitsCodec { + + public T serialize(Set data); + + public Set deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BooleanCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BooleanCodec.java new file mode 100644 index 0000000000..1935e27758 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BooleanCodec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface BooleanCodec { + + public T serialize(Boolean data); + + public Boolean deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java new file mode 100644 index 0000000000..a9bf0b4d0d --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java @@ -0,0 +1,11 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + +import java.math.BigDecimal; + + +public interface DecimalCodec { + + public T serialize(BigDecimal data); + + public BigDecimal deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java new file mode 100644 index 0000000000..70726ccc9e --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface EmptyCodec { + + public T serialize(Void data); + + public Void deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EnumCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EnumCodec.java new file mode 100644 index 0000000000..07cec98f0b --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EnumCodec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface EnumCodec { + + public T serialize(String data); + + public String deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/IdentityrefCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/IdentityrefCodec.java new file mode 100644 index 0000000000..41cd314465 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/IdentityrefCodec.java @@ -0,0 +1,11 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + +import org.opendaylight.yangtools.yang.common.QName; + + +public interface IdentityrefCodec { + + public T serialize(QName data); + + public QName deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/InstanceIdentifierCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/InstanceIdentifierCodec.java new file mode 100644 index 0000000000..744e5c6997 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/InstanceIdentifierCodec.java @@ -0,0 +1,10 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + +import org.opendaylight.yangtools.yang.common.QName; + +public interface InstanceIdentifierCodec { + + public T serialize(QName data); + + public QName deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int16Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int16Codec.java new file mode 100644 index 0000000000..d1de1853f7 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int16Codec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface Int16Codec { + + public T serialize(Short data); + + public Short deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int32Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int32Codec.java new file mode 100644 index 0000000000..5045586c82 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int32Codec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface Int32Codec { + + public T serialize(Integer data); + + public Integer deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int64Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int64Codec.java new file mode 100644 index 0000000000..9b923699a5 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int64Codec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface Int64Codec { + + public T serialize(Long data); + + public Long deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int8Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int8Codec.java new file mode 100644 index 0000000000..f4e8962c39 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int8Codec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface Int8Codec { + + public T serialize(Byte data); + + public Byte deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/LeafrefCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/LeafrefCodec.java new file mode 100644 index 0000000000..50c57154e8 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/LeafrefCodec.java @@ -0,0 +1,10 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + + +public interface LeafrefCodec { + + public T serialize(Object data); + + public Object deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java new file mode 100644 index 0000000000..9d8637ec0c --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface StringCodec { + + public T serialize(String data); + + public String deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint16Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint16Codec.java new file mode 100644 index 0000000000..567b4e6b8f --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint16Codec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface Uint16Codec { + + public T serialize(Integer data); + + public Integer deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint32Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint32Codec.java new file mode 100644 index 0000000000..17c777864e --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint32Codec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface Uint32Codec { + + public T serialize(Long data); + + public Long deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint64Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint64Codec.java new file mode 100644 index 0000000000..564833f876 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint64Codec.java @@ -0,0 +1,11 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + +import java.math.BigInteger; + + +public interface Uint64Codec { + + public T serialize(BigInteger data); + + public BigInteger deserialize(T data); +} diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint8Codec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint8Codec.java new file mode 100644 index 0000000000..4302d9f0e0 --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint8Codec.java @@ -0,0 +1,9 @@ +package org.opendaylight.yangtools.yang.data.api.codec; + + +public interface Uint8Codec { + + public T serialize(Short data); + + public Short deserialize(T data); +} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringCodec.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DataStringCodec.java similarity index 59% rename from yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringCodec.java rename to yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DataStringCodec.java index b21c871914..62968c7c9e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringCodec.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DataStringCodec.java @@ -1,9 +1,10 @@ package org.opendaylight.yangtools.yang.data.impl.codec; -public interface StringCodec { - - Class getInputClass(); +public interface DataStringCodec { + Class getInputClass(); + String serialize(T data); - T deserialize (String stringRepresentation); + + T deserialize(String stringRepresentation); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java index 0939f5281a..7477a9e037 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java @@ -1,17 +1,46 @@ package org.opendaylight.yangtools.yang.data.impl.codec; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.BINARY_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.BITS_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.BOOLEAN_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.DECIMAL64_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.EMPTY_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.ENUMERATION_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.INT16_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.INT32_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.INT64_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.INT8_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.STRING_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.UINT16_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.UINT32_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.UINT64_QNAME; +import static org.opendaylight.yangtools.yang.model.util.BaseTypes.UINT8_QNAME; + import java.math.BigDecimal; import java.math.BigInteger; import java.util.Set; +import org.opendaylight.yangtools.yang.data.api.codec.BinaryCodec; +import org.opendaylight.yangtools.yang.data.api.codec.BitsCodec; +import org.opendaylight.yangtools.yang.data.api.codec.BooleanCodec; +import org.opendaylight.yangtools.yang.data.api.codec.DecimalCodec; +import org.opendaylight.yangtools.yang.data.api.codec.EmptyCodec; +import org.opendaylight.yangtools.yang.data.api.codec.EnumCodec; +import org.opendaylight.yangtools.yang.data.api.codec.Int16Codec; +import org.opendaylight.yangtools.yang.data.api.codec.Int32Codec; +import org.opendaylight.yangtools.yang.data.api.codec.Int64Codec; +import org.opendaylight.yangtools.yang.data.api.codec.Int8Codec; +import org.opendaylight.yangtools.yang.data.api.codec.StringCodec; +import org.opendaylight.yangtools.yang.data.api.codec.Uint16Codec; +import org.opendaylight.yangtools.yang.data.api.codec.Uint32Codec; +import org.opendaylight.yangtools.yang.data.api.codec.Uint64Codec; +import org.opendaylight.yangtools.yang.data.api.codec.Uint8Codec; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableSet; -import static org.opendaylight.yangtools.yang.model.util.BaseTypes.*; - -public abstract class TypeDefinitionAwareCodec implements StringCodec { +public abstract class TypeDefinitionAwareCodec implements DataStringCodec { private final TypeDefinition typeDefinition; private final Class inputClass; @@ -29,67 +58,62 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { return typeDefinition; } - @Override - public String serialize(T data) { - return data.toString(); - } - public static final TypeDefinitionAwareCodec from(TypeDefinition typeDefinition) { while(typeDefinition.getBaseType() != null) { typeDefinition = typeDefinition.getBaseType(); } if (BINARY_QNAME.equals(typeDefinition.getQName())) { - return new BinaryCodec(typeDefinition); + return new BinaryCodecStringImpl(typeDefinition); } if (BITS_QNAME.equals(typeDefinition.getQName())) { - return new BitsCodec(typeDefinition); + return new BitsCodecStringImpl(typeDefinition); } if (BOOLEAN_QNAME.equals(typeDefinition.getQName())) { - return new BooleanCodec(typeDefinition); + return new BooleanCodecStringImpl(typeDefinition); } if (DECIMAL64_QNAME.equals(typeDefinition.getQName())) { - return new DecimalCodec(typeDefinition); + return new DecimalCodecStringImpl(typeDefinition); } if (EMPTY_QNAME.equals(typeDefinition.getQName())) { - return new EmptyCodec(typeDefinition); + return new EmptyCodecStringImpl(typeDefinition); } if (ENUMERATION_QNAME.equals(typeDefinition.getQName())) { - return new EnumCodec(typeDefinition); + return new EnumCodecStringImpl(typeDefinition); } if (INT8_QNAME.equals(typeDefinition.getQName())) { - return new Int8Codec(typeDefinition); + return new Int8CodecStringImpl(typeDefinition); } if (INT16_QNAME.equals(typeDefinition.getQName())) { - return new Int16Codec(typeDefinition); + return new Int16CodecStringImpl(typeDefinition); } if (INT32_QNAME.equals(typeDefinition.getQName())) { - return new Int32Codec(typeDefinition); + return new Int32CodecStringImpl(typeDefinition); } if (INT64_QNAME.equals(typeDefinition.getQName())) { - return new Int64Codec(typeDefinition); + return new Int64CodecStringImpl(typeDefinition); } if (STRING_QNAME.equals(typeDefinition.getQName())) { - return new StringCodec(typeDefinition); + return new StringCodecStringImpl(typeDefinition); } if (UINT8_QNAME.equals(typeDefinition.getQName())) { - return new Uint8Codec(typeDefinition); + return new Uint8CodecStringImpl(typeDefinition); } if (UINT16_QNAME.equals(typeDefinition.getQName())) { - return new Uint16Codec(typeDefinition); + return new Uint16CodecStringImpl(typeDefinition); } if (UINT32_QNAME.equals(typeDefinition.getQName())) { - return new Uint32Codec(typeDefinition); + return new Uint32CodecStringImpl(typeDefinition); } if (UINT64_QNAME.equals(typeDefinition.getQName())) { - return new Uint64Codec(typeDefinition); + return new Uint64CodecStringImpl(typeDefinition); } return null; } - public static class BooleanCodec extends TypeDefinitionAwareCodec { + public static class BooleanCodecStringImpl extends TypeDefinitionAwareCodec implements BooleanCodec { - protected BooleanCodec(TypeDefinition typeDefinition) { + protected BooleanCodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Boolean.class); } @@ -104,9 +128,9 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { } }; - public static class Uint8Codec extends TypeDefinitionAwareCodec { + public static class Uint8CodecStringImpl extends TypeDefinitionAwareCodec implements Uint8Codec { - protected Uint8Codec(TypeDefinition typeDefinition) { + protected Uint8CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Short.class); } @@ -121,8 +145,8 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { } }; - public static class Uint16Codec extends TypeDefinitionAwareCodec { - protected Uint16Codec(TypeDefinition typeDefinition) { + public static class Uint16CodecStringImpl extends TypeDefinitionAwareCodec implements Uint16Codec { + protected Uint16CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Integer.class); } @@ -130,11 +154,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public Integer deserialize(String stringRepresentation) { return Integer.parseInt(stringRepresentation); } + + @Override + public String serialize(Integer data) { + return data.toString(); + } }; - public static class Uint32Codec extends TypeDefinitionAwareCodec { + public static class Uint32CodecStringImpl extends TypeDefinitionAwareCodec implements Uint32Codec { - protected Uint32Codec(TypeDefinition typeDefinition) { + protected Uint32CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Long.class); } @@ -142,11 +171,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public Long deserialize(String stringRepresentation) { return Long.parseLong(stringRepresentation); } + + @Override + public String serialize(Long data) { + return data.toString(); + } }; - public static class Uint64Codec extends TypeDefinitionAwareCodec { + public static class Uint64CodecStringImpl extends TypeDefinitionAwareCodec implements Uint64Codec { - protected Uint64Codec(TypeDefinition typeDefinition) { + protected Uint64CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, BigInteger.class); } @@ -155,11 +189,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { // FIXME: Implement codec correctly return BigInteger.valueOf(Long.valueOf(stringRepresentation)); } + + @Override + public String serialize(BigInteger data) { + return data.toString(); + } }; - public static class StringCodec extends TypeDefinitionAwareCodec { + public static class StringCodecStringImpl extends TypeDefinitionAwareCodec implements StringCodec { - protected StringCodec(TypeDefinition typeDefinition) { + protected StringCodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, String.class); } @@ -167,11 +206,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public String deserialize(String stringRepresentation) { return stringRepresentation; } + + @Override + public String serialize(String data) { + return data.toString(); + } }; - public static class Int16Codec extends TypeDefinitionAwareCodec { + public static class Int16CodecStringImpl extends TypeDefinitionAwareCodec implements Int16Codec { - protected Int16Codec(TypeDefinition typeDefinition) { + protected Int16CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Short.class); } @@ -179,11 +223,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public Short deserialize(String stringRepresentation) { return Short.valueOf(stringRepresentation); } + + @Override + public String serialize(Short data) { + return data.toString(); + } }; - public static class Int32Codec extends TypeDefinitionAwareCodec { + public static class Int32CodecStringImpl extends TypeDefinitionAwareCodec implements Int32Codec { - protected Int32Codec(TypeDefinition typeDefinition) { + protected Int32CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Integer.class); } @@ -191,11 +240,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public Integer deserialize(String stringRepresentation) { return Integer.valueOf(stringRepresentation); } + + @Override + public String serialize(Integer data) { + return data.toString(); + } }; - public static class Int64Codec extends TypeDefinitionAwareCodec { + public static class Int64CodecStringImpl extends TypeDefinitionAwareCodec implements Int64Codec { - protected Int64Codec(TypeDefinition typeDefinition) { + protected Int64CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Long.class); } @@ -203,11 +257,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public Long deserialize(String stringRepresentation) { return Long.parseLong(stringRepresentation); } + + @Override + public String serialize(Long data) { + return data.toString(); + } }; - public static class Int8Codec extends TypeDefinitionAwareCodec { + public static class Int8CodecStringImpl extends TypeDefinitionAwareCodec implements Int8Codec { - protected Int8Codec(TypeDefinition typeDefinition) { + protected Int8CodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Byte.class); } @@ -215,11 +274,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public Byte deserialize(String stringRepresentation) { return Byte.parseByte(stringRepresentation); } + + @Override + public String serialize(Byte data) { + return data.toString(); + } }; - public static class EmptyCodec extends TypeDefinitionAwareCodec { + public static class EmptyCodecStringImpl extends TypeDefinitionAwareCodec implements EmptyCodec { - protected EmptyCodec(TypeDefinition typeDefinition) { + protected EmptyCodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, Void.class); } @@ -234,9 +298,9 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { } }; - public static final class BinaryCodec extends TypeDefinitionAwareCodec { + public static final class BinaryCodecStringImpl extends TypeDefinitionAwareCodec implements BinaryCodec { - protected BinaryCodec(TypeDefinition typeDefinition) { + protected BinaryCodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, byte[].class); } @@ -253,10 +317,10 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { } }; - public static final class BitsCodec extends TypeDefinitionAwareCodec> { + public static final class BitsCodecStringImpl extends TypeDefinitionAwareCodec> implements BitsCodec { @SuppressWarnings("unchecked") - protected BitsCodec(TypeDefinition typeDefinition) { + protected BitsCodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, (Class>) ((Class) Set.class)); } @@ -272,9 +336,9 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { } }; - public static class EnumCodec extends TypeDefinitionAwareCodec { + public static class EnumCodecStringImpl extends TypeDefinitionAwareCodec implements EnumCodec { - protected EnumCodec(TypeDefinition typeDefinition) { + protected EnumCodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, String.class); } @@ -282,11 +346,16 @@ public abstract class TypeDefinitionAwareCodec implements StringCodec { public String deserialize(String stringRepresentation) { return stringRepresentation; } + + @Override + public String serialize(String data) { + return data.toString(); + } }; - public static class DecimalCodec extends TypeDefinitionAwareCodec { + public static class DecimalCodecStringImpl extends TypeDefinitionAwareCodec implements DecimalCodec { - protected DecimalCodec(TypeDefinition typeDefinition) { + protected DecimalCodecStringImpl(TypeDefinition typeDefinition) { super(typeDefinition, BigDecimal.class); }