| package com.fasterxml.jackson.databind.cfg; |
| |
| import com.fasterxml.jackson.databind.ser.*; |
| import com.fasterxml.jackson.databind.util.ArrayBuilders; |
| |
| /** |
| * Configuration settings container class for |
| * {@link SerializerFactory} implementations. |
| */ |
| public final class SerializerFactoryConfig |
| implements java.io.Serializable |
| { |
| private static final long serialVersionUID = 1L; |
| /** |
| * 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 BeanSerializerModifier[] NO_MODIFIERS = new BeanSerializerModifier[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 BeanSerializerModifier[] _modifiers; |
| |
| public SerializerFactoryConfig() { |
| this(null, null, null); |
| } |
| |
| protected SerializerFactoryConfig(Serializers[] allAdditionalSerializers, |
| Serializers[] allAdditionalKeySerializers, |
| BeanSerializerModifier[] modifiers) |
| { |
| _additionalSerializers = (allAdditionalSerializers == null) ? |
| NO_SERIALIZERS : allAdditionalSerializers; |
| _additionalKeySerializers = (allAdditionalKeySerializers == null) ? |
| NO_SERIALIZERS : allAdditionalKeySerializers; |
| _modifiers = (modifiers == null) ? NO_MODIFIERS : modifiers; |
| } |
| |
| public SerializerFactoryConfig withAdditionalSerializers(Serializers additional) |
| { |
| if (additional == null) { |
| throw new IllegalArgumentException("Can not pass null Serializers"); |
| } |
| Serializers[] all = ArrayBuilders.insertInListNoDup(_additionalSerializers, additional); |
| return new SerializerFactoryConfig(all, _additionalKeySerializers, _modifiers); |
| } |
| |
| public SerializerFactoryConfig withAdditionalKeySerializers(Serializers additional) |
| { |
| if (additional == null) { |
| throw new IllegalArgumentException("Can not pass null Serializers"); |
| } |
| Serializers[] all = ArrayBuilders.insertInListNoDup(_additionalKeySerializers, additional); |
| return new SerializerFactoryConfig(_additionalSerializers, all, _modifiers); |
| } |
| |
| public SerializerFactoryConfig withSerializerModifier(BeanSerializerModifier modifier) |
| { |
| if (modifier == null) { |
| throw new IllegalArgumentException("Can not pass null modifier"); |
| } |
| BeanSerializerModifier[] modifiers = ArrayBuilders.insertInListNoDup(_modifiers, modifier); |
| return new SerializerFactoryConfig(_additionalSerializers, _additionalKeySerializers, modifiers); |
| } |
| |
| 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 ArrayBuilders.arrayAsIterable(_additionalSerializers); |
| } |
| |
| public Iterable<Serializers> keySerializers() { |
| return ArrayBuilders.arrayAsIterable(_additionalKeySerializers); |
| } |
| |
| public Iterable<BeanSerializerModifier> serializerModifiers() { |
| return ArrayBuilders.arrayAsIterable(_modifiers); |
| } |
| } |