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 SerializerBuilder {
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#SERIALIZER_quoteChar}
139    * </ul>
140    * 
141    * @return This object (for method chaining).
142    */
143   public JsonSerializerBuilder ssq() {
144      return simple().sq();
145   }
146   
147   @Override /* SerializerBuilder */
148   public JsonSerializerBuilder abridged(boolean value) {
149      super.abridged(value);
150      return this;
151   }
152
153   @Override /* SerializerBuilder */
154   public JsonSerializerBuilder abridged() {
155      super.abridged();
156      return this;
157   }
158
159   @Override /* SerializerBuilder */
160   public JsonSerializerBuilder addBeanTypeProperties(boolean value) {
161      super.addBeanTypeProperties(value);
162      return this;
163   }
164
165   @Override /* SerializerBuilder */
166   public JsonSerializerBuilder detectRecursions(boolean value) {
167      super.detectRecursions(value);
168      return this;
169   }
170
171   @Override /* SerializerBuilder */
172   public JsonSerializerBuilder detectRecursions() {
173      super.detectRecursions();
174      return this;
175   }
176
177   @Override /* SerializerBuilder */
178   public JsonSerializerBuilder ignoreRecursions(boolean value) {
179      super.ignoreRecursions(value);
180      return this;
181   }
182
183   @Override /* SerializerBuilder */
184   public JsonSerializerBuilder ignoreRecursions() {
185      super.ignoreRecursions();
186      return this;
187   }
188   @Override /* SerializerBuilder */
189   public JsonSerializerBuilder initialDepth(int value) {
190      super.initialDepth(value);
191      return this;
192   }
193
194   @Override /* SerializerBuilder */
195   public JsonSerializerBuilder listener(Class<? extends SerializerListener> value) {
196      super.listener(value);
197      return this;
198   }
199
200   @Override /* SerializerBuilder */
201   public JsonSerializerBuilder maxDepth(int value) {
202      super.maxDepth(value);
203      return this;
204   }
205
206   @Override /* SerializerBuilder */
207   public JsonSerializerBuilder maxIndent(int value) {
208      super.maxIndent(value);
209      return this;
210   }
211
212   @Override /* SerializerBuilder */
213   public JsonSerializerBuilder quoteChar(char value) {
214      super.quoteChar(value);
215      return this;
216   }
217
218   @Override /* SerializerBuilder */
219   public JsonSerializerBuilder sortCollections(boolean value) {
220      super.sortCollections(value);
221      return this;
222   }
223
224   @Override /* SerializerBuilder */
225   public JsonSerializerBuilder sortCollections() {
226      super.sortCollections();
227      return this;
228   }
229
230   @Override /* SerializerBuilder */
231   public JsonSerializerBuilder sortMaps(boolean value) {
232      super.sortMaps(value);
233      return this;
234   }
235
236   @Override /* SerializerBuilder */
237   public JsonSerializerBuilder sortMaps() {
238      super.sortMaps();
239      return this;
240   }
241
242   @Override /* SerializerBuilder */
243   public JsonSerializerBuilder sq() {
244      super.sq();
245      return this;
246   }
247
248   @Override /* SerializerBuilder */
249   public JsonSerializerBuilder trimEmptyCollections(boolean value) {
250      super.trimEmptyCollections(value);
251      return this;
252   }
253
254   @Override /* SerializerBuilder */
255   public JsonSerializerBuilder trimEmptyCollections() {
256      super.trimEmptyCollections();
257      return this;
258   }
259
260   @Override /* SerializerBuilder */
261   public JsonSerializerBuilder trimEmptyMaps(boolean value) {
262      super.trimEmptyMaps(value);
263      return this;
264   }
265
266   @Override /* SerializerBuilder */
267   public JsonSerializerBuilder trimEmptyMaps() {
268      super.trimEmptyMaps();
269      return this;
270   }
271
272   @Override /* SerializerBuilder */
273   public JsonSerializerBuilder trimNullProperties(boolean value) {
274      super.trimNullProperties(value);
275      return this;
276   }
277
278   @Override /* SerializerBuilder */
279   public JsonSerializerBuilder trimStrings(boolean value) {
280      super.trimStrings(value);
281      return this;
282   }
283
284   @Override /* SerializerBuilder */
285   public JsonSerializerBuilder trimStrings() {
286      super.trimStrings();
287      return this;
288   }
289
290   @Override /* SerializerBuilder */
291   public JsonSerializerBuilder uriContext(UriContext value) {
292      super.uriContext(value);
293      return this;
294   }
295
296   @Override /* SerializerBuilder */
297   public JsonSerializerBuilder uriRelativity(UriRelativity value) {
298      super.uriRelativity(value);
299      return this;
300   }
301
302   @Override /* SerializerBuilder */
303   public JsonSerializerBuilder uriResolution(UriResolution value) {
304      super.uriResolution(value);
305      return this;
306   }
307
308   @Override /* SerializerBuilder */
309   public JsonSerializerBuilder useWhitespace(boolean value) {
310      super.useWhitespace(value);
311      return this;
312   }
313
314   @Override /* SerializerBuilder */
315   public JsonSerializerBuilder useWhitespace() {
316      super.useWhitespace();
317      return this;
318   }
319
320   @Override /* SerializerBuilder */
321   public JsonSerializerBuilder ws() {
322      super.ws();
323      return this;
324   }
325
326   @Override /* BeanContextBuilder */
327   public JsonSerializerBuilder beansRequireDefaultConstructor(boolean value) {
328      super.beansRequireDefaultConstructor(value);
329      return this;
330   }
331
332   @Override /* BeanContextBuilder */
333   public JsonSerializerBuilder beansRequireDefaultConstructor() {
334      super.beansRequireDefaultConstructor();
335      return this;
336   }
337
338   @Override /* BeanContextBuilder */
339   public JsonSerializerBuilder beansRequireSerializable(boolean value) {
340      super.beansRequireSerializable(value);
341      return this;
342   }
343
344   @Override /* BeanContextBuilder */
345   public JsonSerializerBuilder beansRequireSerializable() {
346      super.beansRequireSerializable();
347      return this;
348   }
349
350   @Override /* BeanContextBuilder */
351   public JsonSerializerBuilder beansRequireSettersForGetters(boolean value) {
352      super.beansRequireSettersForGetters(value);
353      return this;
354   }
355
356   @Override /* BeanContextBuilder */
357   public JsonSerializerBuilder beansRequireSettersForGetters() {
358      super.beansRequireSettersForGetters();
359      return this;
360   }
361
362   @Override /* BeanContextBuilder */
363   public JsonSerializerBuilder beansRequireSomeProperties(boolean value) {
364      super.beansRequireSomeProperties(value);
365      return this;
366   }
367
368   @Override /* BeanContextBuilder */
369   public JsonSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
370      super.beanMapPutReturnsOldValue(value);
371      return this;
372   }
373
374   @Override /* BeanContextBuilder */
375   public JsonSerializerBuilder beanMapPutReturnsOldValue() {
376      super.beanMapPutReturnsOldValue();
377      return this;
378   }
379
380   @Override /* BeanContextBuilder */
381   public JsonSerializerBuilder beanConstructorVisibility(Visibility value) {
382      super.beanConstructorVisibility(value);
383      return this;
384   }
385
386   @Override /* BeanContextBuilder */
387   public JsonSerializerBuilder beanClassVisibility(Visibility value) {
388      super.beanClassVisibility(value);
389      return this;
390   }
391
392   @Override /* BeanContextBuilder */
393   public JsonSerializerBuilder beanFieldVisibility(Visibility value) {
394      super.beanFieldVisibility(value);
395      return this;
396   }
397
398   @Override /* BeanContextBuilder */
399   public JsonSerializerBuilder beanMethodVisibility(Visibility value) {
400      super.beanMethodVisibility(value);
401      return this;
402   }
403
404   @Override /* BeanContextBuilder */
405   public JsonSerializerBuilder useJavaBeanIntrospector(boolean value) {
406      super.useJavaBeanIntrospector(value);
407      return this;
408   }
409
410   @Override /* BeanContextBuilder */
411   public JsonSerializerBuilder useJavaBeanIntrospector() {
412      super.useJavaBeanIntrospector();
413      return this;
414   }
415
416   @Override /* BeanContextBuilder */
417   public JsonSerializerBuilder useInterfaceProxies(boolean value) {
418      super.useInterfaceProxies(value);
419      return this;
420   }
421
422   @Override /* BeanContextBuilder */
423   public JsonSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
424      super.ignoreUnknownBeanProperties(value);
425      return this;
426   }
427
428   @Override /* BeanContextBuilder */
429   public JsonSerializerBuilder ignoreUnknownBeanProperties() {
430      super.ignoreUnknownBeanProperties();
431      return this;
432   }
433
434   @Override /* BeanContextBuilder */
435   public JsonSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
436      super.ignoreUnknownNullBeanProperties(value);
437      return this;
438   }
439
440   @Override /* BeanContextBuilder */
441   public JsonSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
442      super.ignorePropertiesWithoutSetters(value);
443      return this;
444   }
445
446   @Override /* BeanContextBuilder */
447   public JsonSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
448      super.ignoreInvocationExceptionsOnGetters(value);
449      return this;
450   }
451
452   @Override /* BeanContextBuilder */
453   public JsonSerializerBuilder ignoreInvocationExceptionsOnGetters() {
454      super.ignoreInvocationExceptionsOnGetters();
455      return this;
456   }
457
458   @Override /* BeanContextBuilder */
459   public JsonSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
460      super.ignoreInvocationExceptionsOnSetters(value);
461      return this;
462   }
463
464   @Override /* BeanContextBuilder */
465   public JsonSerializerBuilder ignoreInvocationExceptionsOnSetters() {
466      super.ignoreInvocationExceptionsOnSetters();
467      return this;
468   }
469
470   @Override /* BeanContextBuilder */
471   public JsonSerializerBuilder sortProperties(boolean value) {
472      super.sortProperties(value);
473      return this;
474   }
475
476   @Override /* BeanContextBuilder */
477   public JsonSerializerBuilder sortProperties() {
478      super.sortProperties();
479      return this;
480   }
481
482   @Override /* BeanContextBuilder */
483   public JsonSerializerBuilder notBeanPackages(Object...values) {
484      super.notBeanPackages(values);
485      return this;
486   }
487
488   @Override /* BeanContextBuilder */
489   public JsonSerializerBuilder notBeanPackages(String...values) {
490      super.notBeanPackages(values);
491      return this;
492   }
493
494   @Override /* BeanContextBuilder */
495   public JsonSerializerBuilder notBeanPackages(boolean append, Object...values) {
496      super.notBeanPackages(append, values);
497      return this;
498   }
499
500   @Override /* BeanContextBuilder */
501   public JsonSerializerBuilder notBeanPackagesRemove(Object...values) {
502      super.notBeanPackagesRemove(values);
503      return this;
504   }
505
506   @Override /* BeanContextBuilder */
507   public JsonSerializerBuilder notBeanClasses(Object...values) {
508      super.notBeanClasses(values);
509      return this;
510   }
511
512   @Override /* BeanContextBuilder */
513   public JsonSerializerBuilder notBeanClasses(Class<?>...values) {
514      super.notBeanClasses(values);
515      return this;
516   }
517
518   @Override /* BeanContextBuilder */
519   public JsonSerializerBuilder notBeanClasses(boolean append, Object...values) {
520      super.notBeanClasses(append, values);
521      return this;
522   }
523
524   @Override /* BeanContextBuilder */
525   public JsonSerializerBuilder notBeanClassesRemove(Object...values) {
526      super.notBeanClassesRemove(values);
527      return this;
528   }
529
530   @Override /* BeanContextBuilder */
531   public JsonSerializerBuilder beanFilters(Object...values) {
532      super.beanFilters(values);
533      return this;
534   }
535
536   @Override /* BeanContextBuilder */
537   public JsonSerializerBuilder beanFilters(Class<?>...values) {
538      super.beanFilters(values);
539      return this;
540   }
541
542   @Override /* BeanContextBuilder */
543   public JsonSerializerBuilder beanFilters(boolean append, Object...values) {
544      super.beanFilters(append, values);
545      return this;
546   }
547
548   @Override /* BeanContextBuilder */
549   public JsonSerializerBuilder beanFiltersRemove(Object...values) {
550      super.beanFiltersRemove(values);
551      return this;
552   }
553
554   @Override /* BeanContextBuilder */
555   public JsonSerializerBuilder pojoSwaps(Object...values) {
556      super.pojoSwaps(values);
557      return this;
558   }
559
560   @Override /* BeanContextBuilder */
561   public JsonSerializerBuilder pojoSwaps(Class<?>...values) {
562      super.pojoSwaps(values);
563      return this;
564   }
565
566   @Override /* BeanContextBuilder */
567   public JsonSerializerBuilder pojoSwaps(boolean append, Object...values) {
568      super.pojoSwaps(append, values);
569      return this;
570   }
571
572   @Override /* BeanContextBuilder */
573   public JsonSerializerBuilder pojoSwapsRemove(Object...values) {
574      super.pojoSwapsRemove(values);
575      return this;
576   }
577
578   @Override /* BeanContextBuilder */
579   public JsonSerializerBuilder implClasses(Map<String,Class<?>> values) {
580      super.implClasses(values);
581      return this;
582   }
583
584   @Override /* BeanContextBuilder */
585   public <T> JsonSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
586      super.implClass(interfaceClass, implClass);
587      return this;
588   }
589
590   @Override /* BeanContextBuilder */
591   public JsonSerializerBuilder beanDictionary(Object...values) {
592      super.beanDictionary(values);
593      return this;
594   }
595
596   @Override /* BeanContextBuilder */
597   public JsonSerializerBuilder beanDictionary(Class<?>...values) {
598      super.beanDictionary(values);
599      return this;
600   }
601
602   @Override /* BeanContextBuilder */
603   public JsonSerializerBuilder beanDictionary(boolean append, Object...values) {
604      super.beanDictionary(append, values);
605      return this;
606   }
607
608   @Override /* BeanContextBuilder */
609   public JsonSerializerBuilder beanDictionaryRemove(Object...values) {
610      super.beanDictionaryRemove(values);
611      return this;
612   }
613
614   @Override /* BeanContextBuilder */
615   public JsonSerializerBuilder beanTypePropertyName(String value) {
616      super.beanTypePropertyName(value);
617      return this;
618   }
619
620   @Override /* BeanContextBuilder */
621   public JsonSerializerBuilder locale(Locale value) {
622      super.locale(value);
623      return this;
624   }
625
626   @Override /* BeanContextBuilder */
627   public JsonSerializerBuilder timeZone(TimeZone value) {
628      super.timeZone(value);
629      return this;
630   }
631
632   @Override /* BeanContextBuilder */
633   public JsonSerializerBuilder mediaType(MediaType value) {
634      super.mediaType(value);
635      return this;
636   }
637
638   @Override /* BeanContextBuilder */
639   public JsonSerializerBuilder debug() {
640      super.debug();
641      return this;
642   }
643
644   @Override /* ContextBuilder */
645   public JsonSerializerBuilder set(String name, Object value) {
646      super.set(name, value);
647      return this;
648   }
649
650   @Override /* ContextBuilder */
651   public JsonSerializerBuilder set(boolean append, String name, Object value) {
652      super.set(append, name, value);
653      return this;
654   }
655
656   @Override /* ContextBuilder */
657   public JsonSerializerBuilder set(Map<String,Object> properties) {
658      super.set(properties);
659      return this;
660   }
661
662   @Override /* ContextBuilder */
663   public JsonSerializerBuilder add(Map<String,Object> properties) {
664      super.add(properties);
665      return this;
666   }
667
668   @Override /* ContextBuilder */
669   public JsonSerializerBuilder addTo(String name, Object value) {
670      super.addTo(name, value);
671      return this;
672   }
673
674   @Override /* ContextBuilder */
675   public JsonSerializerBuilder addTo(String name, String key, Object value) {
676      super.addTo(name, key, value);
677      return this;
678   }
679
680   @Override /* ContextBuilder */
681   public JsonSerializerBuilder removeFrom(String name, Object value) {
682      super.removeFrom(name, value);
683      return this;
684   }
685
686   @Override /* ContextBuilder */
687   public JsonSerializerBuilder apply(PropertyStore copyFrom) {
688      super.apply(copyFrom);
689      return this;
690   }
691}