package com.cardshifter.core.messages; import com.cardshifter.api.messages.Message; import com.cardshifter.api.messages.MessageTypeIdResolver; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.jsontype.TypeIdResolver; import com.fasterxml.jackson.databind.type.TypeFactory; /** * Created by Simon on 4/24/2015. */ public class MessageTypeResolver implements TypeIdResolver { private JavaType mBaseType; public static Class<?> typeFor(String id) { return MessageTypeIdResolver.get(id); } @Override public void init(JavaType baseType) { mBaseType = baseType; } @Override public JsonTypeInfo.Id getMechanism() { return JsonTypeInfo.Id.CUSTOM; } @Override public String idFromValue(Object obj) { return idFromValueAndType(obj, obj.getClass()); } @Override public String idFromBaseType() { throw new AssertionError("this should never happen"); } @Override public String idFromValueAndType(Object obj, Class<?> clazz) { Message mess = (Message) obj; return mess.getCommand(); } @Override public JavaType typeFromId(String type) { Class<?> clazz = MessageTypeIdResolver.get(type); if (clazz == null) { throw new UnsupportedOperationException("No such defined type: " + type); } return TypeFactory.defaultInstance().constructSpecializedType(mBaseType, clazz); } }