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.serializer;
014
015import static org.apache.juneau.serializer.Serializer.*;
016
017import java.util.*;
018
019import org.apache.juneau.*;
020import org.apache.juneau.http.*;
021
022/**
023 * Builder class for building instances of serializers.
024 */
025public class SerializerBuilder extends BeanContextBuilder {
026
027   /**
028    * Constructor, default settings.
029    */
030   public SerializerBuilder() {
031      super();
032   }
033
034   /**
035    * Constructor.
036    * 
037    * @param ps The initial configuration settings for this builder.
038    */
039   public SerializerBuilder(PropertyStore ps) {
040      super(ps);
041   }
042
043
044   //--------------------------------------------------------------------------------
045   // Properties
046   //--------------------------------------------------------------------------------
047
048   /**
049    * Configuration property:  Abridged output.
050    * 
051    * <p>
052    * When enabled, it is assumed that the parser knows the exact Java POJO type being parsed, and therefore top-level
053    * type information that might normally be included to determine the data type will not be serialized.
054    * 
055    * <h5 class='section'>See Also:</h5>
056    * <ul>
057    *    <li class='jf'>{@link Serializer#SERIALIZER_abridged}
058    * </ul>
059    * 
060    * @param value 
061    *    The new value for this property.
062    *    <br>The default is <jk>false</jk>.
063    * @return This object (for method chaining).
064    */
065   public SerializerBuilder abridged(boolean value) {
066      return set(SERIALIZER_abridged, value);
067   }
068
069   /**
070    * Configuration property:  Abridged output.
071    * 
072    * <p>
073    * Shortcut for calling <code>abridged(<jk>true</jk>)</code>.
074    * 
075    * <h5 class='section'>See Also:</h5>
076    * <ul>
077    *    <li class='jf'>{@link Serializer#SERIALIZER_abridged}
078    * </ul>
079    * 
080    * @return This object (for method chaining).
081    */
082   public SerializerBuilder abridged() {
083      return set(SERIALIZER_abridged, true);
084   }
085
086   /**
087    * Configuration property:  Add <js>"_type"</js> properties when needed.
088    * 
089    * <p>
090    * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
091    * through reflection.
092    * 
093    * <h5 class='section'>See Also:</h5>
094    * <ul>
095    *    <li class='jf'>{@link Serializer#SERIALIZER_addBeanTypeProperties}
096    * </ul>
097    * 
098    * @param value 
099    *    The new value for this property.
100    *    <br>The default is <jk>true</jk>.
101    * @return This object (for method chaining).
102    */
103   public SerializerBuilder addBeanTypeProperties(boolean value) {
104      return set(SERIALIZER_addBeanTypeProperties, value);
105   }
106
107   /**
108    * Configuration property:  Automatically detect POJO recursions.
109    * 
110    * <p>
111    * Specifies that recursions should be checked for during serialization.
112    * 
113    * <h5 class='section'>Notes:</h5>
114    * <ul class='spaced-list'>
115    *    <li>
116    *       Checking for recursion can cause a small performance penalty.
117    * </ul>
118    * 
119    * <h5 class='section'>See Also:</h5>
120    * <ul>
121    *    <li class='jf'>{@link Serializer#SERIALIZER_detectRecursions}
122    * </ul>
123    * 
124    * @param value 
125    *    The new value for this property.
126    *    <br>The default is <jk>false</jk>.
127    * @return This object (for method chaining).
128    */
129   public SerializerBuilder detectRecursions(boolean value) {
130      return set(SERIALIZER_detectRecursions, value);
131   }
132
133   /**
134    * Configuration property:  Automatically detect POJO recursions.
135    * 
136    * <p>
137    * Shortcut for calling <code>detectRecursions(<jk>true</jk>)</code>.
138    * 
139    * <h5 class='section'>See Also:</h5>
140    * <ul>
141    *    <li class='jf'>{@link Serializer#SERIALIZER_detectRecursions}
142    * </ul>
143    * 
144    * @return This object (for method chaining).
145    */
146   public SerializerBuilder detectRecursions() {
147      return set(SERIALIZER_detectRecursions, true);
148   }
149
150   /**
151    * Configuration property:  Ignore recursion errors.
152    * 
153    * <p>
154    * If <jk>true</jk>, when we encounter the same object when serializing a tree, we set the value to <jk>null</jk>.
155    * Otherwise, an exception is thrown.
156    * 
157    * <h5 class='section'>Notes:</h5>
158    * <ul class='spaced-list'>
159    *    <li>
160    *       Checking for recursion can cause a small performance penalty.
161    * </ul>
162    * 
163    * <h5 class='section'>See Also:</h5>
164    * <ul>
165    *    <li class='jf'>{@link Serializer#SERIALIZER_ignoreRecursions}
166    * </ul>
167    * 
168    * @param value 
169    *    The new value for this property.
170    *    <br>The default is <jk>false</jk>.
171    * @return This object (for method chaining).
172    */
173   public SerializerBuilder ignoreRecursions(boolean value) {
174      return set(SERIALIZER_ignoreRecursions, value);
175   }
176
177   /**
178    * Configuration property:  Ignore recursion errors.
179    * 
180    * <p>
181    * Shortcut for calling <code>ignoreRecursions(<jk>true</jk>)</code>.
182    * 
183    * <h5 class='section'>See Also:</h5>
184    * <ul>
185    *    <li class='jf'>{@link Serializer#SERIALIZER_ignoreRecursions}
186    * </ul>
187    * 
188    * @return This object (for method chaining).
189    */
190   public SerializerBuilder ignoreRecursions() {
191      return set(SERIALIZER_ignoreRecursions, true);
192   }
193
194   /**
195    * Configuration property:  Initial depth.
196    * 
197    * <p>
198    * The initial indentation level at the root.
199    * 
200    * <h5 class='section'>See Also:</h5>
201    * <ul>
202    *    <li class='jf'>{@link Serializer#SERIALIZER_initialDepth}
203    * </ul>
204    * 
205    * @param value 
206    *    The new value for this property.
207    *    <br>The default is <code>0</code>.
208    * @return This object (for method chaining).
209    */
210   public SerializerBuilder initialDepth(int value) {
211      return set(SERIALIZER_initialDepth, value);
212   }
213
214   /**
215    * Configuration property:  Serializer listener.
216    * 
217    * <p>
218    * Class used to listen for errors and warnings that occur during serialization.
219    * 
220    * <h5 class='section'>See Also:</h5>
221    * <ul>
222    *    <li class='jf'>{@link Serializer#SERIALIZER_listener}
223    * </ul>
224    * 
225    * @param value 
226    *    The new value for this property.
227    * @return This object (for method chaining).
228    */
229   public SerializerBuilder listener(Class<? extends SerializerListener> value) {
230      return set(SERIALIZER_listener, value);
231   }
232
233   /**
234    * Configuration property:  Max serialization depth.
235    * 
236    * <p>
237    * Abort serialization if specified depth is reached in the POJO tree.
238    * <br>If this depth is exceeded, an exception is thrown.
239    * <br>This prevents stack overflows from occurring when trying to serialize models with recursive references.
240    * 
241    * <h5 class='section'>See Also:</h5>
242    * <ul>
243    *    <li class='jf'>{@link Serializer#SERIALIZER_maxDepth}
244    * </ul>
245    * 
246    * @param value 
247    *    The new value for this property.
248    *    <br>The default is <code>100</code>.
249    * @return This object (for method chaining).
250    */
251   public SerializerBuilder maxDepth(int value) {
252      return set(SERIALIZER_maxDepth, value);
253   }
254
255   /**
256    * Configuration property:  Maximum indentation.
257    * 
258    * <p>
259    * Specifies the maximum indentation level in the serialized document.
260    * 
261    * <h5 class='section'>See Also:</h5>
262    * <ul>
263    *    <li class='jf'>{@link Serializer#SERIALIZER_maxIndent}
264    * </ul>
265    * 
266    * @param value 
267    *    The new value for this property.
268    *    <br>The default is <code>100</code>.
269    * @return This object (for method chaining).
270    */
271   public SerializerBuilder maxIndent(int value) {
272      return set(SERIALIZER_maxIndent, value);
273   }
274
275   /**
276    * Configuration property:  Quote character.
277    * 
278    * <p>
279    * This is the character used for quoting attributes and values.
280    * 
281    * <h5 class='section'>See Also:</h5>
282    * <ul>
283    *    <li class='jf'>{@link Serializer#SERIALIZER_quoteChar}
284    * </ul>
285    * 
286    * @param value 
287    *    The new value for this property.
288    *    <br>The default is <js>'"'</js>.
289    * @return This object (for method chaining).
290    */
291   public SerializerBuilder quoteChar(char value) {
292      return set(SERIALIZER_quoteChar, value);
293   }
294
295   /**
296    * Configuration property:  Sort arrays and collections alphabetically.
297    * 
298    * <p>
299    * Copies and sorts the contents of arrays and collections before serializing them.
300    * 
301    * <h5 class='section'>See Also:</h5>
302    * <ul>
303    *    <li class='jf'>{@link Serializer#SERIALIZER_sortCollections}
304    * </ul>
305    * 
306    * @param value 
307    *    The new value for this property.
308    *    <br>The default is <jk>false</jk>.
309    * @return This object (for method chaining).
310    */
311   public SerializerBuilder sortCollections(boolean value) {
312      return set(SERIALIZER_sortCollections, value);
313   }
314
315   /**
316    * Configuration property:  Sort arrays and collections alphabetically.
317    * 
318    * <p>
319    * Shortcut for calling <code>sortCollections(<jk>true</jk>)</code>.
320    * 
321    * <h5 class='section'>See Also:</h5>
322    * <ul>
323    *    <li class='jf'>{@link Serializer#SERIALIZER_sortCollections}
324    * </ul>
325    * 
326    * @return This object (for method chaining).
327    */
328   public SerializerBuilder sortCollections() {
329      return set(SERIALIZER_sortCollections, true);
330   }
331
332   /**
333    * Configuration property:  Sort maps alphabetically.
334    * 
335    * <p>
336    * Copies and sorts the contents of maps before serializing them.
337    * 
338    * <h5 class='section'>See Also:</h5>
339    * <ul>
340    *    <li class='jf'>{@link Serializer#SERIALIZER_sortMaps}
341    * </ul>
342    * 
343    * @param value 
344    *    The new value for this property.
345    *    <br>The default is <jk>false</jk>.
346    * @return This object (for method chaining).
347    */
348   public SerializerBuilder sortMaps(boolean value) {
349      return set(SERIALIZER_sortMaps, value);
350   }
351
352   /**
353    * Configuration property:  Sort maps alphabetically.
354    * 
355    * <p>
356    * Shortcut for calling <code>sortMaps(<jk>true</jk>)</code>.
357    * 
358    * <h5 class='section'>See Also:</h5>
359    * <ul>
360    *    <li class='jf'>{@link Serializer#SERIALIZER_sortMaps}
361    * </ul>
362    * 
363    * @return This object (for method chaining).
364    */
365   public SerializerBuilder sortMaps() {
366      return set(SERIALIZER_sortMaps, true);
367   }
368
369   /**
370    * Configuration property:  Quote character.
371    * 
372    * <p>
373    * Shortcut for calling <code>quoteChar(<js>'\''</js>)</code>.
374    * 
375    * <h5 class='section'>See Also:</h5>
376    * <ul>
377    *    <li class='jf'>{@link Serializer#SERIALIZER_quoteChar}
378    * </ul>
379    * 
380    * @return This object (for method chaining).
381    */
382   public SerializerBuilder sq() {
383      return quoteChar('\'');
384   }
385
386   /**
387    * Configuration property:  Trim empty lists and arrays.
388    * 
389    * <p>
390    * If <jk>true</jk>, empty list values will not be serialized to the output.
391    * 
392    * <h5 class='section'>See Also:</h5>
393    * <ul>
394    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections}
395    * </ul>
396    * 
397    * @param value 
398    *    The new value for this property.
399    *    <br>The default is <jk>false</jk>.
400    * @return This object (for method chaining).
401    */
402   public SerializerBuilder trimEmptyCollections(boolean value) {
403      return set(SERIALIZER_trimEmptyCollections, value);
404   }
405
406   /**
407    * Configuration property:  Trim empty lists and arrays.
408    * 
409    * <p>
410    * Shortcut for calling <code>trimEmptyCollections(<jk>true</jk>)</code>.
411    * 
412    * <h5 class='section'>See Also:</h5>
413    * <ul>
414    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections}
415    * </ul>
416    * 
417    * @return This object (for method chaining).
418    */
419   public SerializerBuilder trimEmptyCollections() {
420      return set(SERIALIZER_trimEmptyCollections, true);
421   }
422
423   /**
424    * Configuration property:  Trim empty maps.
425    * 
426    * <p>
427    * If <jk>true</jk>, empty map values will not be serialized to the output.
428    * 
429    * <h5 class='section'>See Also:</h5>
430    * <ul>
431    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps}
432    * </ul>
433    * 
434    * @param value 
435    *    The new value for this property.
436    *    <br>The default is <jk>false</jk>.
437    * @return This object (for method chaining).
438    */
439   public SerializerBuilder trimEmptyMaps(boolean value) {
440      return set(SERIALIZER_trimEmptyMaps, value);
441   }
442
443   /**
444    * Configuration property:  Trim empty maps.
445    * 
446    * <p>
447    * Shortcut for calling <code>trimEmptyMaps(<jk>true</jk>)</code>.
448    * 
449    * <h5 class='section'>See Also:</h5>
450    * <ul>
451    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps}
452    * </ul>
453    * 
454    * @return This object (for method chaining).
455    */
456   public SerializerBuilder trimEmptyMaps() {
457      return set(SERIALIZER_trimEmptyMaps, true);
458   }
459
460   /**
461    * Configuration property:  Trim null bean property values.
462    * 
463    * <p>
464    * If <jk>true</jk>, null bean values will not be serialized to the output.
465    * 
466    * <h5 class='section'>See Also:</h5>
467    * <ul>
468    *    <li class='jf'>{@link Serializer#SERIALIZER_trimNullProperties}
469    * </ul>
470    * 
471    * @param value 
472    *    The new value for this property.
473    *    <br>The default is <jk>true</jk>.
474    * @return This object (for method chaining).
475    */
476   public SerializerBuilder trimNullProperties(boolean value) {
477      return set(SERIALIZER_trimNullProperties, value);
478   }
479
480   /**
481    * Configuration property:  Trim strings.
482    * 
483    * <p>
484    * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being serialized.
485    * 
486    * <h5 class='section'>See Also:</h5>
487    * <ul>
488    *    <li class='jf'>{@link Serializer#SERIALIZER_trimStrings}
489    * </ul>
490    * 
491    * @param value 
492    *    The new value for this property.
493    *    <br>The default is <jk>false</jk>.
494    * @return This object (for method chaining).
495    */
496   public SerializerBuilder trimStrings(boolean value) {
497      return set(SERIALIZER_trimStrings, value);
498   }
499
500   /**
501    * Configuration property:  Trim strings.
502    * 
503    * <p>
504    * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>.
505    * 
506    * <h5 class='section'>See Also:</h5>
507    * <ul>
508    *    <li class='jf'>{@link Serializer#SERIALIZER_trimStrings}
509    * </ul>
510    * 
511    * @return This object (for method chaining).
512    */
513   public SerializerBuilder trimStrings() {
514      return set(SERIALIZER_trimStrings, true);
515   }
516
517   /**
518    * Configuration property:  URI context bean.
519    * 
520    * <p>
521    * Bean used for resolution of URIs to absolute or root-relative form.
522    * 
523    * <h5 class='section'>See Also:</h5>
524    * <ul>
525    *    <li class='jf'>{@link Serializer#SERIALIZER_uriContext}
526    * </ul>
527    * 
528    * @param value The new value for this property.
529    * @return This object (for method chaining).
530    */
531   public SerializerBuilder uriContext(UriContext value) {
532      return set(SERIALIZER_uriContext, value);
533   }
534
535   /**
536    * Configuration property:  URI context bean.
537    * 
538    * <p>
539    * Same as {@link #uriContext(UriContext)} but allows you to pass in a JSON string.
540    * 
541    * <h5 class='section'>Example:</h5>
542    * <p class='bcode'>
543    *    WriterSerializer s = JsonSerializer
544    *       .<jsm>create</jsm>()
545    *       .uriContext(<js>"{authority:'http://localhost:10000',contextRoot:'/myContext',servletPath:'/myServlet',pathInfo:'/foo'}"</js>)
546    *       .build();
547    * </p>
548    * 
549    * <h5 class='section'>See Also:</h5>
550    * <ul>
551    *    <li class='jf'>{@link Serializer#SERIALIZER_uriContext}
552    * </ul>
553    * 
554    * @param value The new value for this property.
555    * @return This object (for method chaining).
556    */
557   public SerializerBuilder uriContext(String value) {
558      return set(SERIALIZER_uriContext, value);
559   }
560
561   /**
562    * Configuration property:  URI relativity.
563    * 
564    * <p>
565    * Defines what relative URIs are relative to when serializing URI/URL objects.
566    * 
567    * <h5 class='section'>See Also:</h5>
568    * <ul>
569    *    <li class='jf'>{@link Serializer#SERIALIZER_uriRelativity}
570    * </ul>
571    * 
572    * @param value 
573    *    The new value for this property.
574    *    <br>The default is {@link UriRelativity#RESOURCE}
575    * @return This object (for method chaining).
576    */
577   public SerializerBuilder uriRelativity(UriRelativity value) {
578      return set(SERIALIZER_uriRelativity, value);
579   }
580
581   /**
582    * Configuration property:  URI relativity.
583    * 
584    * <p>
585    * Same as {@link #uriRelativity(UriRelativity)} but allows you to pass in a string.
586    * 
587    * <h5 class='section'>Example:</h5>
588    * <p class='bcode'>
589    *    WriterSerializer s = JsonSerializer
590    *       .<jsm>create</jsm>()
591    *       .uriRelativity(<js>"PATH_INFO"</js>)
592    *       .build();
593    * </p>
594    * 
595    * <h5 class='section'>See Also:</h5>
596    * <ul>
597    *    <li class='jf'>{@link Serializer#SERIALIZER_uriRelativity}
598    * </ul>
599    * 
600    * @param value 
601    *    The new value for this property.
602    *    <br>The default is {@link UriRelativity#RESOURCE}
603    * @return This object (for method chaining).
604    */
605   public SerializerBuilder uriRelativity(String value) {
606      return set(SERIALIZER_uriRelativity, value);
607   }
608   
609   /**
610    * Configuration property:  URI resolution.
611    * 
612    * <p>
613    * Defines the resolution level for URIs when serializing URI/URL objects.
614    * 
615    * <h5 class='section'>See Also:</h5>
616    * <ul>
617    *    <li class='jf'>{@link Serializer#SERIALIZER_uriResolution}
618    * </ul>
619    * 
620    * @param value 
621    *    The new value for this property.
622    *    <br>The default is {@link UriResolution#NONE}
623    * @return This object (for method chaining).
624    */
625   public SerializerBuilder uriResolution(UriResolution value) {
626      return set(SERIALIZER_uriResolution, value);
627   }
628
629   /**
630    * Configuration property:  URI resolution.
631    * 
632    * <p>
633    * Same as {@link #uriResolution(UriResolution)} but allows you to pass in a string.
634    * 
635    * <h5 class='section'>Example:</h5>
636    * <p class='bcode'>
637    *    WriterSerializer s = JsonSerializer
638    *       .<jsm>create</jsm>()
639    *       .uriResolution(<js>"ROOT_RELATIVE"</js>)
640    *       .build();
641    * </p>
642    * 
643    * <h5 class='section'>See Also:</h5>
644    * <ul>
645    *    <li class='jf'>{@link Serializer#SERIALIZER_uriResolution}
646    * </ul>
647    * 
648    * @param value 
649    *    The new value for this property.
650    *    <br>The default is {@link UriResolution#NONE}
651    * @return This object (for method chaining).
652    */
653   public SerializerBuilder uriResolution(String value) {
654      return set(SERIALIZER_uriResolution, value);
655   }
656
657   /**
658    * Configuration property:  Use whitespace.
659    * 
660    * <p>
661    * If <jk>true</jk>, newlines and indentation and spaces are added to the output to improve readability.
662    * 
663    * <h5 class='section'>See Also:</h5>
664    * <ul>
665    *    <li class='jf'>{@link Serializer#SERIALIZER_useWhitespace}
666    * </ul>
667    * 
668    * @param value 
669    *    The new value for this property.
670    *    <br>The default is <jk>false</jk>.
671    * @return This object (for method chaining).
672    */
673   public SerializerBuilder useWhitespace(boolean value) {
674      return set(SERIALIZER_useWhitespace, value);
675   }
676
677   /**
678    * Configuration property:  Use whitespace.
679    * 
680    * <p>
681    * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>.
682    * 
683    * <h5 class='section'>See Also:</h5>
684    * <ul>
685    *    <li class='jf'>{@link Serializer#SERIALIZER_useWhitespace}
686    * </ul>
687    * @return This object (for method chaining).
688    */
689   public SerializerBuilder useWhitespace() {
690      return set(SERIALIZER_useWhitespace, true);
691   }
692
693   /**
694    * Configuration property:  Use whitespace.
695    * 
696    * <p>
697    * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>.
698    * 
699    * <h5 class='section'>See Also:</h5>
700    * <ul>
701    *    <li class='jf'>{@link Serializer#SERIALIZER_useWhitespace}
702    * </ul>
703    * 
704    * @return This object (for method chaining).
705    */
706   public SerializerBuilder ws() {
707      return useWhitespace();
708   }
709
710   @Override /* BeanContextBuilder */
711   public SerializerBuilder beansRequireDefaultConstructor(boolean value) {
712      super.beansRequireDefaultConstructor(value);
713      return this;
714   }
715
716   @Override /* BeanContextBuilder */
717   public SerializerBuilder beansRequireDefaultConstructor() {
718      super.beansRequireDefaultConstructor();
719      return this;
720   }
721
722   @Override /* BeanContextBuilder */
723   public SerializerBuilder beansRequireSerializable(boolean value) {
724      super.beansRequireSerializable(value);
725      return this;
726   }
727
728   @Override /* BeanContextBuilder */
729   public SerializerBuilder beansRequireSerializable() {
730      super.beansRequireSerializable();
731      return this;
732   }
733
734   @Override /* BeanContextBuilder */
735   public SerializerBuilder beansRequireSettersForGetters(boolean value) {
736      super.beansRequireSettersForGetters(value);
737      return this;
738   }
739
740   @Override /* BeanContextBuilder */
741   public SerializerBuilder beansRequireSettersForGetters() {
742      super.beansRequireSettersForGetters();
743      return this;
744   }
745
746   @Override /* BeanContextBuilder */
747   public SerializerBuilder beansRequireSomeProperties(boolean value) {
748      super.beansRequireSomeProperties(value);
749      return this;
750   }
751
752   @Override /* BeanContextBuilder */
753   public SerializerBuilder beanMapPutReturnsOldValue(boolean value) {
754      super.beanMapPutReturnsOldValue(value);
755      return this;
756   }
757
758   @Override /* BeanContextBuilder */
759   public SerializerBuilder beanMapPutReturnsOldValue() {
760      super.beanMapPutReturnsOldValue();
761      return this;
762   }
763
764   @Override /* BeanContextBuilder */
765   public SerializerBuilder beanConstructorVisibility(Visibility value) {
766      super.beanConstructorVisibility(value);
767      return this;
768   }
769
770   @Override /* BeanContextBuilder */
771   public SerializerBuilder beanClassVisibility(Visibility value) {
772      super.beanClassVisibility(value);
773      return this;
774   }
775
776   @Override /* BeanContextBuilder */
777   public SerializerBuilder beanFieldVisibility(Visibility value) {
778      super.beanFieldVisibility(value);
779      return this;
780   }
781
782   @Override /* BeanContextBuilder */
783   public SerializerBuilder beanMethodVisibility(Visibility value) {
784      super.beanMethodVisibility(value);
785      return this;
786   }
787
788   @Override /* BeanContextBuilder */
789   public SerializerBuilder useJavaBeanIntrospector(boolean value) {
790      super.useJavaBeanIntrospector(value);
791      return this;
792   }
793
794   @Override /* BeanContextBuilder */
795   public SerializerBuilder useJavaBeanIntrospector() {
796      super.useJavaBeanIntrospector();
797      return this;
798   }
799
800   @Override /* BeanContextBuilder */
801   public SerializerBuilder useInterfaceProxies(boolean value) {
802      super.useInterfaceProxies(value);
803      return this;
804   }
805
806   @Override /* BeanContextBuilder */
807   public SerializerBuilder ignoreUnknownBeanProperties(boolean value) {
808      super.ignoreUnknownBeanProperties(value);
809      return this;
810   }
811
812   @Override /* BeanContextBuilder */
813   public SerializerBuilder ignoreUnknownBeanProperties() {
814      super.ignoreUnknownBeanProperties();
815      return this;
816   }
817
818   @Override /* BeanContextBuilder */
819   public SerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
820      super.ignoreUnknownNullBeanProperties(value);
821      return this;
822   }
823
824   @Override /* BeanContextBuilder */
825   public SerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
826      super.ignorePropertiesWithoutSetters(value);
827      return this;
828   }
829
830   @Override /* BeanContextBuilder */
831   public SerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
832      super.ignoreInvocationExceptionsOnGetters(value);
833      return this;
834   }
835
836   @Override /* BeanContextBuilder */
837   public SerializerBuilder ignoreInvocationExceptionsOnGetters() {
838      super.ignoreInvocationExceptionsOnGetters();
839      return this;
840   }
841
842   @Override /* BeanContextBuilder */
843   public SerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
844      super.ignoreInvocationExceptionsOnSetters(value);
845      return this;
846   }
847
848   @Override /* BeanContextBuilder */
849   public SerializerBuilder ignoreInvocationExceptionsOnSetters() {
850      super.ignoreInvocationExceptionsOnSetters();
851      return this;
852   }
853
854   @Override /* BeanContextBuilder */
855   public SerializerBuilder sortProperties(boolean value) {
856      super.sortProperties(value);
857      return this;
858   }
859
860   @Override /* BeanContextBuilder */
861   public SerializerBuilder sortProperties() {
862      super.sortProperties();
863      return this;
864   }
865
866   @Override /* BeanContextBuilder */
867   public SerializerBuilder notBeanPackages(Object...values) {
868      super.notBeanPackages(values);
869      return this;
870   }
871
872   @Override /* BeanContextBuilder */
873   public SerializerBuilder notBeanPackages(String...values) {
874      super.notBeanPackages(values);
875      return this;
876   }
877
878   @Override /* BeanContextBuilder */
879   public SerializerBuilder notBeanPackages(boolean append, Object...values) {
880      super.notBeanPackages(append, values);
881      return this;
882   }
883
884   @Override /* BeanContextBuilder */
885   public SerializerBuilder notBeanPackagesRemove(Object...values) {
886      super.notBeanPackagesRemove(values);
887      return this;
888   }
889
890   @Override /* BeanContextBuilder */
891   public SerializerBuilder notBeanClasses(Object...values) {
892      super.notBeanClasses(values);
893      return this;
894   }
895
896   @Override /* BeanContextBuilder */
897   public SerializerBuilder notBeanClasses(Class<?>...values) {
898      super.notBeanClasses(values);
899      return this;
900   }
901
902   @Override /* BeanContextBuilder */
903   public SerializerBuilder notBeanClasses(boolean append, Object...values) {
904      super.notBeanClasses(append, values);
905      return this;
906   }
907
908   @Override /* BeanContextBuilder */
909   public SerializerBuilder notBeanClassesRemove(Object...values) {
910      super.notBeanClassesRemove(values);
911      return this;
912   }
913
914   @Override /* BeanContextBuilder */
915   public SerializerBuilder beanFilters(Object...values) {
916      super.beanFilters(values);
917      return this;
918   }
919
920   @Override /* BeanContextBuilder */
921   public SerializerBuilder beanFilters(Class<?>...values) {
922      super.beanFilters(values);
923      return this;
924   }
925
926   @Override /* BeanContextBuilder */
927   public SerializerBuilder beanFilters(boolean append, Object...values) {
928      super.beanFilters(append, values);
929      return this;
930   }
931
932   @Override /* BeanContextBuilder */
933   public SerializerBuilder beanFiltersRemove(Object...values) {
934      super.beanFiltersRemove(values);
935      return this;
936   }
937
938   @Override /* BeanContextBuilder */
939   public SerializerBuilder pojoSwaps(Object...values) {
940      super.pojoSwaps(values);
941      return this;
942   }
943
944   @Override /* BeanContextBuilder */
945   public SerializerBuilder pojoSwaps(Class<?>...values) {
946      super.pojoSwaps(values);
947      return this;
948   }
949
950   @Override /* BeanContextBuilder */
951   public SerializerBuilder pojoSwaps(boolean append, Object...values) {
952      super.pojoSwaps(append, values);
953      return this;
954   }
955
956   @Override /* BeanContextBuilder */
957   public SerializerBuilder pojoSwapsRemove(Object...values) {
958      super.pojoSwapsRemove(values);
959      return this;
960   }
961
962   @Override /* BeanContextBuilder */
963   public SerializerBuilder implClasses(Map<String,Class<?>> values) {
964      super.implClasses(values);
965      return this;
966   }
967
968   @Override /* BeanContextBuilder */
969   public <T> SerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
970      super.implClass(interfaceClass, implClass);
971      return this;
972   }
973
974   @Override /* BeanContextBuilder */
975   public SerializerBuilder beanDictionary(Object...values) {
976      super.beanDictionary(values);
977      return this;
978   }
979
980   @Override /* BeanContextBuilder */
981   public SerializerBuilder beanDictionary(Class<?>...values) {
982      super.beanDictionary(values);
983      return this;
984   }
985
986   @Override /* BeanContextBuilder */
987   public SerializerBuilder beanDictionary(boolean append, Object...values) {
988      super.beanDictionary(append, values);
989      return this;
990   }
991
992   @Override /* BeanContextBuilder */
993   public SerializerBuilder beanDictionaryRemove(Object...values) {
994      super.beanDictionaryRemove(values);
995      return this;
996   }
997
998   @Override /* BeanContextBuilder */
999   public SerializerBuilder beanTypePropertyName(String value) {
1000      super.beanTypePropertyName(value);
1001      return this;
1002   }
1003
1004   @Override /* BeanContextBuilder */
1005   public SerializerBuilder locale(Locale value) {
1006      super.locale(value);
1007      return this;
1008   }
1009
1010   @Override /* BeanContextBuilder */
1011   public SerializerBuilder timeZone(TimeZone value) {
1012      super.timeZone(value);
1013      return this;
1014   }
1015
1016   @Override /* BeanContextBuilder */
1017   public SerializerBuilder mediaType(MediaType value) {
1018      super.mediaType(value);
1019      return this;
1020   }
1021
1022   @Override /* BeanContextBuilder */
1023   public SerializerBuilder debug() {
1024      super.debug();
1025      return this;
1026   }
1027
1028   @Override /* ContextBuilder */
1029   public SerializerBuilder set(String name, Object value) {
1030      super.set(name, value);
1031      return this;
1032   }
1033
1034   @Override /* ContextBuilder */
1035   public SerializerBuilder set(boolean append, String name, Object value) {
1036      super.set(append, name, value);
1037      return this;
1038   }
1039
1040   @Override /* ContextBuilder */
1041   public SerializerBuilder set(Map<String,Object> properties) {
1042      super.set(properties);
1043      return this;
1044   }
1045
1046   @Override /* ContextBuilder */
1047   public SerializerBuilder add(Map<String,Object> properties) {
1048      super.add(properties);
1049      return this;
1050   }
1051
1052   @Override /* ContextBuilder */
1053   public SerializerBuilder addTo(String name, Object value) {
1054      super.addTo(name, value);
1055      return this;
1056   }
1057
1058   @Override /* ContextBuilder */
1059   public SerializerBuilder addTo(String name, String key, Object value) {
1060      super.addTo(name, key, value);
1061      return this;
1062   }
1063
1064   @Override /* ContextBuilder */
1065   public SerializerBuilder removeFrom(String name, Object value) {
1066      super.removeFrom(name, value);
1067      return this;
1068   }
1069
1070   @Override /* ContextBuilder */
1071   public SerializerBuilder apply(PropertyStore copyFrom) {
1072      super.apply(copyFrom);
1073      return this;
1074   }
1075   
1076   @Override /* Context */
1077   public Serializer build() {
1078      return null;
1079   }
1080}