1
1
package com .fasterxml .jackson .dataformat .toml ;
2
2
3
- import com .fasterxml .jackson .core .*;
4
- import com .fasterxml .jackson .core .base .TextualTSFactory ;
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 ;
5
15
import com .fasterxml .jackson .core .io .IOContext ;
6
16
import com .fasterxml .jackson .core .io .UTF8Writer ;
7
17
import com .fasterxml .jackson .databind .node .ObjectNode ;
8
18
import com .fasterxml .jackson .databind .node .TreeTraversingParser ;
9
-
10
- import java .io .*;
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 ;
11
27
import java .nio .charset .StandardCharsets ;
12
28
13
- public final class TomlFactory extends TextualTSFactory {
29
+ public final class TomlFactory extends JsonFactory {
14
30
15
31
public final static String FORMAT_NAME_TOML = "toml" ;
16
32
@@ -26,18 +42,28 @@ public final class TomlFactory extends TextualTSFactory {
26
42
*/
27
43
final static int DEFAULT_TOML_GENERATOR_FEATURE_FLAGS = 0 ;
28
44
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
+
29
54
/*
30
55
/**********************************************************************
31
56
/* Factory construction, configuration
32
57
/**********************************************************************
33
58
*/
34
59
35
60
public TomlFactory () {
36
- super (DEFAULT_TOML_PARSER_FEATURE_FLAGS , DEFAULT_TOML_GENERATOR_FEATURE_FLAGS );
37
61
}
38
62
39
- TomlFactory (TomlFactory src ) {
40
- super (src );
63
+ TomlFactory (TomlFactory src , ObjectCodec oc ) {
64
+ super (src , oc );
65
+ _tomlGeneratorFeatures = src ._tomlGeneratorFeatures ;
66
+ _tomlParserFeatures = src ._tomlParserFeatures ;
41
67
}
42
68
43
69
/**
@@ -46,7 +72,9 @@ public TomlFactory() {
46
72
* @since 3.0
47
73
*/
48
74
TomlFactory (TomlFactoryBuilder b ) {
49
- super (b );
75
+ super (b , false );
76
+ _tomlGeneratorFeatures = b ._formatGeneratorFeatures ;
77
+ _tomlParserFeatures = b ._formatParserFeatures ;
50
78
}
51
79
52
80
@ Override
@@ -64,15 +92,8 @@ public static TomlFactoryBuilder builder() {
64
92
65
93
@ Override
66
94
public TomlFactory copy () {
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 ;
95
+ _checkInvalidCopy (TomlFactory .class );
96
+ return new TomlFactory (this , null );
76
97
}
77
98
78
99
/*
@@ -128,13 +149,60 @@ public Class<? extends FormatFeature> getFormatWriteFeatureType() {
128
149
}
129
150
130
151
@ Override
131
- public int getFormatReadFeatures () {
132
- return _formatReadFeatures ;
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 ;
133
201
}
134
202
135
203
@ Override
136
- public int getFormatWriteFeatures () {
137
- return _formatWriteFeatures ;
204
+ public int getFormatParserFeatures () {
205
+ return _tomlParserFeatures ;
138
206
}
139
207
140
208
/*
@@ -144,30 +212,25 @@ public int getFormatWriteFeatures() {
144
212
*/
145
213
146
214
@ Override
147
- protected JsonParser _createParser (ObjectReadContext readCtxt , IOContext ctxt , InputStream in ) throws JacksonException {
215
+ public JsonParser _createParser (InputStream in , IOContext ctxt ) throws IOException {
148
216
// "A TOML file must be a valid UTF-8 encoded Unicode document."
149
- return _createParser (readCtxt , ctxt , new InputStreamReader (in , StandardCharsets .UTF_8 ));
217
+ return _createParser (new InputStreamReader (in , StandardCharsets .UTF_8 ), ctxt );
150
218
}
151
219
152
220
@ Override
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 );
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
156
224
}
157
225
158
226
@ Override
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 ));
227
+ public JsonParser _createParser (byte [] data , int offset , int len , IOContext ctxt ) throws IOException {
228
+ return _createParser (new ByteArrayInputStream (data , offset , len ), ctxt );
161
229
}
162
230
163
231
@ Override
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 ();
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 );
171
234
}
172
235
173
236
/*
@@ -177,19 +240,15 @@ protected JsonParser _createParser(ObjectReadContext readCtxt, IOContext ctxt, D
177
240
*/
178
241
179
242
@ Override
180
- protected JsonGenerator _createGenerator (ObjectWriteContext writeCtxt , IOContext ioCtxt , Writer out ) throws JacksonException {
181
- return new TomlGenerator (writeCtxt , ioCtxt , writeCtxt .getStreamWriteFeatures (_streamWriteFeatures ), out );
243
+ public JsonGenerator createGenerator (Writer out ) throws JacksonException {
244
+ IOContext ctxt = _createContext (_createContentReference (out ), false );
245
+ return new TomlGenerator (ctxt , _tomlGeneratorFeatures , _objectCodec , out );
182
246
}
183
247
184
248
@ Override
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 );
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 ));
193
252
}
194
253
195
254
/*
@@ -198,19 +257,14 @@ protected Writer _createWriter(IOContext ioCtxt, OutputStream out, JsonEncoding
198
257
/**********************************************************************
199
258
*/
200
259
201
- private ObjectNode parse (ObjectReadContext readCtxt , IOContext ctxt , Reader r0 ) {
260
+ private ObjectNode parse (IOContext ctxt , Reader r0 ) throws IOException {
202
261
JacksonTomlParseException .ErrorContext errorContext = new JacksonTomlParseException .ErrorContext (ctxt .contentReference (), null );
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 );
262
+ if (ctxt .isResourceManaged () || isEnabled (StreamReadFeature .AUTO_CLOSE_SOURCE )) {
263
+ try (Reader r = r0 ) {
264
+ return Parser .parse (errorContext , _tomlParserFeatures , r );
211
265
}
212
- } catch ( IOException e ) {
213
- throw _wrapIOFailure ( e );
266
+ } else {
267
+ return Parser . parse ( errorContext , _tomlParserFeatures , r0 );
214
268
}
215
269
}
216
270
}
0 commit comments