public class

SerializerTypeInferer

extends Object
package com.netflix.astyanax.serializers;

import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.util.Date;
import java.util.UUID;

import com.netflix.astyanax.Serializer;

/**
 * Utility class that infers the concrete Serializer needed to turn a value into
 * its binary representation
 * 
 * @author Bozhidar Bozhanov
 * 
 */
public class SerializerTypeInferer {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static <T> Serializer<T> getSerializer(Object value) {
        Serializer serializer = null;
        if (value == null) {
            serializer = ByteBufferSerializer.get();
        }
        else if (value instanceof UUID) {
            serializer = UUIDSerializer.get();
        }
        else if (value instanceof String) {
            serializer = StringSerializer.get();
        }
        else if (value instanceof Long) {
            serializer = LongSerializer.get();
        }
        else if (value instanceof Integer) {
            serializer = IntegerSerializer.get();
        }
        else if (value instanceof Short) {
            serializer = ShortSerializer.get();
        }
        else if (value instanceof BigInteger) {
            serializer = BigIntegerSerializer.get();
        }
        else if (value instanceof Boolean) {
            serializer = BooleanSerializer.get();
        }
        else if (value instanceof byte[]) {
            serializer = BytesArraySerializer.get();
        }
        else if (value instanceof ByteBuffer) {
            serializer = ByteBufferSerializer.get();
        }
        else if (value instanceof Date) {
            serializer = DateSerializer.get();
        }
        else {
            serializer = ObjectSerializer.get();
        }
        // Add other serializers here

        return serializer;
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static <T> Serializer<T> getSerializer(Class<?> valueClass) {
        Serializer serializer = null;
        if (valueClass.equals(UUID.class)) {
            serializer = UUIDSerializer.get();
        }
        else if (valueClass.equals(String.class)) {
            serializer = StringSerializer.get();
        }
        else if (valueClass.equals(Long.class) || valueClass.equals(long.class)) {
            serializer = LongSerializer.get();
        }
        else if (valueClass.equals(Integer.class) || valueClass.equals(int.class)) {
            serializer = IntegerSerializer.get();
        }
        else if (valueClass.equals(Short.class) || valueClass.equals(short.class)) {
            serializer = ShortSerializer.get();
        }
        else if (valueClass.equals(Boolean.class) || valueClass.equals(boolean.class)) {
            serializer = BooleanSerializer.get();
        }
        else if (valueClass.equals(byte[].class)) {
            serializer = BytesArraySerializer.get();
        }
        else if (valueClass.equals(ByteBuffer.class)) {
            serializer = ByteBufferSerializer.get();
        }
        else if (valueClass.equals(Date.class)) {
            serializer = DateSerializer.get();
        }
        else {
            serializer = ObjectSerializer.get();
        }
        // Add other serializers here

        return serializer;
    }
}