package com.fasterxml.jackson.databind.deser.impl; import java.io.IOException; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdResolver; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.deser.SettableBeanProperty; /** * Object that knows how to deserialize Object Ids. */ public class ObjectIdReader implements java.io.Serializable { private static final long serialVersionUID = 1L; protected final JavaType _idType; public final PropertyName propertyName; /** * Blueprint generator instance: actual instance will be * fetched from {@link SerializerProvider} using this as * the key. */ public final ObjectIdGenerator<?> generator; public final ObjectIdResolver resolver; /** * Deserializer used for deserializing id values. */ protected final JsonDeserializer<Object> _deserializer; public final SettableBeanProperty idProperty; /* /********************************************************** /* Life-cycle /********************************************************** */ @SuppressWarnings("unchecked") protected ObjectIdReader(JavaType t, PropertyName propName, ObjectIdGenerator<?> gen, JsonDeserializer<?> deser, SettableBeanProperty idProp, ObjectIdResolver resolver) { _idType = t; propertyName = propName; generator = gen; this.resolver = resolver; _deserializer = (JsonDeserializer<Object>) deser; idProperty = idProp; } /** * Factory method called by {@link com.fasterxml.jackson.databind.ser.std.BeanSerializerBase} * with the initial information based on standard settings for the type * for which serializer is being built. */ public static ObjectIdReader construct(JavaType idType, PropertyName propName, ObjectIdGenerator<?> generator, JsonDeserializer<?> deser, SettableBeanProperty idProp, ObjectIdResolver resolver) { return new ObjectIdReader(idType, propName, generator, deser, idProp, resolver); } /* /********************************************************** /* API /********************************************************** */ public JsonDeserializer<Object> getDeserializer() { return _deserializer; } public JavaType getIdType() { return _idType; } /** * Convenience method, equivalent to calling: *<code> * readerInstance.generator.maySerializeAsObject(); *</code> * and used to determine whether Object Ids handled by the underlying * generator may be in form of (JSON) Objects. * Used for optimizing handling in cases where method returns false. * * @since 2.5 */ public boolean maySerializeAsObject() { return generator.maySerializeAsObject(); } /** * Convenience method, equivalent to calling: *<code> * readerInstance.generator.isValidReferencePropertyName(name, parser); *</code> * and used to determine whether Object Ids handled by the underlying * generator may be in form of (JSON) Objects. * Used for optimizing handling in cases where method returns false. * * @since 2.5 */ public boolean isValidReferencePropertyName(String name, JsonParser parser) { return generator.isValidReferencePropertyName(name, parser); } /** * Method called to read value that is expected to be an Object Reference * (that is, value of an Object Id used to refer to another object). * * @since 2.3 */ public Object readObjectReference(JsonParser jp, DeserializationContext ctxt) throws IOException { return _deserializer.deserialize(jp, ctxt); } }