1
1
package com .fasterxml .jackson .dataformat .toml ;
2
2
3
- import com .fasterxml .jackson .core .FormatFeature ;
4
- import com .fasterxml .jackson .core .FormatSchema ;
5
- import com .fasterxml .jackson .core .JacksonException ;
6
- import com .fasterxml .jackson .core .JsonFactory ;
7
- import com .fasterxml .jackson .core .JsonGenerator ;
8
- import com .fasterxml .jackson .core .JsonParseException ;
9
- import com .fasterxml .jackson .core .JsonParser ;
10
- import com .fasterxml .jackson .core .ObjectCodec ;
11
- import com .fasterxml .jackson .core .StreamReadFeature ;
12
- import com .fasterxml .jackson .core .Version ;
13
- import com .fasterxml .jackson .core .format .InputAccessor ;
14
- import com .fasterxml .jackson .core .format .MatchStrength ;
3
+ import com .fasterxml .jackson .core .*;
4
+ import com .fasterxml .jackson .core .base .TextualTSFactory ;
15
5
import com .fasterxml .jackson .core .io .IOContext ;
16
6
import com .fasterxml .jackson .core .io .UTF8Writer ;
17
7
import com .fasterxml .jackson .databind .node .ObjectNode ;
18
8
import com .fasterxml .jackson .databind .node .TreeTraversingParser ;
19
- import java .io .ByteArrayInputStream ;
20
- import java .io .CharArrayReader ;
21
- import java .io .IOException ;
22
- import java .io .InputStream ;
23
- import java .io .InputStreamReader ;
24
- import java .io .OutputStream ;
25
- import java .io .Reader ;
26
- import java .io .Writer ;
9
+
10
+ import java .io .*;
27
11
import java .nio .charset .StandardCharsets ;
28
12
29
- public final class TomlFactory extends JsonFactory {
13
+ public final class TomlFactory extends TextualTSFactory {
30
14
31
15
public final static String FORMAT_NAME_TOML = "toml" ;
32
16
@@ -42,28 +26,18 @@ public final class TomlFactory extends JsonFactory {
42
26
*/
43
27
final static int DEFAULT_TOML_GENERATOR_FEATURE_FLAGS = 0 ;
44
28
45
- /*
46
- /**********************************************************************
47
- /* Configuration
48
- /**********************************************************************
49
- */
50
-
51
- protected int _tomlParserFeatures = DEFAULT_TOML_PARSER_FEATURE_FLAGS ;
52
- protected int _tomlGeneratorFeatures = DEFAULT_TOML_GENERATOR_FEATURE_FLAGS ;
53
-
54
29
/*
55
30
/**********************************************************************
56
31
/* Factory construction, configuration
57
32
/**********************************************************************
58
33
*/
59
34
60
35
public TomlFactory () {
36
+ super (DEFAULT_TOML_PARSER_FEATURE_FLAGS , DEFAULT_TOML_GENERATOR_FEATURE_FLAGS );
61
37
}
62
38
63
- TomlFactory (TomlFactory src , ObjectCodec oc ) {
64
- super (src , oc );
65
- _tomlGeneratorFeatures = src ._tomlGeneratorFeatures ;
66
- _tomlParserFeatures = src ._tomlParserFeatures ;
39
+ TomlFactory (TomlFactory src ) {
40
+ super (src );
67
41
}
68
42
69
43
/**
@@ -72,9 +46,7 @@ public TomlFactory() {
72
46
* @since 3.0
73
47
*/
74
48
TomlFactory (TomlFactoryBuilder b ) {
75
- super (b , false );
76
- _tomlGeneratorFeatures = b ._formatGeneratorFeatures ;
77
- _tomlParserFeatures = b ._formatParserFeatures ;
49
+ super (b );
78
50
}
79
51
80
52
@ Override
@@ -92,8 +64,15 @@ public static TomlFactoryBuilder builder() {
92
64
93
65
@ Override
94
66
public TomlFactory copy () {
95
- _checkInvalidCopy (TomlFactory .class );
96
- return new TomlFactory (this , null );
67
+ return new TomlFactory (this );
68
+ }
69
+
70
+ /**
71
+ * Instances are immutable so just return `this`
72
+ */
73
+ @ Override
74
+ public TokenStreamFactory snapshot () {
75
+ return this ;
97
76
}
98
77
99
78
/*
@@ -149,60 +128,13 @@ public Class<? extends FormatFeature> getFormatWriteFeatureType() {
149
128
}
150
129
151
130
@ Override
152
- public MatchStrength hasFormat (InputAccessor acc ) throws IOException {
153
- return MatchStrength .INCONCLUSIVE ;
154
- }
155
-
156
-
157
-
158
- /*
159
- /**********************************************************
160
- /* Configuration, parser settings
161
- /**********************************************************
162
- */
163
-
164
- /**
165
- * Method for enabling or disabling specified parser feature
166
- * (check {@link TomlReadFeature} for list of features)
167
- */
168
- public final TomlFactory configure (TomlReadFeature f , boolean state )
169
- {
170
- if (state ) {
171
- enable (f );
172
- } else {
173
- disable (f );
174
- }
175
- return this ;
176
- }
177
-
178
- /**
179
- * Method for enabling specified parser feature
180
- * (check {@link TomlReadFeature} for list of features)
181
- */
182
- public TomlFactory enable (TomlReadFeature f ) {
183
- _tomlParserFeatures |= f .getMask ();
184
- return this ;
185
- }
186
-
187
- /**
188
- * Method for disabling specified parser features
189
- * (check {@link TomlReadFeature} for list of features)
190
- */
191
- public TomlFactory disable (TomlReadFeature f ) {
192
- _tomlParserFeatures &= ~f .getMask ();
193
- return this ;
194
- }
195
-
196
- /**
197
- * Checked whether specified parser feature is enabled.
198
- */
199
- public final boolean isEnabled (TomlReadFeature f ) {
200
- return (_tomlParserFeatures & f .getMask ()) != 0 ;
131
+ public int getFormatReadFeatures () {
132
+ return _formatReadFeatures ;
201
133
}
202
134
203
135
@ Override
204
- public int getFormatParserFeatures () {
205
- return _tomlParserFeatures ;
136
+ public int getFormatWriteFeatures () {
137
+ return _formatWriteFeatures ;
206
138
}
207
139
208
140
/*
@@ -212,25 +144,30 @@ public int getFormatParserFeatures() {
212
144
*/
213
145
214
146
@ Override
215
- public JsonParser _createParser (InputStream in , IOContext ctxt ) throws IOException {
147
+ protected JsonParser _createParser (ObjectReadContext readCtxt , IOContext ctxt , InputStream in ) throws JacksonException {
216
148
// "A TOML file must be a valid UTF-8 encoded Unicode document."
217
- return _createParser (new InputStreamReader (in , StandardCharsets .UTF_8 ), ctxt );
149
+ return _createParser (readCtxt , ctxt , new InputStreamReader (in , StandardCharsets .UTF_8 ));
218
150
}
219
151
220
152
@ Override
221
- public JsonParser _createParser (Reader r , IOContext ctxt ) throws IOException {
222
- ObjectNode node = parse (ctxt , r );
223
- return new TreeTraversingParser (node ); // don't pass our _objectCodec, this part shouldn't be customized
153
+ protected JsonParser _createParser (ObjectReadContext readCtxt , IOContext ctxt , Reader r ) throws JacksonException {
154
+ ObjectNode node = parse (readCtxt , ctxt , r );
155
+ return new TreeTraversingParser (node , readCtxt );
224
156
}
225
157
226
158
@ Override
227
- public JsonParser _createParser (byte [] data , int offset , int len , IOContext ctxt ) throws IOException {
228
- return _createParser (new ByteArrayInputStream (data , offset , len ), ctxt );
159
+ protected JsonParser _createParser (ObjectReadContext readCtxt , IOContext ctxt , byte [] data , int offset , int len ) throws JacksonException {
160
+ return _createParser (readCtxt , ctxt , new ByteArrayInputStream (data , offset , len ));
229
161
}
230
162
231
163
@ Override
232
- protected JsonParser _createParser (char [] data , int offset , int len , IOContext ctxt , boolean recyclable ) throws IOException {
233
- return _createParser (new CharArrayReader (data , offset , len ), ctxt );
164
+ protected JsonParser _createParser (ObjectReadContext readCtxt , IOContext ctxt , char [] data , int offset , int len , boolean recyclable ) throws JacksonException {
165
+ return _createParser (readCtxt , ctxt , new CharArrayReader (data , offset , len ));
166
+ }
167
+
168
+ @ Override
169
+ protected JsonParser _createParser (ObjectReadContext readCtxt , IOContext ctxt , DataInput input ) throws JacksonException {
170
+ return _unsupported ();
234
171
}
235
172
236
173
/*
@@ -240,15 +177,19 @@ protected JsonParser _createParser(char[] data, int offset, int len, IOContext c
240
177
*/
241
178
242
179
@ Override
243
- public JsonGenerator createGenerator (Writer out ) throws JacksonException {
244
- IOContext ctxt = _createContext (_createContentReference (out ), false );
245
- return new TomlGenerator (ctxt , _tomlGeneratorFeatures , _objectCodec , out );
180
+ protected JsonGenerator _createGenerator (ObjectWriteContext writeCtxt , IOContext ioCtxt , Writer out ) throws JacksonException {
181
+ return new TomlGenerator (writeCtxt , ioCtxt , writeCtxt .getStreamWriteFeatures (_streamWriteFeatures ), out );
246
182
}
247
183
248
184
@ Override
249
- public JsonGenerator createGenerator (OutputStream out ) throws JacksonException {
250
- IOContext ctxt = _createContext (_createContentReference (out ), false );
251
- return new TomlGenerator (ctxt , _tomlGeneratorFeatures , _objectCodec , new UTF8Writer (ctxt , out ));
185
+ protected JsonGenerator _createUTF8Generator (ObjectWriteContext writeCtxt , IOContext ioCtxt , OutputStream out ) throws JacksonException {
186
+ return _createGenerator (writeCtxt , ioCtxt , new UTF8Writer (ioCtxt , out ));
187
+ }
188
+
189
+ @ Override
190
+ protected Writer _createWriter (IOContext ioCtxt , OutputStream out , JsonEncoding enc ) throws JacksonException {
191
+ // "A TOML file must be a valid UTF-8 encoded Unicode document."
192
+ return new UTF8Writer (ioCtxt , out );
252
193
}
253
194
254
195
/*
@@ -257,14 +198,19 @@ public JsonGenerator createGenerator(OutputStream out) throws JacksonException {
257
198
/**********************************************************************
258
199
*/
259
200
260
- private ObjectNode parse (IOContext ctxt , Reader r0 ) throws IOException {
201
+ private ObjectNode parse (ObjectReadContext readCtxt , IOContext ctxt , Reader r0 ) {
261
202
JacksonTomlParseException .ErrorContext errorContext = new JacksonTomlParseException .ErrorContext (ctxt .contentReference (), null );
262
- if (ctxt .isResourceManaged () || isEnabled (StreamReadFeature .AUTO_CLOSE_SOURCE )) {
263
- try (Reader r = r0 ) {
264
- return Parser .parse (errorContext , _tomlParserFeatures , r );
203
+ int readFeatures = readCtxt .getFormatReadFeatures (DEFAULT_TOML_PARSER_FEATURE_FLAGS );
204
+ try {
205
+ if (ctxt .isResourceManaged () || isEnabled (StreamReadFeature .AUTO_CLOSE_SOURCE )) {
206
+ try (Reader r = r0 ) {
207
+ return Parser .parse (errorContext , readFeatures , r );
208
+ }
209
+ } else {
210
+ return Parser .parse (errorContext , readFeatures , r0 );
265
211
}
266
- } else {
267
- return Parser . parse ( errorContext , _tomlParserFeatures , r0 );
212
+ } catch ( IOException e ) {
213
+ throw _wrapIOFailure ( e );
268
214
}
269
215
}
270
216
}
0 commit comments