package org.corfudb.util.serializer; import lombok.extern.slf4j.Slf4j; import java.util.HashMap; import java.util.Map; /** * Created by mwei on 1/8/16. */ @Slf4j public class Serializers { public static final int SYSTEM_SERIALIZERS_COUNT = 10; public static final ISerializer CORFU = new CorfuSerializer((byte) 0); public static final ISerializer JAVA = new JavaSerializer((byte) 1); public static final ISerializer JSON = new JSONSerializer((byte) 2); public static final ISerializer PRIMITIVE = new PrimitiveSerializer((byte) 3); private static final Map<Byte, ISerializer> serializersMap; static { serializersMap = new HashMap(); serializersMap.put(CORFU.getType(), CORFU); serializersMap.put(JAVA.getType(), JAVA); serializersMap.put(JSON.getType(), JSON); serializersMap.put(PRIMITIVE.getType(), PRIMITIVE); } private static final Map<Byte, ISerializer> customSerializers = new HashMap<>(); public static ISerializer getSerializer(Byte type) { if (type <= SYSTEM_SERIALIZERS_COUNT) { return serializersMap.get(type); } else { return customSerializers.get(type); } } public static synchronized void registerSerializer(ISerializer serializer) { if(serializer.getType() > SYSTEM_SERIALIZERS_COUNT) { customSerializers.put(serializer.getType(), serializer); } else { String msg = String.format("Serializer id must be greater than {}", SYSTEM_SERIALIZERS_COUNT); throw new RuntimeException(msg); } } }