1 package com.fasterxml.jackson.databind.cfg;
2
3 import com.fasterxml.jackson.annotation.JsonAutoDetect;
4 import com.fasterxml.jackson.annotation.JsonFormat;
5 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
6 import com.fasterxml.jackson.annotation.JsonInclude;
7 import com.fasterxml.jackson.annotation.JsonSetter;
8
9 /**
10 * Configuration object that is accessed by databinding functionality
11 * to find overrides to configuration of properties, based on declared
12 * type of the property. Such overrides have precedence over annotations
13 * attached to actual type ({@link java.lang.Class}), but can be further
14 * overridden by annotations attached to the property itself.
15 *
16 * @since 2.8
17 */
18 public abstract class ConfigOverride
19 {
20 /**
21 * Definitions of format overrides, if any.
22 */
23 protected JsonFormat.Value _format;
24
25 /**
26 * Definitions of inclusion defaults to use for properties included in this POJO type.
27 * Overrides global defaults, may be overridden by per-property-type (see
28 * {@link #_includeAsProperty}) and per-property overrides (annotations).
29 */
30 protected JsonInclude.Value _include;
31
32 /**
33 * Definitions of inclusion defaults for properties of this specified type (regardless
34 * of POJO in which they are included).
35 * Overrides global defaults, per-POJO inclusion defaults (see {#link {@link #_include}}),
36 * may be overridden by per-property overrides.
37 *
38 * @since 2.9
39 */
40 protected JsonInclude.Value _includeAsProperty;
41
42 /**
43 * Definitions of property ignoral (whether to serialize, deserialize
44 * given logical property) overrides, if any.
45 */
46 protected JsonIgnoreProperties.Value _ignorals;
47
48 /**
49 * Definitions of setter overrides regarding null handling
50 *
51 * @since 2.9
52 */
53 protected JsonSetter.Value _setterInfo;
54
55 /**
56 * Overrides for auto-detection visibility rules for this type.
57 *
58 * @since 2.9
59 */
60 protected JsonAutoDetect.Value _visibility;
61
62 /**
63 * Flag that indicates whether "is ignorable type" is specified for this type;
64 * and if so, is it to be ignored (true) or not ignored (false); `null` is
65 * used to indicate "not specified", in which case other configuration (class
66 * annotation) is used.
67 */
68 protected Boolean _isIgnoredType;
69
70 /**
71 * Flag that indicates whether properties of this type default to being merged
72 * or not.
73 */
74 protected Boolean _mergeable;
75
76 protected ConfigOverride() { }
77 protected ConfigOverride(ConfigOverride src) {
78 _format = src._format;
79 _include = src._include;
80 _includeAsProperty = src._includeAsProperty;
81 _ignorals = src._ignorals;
82 _setterInfo = src._setterInfo;
83 _visibility = src._visibility;
84 _isIgnoredType = src._isIgnoredType;
85 _mergeable = src._mergeable;
86 }
87
88 /**
89 * Accessor for immutable "empty" instance that has no configuration overrides defined.
90 *
91 * @since 2.9
92 */
93 public static ConfigOverride empty() {
94 return Empty.INSTANCE;
95 }
96
97 public JsonFormat.Value getFormat() { return _format; }
98 public JsonInclude.Value getInclude() { return _include; }
99
100 /**
101 * @since 2.9
102 */
103 public JsonInclude.Value getIncludeAsProperty() { return _includeAsProperty; }
104
105 public JsonIgnoreProperties.Value getIgnorals() { return _ignorals; }
106
107 public Boolean getIsIgnoredType() {
108 return _isIgnoredType;
109 }
110
111 /**
112 * @since 2.9
113 */
114 public JsonSetter.Value getSetterInfo() { return _setterInfo; }
115
116 /**
117 * @since 2.9
118 */
119 public JsonAutoDetect.Value getVisibility() { return _visibility; }
120
121 /**
122 * @since 2.9
123 */
124 public Boolean getMergeable() { return _mergeable; }
125
126 /**
127 * Implementation used solely for "empty" instance; has no mutators
128 * and is not changed by core functionality.
129 *
130 * @since 2.9
131 */
132 final static class Empty extends ConfigOverride {
133 final static Empty INSTANCE = new Empty();
134
135 private Empty() { }
136 }
137 }
138