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);
}
}