package ameba.db.ebean.jackson; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.deser.Deserializers; import com.fasterxml.jackson.databind.jsontype.TypeDeserializer; import com.fasterxml.jackson.databind.type.CollectionType; import io.ebean.text.json.JsonContext; import java.util.Collection; /** * Finds JsonDeserializer implementations for entity beans or entity bean collections. */ class FindDeserializers extends Deserializers.Base { private final JsonContext jsonContext; /** * Construct with the given JsonContext. */ FindDeserializers(JsonContext jsonContext) { this.jsonContext = jsonContext; } /** * {@inheritDoc} */ @Override public JsonDeserializer<?> findBeanDeserializer(JavaType type, DeserializationConfig config, BeanDescription beanDesc) throws JsonMappingException { if (jsonContext.isSupportedType(type.getRawClass())) { return new BeanTypeDeserializer(jsonContext, type.getRawClass()); } return null; } /** {@inheritDoc} */ @Override public JsonDeserializer<?> findCollectionDeserializer(CollectionType type, DeserializationConfig config, BeanDescription beanDesc, TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer) throws JsonMappingException { Class clazz = type.getContentType().getRawClass(); if (Collection.class.isAssignableFrom(type.getRawClass()) && jsonContext.isSupportedType(clazz)) { return new BeanListTypeDeserializer(jsonContext, clazz); } return null; } }