@@ -56,15 +56,31 @@ public class IonFactory extends JsonFactory {
56
56
* Whether we will produce binary or text Ion writers: default is textual.
57
57
*/
58
58
protected boolean _cfgCreateBinaryWriters = false ;
59
-
59
+
60
+ /**
61
+ * Bitfield (set of flags) of all parser features that are enabled
62
+ * by default.
63
+ */
64
+ protected final static int DEFAULT_ION_PARSER_FEATURE_FLAGS = IonParser .Feature .collectDefaults ();
65
+
66
+ /**
67
+ * Bitfield (set of flags) of all generator features that are enabled
68
+ * by default.
69
+ */
70
+ protected final static int DEFAULT_ION_GENERATOR_FEATURE_FLAGS = IonGenerator .Feature .collectDefaults ();
71
+
72
+ protected int _ionParserFeatures = DEFAULT_ION_PARSER_FEATURE_FLAGS ;
73
+
74
+ protected int _ionGeneratorFeatures = DEFAULT_ION_GENERATOR_FEATURE_FLAGS ;
75
+
60
76
public IonFactory () {
61
77
this ((ObjectCodec ) null );
62
78
}
63
79
64
80
public IonFactory (ObjectCodec mapper ) {
65
81
this (mapper , IonSystemBuilder .standard ().build ());
66
82
}
67
-
83
+
68
84
public IonFactory (ObjectCodec mapper , IonSystem system ) {
69
85
super (mapper );
70
86
_system = system ;
@@ -110,7 +126,7 @@ public static IonFactory forBinaryWriters() {
110
126
public static IonFactoryBuilder builderForBinaryWriters () {
111
127
return new IonFactoryBuilder (true );
112
128
}
113
-
129
+
114
130
/**
115
131
* Method for creating {@link IonFactory} that will
116
132
* create textual (not binary) writers.
@@ -144,7 +160,7 @@ public Version version() {
144
160
public String getFormatName () {
145
161
return FORMAT_NAME_ION ;
146
162
}
147
-
163
+
148
164
public void setCreateBinaryWriters (boolean b ) {
149
165
_cfgCreateBinaryWriters = b ;
150
166
}
@@ -164,6 +180,107 @@ public boolean canUseCharArrays() {
164
180
return false ;
165
181
}
166
182
183
+ /*
184
+ /**********************************************************
185
+ /* Configuration, parser settings
186
+ /**********************************************************
187
+ */
188
+
189
+ /**
190
+ * Method for enabling or disabling specified parser feature
191
+ * (check {@link IonParser.Feature} for list of features)
192
+ */
193
+ public final IonFactory configure (IonParser .Feature f , boolean state )
194
+ {
195
+ if (state ) {
196
+ enable (f );
197
+ } else {
198
+ disable (f );
199
+ }
200
+ return this ;
201
+ }
202
+
203
+ /**
204
+ * Method for enabling specified parser feature
205
+ * (check {@link IonParser.Feature} for list of features)
206
+ */
207
+ public IonFactory enable (IonParser .Feature f ) {
208
+ _ionParserFeatures |= f .getMask ();
209
+ return this ;
210
+ }
211
+
212
+ /**
213
+ * Method for disabling specified parser features
214
+ * (check {@link IonParser.Feature} for list of features)
215
+ */
216
+ public IonFactory disable (IonParser .Feature f ) {
217
+ _ionParserFeatures &= ~f .getMask ();
218
+ return this ;
219
+ }
220
+
221
+ /**
222
+ * Checked whether specified parser feature is enabled.
223
+ */
224
+ public final boolean isEnabled (IonParser .Feature f ) {
225
+ return (_ionParserFeatures & f .getMask ()) != 0 ;
226
+ }
227
+
228
+ @ Override
229
+ public int getFormatParserFeatures () {
230
+ return _ionParserFeatures ;
231
+ }
232
+
233
+ /*
234
+ /**********************************************************
235
+ /* Configuration, generator settings
236
+ /**********************************************************
237
+ */
238
+
239
+ /**
240
+ * Method for enabling or disabling specified generator feature
241
+ * (check {@link IonGenerator.Feature} for list of features)
242
+ */
243
+ public final IonFactory configure (IonGenerator .Feature f , boolean state ) {
244
+ if (state ) {
245
+ enable (f );
246
+ } else {
247
+ disable (f );
248
+ }
249
+ return this ;
250
+ }
251
+
252
+
253
+ /**
254
+ * Method for enabling specified generator features
255
+ * (check {@link IonGenerator.Feature} for list of features)
256
+ */
257
+ public IonFactory enable (IonGenerator .Feature f ) {
258
+ _ionGeneratorFeatures |= f .getMask ();
259
+ return this ;
260
+ }
261
+
262
+ /**
263
+ * Method for disabling specified generator feature
264
+ * (check {@link IonGenerator.Feature} for list of features)
265
+ */
266
+ public IonFactory disable (IonGenerator .Feature f ) {
267
+ _ionGeneratorFeatures &= ~f .getMask ();
268
+ return this ;
269
+ }
270
+
271
+ /**
272
+ * Check whether specified generator feature is enabled.
273
+ */
274
+ public final boolean isEnabled (IonGenerator .Feature f ) {
275
+ return (_ionGeneratorFeatures & f .getMask ()) != 0 ;
276
+ }
277
+
278
+ @ Override
279
+ public int getFormatGeneratorFeatures () {
280
+ return _ionGeneratorFeatures ;
281
+ }
282
+
283
+
167
284
/*
168
285
***************************************************************
169
286
* Extended API
@@ -305,7 +422,7 @@ protected String _readAll(Reader r, IOContext ctxt) throws IOException
305
422
306
423
main_loop :
307
424
while (true ) {
308
-
425
+
309
426
while (offset < buf .length ) {
310
427
int count = r .read (buf , offset , buf .length - offset );
311
428
if (count < 0 ) {
@@ -355,6 +472,6 @@ protected IonGenerator _createGenerator(OutputStream out, JsonEncoding enc, bool
355
472
356
473
protected IonGenerator _createGenerator (IonWriter ion , boolean ionWriterIsManaged , IOContext ctxt , Closeable dst )
357
474
{
358
- return new IonGenerator (_generatorFeatures , _objectCodec , ion , ionWriterIsManaged , ctxt , dst );
359
- }
475
+ return new IonGenerator (_generatorFeatures , _ionGeneratorFeatures , _objectCodec , ion , ionWriterIsManaged , ctxt , dst );
476
+ }
360
477
}
0 commit comments