1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.serializer;
18
19 import static org.apache.juneau.commons.utils.AssertionUtils.*;
20 import static org.apache.juneau.commons.utils.Utils.*;
21
22 import java.io.*;
23 import java.lang.reflect.*;
24 import java.nio.charset.*;
25 import java.util.*;
26 import java.util.function.*;
27
28 import org.apache.juneau.*;
29 import org.apache.juneau.commons.collections.FluentMap;
30 import org.apache.juneau.httppart.*;
31 import org.apache.juneau.svl.*;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public class WriterSerializerSession extends SerializerSession {
54
55
56
57 public static class Builder extends SerializerSession.Builder {
58
59 private boolean useWhitespace;
60 private Charset fileCharset;
61 private Charset streamCharset;
62 private WriterSerializer ctx;
63
64
65
66
67
68
69
70 protected Builder(WriterSerializer ctx) {
71 super(assertArgNotNull("ctx", ctx));
72 this.ctx = ctx;
73 fileCharset = ctx.getFileCharset();
74 streamCharset = ctx.getStreamCharset();
75 useWhitespace = ctx.useWhitespace;
76 }
77
78 @Override
79 public <T> Builder apply(Class<T> type, Consumer<T> apply) {
80 super.apply(type, apply);
81 return this;
82 }
83
84 @Override
85 public WriterSerializerSession build() {
86 return new WriterSerializerSession(this);
87 }
88
89 @Override
90 public Builder debug(Boolean value) {
91 super.debug(value);
92 return this;
93 }
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112 public Builder fileCharset(Charset value) {
113 if (nn(value))
114 fileCharset = value;
115 return this;
116 }
117
118 @Override
119 public Builder javaMethod(Method value) {
120 super.javaMethod(value);
121 return this;
122 }
123
124 @Override
125 public Builder locale(Locale value) {
126 super.locale(value);
127 return this;
128 }
129
130 @Override
131 public Builder mediaType(MediaType value) {
132 super.mediaType(value);
133 return this;
134 }
135
136 @Override
137 public Builder mediaTypeDefault(MediaType value) {
138 super.mediaTypeDefault(value);
139 return this;
140 }
141
142 @Override
143 public Builder properties(Map<String,Object> value) {
144 super.properties(value);
145 return this;
146 }
147
148 @Override
149 public Builder property(String key, Object value) {
150 super.property(key, value);
151 return this;
152 }
153
154 @Override
155 public Builder resolver(VarResolverSession value) {
156 super.resolver(value);
157 return this;
158 }
159
160 @Override
161 public Builder schema(HttpPartSchema value) {
162 super.schema(value);
163 return this;
164 }
165
166 @Override
167 public Builder schemaDefault(HttpPartSchema value) {
168 super.schemaDefault(value);
169 return this;
170 }
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 public Builder streamCharset(Charset value) {
190 if (nn(value))
191 streamCharset = value;
192 return this;
193 }
194
195 @Override
196 public Builder timeZone(TimeZone value) {
197 super.timeZone(value);
198 return this;
199 }
200
201 @Override
202 public Builder timeZoneDefault(TimeZone value) {
203 super.timeZoneDefault(value);
204 return this;
205 }
206
207 @Override
208 public Builder unmodifiable() {
209 super.unmodifiable();
210 return this;
211 }
212
213 @Override
214 public Builder uriContext(UriContext value) {
215 super.uriContext(value);
216 return this;
217 }
218
219
220
221
222
223
224
225
226
227
228
229
230 public Builder useWhitespace(Boolean value) {
231 if (nn(value))
232 useWhitespace = value;
233 return this;
234 }
235 }
236
237
238
239
240
241
242
243
244 public static Builder create(WriterSerializer ctx) {
245 return new Builder(assertArgNotNull("ctx", ctx));
246 }
247
248 private final WriterSerializer ctx;
249 private final boolean useWhitespace;
250 private final Charset fileCharset;
251 private final Charset streamCharset;
252
253
254
255
256
257
258 protected WriterSerializerSession(Builder builder) {
259 super(builder);
260 ctx = builder.ctx;
261 fileCharset = builder.fileCharset;
262 streamCharset = builder.streamCharset;
263 useWhitespace = builder.useWhitespace;
264 }
265
266
267
268
269
270
271 public Charset getFileCharset() { return fileCharset; }
272
273
274
275
276
277
278 public Charset getStreamCharset() { return streamCharset; }
279
280 @Override
281 public final boolean isWriterSerializer() { return true; }
282
283
284
285
286
287
288
289
290 @Override
291 public final String serialize(Object o) throws SerializeException {
292 var w = new StringWriter();
293 try {
294 serialize(o, w);
295 } catch (IOException e) {
296 throw new SerializeException(e);
297 }
298 return w.toString();
299 }
300
301 @Override
302 public final String serializeToString(Object o) throws SerializeException {
303 return serialize(o);
304 }
305
306 @Override
307 protected SerializerPipe createPipe(Object output) {
308 return new SerializerPipe(output, streamCharset, fileCharset);
309 }
310
311
312
313
314
315
316
317
318 protected final int getMaxIndent() { return ctx.getMaxIndent(); }
319
320
321
322
323
324
325
326
327 protected char getQuoteChar() { return ctx.getQuoteChar(); }
328
329
330
331
332
333
334
335
336 protected final boolean isUseWhitespace() { return useWhitespace; }
337
338 @Override
339 protected FluentMap<String,Object> properties() {
340 return super.properties()
341 .a("fileCharset", fileCharset)
342 .a("streamCharset", streamCharset)
343 .a("useWhitespace", useWhitespace);
344 }
345 }