1
1
package com .fasterxml .jackson .core .util ;
2
2
3
3
import java .io .Serializable ;
4
+ import java .util .Objects ;
4
5
5
6
/**
6
7
* Value class used with some {@link com.fasterxml.jackson.core.PrettyPrinter}
@@ -23,6 +24,22 @@ public class Separators implements Serializable
23
24
*/
24
25
public final static String DEFAULT_ROOT_VALUE_SEPARATOR = " " ;
25
26
27
+ /**
28
+ * String to use in empty Object to separate start and end markers.
29
+ * Default is single space, resulting in output of {@code { }}.
30
+ *
31
+ * @since 2.17
32
+ */
33
+ public final static String DEFAULT_OBJECT_EMPTY_SEPARATOR = " " ;
34
+
35
+ /**
36
+ * String to use in empty Array to separate start and end markers.
37
+ * Default is single space, resulting in output of {@code [ ]}.
38
+ *
39
+ * @since 2.17
40
+ */
41
+ public final static String DEFAULT_ARRAY_EMPTY_SEPARATOR = " " ;
42
+
26
43
/**
27
44
* Define the spacing around elements like commas and colons.
28
45
*
@@ -59,14 +76,20 @@ public String apply(char separator) {
59
76
private final Spacing objectFieldValueSpacing ;
60
77
private final char objectEntrySeparator ;
61
78
private final Spacing objectEntrySpacing ;
79
+ private final String objectEmptySeparator ;
62
80
private final char arrayValueSeparator ;
63
81
private final Spacing arrayValueSpacing ;
82
+ private final String arrayEmptySeparator ;
64
83
private final String rootSeparator ;
65
84
66
85
public static Separators createDefaultInstance () {
67
86
return new Separators ();
68
87
}
69
88
89
+ /**
90
+ * Constructor for creating an instance with default settings for all
91
+ * separators.
92
+ */
70
93
public Separators () {
71
94
this (':' , ',' , ',' );
72
95
}
@@ -82,15 +105,18 @@ public Separators(
82
105
) {
83
106
this (DEFAULT_ROOT_VALUE_SEPARATOR ,
84
107
objectFieldValueSeparator , Spacing .BOTH ,
85
- objectEntrySeparator , Spacing .NONE ,
86
- arrayValueSeparator , Spacing .NONE );
108
+ objectEntrySeparator , Spacing .NONE , DEFAULT_OBJECT_EMPTY_SEPARATOR ,
109
+ arrayValueSeparator , Spacing .NONE , DEFAULT_ARRAY_EMPTY_SEPARATOR );
87
110
}
88
111
89
112
/**
90
113
* Create an instance with the specified separator characters and spaces around those characters.
91
114
*
92
115
* @since 2.16
116
+ *
117
+ * @deprecated Since 2.17 use new canonical constructor
93
118
*/
119
+ @ Deprecated // since 2.17
94
120
public Separators (
95
121
String rootSeparator ,
96
122
char objectFieldValueSeparator ,
@@ -99,24 +125,48 @@ public Separators(
99
125
Spacing objectEntrySpacing ,
100
126
char arrayValueSeparator ,
101
127
Spacing arrayValueSpacing
128
+ ) {
129
+ this (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing ,
130
+ objectEntrySeparator , objectEntrySpacing , DEFAULT_OBJECT_EMPTY_SEPARATOR ,
131
+ arrayValueSeparator , arrayValueSpacing , DEFAULT_ARRAY_EMPTY_SEPARATOR );
132
+ }
133
+
134
+ /**
135
+ * Canonical constructor for creating an instance with the specified separator
136
+ * characters and spaces around those characters.
137
+ *
138
+ * @since 2.17
139
+ */
140
+ public Separators (
141
+ String rootSeparator ,
142
+ char objectFieldValueSeparator ,
143
+ Spacing objectFieldValueSpacing ,
144
+ char objectEntrySeparator ,
145
+ Spacing objectEntrySpacing ,
146
+ String objectEmptySeparator ,
147
+ char arrayValueSeparator ,
148
+ Spacing arrayValueSpacing ,
149
+ String arrayEmptySeparator
102
150
) {
103
151
this .rootSeparator = rootSeparator ;
104
152
this .objectFieldValueSeparator = objectFieldValueSeparator ;
105
153
this .objectFieldValueSpacing = objectFieldValueSpacing ;
106
154
this .objectEntrySeparator = objectEntrySeparator ;
107
155
this .objectEntrySpacing = objectEntrySpacing ;
156
+ this .objectEmptySeparator = objectEmptySeparator ;
108
157
this .arrayValueSeparator = arrayValueSeparator ;
109
158
this .arrayValueSpacing = arrayValueSpacing ;
159
+ this .arrayEmptySeparator = arrayEmptySeparator ;
110
160
}
111
161
112
162
public Separators withRootSeparator (String sep ) {
113
163
return (rootSeparator .equals (sep )) ? this
114
- : new Separators (sep , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , arrayValueSeparator , arrayValueSpacing );
164
+ : new Separators (sep , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , objectEmptySeparator , arrayValueSeparator , arrayValueSpacing , arrayEmptySeparator );
115
165
}
116
166
117
167
public Separators withObjectFieldValueSeparator (char sep ) {
118
168
return (objectFieldValueSeparator == sep ) ? this
119
- : new Separators (rootSeparator , sep , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , arrayValueSeparator , arrayValueSpacing );
169
+ : new Separators (rootSeparator , sep , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , objectEmptySeparator , arrayValueSeparator , arrayValueSpacing , arrayEmptySeparator );
120
170
}
121
171
122
172
/**
@@ -126,12 +176,12 @@ public Separators withObjectFieldValueSeparator(char sep) {
126
176
*/
127
177
public Separators withObjectFieldValueSpacing (Spacing spacing ) {
128
178
return (objectFieldValueSpacing == spacing ) ? this
129
- : new Separators (rootSeparator , objectFieldValueSeparator , spacing , objectEntrySeparator , objectEntrySpacing , arrayValueSeparator , arrayValueSpacing );
179
+ : new Separators (rootSeparator , objectFieldValueSeparator , spacing , objectEntrySeparator , objectEntrySpacing , objectEmptySeparator , arrayValueSeparator , arrayValueSpacing , arrayEmptySeparator );
130
180
}
131
181
132
182
public Separators withObjectEntrySeparator (char sep ) {
133
183
return (objectEntrySeparator == sep ) ? this
134
- : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , sep , objectEntrySpacing , arrayValueSeparator , arrayValueSpacing );
184
+ : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , sep , objectEntrySpacing , objectEmptySeparator , arrayValueSeparator , arrayValueSpacing , arrayEmptySeparator );
135
185
}
136
186
137
187
/**
@@ -141,12 +191,22 @@ public Separators withObjectEntrySeparator(char sep) {
141
191
*/
142
192
public Separators withObjectEntrySpacing (Spacing spacing ) {
143
193
return (objectEntrySpacing == spacing ) ? this
144
- : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , spacing , arrayValueSeparator , arrayValueSpacing );
194
+ : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , spacing , objectEmptySeparator , arrayValueSeparator , arrayValueSpacing , arrayEmptySeparator );
195
+ }
196
+
197
+ /**
198
+ * @return This instance (for call chaining)
199
+ *
200
+ * @since 2.17
201
+ */
202
+ public Separators withObjectEmptySeparator (String sep ) {
203
+ return Objects .equals (arrayEmptySeparator , sep ) ? this
204
+ : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , sep , arrayValueSeparator , arrayValueSpacing , arrayEmptySeparator );
145
205
}
146
206
147
207
public Separators withArrayValueSeparator (char sep ) {
148
208
return (arrayValueSeparator == sep ) ? this
149
- : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , sep , arrayValueSpacing );
209
+ : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , objectEmptySeparator , sep , arrayValueSpacing , arrayEmptySeparator );
150
210
}
151
211
152
212
/**
@@ -156,7 +216,17 @@ public Separators withArrayValueSeparator(char sep) {
156
216
*/
157
217
public Separators withArrayValueSpacing (Spacing spacing ) {
158
218
return (arrayValueSpacing == spacing ) ? this
159
- : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , arrayValueSeparator , spacing );
219
+ : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , objectEmptySeparator , arrayValueSeparator , spacing , arrayEmptySeparator );
220
+ }
221
+
222
+ /**
223
+ * @return This instance (for call chaining)
224
+ *
225
+ * @since 2.17
226
+ */
227
+ public Separators withArrayEmptySeparator (String sep ) {
228
+ return Objects .equals (arrayEmptySeparator , sep ) ? this
229
+ : new Separators (rootSeparator , objectFieldValueSeparator , objectFieldValueSpacing , objectEntrySeparator , objectEntrySpacing , objectEmptySeparator , arrayValueSeparator , arrayValueSpacing , sep );
160
230
}
161
231
162
232
/**
@@ -193,6 +263,15 @@ public char getObjectEntrySeparator() {
193
263
public Spacing getObjectEntrySpacing () {
194
264
return objectEntrySpacing ;
195
265
}
266
+
267
+ /**
268
+ * @return String to use in empty Object
269
+ *
270
+ * @since 2.17
271
+ */
272
+ public String getObjectEmptySeparator () {
273
+ return objectEmptySeparator ;
274
+ }
196
275
197
276
public char getArrayValueSeparator () {
198
277
return arrayValueSeparator ;
@@ -206,4 +285,13 @@ public char getArrayValueSeparator() {
206
285
public Spacing getArrayValueSpacing () {
207
286
return arrayValueSpacing ;
208
287
}
288
+
289
+ /**
290
+ * @return String to use in empty Array
291
+ *
292
+ * @since 2.17
293
+ */
294
+ public String getArrayEmptySeparator () {
295
+ return arrayEmptySeparator ;
296
+ }
209
297
}
0 commit comments