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.uon;
014
015import static org.apache.juneau.uon.UonParser.*;
016
017import java.nio.charset.*;
018import java.util.*;
019
020import org.apache.juneau.*;
021import org.apache.juneau.http.*;
022import org.apache.juneau.parser.*;
023import org.apache.juneau.reflect.*;
024import org.apache.juneau.svl.*;
025import org.apache.juneau.urlencoding.*;
026
027/**
028 * Builder class for building instances of UON parsers.
029 */
030public class UonParserBuilder extends ReaderParserBuilder {
031
032   /**
033    * Constructor, default settings.
034    */
035   public UonParserBuilder() {
036      super();
037   }
038
039   /**
040    * Constructor.
041    *
042    * @param ps The initial configuration settings for this builder.
043    */
044   public UonParserBuilder(PropertyStore ps) {
045      super(ps);
046   }
047
048   @Override /* ContextBuilder */
049   public UonParser build() {
050      return build(UonParser.class);
051   }
052
053   //-----------------------------------------------------------------------------------------------------------------
054   // Properties
055   //-----------------------------------------------------------------------------------------------------------------
056
057   /**
058    * Configuration property: Decode <js>"%xx"</js> sequences.
059    *
060    * <p>
061    * Specify <jk>true</jk> if URI encoded characters should be decoded, <jk>false</jk> if they've already been
062    * decoded before being passed to this parser.
063    *
064    * <ul class='seealso'>
065    *    <li class='jf'>{@link UonParser#UON_decoding}
066    * </ul>
067    *
068    * @param value
069    *    The new value for this property.
070    *    <br>Default is <jk>false</jk> for {@link UonParser}, <jk>true</jk> for {@link UrlEncodingParser}
071    * @return This object (for method chaining).
072    */
073   public UonParserBuilder decoding(boolean value) {
074      return set(UON_decoding, value);
075   }
076
077   /**
078    * Configuration property: Decode <js>"%xx"</js> sequences.
079    *
080    * <p>
081    * Shortcut for calling <code>decodeChars(<jk>true</jk>)</code>.
082    *
083    * <ul class='seealso'>
084    *    <li class='jf'>{@link UonParser#UON_decoding}
085    * </ul>
086    *
087    * @return This object (for method chaining).
088    */
089   public UonParserBuilder decoding() {
090      return decoding(true);
091   }
092
093   /**
094    * Configuration property:  Validate end.
095    *
096    * <p>
097    * If <jk>true</jk>, after parsing a POJO from the input, verifies that the remaining input in
098    * the stream consists of only whitespace.
099    *
100    * <ul class='seealso'>
101    *    <li class='jf'>{@link UonParser#UON_validateEnd}
102    * </ul>
103    *
104    * @param value
105    *    The new value for this property.
106    *    <br>The default value is <jk>false</jk>.
107    * @return This object (for method chaining).
108    */
109   public UonParserBuilder validateEnd(boolean value) {
110      return set(UON_validateEnd, value);
111   }
112
113   /**
114    * Configuration property:  Validate end.
115    *
116    * <p>
117    * Shortcut for calling <code>validateEnd(<jk>true</jk>)</code>.
118    *
119    * <ul class='seealso'>
120    *    <li class='jf'>{@link UonParser#UON_validateEnd}
121    * </ul>
122    *
123    * @return This object (for method chaining).
124    */
125   public UonParserBuilder validateEnd() {
126      return set(UON_validateEnd, true);
127   }
128
129   @Override /* ReaderParserBuilder */
130   public UonParserBuilder fileCharset(Charset value) {
131      super.fileCharset(value);
132      return this;
133   }
134
135   @Override /* ReaderParserBuilder */
136   public UonParserBuilder streamCharset(Charset value) {
137      super.streamCharset(value);
138      return this;
139   }
140
141   @Override /* ParserBuilder */
142   public UonParserBuilder autoCloseStreams(boolean value) {
143      super.autoCloseStreams(value);
144      return this;
145   }
146
147   @Override /* ParserBuilder */
148   public UonParserBuilder autoCloseStreams() {
149      super.autoCloseStreams();
150      return this;
151   }
152
153   @Override /* ParserBuilder */
154   public UonParserBuilder debugOutputLines(int value) {
155      super.debugOutputLines(value);
156      return this;
157   }
158
159   @Override /* ParserBuilder */
160   public UonParserBuilder listener(Class<? extends ParserListener> value) {
161      super.listener(value);
162      return this;
163   }
164
165   @Override /* ParserBuilder */
166   public UonParserBuilder strict(boolean value) {
167      super.strict(value);
168      return this;
169   }
170
171   @Override /* ParserBuilder */
172   public UonParserBuilder strict() {
173      super.strict();
174      return this;
175   }
176
177   @Override /* ParserBuilder */
178   public UonParserBuilder trimStrings(boolean value) {
179      super.trimStrings(value);
180      return this;
181   }
182
183   @Override /* ParserBuilder */
184   public UonParserBuilder trimStrings() {
185      super.trimStrings();
186      return this;
187   }
188
189   @Override /* ParserBuilder */
190   public UonParserBuilder unbuffered(boolean value) {
191      super.unbuffered(value);
192      return this;
193   }
194
195   @Override /* ParserBuilder */
196   public UonParserBuilder unbuffered() {
197      super.unbuffered();
198      return this;
199   }
200
201   @Override /* BeanContextBuilder */
202   public UonParserBuilder beanClassVisibility(Visibility value) {
203      super.beanClassVisibility(value);
204      return this;
205   }
206
207   @Override /* BeanContextBuilder */
208   public UonParserBuilder beanConstructorVisibility(Visibility value) {
209      super.beanConstructorVisibility(value);
210      return this;
211   }
212
213   @Override /* BeanContextBuilder */
214   @Deprecated
215   public UonParserBuilder beanDictionary(Class<?>...values) {
216      super.beanDictionary(values);
217      return this;
218   }
219
220   @Override /* BeanContextBuilder */
221   @Deprecated
222   public UonParserBuilder beanDictionary(Object...values) {
223      super.beanDictionary(values);
224      return this;
225   }
226
227   @Override /* BeanContextBuilder */
228   @Deprecated
229   public UonParserBuilder beanDictionaryReplace(Class<?>...values) {
230      super.beanDictionaryReplace(values);
231      return this;
232   }
233
234   @Override /* BeanContextBuilder */
235   @Deprecated
236   public UonParserBuilder beanDictionaryReplace(Object...values) {
237      super.beanDictionaryReplace(values);
238      return this;
239   }
240
241   @Override /* BeanContextBuilder */
242   @Deprecated
243   public UonParserBuilder beanDictionaryRemove(Class<?>...values) {
244      super.beanDictionaryRemove(values);
245      return this;
246   }
247
248   @Override /* BeanContextBuilder */
249   @Deprecated
250   public UonParserBuilder beanDictionaryRemove(Object...values) {
251      super.beanDictionaryRemove(values);
252      return this;
253   }
254
255   @Override /* BeanContextBuilder */
256   public UonParserBuilder beanFieldVisibility(Visibility value) {
257      super.beanFieldVisibility(value);
258      return this;
259   }
260
261   @Override /* BeanContextBuilder */
262   public UonParserBuilder beanFilters(Class<?>...values) {
263      super.beanFilters(values);
264      return this;
265   }
266
267   @Override /* BeanContextBuilder */
268   public UonParserBuilder beanFilters(Object...values) {
269      super.beanFilters(values);
270      return this;
271   }
272
273   @Override /* BeanContextBuilder */
274   public UonParserBuilder beanFiltersReplace(Class<?>...values) {
275      super.beanFiltersReplace(values);
276      return this;
277   }
278
279   @Override /* BeanContextBuilder */
280   public UonParserBuilder beanFiltersReplace(Object...values) {
281      super.beanFiltersReplace(values);
282      return this;
283   }
284
285   @Override /* BeanContextBuilder */
286   public UonParserBuilder beanFiltersRemove(Class<?>...values) {
287      super.beanFiltersRemove(values);
288      return this;
289   }
290
291   @Override /* BeanContextBuilder */
292   public UonParserBuilder beanFiltersRemove(Object...values) {
293      super.beanFiltersRemove(values);
294      return this;
295   }
296
297   @Override /* BeanContextBuilder */
298   public UonParserBuilder beanMapPutReturnsOldValue(boolean value) {
299      super.beanMapPutReturnsOldValue(value);
300      return this;
301   }
302
303   @Override /* BeanContextBuilder */
304   public UonParserBuilder beanMapPutReturnsOldValue() {
305      super.beanMapPutReturnsOldValue();
306      return this;
307   }
308
309   @Override /* BeanContextBuilder */
310   public UonParserBuilder beanMethodVisibility(Visibility value) {
311      super.beanMethodVisibility(value);
312      return this;
313   }
314
315   @Override /* BeanContextBuilder */
316   public UonParserBuilder beansRequireDefaultConstructor(boolean value) {
317      super.beansRequireDefaultConstructor(value);
318      return this;
319   }
320
321   @Override /* BeanContextBuilder */
322   public UonParserBuilder beansRequireDefaultConstructor() {
323      super.beansRequireDefaultConstructor();
324      return this;
325   }
326
327   @Override /* BeanContextBuilder */
328   public UonParserBuilder beansRequireSerializable(boolean value) {
329      super.beansRequireSerializable(value);
330      return this;
331   }
332
333   @Override /* BeanContextBuilder */
334   public UonParserBuilder beansRequireSerializable() {
335      super.beansRequireSerializable();
336      return this;
337   }
338
339   @Override /* BeanContextBuilder */
340   public UonParserBuilder beansRequireSettersForGetters(boolean value) {
341      super.beansRequireSettersForGetters(value);
342      return this;
343   }
344
345   @Override /* BeanContextBuilder */
346   public UonParserBuilder beansRequireSettersForGetters() {
347      super.beansRequireSettersForGetters();
348      return this;
349   }
350
351   @Override /* BeanContextBuilder */
352   public UonParserBuilder beansRequireSomeProperties(boolean value) {
353      super.beansRequireSomeProperties(value);
354      return this;
355   }
356
357   @Override /* BeanContextBuilder */
358   public UonParserBuilder beanTypePropertyName(String value) {
359      super.beanTypePropertyName(value);
360      return this;
361   }
362
363   @Override /* BeanContextBuilder */
364   public UonParserBuilder bpi(Class<?> beanClass, String value) {
365      super.bpi(beanClass, value);
366      return this;
367   }
368
369   @Override /* BeanContextBuilder */
370   public UonParserBuilder bpi(Map<String,String> values) {
371      super.bpi(values);
372      return this;
373   }
374
375   @Override /* BeanContextBuilder */
376   public UonParserBuilder bpi(String beanClassName, String value) {
377      super.bpi(beanClassName, value);
378      return this;
379   }
380
381   @Override /* BeanContextBuilder */
382   public UonParserBuilder bpx(Class<?> beanClass, String properties) {
383      super.bpx(beanClass, properties);
384      return this;
385   }
386
387   @Override /* BeanContextBuilder */
388   public UonParserBuilder bpx(Map<String,String> values) {
389      super.bpx(values);
390      return this;
391   }
392
393   @Override /* BeanContextBuilder */
394   public UonParserBuilder bpx(String beanClassName, String value) {
395      super.bpx(beanClassName, value);
396      return this;
397   }
398
399   @Override /* BeanContextBuilder */
400   public UonParserBuilder bpro(Class<?> beanClass, String value) {
401      super.bpro(beanClass, value);
402      return this;
403   }
404
405   @Override /* BeanContextBuilder */
406   public UonParserBuilder bpro(Map<String,String> values) {
407      super.bpro(values);
408      return this;
409   }
410
411   @Override /* BeanContextBuilder */
412   public UonParserBuilder bpro(String beanClassName, String value) {
413      super.bpro(beanClassName, value);
414      return this;
415   }
416
417   @Override /* BeanContextBuilder */
418   public UonParserBuilder bpwo(Class<?> beanClass, String properties) {
419      super.bpwo(beanClass, properties);
420      return this;
421   }
422
423   @Override /* BeanContextBuilder */
424   public UonParserBuilder bpwo(Map<String,String> values) {
425      super.bpwo(values);
426      return this;
427   }
428
429   @Override /* BeanContextBuilder */
430   public UonParserBuilder bpwo(String beanClassName, String value) {
431      super.bpwo(beanClassName, value);
432      return this;
433   }
434
435   @Override /* BeanContextBuilder */
436   public UonParserBuilder debug() {
437      super.debug();
438      return this;
439   }
440
441   @Override /* BeanContextBuilder */
442   public UonParserBuilder dictionary(Class<?>...values) {
443      super.dictionary(values);
444      return this;
445   }
446
447   @Override /* BeanContextBuilder */
448   public UonParserBuilder dictionary(Object...values) {
449      super.dictionary(values);
450      return this;
451   }
452
453   @Override /* BeanContextBuilder */
454   public UonParserBuilder dictionaryReplace(Class<?>...values) {
455      super.dictionaryReplace(values);
456      return this;
457   }
458
459   @Override /* BeanContextBuilder */
460   public UonParserBuilder dictionaryReplace(Object...values) {
461      super.dictionaryReplace(values);
462      return this;
463   }
464
465   @Override /* BeanContextBuilder */
466   public UonParserBuilder dictionaryRemove(Class<?>...values) {
467      super.dictionaryRemove(values);
468      return this;
469   }
470
471   @Override /* BeanContextBuilder */
472   public UonParserBuilder dictionaryRemove(Object...values) {
473      super.dictionaryRemove(values);
474      return this;
475   }
476
477   @Override /* BeanContextBuilder */
478   public <T> UonParserBuilder example(Class<T> c, T o) {
479      super.example(c, o);
480      return this;
481   }
482
483   @Override /* BeanContextBuilder */
484   public <T> UonParserBuilder exampleJson(Class<T> c, String value) {
485      super.exampleJson(c, value);
486      return this;
487   }
488
489   @Override /* BeanContextBuilder */
490   public UonParserBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
491      super.ignoreInvocationExceptionsOnGetters(value);
492      return this;
493   }
494
495   @Override /* BeanContextBuilder */
496   public UonParserBuilder ignoreInvocationExceptionsOnGetters() {
497      super.ignoreInvocationExceptionsOnGetters();
498      return this;
499   }
500
501   @Override /* BeanContextBuilder */
502   public UonParserBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
503      super.ignoreInvocationExceptionsOnSetters(value);
504      return this;
505   }
506
507   @Override /* BeanContextBuilder */
508   public UonParserBuilder ignoreInvocationExceptionsOnSetters() {
509      super.ignoreInvocationExceptionsOnSetters();
510      return this;
511   }
512
513   @Override /* BeanContextBuilder */
514   public UonParserBuilder ignorePropertiesWithoutSetters(boolean value) {
515      super.ignorePropertiesWithoutSetters(value);
516      return this;
517   }
518
519   @Override /* BeanContextBuilder */
520   public UonParserBuilder ignoreUnknownBeanProperties(boolean value) {
521      super.ignoreUnknownBeanProperties(value);
522      return this;
523   }
524
525   @Override /* BeanContextBuilder */
526   public UonParserBuilder ignoreUnknownBeanProperties() {
527      super.ignoreUnknownBeanProperties();
528      return this;
529   }
530
531   @Override /* BeanContextBuilder */
532   public UonParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
533      super.ignoreUnknownNullBeanProperties(value);
534      return this;
535   }
536
537   @Override /* BeanContextBuilder */
538   public UonParserBuilder implClass(Class<?> interfaceClass, Class<?> implClass) {
539      super.implClass(interfaceClass, implClass);
540      return this;
541   }
542
543   @Override /* BeanContextBuilder */
544   public UonParserBuilder implClasses(Map<String,Class<?>> values) {
545      super.implClasses(values);
546      return this;
547   }
548
549   @Override /* BeanContextBuilder */
550   public UonParserBuilder locale(Locale value) {
551      super.locale(value);
552      return this;
553   }
554
555   @Override /* BeanContextBuilder */
556   public UonParserBuilder mediaType(MediaType value) {
557      super.mediaType(value);
558      return this;
559   }
560
561   @Override /* BeanContextBuilder */
562   public UonParserBuilder notBeanClasses(Class<?>...values) {
563      super.notBeanClasses(values);
564      return this;
565   }
566
567   @Override /* BeanContextBuilder */
568   public UonParserBuilder notBeanClasses(Object...values) {
569      super.notBeanClasses(values);
570      return this;
571   }
572
573   @Override /* BeanContextBuilder */
574   public UonParserBuilder notBeanClassesReplace(Class<?>...values) {
575      super.notBeanClassesReplace(values);
576      return this;
577   }
578
579   @Override /* BeanContextBuilder */
580   public UonParserBuilder notBeanClassesReplace(Object...values) {
581      super.notBeanClassesReplace(values);
582      return this;
583   }
584
585   @Override /* BeanContextBuilder */
586   public UonParserBuilder notBeanClassesRemove(Class<?>...values) {
587      super.notBeanClassesRemove(values);
588      return this;
589   }
590
591   @Override /* BeanContextBuilder */
592   public UonParserBuilder notBeanClassesRemove(Object...values) {
593      super.notBeanClassesRemove(values);
594      return this;
595   }
596
597   @Override /* BeanContextBuilder */
598   public UonParserBuilder notBeanPackages(Object...values) {
599      super.notBeanPackages(values);
600      return this;
601   }
602
603   @Override /* BeanContextBuilder */
604   public UonParserBuilder notBeanPackages(String...values) {
605      super.notBeanPackages(values);
606      return this;
607   }
608
609   @Override /* BeanContextBuilder */
610   public UonParserBuilder notBeanPackagesReplace(String...values) {
611      super.notBeanPackagesReplace(values);
612      return this;
613   }
614
615   @Override /* BeanContextBuilder */
616   public UonParserBuilder notBeanPackagesReplace(Object...values) {
617      super.notBeanPackagesReplace(values);
618      return this;
619   }
620
621   @Override /* BeanContextBuilder */
622   public UonParserBuilder notBeanPackagesRemove(String...values) {
623      super.notBeanPackagesRemove(values);
624      return this;
625   }
626
627   @Override /* BeanContextBuilder */
628   public UonParserBuilder notBeanPackagesRemove(Object...values) {
629      super.notBeanPackagesRemove(values);
630      return this;
631   }
632
633   @Override /* BeanContextBuilder */
634   public UonParserBuilder pojoSwaps(Class<?>...values) {
635      super.pojoSwaps(values);
636      return this;
637   }
638
639   @Override /* BeanContextBuilder */
640   public UonParserBuilder pojoSwaps(Object...values) {
641      super.pojoSwaps(values);
642      return this;
643   }
644
645   @Override /* BeanContextBuilder */
646   public UonParserBuilder pojoSwapsReplace(Class<?>...values) {
647      super.pojoSwapsReplace(values);
648      return this;
649   }
650
651   @Override /* BeanContextBuilder */
652   public UonParserBuilder pojoSwapsReplace(Object...values) {
653      super.pojoSwapsReplace(values);
654      return this;
655   }
656
657   @Override /* BeanContextBuilder */
658   public UonParserBuilder pojoSwapsRemove(Class<?>...values) {
659      super.pojoSwapsRemove(values);
660      return this;
661   }
662
663   @Override /* BeanContextBuilder */
664   public UonParserBuilder pojoSwapsRemove(Object...values) {
665      super.pojoSwapsRemove(values);
666      return this;
667   }
668
669   @Override /* BeanContextBuilder */
670   public UonParserBuilder sortProperties(boolean value) {
671      super.sortProperties(value);
672      return this;
673   }
674
675   @Override /* BeanContextBuilder */
676   public UonParserBuilder sortProperties() {
677      super.sortProperties();
678      return this;
679   }
680
681   @Override /* BeanContextBuilder */
682   public UonParserBuilder timeZone(TimeZone value) {
683      super.timeZone(value);
684      return this;
685   }
686
687   @Override /* BeanContextBuilder */
688   public UonParserBuilder useEnumNames(boolean value) {
689      super.useEnumNames(value);
690      return this;
691   }
692
693   @Override /* BeanContextBuilder */
694   public UonParserBuilder useEnumNames() {
695      super.useEnumNames();
696      return this;
697   }
698
699   @Override /* BeanContextBuilder */
700   public UonParserBuilder useInterfaceProxies(boolean value) {
701      super.useInterfaceProxies(value);
702      return this;
703   }
704
705   @Override /* BeanContextBuilder */
706   public UonParserBuilder useJavaBeanIntrospector(boolean value) {
707      super.useJavaBeanIntrospector(value);
708      return this;
709   }
710
711   @Override /* BeanContextBuilder */
712   public UonParserBuilder useJavaBeanIntrospector() {
713      super.useJavaBeanIntrospector();
714      return this;
715   }
716
717   @Override /* ContextBuilder */
718   public UonParserBuilder set(String name, Object value) {
719      super.set(name, value);
720      return this;
721   }
722
723   @Override /* ContextBuilder */
724   public UonParserBuilder set(Map<String,Object> properties) {
725      super.set(properties);
726      return this;
727   }
728
729   @Override /* ContextBuilder */
730   public UonParserBuilder add(Map<String,Object> properties) {
731      super.add(properties);
732      return this;
733   }
734
735   @Override /* ContextBuilder */
736   public UonParserBuilder addTo(String name, Object value) {
737      super.addTo(name, value);
738      return this;
739   }
740
741   @Override /* ContextBuilder */
742   public UonParserBuilder addTo(String name, String key, Object value) {
743      super.addTo(name, key, value);
744      return this;
745   }
746
747   @Override /* ContextBuilder */
748   public UonParserBuilder removeFrom(String name, Object value) {
749      super.removeFrom(name, value);
750      return this;
751   }
752
753   @Override /* ContextBuilder */
754   public UonParserBuilder apply(PropertyStore copyFrom) {
755      super.apply(copyFrom);
756      return this;
757   }
758
759   @Override
760   public UonParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
761      super.applyAnnotations(al, vrs);
762      return this;
763   }
764}