001// ***************************************************************************************************************************
002// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
003// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
004// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
005// * with the License.  You may obtain a copy of the License at                                                              *
006// *                                                                                                                         *
007// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
008// *                                                                                                                         *
009// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
010// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
011// * specific language governing permissions and limitations under the License.                                              *
012// ***************************************************************************************************************************
013package org.apache.juneau.parser;
014
015import static org.apache.juneau.parser.Parser.*;
016
017import java.nio.charset.*;
018import java.util.*;
019
020import org.apache.juneau.*;
021import org.apache.juneau.http.*;
022
023/**
024 * Builder class for building instances of parsers.
025 */
026public class ParserBuilder extends BeanContextBuilder {
027
028   /**
029    * Constructor, default settings.
030    */
031   public ParserBuilder() {
032      super();
033   }
034
035   /**
036    * Constructor.
037    *
038    * @param ps The initial configuration settings for this builder.
039    */
040   public ParserBuilder(PropertyStore ps) {
041      super(ps);
042   }
043
044   //-----------------------------------------------------------------------------------------------------------------
045   // Properties
046   //-----------------------------------------------------------------------------------------------------------------
047
048   /**
049    * Configuration property:  Auto-close streams.
050    *
051    * <p>
052    * If <jk>true</jk>, <l>InputStreams</l> and <l>Readers</l> passed into parsers will be closed
053    * after parsing is complete.
054    *
055    * <h5 class='section'>See Also:</h5>
056    * <ul>
057    *    <li class='jf'>{@link Parser#PARSER_autoCloseStreams}
058    * </ul>
059    *
060    * @param value
061    *    The new value for this property.
062    *    <br>The default value is <jk>false</jk>.
063    * @return This object (for method chaining).
064    */
065   public ParserBuilder autoCloseStreams(boolean value) {
066      return set(PARSER_autoCloseStreams, value);
067   }
068
069   /**
070    * Configuration property:  Auto-close streams.
071    *
072    * <p>
073    * Shortcut for calling <code>autoCloseStreams(<jk>true</jk>)</code>.
074    *
075    * <h5 class='section'>See Also:</h5>
076    * <ul>
077    *    <li class='jf'>{@link Parser#PARSER_autoCloseStreams}
078    * </ul>
079    *
080    * @return This object (for method chaining).
081    */
082   public ParserBuilder autoCloseStreams() {
083      return set(PARSER_autoCloseStreams, true);
084   }
085
086   /**
087    * Configuration property:  Debug output lines.
088    *
089    * <p>
090    * When parse errors occur, this specifies the number of lines of input before and after the
091    * error location to be printed as part of the exception message.
092    *
093    * <h5 class='section'>See Also:</h5>
094    * <ul>
095    *    <li class='jf'>{@link Parser#PARSER_debugOutputLines}
096    * </ul>
097    *
098    * @param value
099    *    The new value for this property.
100    *    <br>The default value is <code>5</code>.
101    * @return This object (for method chaining).
102    */
103   public ParserBuilder debugOutputLines(int value) {
104      return set(PARSER_debugOutputLines, value);
105   }
106
107   /**
108    * Configuration property:  Parser listener.
109    *
110    * <p>
111    * Class used to listen for errors and warnings that occur during parsing.
112    *
113    * <h5 class='section'>See Also:</h5>
114    * <ul>
115    *    <li class='jf'>{@link Parser#PARSER_listener}
116    * </ul>
117    *
118    * @param value The new value for this property.
119    * @return This object (for method chaining).
120    */
121   public ParserBuilder listener(Class<? extends ParserListener> value) {
122      return set(PARSER_listener, value);
123   }
124
125   /**
126    * Configuration property:  Strict mode.
127    *
128    * <p>
129    * If <jk>true</jk>, strict mode for the parser is enabled.
130    *
131    * <h5 class='section'>See Also:</h5>
132    * <ul>
133    *    <li class='jf'>{@link Parser#PARSER_strict}
134    * </ul>
135    *
136    * @param value
137    *    The new value for this property.
138    *    <br>The default value is <jk>false</jk>.
139    * @return This object (for method chaining).
140    */
141   public ParserBuilder strict(boolean value) {
142      return set(PARSER_strict, value);
143   }
144
145   /**
146    * Configuration property:  Strict mode.
147    *
148    * <p>
149    * Shortcut for calling <code>strict(<jk>true</jk>)</code>.
150    *
151    * <h5 class='section'>See Also:</h5>
152    * <ul>
153    *    <li class='jf'>{@link Parser#PARSER_strict}
154    * </ul>
155    *
156    * @return This object (for method chaining).
157    */
158   public ParserBuilder strict() {
159      return set(PARSER_strict, true);
160   }
161
162   /**
163    * Configuration property:  Trim parsed strings.
164    *
165    * <p>
166    * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to
167    * the POJO.
168    *
169    * <h5 class='section'>See Also:</h5>
170    * <ul>
171    *    <li class='jf'>{@link Parser#PARSER_trimStrings}
172    * </ul>
173    *
174    * @param value
175    *    The new value for this property.
176    *    <br>The default value is <jk>false</jk>.
177    * @return This object (for method chaining).
178    */
179   public ParserBuilder trimStrings(boolean value) {
180      return set(PARSER_trimStrings, value);
181   }
182
183   /**
184    * Configuration property:  Trim parsed strings.
185    *
186    * <p>
187    * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>.
188    *
189    * <h5 class='section'>See Also:</h5>
190    * <ul>
191    *    <li class='jf'>{@link Parser#PARSER_trimStrings}
192    * </ul>
193    *
194    * @return This object (for method chaining).
195    */
196   public ParserBuilder trimStrings() {
197      return set(PARSER_trimStrings, true);
198   }
199
200   /**
201    * Configuration property:  Unbuffered.
202    *
203    * <p>
204    * If <jk>true</jk>, don't use internal buffering during parsing.
205    *
206    * <h5 class='section'>See Also:</h5>
207    * <ul>
208    *    <li class='jf'>{@link Parser#PARSER_unbuffered}
209    * </ul>
210    *
211    * @param value
212    *    The new value for this property.
213    *    <br>The default value is <jk>false</jk>.
214    * @return This object (for method chaining).
215    */
216   public ParserBuilder unbuffered(boolean value) {
217      return set(PARSER_unbuffered, value);
218   }
219
220   /**
221    * Configuration property:  Unbuffered.
222    *
223    * <p>
224    * Shortcut for calling <code>unbuffered(<jk>true</jk>)</code>.
225    *
226    * <h5 class='section'>See Also:</h5>
227    * <ul>
228    *    <li class='jf'>{@link Parser#PARSER_unbuffered}
229    * </ul>
230    *
231    * @return This object (for method chaining).
232    */
233   public ParserBuilder unbuffered() {
234      return set(PARSER_unbuffered, true);
235   }
236
237   @Override /* BeanContextBuilder */
238   public ParserBuilder beanClassVisibility(Visibility value) {
239      super.beanClassVisibility(value);
240      return this;
241   }
242
243   @Override /* BeanContextBuilder */
244   public ParserBuilder beanConstructorVisibility(Visibility value) {
245      super.beanConstructorVisibility(value);
246      return this;
247   }
248
249   @Override /* BeanContextBuilder */
250   public ParserBuilder beanDictionary(boolean append, Object...values) {
251      super.beanDictionary(append, values);
252      return this;
253   }
254
255   @Override /* BeanContextBuilder */
256   public ParserBuilder beanDictionary(Class<?>...values) {
257      super.beanDictionary(values);
258      return this;
259   }
260
261   @Override /* BeanContextBuilder */
262   public ParserBuilder beanDictionary(Object...values) {
263      super.beanDictionary(values);
264      return this;
265   }
266
267   @Override /* BeanContextBuilder */
268   public ParserBuilder beanDictionaryRemove(Object...values) {
269      super.beanDictionaryRemove(values);
270      return this;
271   }
272
273   @Override /* BeanContextBuilder */
274   public ParserBuilder beanFieldVisibility(Visibility value) {
275      super.beanFieldVisibility(value);
276      return this;
277   }
278
279   @Override /* BeanContextBuilder */
280   public ParserBuilder beanFilters(boolean append, Object...values) {
281      super.beanFilters(append, values);
282      return this;
283   }
284
285   @Override /* BeanContextBuilder */
286   public ParserBuilder beanFilters(Class<?>...values) {
287      super.beanFilters(values);
288      return this;
289   }
290
291   @Override /* BeanContextBuilder */
292   public ParserBuilder beanFilters(Object...values) {
293      super.beanFilters(values);
294      return this;
295   }
296
297   @Override /* BeanContextBuilder */
298   public ParserBuilder beanFiltersRemove(Object...values) {
299      super.beanFiltersRemove(values);
300      return this;
301   }
302
303   @Override /* BeanContextBuilder */
304   public ParserBuilder beanMapPutReturnsOldValue(boolean value) {
305      super.beanMapPutReturnsOldValue(value);
306      return this;
307   }
308
309   @Override /* BeanContextBuilder */
310   public ParserBuilder beanMapPutReturnsOldValue() {
311      super.beanMapPutReturnsOldValue();
312      return this;
313   }
314
315   @Override /* BeanContextBuilder */
316   public ParserBuilder beanMethodVisibility(Visibility value) {
317      super.beanMethodVisibility(value);
318      return this;
319   }
320
321   @Override /* BeanContextBuilder */
322   public ParserBuilder beansRequireDefaultConstructor(boolean value) {
323      super.beansRequireDefaultConstructor(value);
324      return this;
325   }
326
327   @Override /* BeanContextBuilder */
328   public ParserBuilder beansRequireDefaultConstructor() {
329      super.beansRequireDefaultConstructor();
330      return this;
331   }
332
333   @Override /* BeanContextBuilder */
334   public ParserBuilder beansRequireSerializable(boolean value) {
335      super.beansRequireSerializable(value);
336      return this;
337   }
338
339   @Override /* BeanContextBuilder */
340   public ParserBuilder beansRequireSerializable() {
341      super.beansRequireSerializable();
342      return this;
343   }
344
345   @Override /* BeanContextBuilder */
346   public ParserBuilder beansRequireSettersForGetters(boolean value) {
347      super.beansRequireSettersForGetters(value);
348      return this;
349   }
350
351   @Override /* BeanContextBuilder */
352   public ParserBuilder beansRequireSettersForGetters() {
353      super.beansRequireSettersForGetters();
354      return this;
355   }
356
357   @Override /* BeanContextBuilder */
358   public ParserBuilder beansRequireSomeProperties(boolean value) {
359      super.beansRequireSomeProperties(value);
360      return this;
361   }
362
363   @Override /* BeanContextBuilder */
364   public ParserBuilder beanTypePropertyName(String value) {
365      super.beanTypePropertyName(value);
366      return this;
367   }
368
369   @Override /* BeanContextBuilder */
370   public ParserBuilder debug() {
371      super.debug();
372      return this;
373   }
374
375   @Override /* BeanContextBuilder */
376   public <T> ParserBuilder example(Class<T> c, T o) {
377      super.example(c, o);
378      return this;
379   }
380
381   @Override /* BeanContextBuilder */
382   public ParserBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
383      super.ignoreInvocationExceptionsOnGetters(value);
384      return this;
385   }
386
387   @Override /* BeanContextBuilder */
388   public ParserBuilder ignoreInvocationExceptionsOnGetters() {
389      super.ignoreInvocationExceptionsOnGetters();
390      return this;
391   }
392
393   @Override /* BeanContextBuilder */
394   public ParserBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
395      super.ignoreInvocationExceptionsOnSetters(value);
396      return this;
397   }
398
399   @Override /* BeanContextBuilder */
400   public ParserBuilder ignoreInvocationExceptionsOnSetters() {
401      super.ignoreInvocationExceptionsOnSetters();
402      return this;
403   }
404
405   @Override /* BeanContextBuilder */
406   public ParserBuilder ignorePropertiesWithoutSetters(boolean value) {
407      super.ignorePropertiesWithoutSetters(value);
408      return this;
409   }
410
411   @Override /* BeanContextBuilder */
412   public ParserBuilder ignoreUnknownBeanProperties(boolean value) {
413      super.ignoreUnknownBeanProperties(value);
414      return this;
415   }
416
417   @Override /* BeanContextBuilder */
418   public ParserBuilder ignoreUnknownBeanProperties() {
419      super.ignoreUnknownBeanProperties();
420      return this;
421   }
422
423   @Override /* BeanContextBuilder */
424   public ParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
425      super.ignoreUnknownNullBeanProperties(value);
426      return this;
427   }
428
429   @Override /* BeanContextBuilder */
430   public <T> ParserBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
431      super.implClass(interfaceClass, implClass);
432      return this;
433   }
434
435   @Override /* BeanContextBuilder */
436   public ParserBuilder implClasses(Map<String,Class<?>> values) {
437      super.implClasses(values);
438      return this;
439   }
440
441   @Override /* BeanContextBuilder */
442   public ParserBuilder locale(Locale value) {
443      super.locale(value);
444      return this;
445   }
446
447   @Override /* BeanContextBuilder */
448   public ParserBuilder mediaType(MediaType value) {
449      super.mediaType(value);
450      return this;
451   }
452
453   @Override /* BeanContextBuilder */
454   public ParserBuilder notBeanClasses(boolean append, Object...values) {
455      super.notBeanClasses(append, values);
456      return this;
457   }
458
459   @Override /* BeanContextBuilder */
460   public ParserBuilder notBeanClasses(Class<?>...values) {
461      super.notBeanClasses(values);
462      return this;
463   }
464
465   @Override /* BeanContextBuilder */
466   public ParserBuilder notBeanClasses(Object...values) {
467      super.notBeanClasses(values);
468      return this;
469   }
470
471   @Override /* BeanContextBuilder */
472   public ParserBuilder notBeanClassesRemove(Object...values) {
473      super.notBeanClassesRemove(values);
474      return this;
475   }
476
477   @Override /* BeanContextBuilder */
478   public ParserBuilder notBeanPackages(boolean append, Object...values) {
479      super.notBeanPackages(append, values);
480      return this;
481   }
482
483   @Override /* BeanContextBuilder */
484   public ParserBuilder notBeanPackages(Object...values) {
485      super.notBeanPackages(values);
486      return this;
487   }
488
489   @Override /* BeanContextBuilder */
490   public ParserBuilder notBeanPackages(String...values) {
491      super.notBeanPackages(values);
492      return this;
493   }
494
495   @Override /* BeanContextBuilder */
496   public ParserBuilder notBeanPackagesRemove(Object...values) {
497      super.notBeanPackagesRemove(values);
498      return this;
499   }
500
501   @Override /* BeanContextBuilder */
502   public ParserBuilder pojoSwaps(boolean append, Object...values) {
503      super.pojoSwaps(append, values);
504      return this;
505   }
506
507   @Override /* BeanContextBuilder */
508   public ParserBuilder pojoSwaps(Class<?>...values) {
509      super.pojoSwaps(values);
510      return this;
511   }
512
513   @Override /* BeanContextBuilder */
514   public ParserBuilder pojoSwaps(Object...values) {
515      super.pojoSwaps(values);
516      return this;
517   }
518
519   @Override /* BeanContextBuilder */
520   public ParserBuilder pojoSwapsRemove(Object...values) {
521      super.pojoSwapsRemove(values);
522      return this;
523   }
524
525   @Override /* BeanContextBuilder */
526   public ParserBuilder sortProperties(boolean value) {
527      super.sortProperties(value);
528      return this;
529   }
530
531   @Override /* BeanContextBuilder */
532   public ParserBuilder sortProperties() {
533      super.sortProperties();
534      return this;
535   }
536
537   @Override /* BeanContextBuilder */
538   public ParserBuilder timeZone(TimeZone value) {
539      super.timeZone(value);
540      return this;
541   }
542
543   @Override /* BeanContextBuilder */
544   public ParserBuilder useEnumNames() {
545      super.useEnumNames();
546      return this;
547   }
548
549   @Override /* BeanContextBuilder */
550   public ParserBuilder useInterfaceProxies(boolean value) {
551      super.useInterfaceProxies(value);
552      return this;
553   }
554
555   @Override /* BeanContextBuilder */
556   public ParserBuilder useJavaBeanIntrospector(boolean value) {
557      super.useJavaBeanIntrospector(value);
558      return this;
559   }
560
561   @Override /* BeanContextBuilder */
562   public ParserBuilder useJavaBeanIntrospector() {
563      super.useJavaBeanIntrospector();
564      return this;
565   }
566
567   @Override /* ContextBuilder */
568   public ParserBuilder set(String name, Object value) {
569      super.set(name, value);
570      return this;
571   }
572
573   @Override /* ContextBuilder */
574   public ParserBuilder set(boolean append, String name, Object value) {
575      super.set(append, name, value);
576      return this;
577   }
578
579   @Override /* ContextBuilder */
580   public ParserBuilder set(Map<String,Object> properties) {
581      super.set(properties);
582      return this;
583   }
584
585   @Override /* ContextBuilder */
586   public ParserBuilder add(Map<String,Object> properties) {
587      super.add(properties);
588      return this;
589   }
590
591   @Override /* ContextBuilder */
592   public ParserBuilder addTo(String name, Object value) {
593      super.addTo(name, value);
594      return this;
595   }
596
597   @Override /* ContextBuilder */
598   public ParserBuilder addTo(String name, String key, Object value) {
599      super.addTo(name, key, value);
600      return this;
601   }
602
603   @Override /* ContextBuilder */
604   public ParserBuilder removeFrom(String name, Object value) {
605      super.removeFrom(name, value);
606      return this;
607   }
608
609   @Override /* ContextBuilder */
610   public ParserBuilder apply(PropertyStore copyFrom) {
611      super.apply(copyFrom);
612      return this;
613   }
614
615   @Override /* Context */
616   public Parser build() {
617      return null;
618   }
619
620   /**
621    * @deprecated Unused.
622    */
623   @SuppressWarnings("javadoc")
624   @Deprecated
625   public ParserBuilder fileCharset(String value) {
626      return this;
627   }
628
629   /**
630    * @deprecated Unused.
631    */
632   @SuppressWarnings("javadoc")
633   @Deprecated
634   public ParserBuilder fileCharset(Charset value) {
635      return this;
636   }
637
638   /**
639    * @deprecated Unused.
640    */
641   @SuppressWarnings("javadoc")
642   @Deprecated
643   public ParserBuilder inputStreamCharset(String value) {
644      return this;
645   }
646
647   /**
648    * @deprecated Unused.
649    */
650   @SuppressWarnings("javadoc")
651   @Deprecated
652   public ParserBuilder inputStreamCharset(Charset value) {
653      return this;
654   }
655}