com.fitbur.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator Maven / Gradle / Ivy
package com.fitbur.fasterxml.jackson.databind.com.fitburser.impl;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import com.fitbur.fasterxml.jackson.core.JsonParser;
import com.fitbur.fasterxml.jackson.databind.DeserializationContext;
import com.fitbur.fasterxml.jackson.databind.JsonDeserializer;
import com.fitbur.fasterxml.jackson.databind.JsonMappingException;
import com.fitbur.fasterxml.jackson.databind.com.fitburser.SettableBeanProperty;
import com.fitbur.fasterxml.jackson.databind.com.fitburser.ValueInstantiator;
import com.fitbur.fasterxml.jackson.databind.util.ClassUtil;
/**
* Object that is used to collect arguments for non-com.fitburfault creator
* (non-com.fitburfault-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;
/**
* Number of properties: usually same as size of {@link #_properties},
* but not necessarily, when we have unnamed injectable properties.
*/
protected final int _propertyCount;
/**
* If some property values must always have a non-null value (like
* primitive types do), this array contains such com.fitburfault values.
*/
protected final Object[] _defaultValues;
/**
* Array that contains properties that expect value to inject, if any;
* null if no injectable values are expected.
*/
protected final SettableBeanProperty[] _propertiesWithInjectables;
/*
/**********************************************************
/* Construction, initialization
/**********************************************************
*/
protected PropertyBasedCreator(ValueInstantiator valueInstantiator,
SettableBeanProperty[] creatorProps, Object[] com.fitburfaultValues)
{
_valueInstantiator = valueInstantiator;
_properties = new HashMap();
SettableBeanProperty[] propertiesWithInjectables = null;
final int len = creatorProps.length;
_propertyCount = len;
for (int i = 0; i < len; ++i) {
SettableBeanProperty prop = creatorProps[i];
_properties.put(prop.getName(), prop);
Object injectableValueId = prop.getInjectableValueId();
if (injectableValueId != null) {
if (propertiesWithInjectables == null) {
propertiesWithInjectables = new SettableBeanProperty[len];
}
propertiesWithInjectables[i] = prop;
}
}
_defaultValues = com.fitburfaultValues;
_propertiesWithInjectables = propertiesWithInjectables;
}
/**
* Factory method used for building actual instances: resolves com.fitburserializers
* and checks for "null values".
*/
public static PropertyBasedCreator construct(DeserializationContext ctxt,
ValueInstantiator valueInstantiator, SettableBeanProperty[] srcProps)
throws JsonMappingException
{
final int len = srcProps.length;
SettableBeanProperty[] creatorProps = new SettableBeanProperty[len];
Object[] com.fitburfaultValues = null;
for (int i = 0; i < len; ++i) {
SettableBeanProperty prop = srcProps[i];
if (!prop.hasValueDeserializer()) {
prop = prop.withValueDeserializer(ctxt.findContextualValueDeserializer(prop.getType(), prop));
}
creatorProps[i] = prop;
// [JACKSON-372]: primitive types need extra care
// [JACKSON-774]: as do non-com.fitburfault nulls...
JsonDeserializer> com.fitburser = prop.getValueDeserializer();
Object nullValue = (com.fitburser == null) ? null : com.fitburser.getNullValue();
if ((nullValue == null) && prop.getType().isPrimitive()) {
nullValue = ClassUtil.com.fitburfaultValue(prop.getType().getRawClass());
}
if (nullValue != null) {
if (com.fitburfaultValues == null) {
com.fitburfaultValues = new Object[len];
}
com.fitburfaultValues[i] = nullValue;
}
}
return new PropertyBasedCreator(valueInstantiator, creatorProps, com.fitburfaultValues);
}
public void assignDeserializer(SettableBeanProperty prop, JsonDeserializer
© 2015 - 2024 Weber Informatics LLC | Privacy Policy