package com.fasterxml.jackson.databind.deser.impl; import java.io.IOException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.deser.SettableAnyProperty; import com.fasterxml.jackson.databind.deser.SettableBeanProperty; /** * Base class for property values that need to be buffered during * deserialization. */ public abstract class PropertyValue { public final PropertyValue next; /** * Value to assign when POJO has been instantiated. */ public final Object value; protected PropertyValue(PropertyValue next, Object value) { this.next = next; this.value = value; } /** * Method called to assign stored value of this property to specified * bean instance */ public abstract void assign(Object bean) throws IOException, JsonProcessingException; /* /********************************************************** /* Concrete property value classes /********************************************************** */ /** * Property value that used when assigning value to property using * a setter method or direct field access. */ final static class Regular extends PropertyValue { final SettableBeanProperty _property; public Regular(PropertyValue next, Object value, SettableBeanProperty prop) { super(next, value); _property = prop; } @Override public void assign(Object bean) throws IOException, JsonProcessingException { _property.set(bean, value); } } /** * Property value type used when storing entries to be added * to a POJO using "any setter" (method that takes name and * value arguments, allowing setting multiple different * properties using single method). */ final static class Any extends PropertyValue { final SettableAnyProperty _property; final String _propertyName; public Any(PropertyValue next, Object value, SettableAnyProperty prop, String propName) { super(next, value); _property = prop; _propertyName = propName; } @Override public void assign(Object bean) throws IOException, JsonProcessingException { _property.set(bean, _propertyName, value); } } /** * Property value type used when storing entries to be added * to a Map. */ final static class Map extends PropertyValue { final Object _key; public Map(PropertyValue next, Object value, Object key) { super(next, value); _key = key; } @SuppressWarnings("unchecked") @Override public void assign(Object bean) throws IOException, JsonProcessingException { ((java.util.Map<Object,Object>) bean).put(_key, value); } } }