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