SerializerFactoryConfig.java
package tools.jackson.databind.cfg;
import java.util.Objects;
import tools.jackson.databind.ValueSerializer;
import tools.jackson.databind.ser.*;
import tools.jackson.databind.ser.impl.FailingSerializer;
import tools.jackson.databind.util.ArrayBuilders;
import tools.jackson.databind.util.ArrayIterator;
/**
* Configuration settings container class for
* {@link SerializerFactory} implementations.
*/
public final class SerializerFactoryConfig
implements java.io.Serializable
{
private static final long serialVersionUID = 3L;
public final static ValueSerializer<Object> DEFAULT_NULL_KEY_SERIALIZER =
new FailingSerializer("Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)");
/**
* Constant for empty <code>Serializers</code> array (which by definition
* is stateless and reusable)
*/
protected final static Serializers[] NO_SERIALIZERS = new Serializers[0];
protected final static ValueSerializerModifier[] NO_MODIFIERS = new ValueSerializerModifier[0];
/**
* List of providers for additional serializers, checked before considering default
* basic or bean serialializers.
*/
protected final Serializers[] _additionalSerializers;
/**
* List of providers for additional key serializers, checked before considering default
* key serialializers.
*/
protected final Serializers[] _additionalKeySerializers;
/**
* List of modifiers that can change the way {@link BeanSerializer} instances
* are configured and constructed.
*/
protected final ValueSerializerModifier[] _modifiers;
/**
* Serializer used to output a null value, unless explicitly redefined for property.
*/
protected final ValueSerializer<Object> _nullValueSerializer;
/**
* Serializer used to (try to) output a null key, due to an entry of
* {@link java.util.Map} having null key.
*/
protected final ValueSerializer<Object> _nullKeySerializer;
public SerializerFactoryConfig() {
this(null, null, null,
DEFAULT_NULL_KEY_SERIALIZER, null);
}
protected SerializerFactoryConfig(Serializers[] allAdditionalSerializers,
Serializers[] allAdditionalKeySerializers,
ValueSerializerModifier[] modifiers,
ValueSerializer<Object> nullKeySer,
ValueSerializer<Object> nullValueSer)
{
_additionalSerializers = (allAdditionalSerializers == null) ?
NO_SERIALIZERS : allAdditionalSerializers;
_additionalKeySerializers = (allAdditionalKeySerializers == null) ?
NO_SERIALIZERS : allAdditionalKeySerializers;
_modifiers = (modifiers == null) ? NO_MODIFIERS : modifiers;
_nullKeySerializer = nullKeySer;
_nullValueSerializer = nullValueSer;
}
public SerializerFactoryConfig withAdditionalSerializers(Serializers additional)
{
Objects.requireNonNull(additional, "Cannot pass null Serializers");
Serializers[] all = ArrayBuilders.insertInListNoDup(_additionalSerializers, additional);
return new SerializerFactoryConfig(all, _additionalKeySerializers, _modifiers,
_nullKeySerializer, _nullValueSerializer);
}
public SerializerFactoryConfig withAdditionalKeySerializers(Serializers additional)
{
Objects.requireNonNull(additional, "Cannot pass null Serializers");
Serializers[] all = ArrayBuilders.insertInListNoDup(_additionalKeySerializers, additional);
return new SerializerFactoryConfig(_additionalSerializers, all, _modifiers,
_nullKeySerializer, _nullValueSerializer);
}
public SerializerFactoryConfig withSerializerModifier(ValueSerializerModifier modifier)
{
Objects.requireNonNull(modifier, "Cannot pass null ValueSerializerModifier");
ValueSerializerModifier[] modifiers = ArrayBuilders.insertInListNoDup(_modifiers, modifier);
return new SerializerFactoryConfig(_additionalSerializers, _additionalKeySerializers, modifiers,
_nullKeySerializer, _nullValueSerializer);
}
@SuppressWarnings("unchecked")
public SerializerFactoryConfig withNullValueSerializer(ValueSerializer<?> nvs) {
Objects.requireNonNull(nvs, "Cannot pass null ValueSerializer");
return new SerializerFactoryConfig(_additionalSerializers, _additionalKeySerializers, _modifiers,
_nullKeySerializer, (ValueSerializer<Object>) nvs);
}
@SuppressWarnings("unchecked")
public SerializerFactoryConfig withNullKeySerializer(ValueSerializer<?> nks) {
Objects.requireNonNull(nks, "Cannot pass null ValueSerializer");
return new SerializerFactoryConfig(_additionalSerializers, _additionalKeySerializers, _modifiers,
(ValueSerializer<Object>) nks, _nullValueSerializer);
}
public boolean hasSerializers() { return _additionalSerializers.length > 0; }
public boolean hasKeySerializers() { return _additionalKeySerializers.length > 0; }
public boolean hasSerializerModifiers() { return _modifiers.length > 0; }
public Iterable<Serializers> serializers() { return new ArrayIterator<Serializers>(_additionalSerializers); }
public Iterable<Serializers> keySerializers() { return new ArrayIterator<Serializers>(_additionalKeySerializers); }
public Iterable<ValueSerializerModifier> serializerModifiers() { return new ArrayIterator<ValueSerializerModifier>(_modifiers); }
public ValueSerializer<Object> getNullKeySerializer() { return _nullKeySerializer; }
public ValueSerializer<Object> getNullValueSerializer() { return _nullValueSerializer; }
}