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:  File charset.
088    * 
089    * <p>
090    * The character set to use for reading <code>Files</code> from the file system.
091    * 
092    * <h5 class='section'>See Also:</h5>
093    * <ul>
094    *    <li class='jf'>{@link Parser#PARSER_fileCharset}
095    * </ul>
096    * 
097    * @param value 
098    *    The new value for this property.
099    *    <br>The default value is <js>"DEFAULT"</js> which causes the system default to be used.
100    * @return This object (for method chaining).
101    */
102   public ParserBuilder fileCharset(String value) {
103      return set(PARSER_fileCharset, value);
104   }
105
106   /**
107    * Configuration property:  File charset.
108    * 
109    * <p>
110    * The character set to use for reading <code>Files</code> from the file system.
111    * 
112    * <h5 class='section'>See Also:</h5>
113    * <ul>
114    *    <li class='jf'>{@link Parser#PARSER_fileCharset}
115    * </ul>
116    * 
117    * @param value 
118    *    The new value for this property.
119    *    <br>The default value is <js>"DEFAULT"</js> which causes the system default to be used.
120    * @return This object (for method chaining).
121    */
122   public ParserBuilder fileCharset(Charset value) {
123      return set(PARSER_fileCharset, value);
124   }
125
126   /**
127    * Configuration property:  Input stream charset.
128    * 
129    * <p>
130    * The character set to use for converting <code>InputStreams</code> and byte arrays to readers.
131    * 
132    * <h5 class='section'>See Also:</h5>
133    * <ul>
134    *    <li class='jf'>{@link Parser#PARSER_inputStreamCharset}
135    * </ul>
136    * 
137    * @param value 
138    *    The new value for this property.
139    *    <br>The default value is <js>"UTF-8"</js>.
140    * @return This object (for method chaining).
141    */
142   public ParserBuilder inputStreamCharset(String value) {
143      return set(PARSER_inputStreamCharset, value);
144   }
145
146   /**
147    * Configuration property:  Input stream charset.
148    * 
149    * <p>
150    * The character set to use for converting <code>InputStreams</code> and byte arrays to readers.
151    * 
152    * <h5 class='section'>See Also:</h5>
153    * <ul>
154    *    <li class='jf'>{@link Parser#PARSER_inputStreamCharset}
155    * </ul>
156    * 
157    * @param value 
158    *    The new value for this property.
159    *    <br>The default value is <js>"UTF-8"</js>.
160    * @return This object (for method chaining).
161    */
162   public ParserBuilder inputStreamCharset(Charset value) {
163      return set(PARSER_inputStreamCharset, value);
164   }
165
166   /**
167    * Configuration property:  Parser listener.
168    * 
169    * <p>
170    * Class used to listen for errors and warnings that occur during parsing.
171    * 
172    * <h5 class='section'>See Also:</h5>
173    * <ul>
174    *    <li class='jf'>{@link Parser#PARSER_listener}
175    * </ul>
176    * 
177    * @param value The new value for this property.
178    * @return This object (for method chaining).
179    */
180   public ParserBuilder listener(Class<? extends ParserListener> value) {
181      return set(PARSER_listener, value);
182   }
183
184   /**
185    * Configuration property:  Strict mode.
186    * 
187    * <p>
188    * If <jk>true</jk>, strict mode for the parser is enabled.
189    * 
190    * <h5 class='section'>See Also:</h5>
191    * <ul>
192    *    <li class='jf'>{@link Parser#PARSER_strict}
193    * </ul>
194    * 
195    * @param value 
196    *    The new value for this property.
197    *    <br>The default value is <jk>false</jk>.
198    * @return This object (for method chaining).
199    */
200   public ParserBuilder strict(boolean value) {
201      return set(PARSER_strict, value);
202   }
203
204   /**
205    * Configuration property:  Strict mode.
206    * 
207    * <p>
208    * Shortcut for calling <code>strict(<jk>true</jk>)</code>.
209    * 
210    * <h5 class='section'>See Also:</h5>
211    * <ul>
212    *    <li class='jf'>{@link Parser#PARSER_strict}
213    * </ul>
214    * 
215    * @return This object (for method chaining).
216    */
217   public ParserBuilder strict() {
218      return set(PARSER_strict, true);
219   }
220
221   /**
222    * Configuration property:  Trim parsed strings.
223    * 
224    * <p>
225    * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to
226    * the POJO.
227    * 
228    * <h5 class='section'>See Also:</h5>
229    * <ul>
230    *    <li class='jf'>{@link Parser#PARSER_trimStrings}
231    * </ul>
232    * 
233    * @param value 
234    *    The new value for this property.
235    *    <br>The default value is <jk>false</jk>.
236    * @return This object (for method chaining).
237    */
238   public ParserBuilder trimStrings(boolean value) {
239      return set(PARSER_trimStrings, value);
240   }
241
242   /**
243    * Configuration property:  Trim parsed strings.
244    * 
245    * <p>
246    * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>.
247    * 
248    * <h5 class='section'>See Also:</h5>
249    * <ul>
250    *    <li class='jf'>{@link Parser#PARSER_trimStrings}
251    * </ul>
252    * 
253    * @return This object (for method chaining).
254    */
255   public ParserBuilder trimStrings() {
256      return set(PARSER_trimStrings, true);
257   }
258
259   /**
260    * Configuration property:  Unbuffered.
261    * 
262    * <p>
263    * If <jk>true</jk>, don't use internal buffering during parsing.
264    * 
265    * <h5 class='section'>See Also:</h5>
266    * <ul>
267    *    <li class='jf'>{@link Parser#PARSER_unbuffered}
268    * </ul>
269    * 
270    * @param value 
271    *    The new value for this property.
272    *    <br>The default value is <jk>false</jk>.
273    * @return This object (for method chaining).
274    */
275   public ParserBuilder unbuffered(boolean value) {
276      return set(PARSER_unbuffered, value);
277   }
278
279   /**
280    * Configuration property:  Unbuffered.
281    * 
282    * <p>
283    * Shortcut for calling <code>unbuffered(<jk>true</jk>)</code>.
284    * 
285    * <h5 class='section'>See Also:</h5>
286    * <ul>
287    *    <li class='jf'>{@link Parser#PARSER_unbuffered}
288    * </ul>
289    * 
290    * @return This object (for method chaining).
291    */
292   public ParserBuilder unbuffered() {
293      return set(PARSER_unbuffered, true);
294   }
295
296   @Override /* BeanContextBuilder */
297   public ParserBuilder beanClassVisibility(Visibility value) {
298      super.beanClassVisibility(value);
299      return this;
300   }
301
302   @Override /* BeanContextBuilder */
303   public ParserBuilder beanConstructorVisibility(Visibility value) {
304      super.beanConstructorVisibility(value);
305      return this;
306   }
307
308   @Override /* BeanContextBuilder */
309   public ParserBuilder beanDictionary(boolean append, Object...values) {
310      super.beanDictionary(append, values);
311      return this;
312   }
313
314   @Override /* BeanContextBuilder */
315   public ParserBuilder beanDictionary(Class<?>...values) {
316      super.beanDictionary(values);
317      return this;
318   }
319
320   @Override /* BeanContextBuilder */
321   public ParserBuilder beanDictionary(Object...values) {
322      super.beanDictionary(values);
323      return this;
324   }
325
326   @Override /* BeanContextBuilder */
327   public ParserBuilder beanDictionaryRemove(Object...values) {
328      super.beanDictionaryRemove(values);
329      return this;
330   }
331
332   @Override /* BeanContextBuilder */
333   public ParserBuilder beanFieldVisibility(Visibility value) {
334      super.beanFieldVisibility(value);
335      return this;
336   }
337
338   @Override /* BeanContextBuilder */
339   public ParserBuilder beanFilters(boolean append, Object...values) {
340      super.beanFilters(append, values);
341      return this;
342   }
343
344   @Override /* BeanContextBuilder */
345   public ParserBuilder beanFilters(Class<?>...values) {
346      super.beanFilters(values);
347      return this;
348   }
349
350   @Override /* BeanContextBuilder */
351   public ParserBuilder beanFilters(Object...values) {
352      super.beanFilters(values);
353      return this;
354   }
355
356   @Override /* BeanContextBuilder */
357   public ParserBuilder beanFiltersRemove(Object...values) {
358      super.beanFiltersRemove(values);
359      return this;
360   }
361
362   @Override /* BeanContextBuilder */
363   public ParserBuilder beanMapPutReturnsOldValue(boolean value) {
364      super.beanMapPutReturnsOldValue(value);
365      return this;
366   }
367
368   @Override /* BeanContextBuilder */
369   public ParserBuilder beanMapPutReturnsOldValue() {
370      super.beanMapPutReturnsOldValue();
371      return this;
372   }
373
374   @Override /* BeanContextBuilder */
375   public ParserBuilder beansRequireDefaultConstructor(boolean value) {
376      super.beansRequireDefaultConstructor(value);
377      return this;
378   }
379
380   @Override /* BeanContextBuilder */
381   public ParserBuilder beansRequireDefaultConstructor() {
382      super.beansRequireDefaultConstructor();
383      return this;
384   }
385
386   @Override /* BeanContextBuilder */
387   public ParserBuilder beansRequireSerializable(boolean value) {
388      super.beansRequireSerializable(value);
389      return this;
390   }
391
392   @Override /* BeanContextBuilder */
393   public ParserBuilder beansRequireSerializable() {
394      super.beansRequireSerializable();
395      return this;
396   }
397
398   @Override /* BeanContextBuilder */
399   public ParserBuilder beansRequireSettersForGetters(boolean value) {
400      super.beansRequireSettersForGetters(value);
401      return this;
402   }
403
404   @Override /* BeanContextBuilder */
405   public ParserBuilder beansRequireSettersForGetters() {
406      super.beansRequireSettersForGetters();
407      return this;
408   }
409
410   @Override /* BeanContextBuilder */
411   public ParserBuilder beansRequireSomeProperties(boolean value) {
412      super.beansRequireSomeProperties(value);
413      return this;
414   }
415
416   @Override /* BeanContextBuilder */
417   public ParserBuilder beanTypePropertyName(String value) {
418      super.beanTypePropertyName(value);
419      return this;
420   }
421
422   @Override /* BeanContextBuilder */
423   public ParserBuilder debug() {
424      super.debug();
425      return this;
426   }
427
428   @Override /* BeanContextBuilder */
429   public ParserBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
430      super.ignoreInvocationExceptionsOnGetters(value);
431      return this;
432   }
433
434   @Override /* BeanContextBuilder */
435   public ParserBuilder ignoreInvocationExceptionsOnGetters() {
436      super.ignoreInvocationExceptionsOnGetters();
437      return this;
438   }
439
440   @Override /* BeanContextBuilder */
441   public ParserBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
442      super.ignoreInvocationExceptionsOnSetters(value);
443      return this;
444   }
445
446   @Override /* BeanContextBuilder */
447   public ParserBuilder ignoreInvocationExceptionsOnSetters() {
448      super.ignoreInvocationExceptionsOnSetters();
449      return this;
450   }
451
452   @Override /* BeanContextBuilder */
453   public ParserBuilder ignorePropertiesWithoutSetters(boolean value) {
454      super.ignorePropertiesWithoutSetters(value);
455      return this;
456   }
457
458   @Override /* BeanContextBuilder */
459   public ParserBuilder ignoreUnknownBeanProperties(boolean value) {
460      super.ignoreUnknownBeanProperties(value);
461      return this;
462   }
463
464   @Override /* BeanContextBuilder */
465   public ParserBuilder ignoreUnknownBeanProperties() {
466      super.ignoreUnknownBeanProperties();
467      return this;
468   }
469
470   @Override /* BeanContextBuilder */
471   public ParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
472      super.ignoreUnknownNullBeanProperties(value);
473      return this;
474   }
475
476   @Override /* BeanContextBuilder */
477   public <T> ParserBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
478      super.implClass(interfaceClass, implClass);
479      return this;
480   }
481
482   @Override /* BeanContextBuilder */
483   public ParserBuilder implClasses(Map<String,Class<?>> values) {
484      super.implClasses(values);
485      return this;
486   }
487
488   @Override /* BeanContextBuilder */
489   public ParserBuilder locale(Locale value) {
490      super.locale(value);
491      return this;
492   }
493
494   @Override /* BeanContextBuilder */
495   public ParserBuilder mediaType(MediaType value) {
496      super.mediaType(value);
497      return this;
498   }
499
500   @Override /* BeanContextBuilder */
501   public ParserBuilder beanMethodVisibility(Visibility value) {
502      super.beanMethodVisibility(value);
503      return this;
504   }
505
506   @Override /* BeanContextBuilder */
507   public ParserBuilder notBeanClasses(boolean append, Object...values) {
508      super.notBeanClasses(append, values);
509      return this;
510   }
511
512   @Override /* BeanContextBuilder */
513   public ParserBuilder notBeanClasses(Class<?>...values) {
514      super.notBeanClasses(values);
515      return this;
516   }
517
518   @Override /* BeanContextBuilder */
519   public ParserBuilder notBeanClasses(Object...values) {
520      super.notBeanClasses(values);
521      return this;
522   }
523
524   @Override /* BeanContextBuilder */
525   public ParserBuilder notBeanClassesRemove(Object...values) {
526      super.notBeanClassesRemove(values);
527      return this;
528   }
529
530   @Override /* BeanContextBuilder */
531   public ParserBuilder notBeanPackages(boolean append, Object...values) {
532      super.notBeanPackages(append, values);
533      return this;
534   }
535
536   @Override /* BeanContextBuilder */
537   public ParserBuilder notBeanPackages(Object...values) {
538      super.notBeanPackages(values);
539      return this;
540   }
541
542   @Override /* BeanContextBuilder */
543   public ParserBuilder notBeanPackages(String...values) {
544      super.notBeanPackages(values);
545      return this;
546   }
547
548   @Override /* BeanContextBuilder */
549   public ParserBuilder notBeanPackagesRemove(Object...values) {
550      super.notBeanPackagesRemove(values);
551      return this;
552   }
553
554   @Override /* BeanContextBuilder */
555   public ParserBuilder pojoSwaps(boolean append, Object...values) {
556      super.pojoSwaps(append, values);
557      return this;
558   }
559
560   @Override /* BeanContextBuilder */
561   public ParserBuilder pojoSwaps(Class<?>...values) {
562      super.pojoSwaps(values);
563      return this;
564   }
565
566   @Override /* BeanContextBuilder */
567   public ParserBuilder pojoSwaps(Object...values) {
568      super.pojoSwaps(values);
569      return this;
570   }
571
572   @Override /* BeanContextBuilder */
573   public ParserBuilder pojoSwapsRemove(Object...values) {
574      super.pojoSwapsRemove(values);
575      return this;
576   }
577
578   @Override /* BeanContextBuilder */
579   public ParserBuilder sortProperties(boolean value) {
580      super.sortProperties(value);
581      return this;
582   }
583
584   @Override /* BeanContextBuilder */
585   public ParserBuilder sortProperties() {
586      super.sortProperties();
587      return this;
588   }
589
590   @Override /* BeanContextBuilder */
591   public ParserBuilder timeZone(TimeZone value) {
592      super.timeZone(value);
593      return this;
594   }
595
596   @Override /* BeanContextBuilder */
597   public ParserBuilder useInterfaceProxies(boolean value) {
598      super.useInterfaceProxies(value);
599      return this;
600   }
601
602   @Override /* BeanContextBuilder */
603   public ParserBuilder useJavaBeanIntrospector(boolean value) {
604      super.useJavaBeanIntrospector(value);
605      return this;
606   }
607
608   @Override /* BeanContextBuilder */
609   public ParserBuilder useJavaBeanIntrospector() {
610      super.useJavaBeanIntrospector();
611      return this;
612   }
613
614   @Override /* ContextBuilder */
615   public ParserBuilder set(String name, Object value) {
616      super.set(name, value);
617      return this;
618   }
619
620   @Override /* ContextBuilder */
621   public ParserBuilder set(boolean append, String name, Object value) {
622      super.set(append, name, value);
623      return this;
624   }
625
626   @Override /* ContextBuilder */
627   public ParserBuilder set(Map<String,Object> properties) {
628      super.set(properties);
629      return this;
630   }
631
632   @Override /* ContextBuilder */
633   public ParserBuilder add(Map<String,Object> properties) {
634      super.add(properties);
635      return this;
636   }
637
638   @Override /* ContextBuilder */
639   public ParserBuilder addTo(String name, Object value) {
640      super.addTo(name, value);
641      return this;
642   }
643
644   @Override /* ContextBuilder */
645   public ParserBuilder addTo(String name, String key, Object value) {
646      super.addTo(name, key, value);
647      return this;
648   }
649
650   @Override /* ContextBuilder */
651   public ParserBuilder removeFrom(String name, Object value) {
652      super.removeFrom(name, value);
653      return this;
654   }
655
656   @Override /* ContextBuilder */
657   public ParserBuilder apply(PropertyStore copyFrom) {
658      super.apply(copyFrom);
659      return this;
660   }
661   
662   @Override /* Context */
663   public Parser build() {
664      return null;
665   }
666}