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