1 package com.fasterxml.jackson.databind.cfg;
2
3 import com.fasterxml.jackson.databind.AbstractTypeResolver;
4 import com.fasterxml.jackson.databind.deser.*;
5 import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializers;
6 import com.fasterxml.jackson.databind.util.ArrayBuilders;
7 import com.fasterxml.jackson.databind.util.ArrayIterator;
8
9
12 public class DeserializerFactoryConfig
13 implements java.io.Serializable
14 {
15 private static final long serialVersionUID = 1L;
16
17 protected final static Deserializers[] NO_DESERIALIZERS = new Deserializers[0];
18 protected final static BeanDeserializerModifier[] NO_MODIFIERS = new BeanDeserializerModifier[0];
19 protected final static AbstractTypeResolver[] NO_ABSTRACT_TYPE_RESOLVERS = new AbstractTypeResolver[0];
20 protected final static ValueInstantiators[] NO_VALUE_INSTANTIATORS = new ValueInstantiators[0];
21
22
28 protected final static KeyDeserializers[] DEFAULT_KEY_DESERIALIZERS = new KeyDeserializers[] {
29 new StdKeyDeserializers()
30 };
31
32
36 protected final Deserializers[] _additionalDeserializers;
37
38
42 protected final KeyDeserializers[] _additionalKeyDeserializers;
43
44
48 protected final BeanDeserializerModifier[] _modifiers;
49
50
55 protected final AbstractTypeResolver[] _abstractTypeResolvers;
56
57
64 protected final ValueInstantiators[] _valueInstantiators;
65
66
70 public DeserializerFactoryConfig() {
71 this(null, null, null, null, null);
72 }
73
74
78 protected DeserializerFactoryConfig(Deserializers[] allAdditionalDeserializers,
79 KeyDeserializers[] allAdditionalKeyDeserializers,
80 BeanDeserializerModifier[] modifiers,
81 AbstractTypeResolver[] atr,
82 ValueInstantiators[] vi)
83 {
84 _additionalDeserializers = (allAdditionalDeserializers == null) ?
85 NO_DESERIALIZERS : allAdditionalDeserializers;
86 _additionalKeyDeserializers = (allAdditionalKeyDeserializers == null) ?
87 DEFAULT_KEY_DESERIALIZERS : allAdditionalKeyDeserializers;
88 _modifiers = (modifiers == null) ? NO_MODIFIERS : modifiers;
89 _abstractTypeResolvers = (atr == null) ? NO_ABSTRACT_TYPE_RESOLVERS : atr;
90 _valueInstantiators = (vi == null) ? NO_VALUE_INSTANTIATORS : vi;
91 }
92
93
99 public DeserializerFactoryConfig withAdditionalDeserializers(Deserializers additional)
100 {
101 if (additional == null) {
102 throw new IllegalArgumentException("Cannot pass null Deserializers");
103 }
104 Deserializers[] all = ArrayBuilders.insertInListNoDup(_additionalDeserializers, additional);
105 return new DeserializerFactoryConfig(all, _additionalKeyDeserializers, _modifiers,
106 _abstractTypeResolvers, _valueInstantiators);
107 }
108
109
115 public DeserializerFactoryConfig withAdditionalKeyDeserializers(KeyDeserializers additional)
116 {
117 if (additional == null) {
118 throw new IllegalArgumentException("Cannot pass null KeyDeserializers");
119 }
120 KeyDeserializers[] all = ArrayBuilders.insertInListNoDup(_additionalKeyDeserializers, additional);
121 return new DeserializerFactoryConfig(_additionalDeserializers, all, _modifiers,
122 _abstractTypeResolvers, _valueInstantiators);
123 }
124
125
131 public DeserializerFactoryConfig withDeserializerModifier(BeanDeserializerModifier modifier)
132 {
133 if (modifier == null) {
134 throw new IllegalArgumentException("Cannot pass null modifier");
135 }
136 BeanDeserializerModifier[] all = ArrayBuilders.insertInListNoDup(_modifiers, modifier);
137 return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers, all,
138 _abstractTypeResolvers, _valueInstantiators);
139 }
140
141
148 public DeserializerFactoryConfig withAbstractTypeResolver(AbstractTypeResolver resolver)
149 {
150 if (resolver == null) {
151 throw new IllegalArgumentException("Cannot pass null resolver");
152 }
153 AbstractTypeResolver[] all = ArrayBuilders.insertInListNoDup(_abstractTypeResolvers, resolver);
154 return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers, _modifiers,
155 all, _valueInstantiators);
156 }
157
158
168 public DeserializerFactoryConfig withValueInstantiators(ValueInstantiators instantiators)
169 {
170 if (instantiators == null) {
171 throw new IllegalArgumentException("Cannot pass null resolver");
172 }
173 ValueInstantiators[] all = ArrayBuilders.insertInListNoDup(_valueInstantiators, instantiators);
174 return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers, _modifiers,
175 _abstractTypeResolvers, all);
176 }
177
178 public boolean hasDeserializers() { return _additionalDeserializers.length > 0; }
179
180 public boolean hasKeyDeserializers() { return _additionalKeyDeserializers.length > 0; }
181
182 public boolean hasDeserializerModifiers() { return _modifiers.length > 0; }
183
184 public boolean hasAbstractTypeResolvers() { return _abstractTypeResolvers.length > 0; }
185
186 public boolean hasValueInstantiators() { return _valueInstantiators.length > 0; }
187
188 public Iterable<Deserializers> deserializers() {
189 return new ArrayIterator<Deserializers>(_additionalDeserializers);
190 }
191
192 public Iterable<KeyDeserializers> keyDeserializers() {
193 return new ArrayIterator<KeyDeserializers>(_additionalKeyDeserializers);
194 }
195
196 public Iterable<BeanDeserializerModifier> deserializerModifiers() {
197 return new ArrayIterator<BeanDeserializerModifier>(_modifiers);
198 }
199
200 public Iterable<AbstractTypeResolver> abstractTypeResolvers() {
201 return new ArrayIterator<AbstractTypeResolver>(_abstractTypeResolvers);
202 }
203
204 public Iterable<ValueInstantiators> valueInstantiators() {
205 return new ArrayIterator<ValueInstantiators>(_valueInstantiators);
206 }
207 }
208