Added API with codecs for yang build-in types 53/3453/1
authormsunal <msunal@cisco.com>
Wed, 4 Dec 2013 14:58:02 +0000 (15:58 +0100)
committermsunal <msunal@cisco.com>
Wed, 4 Dec 2013 14:58:02 +0000 (15:58 +0100)
- 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 <msunal@cisco.com>
20 files changed:
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BinaryCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BitsCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/BooleanCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EnumCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/IdentityrefCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/InstanceIdentifierCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int16Codec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int32Codec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int64Codec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Int8Codec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/LeafrefCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint16Codec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint32Codec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint64Codec.java [new file with mode: 0644]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/Uint8Codec.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DataStringCodec.java [moved from yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringCodec.java with 59% similarity]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java

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 (file)
index 0000000..ce254e9
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface BinaryCodec<T> {
+
+    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 (file)
index 0000000..5f393ca
--- /dev/null
@@ -0,0 +1,11 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+import java.util.Set;
+
+
+public interface BitsCodec<T> {
+
+    public T serialize(Set<String> data);
+
+    public Set<String> 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 (file)
index 0000000..1935e27
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface BooleanCodec<T> {
+
+    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 (file)
index 0000000..a9bf0b4
--- /dev/null
@@ -0,0 +1,11 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+import java.math.BigDecimal;
+
+
+public interface DecimalCodec<T> {
+
+    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 (file)
index 0000000..70726cc
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface EmptyCodec<T> {
+
+    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 (file)
index 0000000..07cec98
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface EnumCodec<T> {
+
+    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 (file)
index 0000000..41cd314
--- /dev/null
@@ -0,0 +1,11 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+import org.opendaylight.yangtools.yang.common.QName;
+
+
+public interface IdentityrefCodec<T> {
+
+    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 (file)
index 0000000..744e5c6
--- /dev/null
@@ -0,0 +1,10 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+import org.opendaylight.yangtools.yang.common.QName;
+
+public interface InstanceIdentifierCodec<T> {
+
+    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 (file)
index 0000000..d1de185
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface Int16Codec<T> {
+
+    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 (file)
index 0000000..5045586
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface Int32Codec<T> {
+
+    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 (file)
index 0000000..9b92369
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface Int64Codec<T> {
+
+    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 (file)
index 0000000..f4e8962
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface Int8Codec<T> {
+
+    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 (file)
index 0000000..50c5715
--- /dev/null
@@ -0,0 +1,10 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+
+public interface LeafrefCodec<T> {
+
+    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 (file)
index 0000000..9d8637e
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface StringCodec<T> {
+
+    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 (file)
index 0000000..567b4e6
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface Uint16Codec<T> {
+
+    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 (file)
index 0000000..17c7778
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface Uint32Codec<T> {
+
+    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 (file)
index 0000000..564833f
--- /dev/null
@@ -0,0 +1,11 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+import java.math.BigInteger;
+
+
+public interface Uint64Codec<T> {
+
+    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 (file)
index 0000000..4302d9f
--- /dev/null
@@ -0,0 +1,9 @@
+package org.opendaylight.yangtools.yang.data.api.codec;
+
+
+public interface Uint8Codec<T> {
+
+    public T serialize(Short data);
+
+    public Short deserialize(T data);
+}
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 b21c87191426806b73dde3fd06056acff9e05a57..62968c7c9ef0adf959a3b76054948cfcff219c3d 100644 (file)
@@ -1,9 +1,10 @@
 package org.opendaylight.yangtools.yang.data.impl.codec;
 
-public interface StringCodec<T> {
-
-    Class<T> getInputClass();
+public interface DataStringCodec<T> {
     
+    Class<T> getInputClass();
+
     String serialize(T data);
-    T deserialize (String stringRepresentation);
+
+    T deserialize(String stringRepresentation);
 }
index 0939f5281acbc25551b855d9882b4f91df775b34..7477a9e037196001bf57f7e6f8632630ecb93c8b 100644 (file)
@@ -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<T> implements StringCodec<T> {
+public abstract class TypeDefinitionAwareCodec<T> implements DataStringCodec<T> {
 
     private final TypeDefinition<?> typeDefinition;
     private final Class<T> inputClass;
@@ -29,67 +58,62 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         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<Boolean> {
+    public static class BooleanCodecStringImpl extends TypeDefinitionAwareCodec<Boolean> implements BooleanCodec<String> {
 
-        protected BooleanCodec(TypeDefinition<?> typeDefinition) {
+        protected BooleanCodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Boolean.class);
         }
 
@@ -104,9 +128,9 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         }
     };
 
-    public static class Uint8Codec extends TypeDefinitionAwareCodec<Short> {
+    public static class Uint8CodecStringImpl extends TypeDefinitionAwareCodec<Short> implements Uint8Codec<String> {
 
-        protected Uint8Codec(TypeDefinition<?> typeDefinition) {
+        protected Uint8CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Short.class);
         }
 
@@ -121,8 +145,8 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         }
     };
 
-    public static class Uint16Codec extends TypeDefinitionAwareCodec<Integer> {
-        protected Uint16Codec(TypeDefinition<?> typeDefinition) {
+    public static class Uint16CodecStringImpl extends TypeDefinitionAwareCodec<Integer> implements Uint16Codec<String> {
+        protected Uint16CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Integer.class);
         }
 
@@ -130,11 +154,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public Integer deserialize(String stringRepresentation) {
             return Integer.parseInt(stringRepresentation);
         }
+
+        @Override
+        public String serialize(Integer data) {
+            return data.toString();
+        }
     };
 
-    public static class Uint32Codec extends TypeDefinitionAwareCodec<Long> {
+    public static class Uint32CodecStringImpl extends TypeDefinitionAwareCodec<Long> implements Uint32Codec<String> {
 
-        protected Uint32Codec(TypeDefinition<?> typeDefinition) {
+        protected Uint32CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Long.class);
         }
 
@@ -142,11 +171,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public Long deserialize(String stringRepresentation) {
             return Long.parseLong(stringRepresentation);
         }
+
+        @Override
+        public String serialize(Long data) {
+            return data.toString();
+        }
     };
 
-    public static class Uint64Codec extends TypeDefinitionAwareCodec<BigInteger> {
+    public static class Uint64CodecStringImpl extends TypeDefinitionAwareCodec<BigInteger> implements Uint64Codec<String> {
 
-        protected Uint64Codec(TypeDefinition<?> typeDefinition) {
+        protected Uint64CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, BigInteger.class);
         }
 
@@ -155,11 +189,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
             // 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<String> {
+    public static class StringCodecStringImpl extends TypeDefinitionAwareCodec<String> implements StringCodec<String> {
 
-        protected StringCodec(TypeDefinition<?> typeDefinition) {
+        protected StringCodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, String.class);
         }
 
@@ -167,11 +206,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public String deserialize(String stringRepresentation) {
             return stringRepresentation;
         }
+
+        @Override
+        public String serialize(String data) {
+            return data.toString();
+        }
     };
 
-    public static class Int16Codec extends TypeDefinitionAwareCodec<Short> {
+    public static class Int16CodecStringImpl extends TypeDefinitionAwareCodec<Short> implements Int16Codec<String> {
 
-        protected Int16Codec(TypeDefinition<?> typeDefinition) {
+        protected Int16CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Short.class);
         }
 
@@ -179,11 +223,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public Short deserialize(String stringRepresentation) {
             return Short.valueOf(stringRepresentation);
         }
+
+        @Override
+        public String serialize(Short data) {
+            return data.toString();
+        }
     };
 
-    public static class Int32Codec extends TypeDefinitionAwareCodec<Integer> {
+    public static class Int32CodecStringImpl extends TypeDefinitionAwareCodec<Integer> implements Int32Codec<String> {
 
-        protected Int32Codec(TypeDefinition<?> typeDefinition) {
+        protected Int32CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Integer.class);
         }
 
@@ -191,11 +240,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public Integer deserialize(String stringRepresentation) {
             return Integer.valueOf(stringRepresentation);
         }
+
+        @Override
+        public String serialize(Integer data) {
+            return data.toString();
+        }
     };
 
-    public static class Int64Codec extends TypeDefinitionAwareCodec<Long> {
+    public static class Int64CodecStringImpl extends TypeDefinitionAwareCodec<Long> implements Int64Codec<String> {
 
-        protected Int64Codec(TypeDefinition<?> typeDefinition) {
+        protected Int64CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Long.class);
         }
 
@@ -203,11 +257,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public Long deserialize(String stringRepresentation) {
             return Long.parseLong(stringRepresentation);
         }
+
+        @Override
+        public String serialize(Long data) {
+            return data.toString();
+        }
     };
 
-    public static class Int8Codec extends TypeDefinitionAwareCodec<Byte> {
+    public static class Int8CodecStringImpl extends TypeDefinitionAwareCodec<Byte> implements Int8Codec<String> {
 
-        protected Int8Codec(TypeDefinition<?> typeDefinition) {
+        protected Int8CodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Byte.class);
         }
 
@@ -215,11 +274,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public Byte deserialize(String stringRepresentation) {
             return Byte.parseByte(stringRepresentation);
         }
+
+        @Override
+        public String serialize(Byte data) {
+            return data.toString();
+        }
     };
 
-    public static class EmptyCodec extends TypeDefinitionAwareCodec<Void> {
+    public static class EmptyCodecStringImpl extends TypeDefinitionAwareCodec<Void> implements EmptyCodec<String> {
 
-        protected EmptyCodec(TypeDefinition<?> typeDefinition) {
+        protected EmptyCodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, Void.class);
         }
 
@@ -234,9 +298,9 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         }
     };
 
-    public static final class BinaryCodec extends TypeDefinitionAwareCodec<byte[]> {
+    public static final class BinaryCodecStringImpl extends TypeDefinitionAwareCodec<byte[]> implements BinaryCodec<String> {
 
-        protected BinaryCodec(TypeDefinition<?> typeDefinition) {
+        protected BinaryCodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, byte[].class);
         }
 
@@ -253,10 +317,10 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         }
     };
 
-    public static final class BitsCodec extends TypeDefinitionAwareCodec<Set<String>> {
+    public static final class BitsCodecStringImpl extends TypeDefinitionAwareCodec<Set<String>> implements BitsCodec<String> {
 
         @SuppressWarnings("unchecked")
-        protected BitsCodec(TypeDefinition<?> typeDefinition) {
+        protected BitsCodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, (Class<Set<String>>) ((Class<?>) Set.class));
         }
 
@@ -272,9 +336,9 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         }
     };
 
-    public static class EnumCodec extends TypeDefinitionAwareCodec<String> {
+    public static class EnumCodecStringImpl extends TypeDefinitionAwareCodec<String> implements EnumCodec<String> {
 
-        protected EnumCodec(TypeDefinition<?> typeDefinition) {
+        protected EnumCodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, String.class);
         }
 
@@ -282,11 +346,16 @@ public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
         public String deserialize(String stringRepresentation) {
             return stringRepresentation;
         }
+
+        @Override
+        public String serialize(String data) {
+            return data.toString();
+        }
     };
 
-    public static class DecimalCodec extends TypeDefinitionAwareCodec<BigDecimal> {
+    public static class DecimalCodecStringImpl extends TypeDefinitionAwareCodec<BigDecimal> implements DecimalCodec<String> {
 
-        protected DecimalCodec(TypeDefinition<?> typeDefinition) {
+        protected DecimalCodecStringImpl(TypeDefinition<?> typeDefinition) {
             super(typeDefinition, BigDecimal.class);
         }