org.codehaus.jackson.map.deser.impl.PropertyBasedCreator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ehcache Show documentation
Show all versions of ehcache Show documentation
Ehcache is an open source, standards-based cache used to boost performance,
offload the database and simplify scalability. Ehcache is robust, proven and full-featured and
this has made it the most widely-used Java-based cache.
package org.codehaus.jackson.map.deser.impl;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.JsonDeserializer;
import org.codehaus.jackson.map.deser.SettableBeanProperty;
import org.codehaus.jackson.map.deser.ValueInstantiator;
import org.codehaus.jackson.map.util.ClassUtil;
/**
* Object that is used to collect arguments for non-default creator
* (non-default-constructor, or argument-taking factory method)
* before creator can be called.
* Since ordering of JSON properties is not guaranteed, this may
* require buffering of values other than ones being passed to
* creator.
*/
public final class PropertyBasedCreator
{
protected final ValueInstantiator _valueInstantiator;
/**
* Map that contains property objects for either constructor or factory
* method (whichever one is null: one property for each
* parameter for that one), keyed by logical property name
*/
protected final HashMap _properties;
/**
* If some property values must always have a non-null value (like
* primitive types do), this array contains such default values.
*/
protected final Object[] _defaultValues;
/**
* Array that contains properties that expect value to inject, if any;
* null if no injectable values are expected.
*
* @since 1.9
*/
protected final SettableBeanProperty[] _propertiesWithInjectables;
public PropertyBasedCreator(ValueInstantiator valueInstantiator)
{
_valueInstantiator = valueInstantiator;
_properties = new HashMap();
// [JACKSON-372]: primitive types need extra care
Object[] defValues = null;
SettableBeanProperty[] creatorProps = valueInstantiator.getFromObjectArguments();
SettableBeanProperty[] propertiesWithInjectables = null;
for (int i = 0, len = creatorProps.length; i < len; ++i) {
SettableBeanProperty prop = creatorProps[i];
_properties.put(prop.getName(), prop);
if (prop.getType().isPrimitive()) {
if (defValues == null) {
defValues = new Object[len];
}
defValues[i] = ClassUtil.defaultValue(prop.getType().getRawClass());
}
Object injectableValueId = prop.getInjectableValueId();
if (injectableValueId != null) {
if (propertiesWithInjectables == null) {
propertiesWithInjectables = new SettableBeanProperty[len];
}
propertiesWithInjectables[i] = prop;
}
}
_defaultValues = defValues;
_propertiesWithInjectables = propertiesWithInjectables;
}
public Collection getCreatorProperties() {
return _properties.values();
}
public SettableBeanProperty findCreatorProperty(String name) {
return _properties.get(name);
}
public void assignDeserializer(SettableBeanProperty prop, JsonDeserializer