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.internal.CollectionUtils.*;
016import static org.apache.juneau.serializer.OutputStreamSerializer.*;
017import static org.apache.juneau.serializer.WriterSerializer.*;
018
019import java.lang.reflect.*;
020import java.nio.charset.*;
021import java.util.*;
022
023import org.apache.juneau.*;
024import org.apache.juneau.http.*;
025import org.apache.juneau.internal.*;
026import org.apache.juneau.reflect.*;
027import org.apache.juneau.svl.*;
028
029/**
030 * Builder class for creating instances of {@link SerializerGroup}.
031 */
032public class SerializerGroupBuilder extends BeanTraverseBuilder {
033
034   private final List<Object> serializers;
035
036   /**
037    * Create an empty serializer group builder.
038    */
039   public SerializerGroupBuilder() {
040      this.serializers = new ArrayList<>();
041   }
042
043   /**
044    * Clone an existing serializer group builder.
045    *
046    * @param copyFrom The serializer group that we're copying settings and serializers from.
047    */
048   public SerializerGroupBuilder(SerializerGroup copyFrom) {
049      super(copyFrom.getPropertyStore());
050      this.serializers = new ArrayList<>();
051      addReverse(serializers, copyFrom.getSerializers());
052   }
053
054   /**
055    * Registers the specified serializers with this group.
056    *
057    * @param s The serializers to append to this group.
058    * @return This object (for method chaining).
059    */
060   public SerializerGroupBuilder append(Class<?>...s) {
061      addReverse(serializers, s);
062      return this;
063   }
064
065   /**
066    * Registers the specified serializers with this group.
067    *
068    * <p>
069    * When passing in pre-instantiated serializers to this group, applying properties and transforms to the group
070    * do not affect them.
071    *
072    * @param s The serializers to append to this group.
073    * @return This object (for method chaining).
074    */
075   public SerializerGroupBuilder append(Serializer...s) {
076      addReverse(serializers, s);
077      return this;
078   }
079
080   /**
081    * Registers the specified serializers with this group.
082    *
083    * <p>
084    * Objects can either be instances of serializers or serializer classes.
085    *
086    * @param s The serializers to append to this group.
087    * @return This object (for method chaining).
088    */
089   public SerializerGroupBuilder append(List<Object> s) {
090      addReverse(serializers, s);
091      return this;
092   }
093
094   /**
095    * Registers the specified serializers with this group.
096    *
097    * <p>
098    * Objects can either be instances of serializers or serializer classes.
099    *
100    * @param s The serializers to append to this group.
101    * @return This object (for method chaining).
102    */
103   public SerializerGroupBuilder append(Object...s) {
104      addReverse(serializers, s);
105      return this;
106   }
107
108   /**
109    * Creates a new {@link SerializerGroup} object using a snapshot of the settings defined in this builder.
110    *
111    * <p>
112    * This method can be called multiple times to produce multiple serializer groups.
113    *
114    * @return A new {@link SerializerGroup} object.
115    */
116   @Override /* ContextBuilder */
117   @SuppressWarnings("unchecked")
118   public SerializerGroup build() {
119      List<Serializer> l = new ArrayList<>();
120      for (Object s : serializers) {
121         Class<? extends Serializer> c = null;
122         PropertyStore ps = getPropertyStore();
123         if (s instanceof Class) {
124            c = (Class<? extends Serializer>)s;
125            l.add(ContextCache.INSTANCE.create(c, ps));
126         } else {
127            l.add((Serializer)s);
128         }
129      }
130      return new SerializerGroup(getPropertyStore(), ArrayUtils.toReverseArray(Serializer.class, l));
131   }
132
133   //-----------------------------------------------------------------------------------------------------------------
134   // Properties
135   //-----------------------------------------------------------------------------------------------------------------
136
137   /**
138    * Configuration property:  Add <js>"_type"</js> properties when needed.
139    *
140    * <p>
141    * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
142    * through reflection.
143    *
144    * <ul class='seealso'>
145    *    <li class='jf'>{@link Serializer#SERIALIZER_addBeanTypes}
146    * </ul>
147    *
148    * @param value
149    *    The new value for this property.
150    *    <br>The default is <jk>false</jk>.
151    * @return This object (for method chaining).
152    */
153   public SerializerGroupBuilder addBeanTypes(boolean value) {
154      return set(SERIALIZER_addBeanTypes, value);
155   }
156
157   /**
158    * Configuration property:  Add <js>"_type"</js> properties when needed.
159    *
160    * <p>
161    * Shortcut for calling <code>addBeanTypes(<jk>true</jk>)</code>.
162    *
163    * <ul class='seealso'>
164    *    <li class='jf'>{@link Serializer#SERIALIZER_addBeanTypes}
165    * </ul>
166    *
167    * @return This object (for method chaining).
168    */
169   public SerializerGroupBuilder addBeanTypes() {
170      return set(SERIALIZER_addBeanTypes, true);
171   }
172
173   /**
174    * Configuration property:  Add type attribute to root nodes.
175    *
176    * <p>
177    * When disabled, it is assumed that the parser knows the exact Java POJO type being parsed, and therefore top-level
178    * type information that might normally be included to determine the data type will not be serialized.
179    *
180    * <ul class='seealso'>
181    *    <li class='jf'>{@link Serializer#SERIALIZER_addRootType}
182    * </ul>
183    *
184    * @param value
185    *    The new value for this property.
186    *    <br>The default is <jk>false</jk>.
187    * @return This object (for method chaining).
188    */
189   public SerializerGroupBuilder addRootType(boolean value) {
190      return set(SERIALIZER_addRootType, value);
191   }
192
193   /**
194    * Configuration property:  Add type attribute to root nodes.
195    *
196    * <p>
197    * Shortcut for calling <code>addRootType(<jk>true</jk>)</code>.
198    *
199    * <ul class='seealso'>
200    *    <li class='jf'>{@link Serializer#SERIALIZER_addRootType}
201    * </ul>
202    *
203    * @return This object (for method chaining).
204    */
205   public SerializerGroupBuilder addRootType() {
206      return set(SERIALIZER_addRootType, true);
207   }
208
209   /**
210    * Configuration property:  Serializer listener.
211    *
212    * <p>
213    * Class used to listen for errors and warnings that occur during serialization.
214    *
215    * <ul class='seealso'>
216    *    <li class='jf'>{@link Serializer#SERIALIZER_listener}
217    * </ul>
218    *
219    * @param value
220    *    The new value for this property.
221    * @return This object (for method chaining).
222    */
223   public SerializerGroupBuilder listener(Class<? extends SerializerListener> value) {
224      return set(SERIALIZER_listener, value);
225   }
226
227   /**
228    * Configuration property:  Sort arrays and collections alphabetically.
229    *
230    * <ul class='seealso'>
231    *    <li class='jf'>{@link Serializer#SERIALIZER_sortCollections}
232    * </ul>
233    *
234    * @param value
235    *    The new value for this property.
236    *    <br>The default is <jk>false</jk>.
237    * @return This object (for method chaining).
238    */
239   public SerializerGroupBuilder sortCollections(boolean value) {
240      return set(SERIALIZER_sortCollections, value);
241   }
242
243   /**
244    * Configuration property:  Sort arrays and collections alphabetically.
245    *
246    * <p>
247    * Shortcut for calling <code>sortCollections(<jk>true</jk>)</code>.
248    *
249    * <ul class='seealso'>
250    *    <li class='jf'>{@link Serializer#SERIALIZER_sortCollections}
251    * </ul>
252    *
253    * @return This object (for method chaining).
254    */
255   public SerializerGroupBuilder sortCollections() {
256      return set(SERIALIZER_sortCollections, true);
257   }
258
259   /**
260    * Configuration property:  Sort maps alphabetically.
261    *
262    * <ul class='seealso'>
263    *    <li class='jf'>{@link Serializer#SERIALIZER_sortMaps}
264    * </ul>
265    *
266    * @param value
267    *    The new value for this property.
268    *    <br>The default is <jk>false</jk>.
269    * @return This object (for method chaining).
270    */
271   public SerializerGroupBuilder sortMaps(boolean value) {
272      return set(SERIALIZER_sortMaps, value);
273   }
274
275   /**
276    * Configuration property:  Sort maps alphabetically.
277    *
278    * <p>
279    * Shortcut for calling <code>sortMaps(<jk>true</jk>)</code>.
280    *
281    * <ul class='seealso'>
282    *    <li class='jf'>{@link Serializer#SERIALIZER_sortMaps}
283    * </ul>
284    *
285    * @return This object (for method chaining).
286    */
287   public SerializerGroupBuilder sortMaps() {
288      return set(SERIALIZER_sortMaps, true);
289   }
290
291   /**
292    * Configuration property:  Trim empty lists and arrays.
293    *
294    * <p>
295    * If <jk>true</jk>, empty list values will not be serialized to the output.
296    *
297    * <ul class='seealso'>
298    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections}
299    * </ul>
300    *
301    * @param value
302    *    The new value for this property.
303    *    <br>The default is <jk>false</jk>.
304    * @return This object (for method chaining).
305    */
306   public SerializerGroupBuilder trimEmptyCollections(boolean value) {
307      return set(SERIALIZER_trimEmptyCollections, value);
308   }
309
310   /**
311    * Configuration property:  Trim empty lists and arrays.
312    *
313    * <p>
314    * Shortcut for calling <code>trimEmptyCollections(<jk>true</jk>)</code>.
315    *
316    * <ul class='seealso'>
317    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections}
318    * </ul>
319    *
320    * @return This object (for method chaining).
321    */
322   public SerializerGroupBuilder trimEmptyCollections() {
323      return set(SERIALIZER_trimEmptyCollections, true);
324   }
325
326   /**
327    * Configuration property:  Trim empty maps.
328    *
329    * <p>
330    * If <jk>true</jk>, empty map values will not be serialized to the output.
331    *
332    * <ul class='seealso'>
333    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps}
334    * </ul>
335    *
336    * @param value
337    *    The new value for this property.
338    *    <br>The default is <jk>false</jk>.
339    * @return This object (for method chaining).
340    */
341   public SerializerGroupBuilder trimEmptyMaps(boolean value) {
342      return set(SERIALIZER_trimEmptyMaps, value);
343   }
344
345   /**
346    * Configuration property:  Trim empty maps.
347    *
348    * <p>
349    * Shortcut for calling <code>trimEmptyMaps(<jk>true</jk>)</code>.
350    *
351    * <ul class='seealso'>
352    *    <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps}
353    * </ul>
354    *
355    * @return This object (for method chaining).
356    */
357   public SerializerGroupBuilder trimEmptyMaps() {
358      return set(SERIALIZER_trimEmptyMaps, true);
359   }
360
361   /**
362    * Configuration property:  Trim null bean property values.
363    *
364    * <p>
365    * If <jk>true</jk>, null bean values will not be serialized to the output.
366    *
367    * <ul class='seealso'>
368    *    <li class='jf'>{@link Serializer#SERIALIZER_trimNullProperties}
369    * </ul>
370    *
371    * @param value
372    *    The new value for this property.
373    *    <br>The default is <jk>true</jk>.
374    * @return This object (for method chaining).
375    */
376   public SerializerGroupBuilder trimNullProperties(boolean value) {
377      return set(SERIALIZER_trimNullProperties, value);
378   }
379
380   /**
381    * Configuration property:  Trim strings.
382    *
383    * <p>
384    * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being serialized.
385    *
386    * <ul class='seealso'>
387    *    <li class='jf'>{@link Serializer#SERIALIZER_trimStrings}
388    * </ul>
389    *
390    * @param value
391    *    The new value for this property.
392    *    <br>The default is <jk>false</jk>.
393    * @return This object (for method chaining).
394    */
395   public SerializerGroupBuilder trimStrings(boolean value) {
396      return set(SERIALIZER_trimStrings, value);
397   }
398
399   /**
400    * Configuration property:  Trim strings.
401    *
402    * <p>
403    * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>.
404    *
405    * <ul class='seealso'>
406    *    <li class='jf'>{@link Serializer#SERIALIZER_trimStrings}
407    * </ul>
408    *
409    * @return This object (for method chaining).
410    */
411   public SerializerGroupBuilder trimStrings() {
412      return set(SERIALIZER_trimStrings, true);
413   }
414
415   /**
416    * Configuration property:  URI context bean.
417    *
418    * <p>
419    * Bean used for resolution of URIs to absolute or root-relative form.
420    *
421    * <ul class='seealso'>
422    *    <li class='jf'>{@link Serializer#SERIALIZER_uriContext}
423    * </ul>
424    *
425    * @param value The new value for this property.
426    * @return This object (for method chaining).
427    */
428   public SerializerGroupBuilder uriContext(UriContext value) {
429      return set(SERIALIZER_uriContext, value);
430   }
431
432   /**
433    * Configuration property:  URI relativity.
434    *
435    * <p>
436    * Defines what relative URIs are relative to when serializing URI/URL objects.
437    *
438    * <ul class='seealso'>
439    *    <li class='jf'>{@link Serializer#SERIALIZER_uriRelativity}
440    * </ul>
441    *
442    * @param value
443    *    The new value for this property.
444    *    <br>The default is {@link UriRelativity#RESOURCE}
445    * @return This object (for method chaining).
446    */
447   public SerializerGroupBuilder uriRelativity(UriRelativity value) {
448      return set(SERIALIZER_uriRelativity, value);
449   }
450
451   /**
452    * Configuration property:  URI resolution.
453    *
454    * <p>
455    * Defines the resolution level for URIs when serializing URI/URL objects.
456    *
457    * <ul class='seealso'>
458    *    <li class='jf'>{@link Serializer#SERIALIZER_uriResolution}
459    * </ul>
460    *
461    * @param value
462    *    The new value for this property.
463    *    <br>The default is {@link UriResolution#NONE}
464    * @return This object (for method chaining).
465    */
466   public SerializerGroupBuilder uriResolution(UriResolution value) {
467      return set(SERIALIZER_uriResolution, value);
468   }
469
470   //--- OutputStreamSerializer ---
471
472   /**
473    * Configuration property:  Binary string format.
474    *
475    * <p>
476    * When using the {@link Serializer#serializeToString(Object)} method on stream-based serializers, this defines the format to use
477    * when converting the resulting byte array to a string.
478    *
479    * <ul class='javatree'>
480    *    <li class='jf'>{@link OutputStreamSerializer#OSSERIALIZER_binaryFormat}
481    * </ul>
482    *
483    * @param value
484    *    The new value for this property.
485    *    <br>The default is {@link BinaryFormat#HEX}.
486    * @return This object (for method chaining).
487    */
488   public SerializerGroupBuilder binaryOutputFormat(BinaryFormat value) {
489      return set(OSSERIALIZER_binaryFormat, value);
490   }
491
492   //--- WriterSerializer ---
493
494   /**
495    * Configuration property: File charset.
496    *
497    * <p>
498    * The character set to use for writing Files to the file system.
499    *
500    * <p>
501    * Used when passing in files to {@link Serializer#serialize(Object, Object)}.
502    *
503    * <ul class='seealso'>
504    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_fileCharset}
505    * </ul>
506    *
507    * @param value
508    *    The new value for this property.
509    *    <br>The default is the system JVM setting.
510    * @return This object (for method chaining).
511    */
512   public SerializerGroupBuilder fileCharset(Charset value) {
513      return set(WSERIALIZER_fileCharset, value);
514   }
515
516   /**
517    * Configuration property:  Maximum indentation.
518    *
519    * <p>
520    * Specifies the maximum indentation level in the serialized document.
521    *
522    * <ul class='seealso'>
523    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_maxIndent}
524    * </ul>
525    *
526    * @param value
527    *    The new value for this property.
528    *    <br>The default is <c>100</c>.
529    * @return This object (for method chaining).
530    */
531   public SerializerGroupBuilder maxIndent(int value) {
532      return set(WSERIALIZER_maxIndent, value);
533   }
534
535   /**
536    * Configuration property:  Quote character.
537    *
538    * <p>
539    * This is the character used for quoting attributes and values.
540    *
541    * <ul class='seealso'>
542    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
543    * </ul>
544    *
545    * @param value
546    *    The new value for this property.
547    *    <br>The default is <js>'"'</js>.
548    * @return This object (for method chaining).
549    */
550   public SerializerGroupBuilder quoteChar(char value) {
551      return set(WSERIALIZER_quoteChar, value);
552   }
553
554   /**
555    * Configuration property:  Quote character.
556    *
557    * <p>
558    * Shortcut for calling <code>quoteChar(<js>'\''</js>)</code>.
559    *
560    * <ul class='seealso'>
561    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
562    * </ul>
563    *
564    * @return This object (for method chaining).
565    */
566   public SerializerGroupBuilder sq() {
567      return quoteChar('\'');
568   }
569
570   /**
571    * Configuration property: Output stream charset.
572    *
573    * <p>
574    * The character set to use when writing to OutputStreams.
575    *
576    * <p>
577    * Used when passing in output streams and byte arrays to {@link WriterSerializer#serialize(Object, Object)}.
578    *
579    * <ul class='seealso'>
580    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_streamCharset}
581    * </ul>
582    *
583    * @param value
584    *    The new value for this property.
585    *    <br>The default is the system JVM setting.
586    * @return This object (for method chaining).
587    */
588   public SerializerGroupBuilder streamCharset(Charset value) {
589      return set(WSERIALIZER_streamCharset, value);
590   }
591
592   /**
593    * Configuration property:  Use whitespace.
594    *
595    * <p>
596    * If <jk>true</jk>, newlines and indentation and spaces are added to the output to improve readability.
597    *
598    * <ul class='seealso'>
599    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_useWhitespace}
600    * </ul>
601    *
602    * @param value
603    *    The new value for this property.
604    *    <br>The default is <jk>false</jk>.
605    * @return This object (for method chaining).
606    */
607   public SerializerGroupBuilder useWhitespace(boolean value) {
608      return set(WSERIALIZER_useWhitespace, value);
609   }
610
611   /**
612    * Configuration property:  Use whitespace.
613    *
614    * <p>
615    * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>.
616    *
617    * <ul class='seealso'>
618    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_useWhitespace}
619    * </ul>
620    * @return This object (for method chaining).
621    */
622   public SerializerGroupBuilder useWhitespace() {
623      return set(WSERIALIZER_useWhitespace, true);
624   }
625
626   /**
627    * Configuration property:  Use whitespace.
628    *
629    * <p>
630    * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>.
631    *
632    * <ul class='seealso'>
633    *    <li class='jf'>{@link WriterSerializer#WSERIALIZER_useWhitespace}
634    * </ul>
635    *
636    * @return This object (for method chaining).
637    */
638   public SerializerGroupBuilder ws() {
639      return useWhitespace();
640   }
641
642   @Override /* BeanTraverseBuilder */
643   public SerializerGroupBuilder detectRecursions(boolean value) {
644      super.detectRecursions(value);
645      return this;
646   }
647
648   @Override /* BeanTraverseBuilder */
649   public SerializerGroupBuilder detectRecursions() {
650      super.detectRecursions();
651      return this;
652   }
653
654   @Override /* BeanTraverseBuilder */
655   public SerializerGroupBuilder ignoreRecursions(boolean value) {
656      super.ignoreRecursions(value);
657      return this;
658   }
659
660   @Override /* BeanTraverseBuilder */
661   public SerializerGroupBuilder ignoreRecursions() {
662      super.ignoreRecursions();
663      return this;
664   }
665
666   @Override /* BeanTraverseBuilder */
667   public SerializerGroupBuilder initialDepth(int value) {
668      super.initialDepth(value);
669      return this;
670   }
671
672   @Override /* BeanTraverseBuilder */
673   public SerializerGroupBuilder maxDepth(int value) {
674      super.maxDepth(value);
675      return this;
676   }
677
678   @Override /* BeanContextBuilder */
679   public SerializerGroupBuilder beanClassVisibility(Visibility value) {
680      super.beanClassVisibility(value);
681      return this;
682   }
683
684   @Override /* BeanContextBuilder */
685   public SerializerGroupBuilder beanConstructorVisibility(Visibility value) {
686      super.beanConstructorVisibility(value);
687      return this;
688   }
689
690   @Override /* BeanContextBuilder */
691   @Deprecated
692   public SerializerGroupBuilder beanDictionary(Class<?>...values) {
693      super.beanDictionary(values);
694      return this;
695   }
696
697   @Override /* BeanContextBuilder */
698   @Deprecated
699   public SerializerGroupBuilder beanDictionary(Object...values) {
700      super.beanDictionary(values);
701      return this;
702   }
703
704   @Override /* BeanContextBuilder */
705   @Deprecated
706   public SerializerGroupBuilder beanDictionaryReplace(Class<?>...values) {
707      super.beanDictionaryReplace(values);
708      return this;
709   }
710
711   @Override /* BeanContextBuilder */
712   @Deprecated
713   public SerializerGroupBuilder beanDictionaryReplace(Object...values) {
714      super.beanDictionaryReplace(values);
715      return this;
716   }
717
718   @Override /* BeanContextBuilder */
719   @Deprecated
720   public SerializerGroupBuilder beanDictionaryRemove(Class<?>...values) {
721      super.beanDictionaryRemove(values);
722      return this;
723   }
724
725   @Override /* BeanContextBuilder */
726   @Deprecated
727   public SerializerGroupBuilder beanDictionaryRemove(Object...values) {
728      super.beanDictionaryRemove(values);
729      return this;
730   }
731
732   @Override /* BeanContextBuilder */
733   public SerializerGroupBuilder beanFieldVisibility(Visibility value) {
734      super.beanFieldVisibility(value);
735      return this;
736   }
737
738   @Override /* BeanContextBuilder */
739   public SerializerGroupBuilder beanFilters(Class<?>...values) {
740      super.beanFilters(values);
741      return this;
742   }
743
744   @Override /* BeanContextBuilder */
745   public SerializerGroupBuilder beanFilters(Object...values) {
746      super.beanFilters(values);
747      return this;
748   }
749
750   @Override /* BeanContextBuilder */
751   public SerializerGroupBuilder beanFiltersReplace(Class<?>...values) {
752      super.beanFiltersReplace(values);
753      return this;
754   }
755
756   @Override /* BeanContextBuilder */
757   public SerializerGroupBuilder beanFiltersReplace(Object...values) {
758      super.beanFiltersReplace(values);
759      return this;
760   }
761
762   @Override /* BeanContextBuilder */
763   public SerializerGroupBuilder beanFiltersRemove(Class<?>...values) {
764      super.beanFiltersRemove(values);
765      return this;
766   }
767
768   @Override /* BeanContextBuilder */
769   public SerializerGroupBuilder beanFiltersRemove(Object...values) {
770      super.beanFiltersRemove(values);
771      return this;
772   }
773
774   @Override /* BeanContextBuilder */
775   public SerializerGroupBuilder beanMapPutReturnsOldValue(boolean value) {
776      super.beanMapPutReturnsOldValue(value);
777      return this;
778   }
779
780   @Override /* BeanContextBuilder */
781   public SerializerGroupBuilder beanMapPutReturnsOldValue() {
782      super.beanMapPutReturnsOldValue();
783      return this;
784   }
785
786   @Override /* BeanContextBuilder */
787   public SerializerGroupBuilder beanMethodVisibility(Visibility value) {
788      super.beanMethodVisibility(value);
789      return this;
790   }
791
792   @Override /* BeanContextBuilder */
793   public SerializerGroupBuilder beansRequireDefaultConstructor(boolean value) {
794      super.beansRequireDefaultConstructor(value);
795      return this;
796   }
797
798   @Override /* BeanContextBuilder */
799   public SerializerGroupBuilder beansRequireDefaultConstructor() {
800      super.beansRequireDefaultConstructor();
801      return this;
802   }
803
804   @Override /* BeanContextBuilder */
805   public SerializerGroupBuilder beansRequireSerializable(boolean value) {
806      super.beansRequireSerializable(value);
807      return this;
808   }
809
810   @Override /* BeanContextBuilder */
811   public SerializerGroupBuilder beansRequireSerializable() {
812      super.beansRequireSerializable();
813      return this;
814   }
815
816   @Override /* BeanContextBuilder */
817   public SerializerGroupBuilder beansRequireSettersForGetters(boolean value) {
818      super.beansRequireSettersForGetters(value);
819      return this;
820   }
821
822   @Override /* BeanContextBuilder */
823   public SerializerGroupBuilder beansRequireSettersForGetters() {
824      super.beansRequireSettersForGetters();
825      return this;
826   }
827
828   @Override /* BeanContextBuilder */
829   public SerializerGroupBuilder beansRequireSomeProperties(boolean value) {
830      super.beansRequireSomeProperties(value);
831      return this;
832   }
833
834   @Override /* BeanContextBuilder */
835   public SerializerGroupBuilder beanTypePropertyName(String value) {
836      super.beanTypePropertyName(value);
837      return this;
838   }
839
840   @Override /* BeanContextBuilder */
841   public SerializerGroupBuilder bpi(Class<?> beanClass, String value) {
842      super.bpi(beanClass, value);
843      return this;
844   }
845
846   @Override /* BeanContextBuilder */
847   public SerializerGroupBuilder bpi(Map<String,String> values) {
848      super.bpi(values);
849      return this;
850   }
851
852   @Override /* BeanContextBuilder */
853   public SerializerGroupBuilder bpi(String beanClassName, String value) {
854      super.bpi(beanClassName, value);
855      return this;
856   }
857
858   @Override /* BeanContextBuilder */
859   public SerializerGroupBuilder bpx(Class<?> beanClass, String properties) {
860      super.bpx(beanClass, properties);
861      return this;
862   }
863
864   @Override /* BeanContextBuilder */
865   public SerializerGroupBuilder bpx(Map<String,String> values) {
866      super.bpx(values);
867      return this;
868   }
869
870   @Override /* BeanContextBuilder */
871   public SerializerGroupBuilder bpx(String beanClassName, String value) {
872      super.bpx(beanClassName, value);
873      return this;
874   }
875
876   @Override /* BeanContextBuilder */
877   public SerializerGroupBuilder bpro(Class<?> beanClass, String value) {
878      super.bpro(beanClass, value);
879      return this;
880   }
881
882   @Override /* BeanContextBuilder */
883   public SerializerGroupBuilder bpro(Map<String,String> values) {
884      super.bpro(values);
885      return this;
886   }
887
888   @Override /* BeanContextBuilder */
889   public SerializerGroupBuilder bpro(String beanClassName, String value) {
890      super.bpro(beanClassName, value);
891      return this;
892   }
893
894   @Override /* BeanContextBuilder */
895   public SerializerGroupBuilder bpwo(Class<?> beanClass, String properties) {
896      super.bpwo(beanClass, properties);
897      return this;
898   }
899
900   @Override /* BeanContextBuilder */
901   public SerializerGroupBuilder bpwo(Map<String,String> values) {
902      super.bpwo(values);
903      return this;
904   }
905
906   @Override /* BeanContextBuilder */
907   public SerializerGroupBuilder bpwo(String beanClassName, String value) {
908      super.bpwo(beanClassName, value);
909      return this;
910   }
911
912   @Override /* BeanContextBuilder */
913   public SerializerGroupBuilder debug() {
914      super.debug();
915      return this;
916   }
917
918   @Override /* BeanContextBuilder */
919   public SerializerGroupBuilder dictionary(Class<?>...values) {
920      super.dictionary(values);
921      return this;
922   }
923
924   @Override /* BeanContextBuilder */
925   public SerializerGroupBuilder dictionary(Object...values) {
926      super.dictionary(values);
927      return this;
928   }
929
930   @Override /* BeanContextBuilder */
931   public SerializerGroupBuilder dictionaryReplace(Class<?>...values) {
932      super.dictionaryReplace(values);
933      return this;
934   }
935
936   @Override /* BeanContextBuilder */
937   public SerializerGroupBuilder dictionaryReplace(Object...values) {
938      super.dictionaryReplace(values);
939      return this;
940   }
941
942   @Override /* BeanContextBuilder */
943   public SerializerGroupBuilder dictionaryRemove(Class<?>...values) {
944      super.dictionaryRemove(values);
945      return this;
946   }
947
948   @Override /* BeanContextBuilder */
949   public SerializerGroupBuilder dictionaryRemove(Object...values) {
950      super.dictionaryRemove(values);
951      return this;
952   }
953
954   @Override /* BeanContextBuilder */
955   public <T> SerializerGroupBuilder example(Class<T> c, T o) {
956      super.example(c, o);
957      return this;
958   }
959
960   @Override /* BeanContextBuilder */
961   public <T> SerializerGroupBuilder exampleJson(Class<T> c, String value) {
962      super.exampleJson(c, value);
963      return this;
964   }
965
966   @Override /* BeanContextBuilder */
967   public SerializerGroupBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
968      super.ignoreInvocationExceptionsOnGetters(value);
969      return this;
970   }
971
972   @Override /* BeanContextBuilder */
973   public SerializerGroupBuilder ignoreInvocationExceptionsOnGetters() {
974      super.ignoreInvocationExceptionsOnGetters();
975      return this;
976   }
977
978   @Override /* BeanContextBuilder */
979   public SerializerGroupBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
980      super.ignoreInvocationExceptionsOnSetters(value);
981      return this;
982   }
983
984   @Override /* BeanContextBuilder */
985   public SerializerGroupBuilder ignoreInvocationExceptionsOnSetters() {
986      super.ignoreInvocationExceptionsOnSetters();
987      return this;
988   }
989
990   @Override /* BeanContextBuilder */
991   public SerializerGroupBuilder ignorePropertiesWithoutSetters(boolean value) {
992      super.ignorePropertiesWithoutSetters(value);
993      return this;
994   }
995
996   @Override /* BeanContextBuilder */
997   public SerializerGroupBuilder ignoreUnknownBeanProperties(boolean value) {
998      super.ignoreUnknownBeanProperties(value);
999      return this;
1000   }
1001
1002   @Override /* BeanContextBuilder */
1003   public SerializerGroupBuilder ignoreUnknownBeanProperties() {
1004      super.ignoreUnknownBeanProperties();
1005      return this;
1006   }
1007
1008   @Override /* BeanContextBuilder */
1009   public SerializerGroupBuilder ignoreUnknownNullBeanProperties(boolean value) {
1010      super.ignoreUnknownNullBeanProperties(value);
1011      return this;
1012   }
1013
1014   @Override /* BeanContextBuilder */
1015   public SerializerGroupBuilder implClass(Class<?> interfaceClass, Class<?> implClass) {
1016      super.implClass(interfaceClass, implClass);
1017      return this;
1018   }
1019
1020   @Override /* BeanContextBuilder */
1021   public SerializerGroupBuilder implClasses(Map<String,Class<?>> values) {
1022      super.implClasses(values);
1023      return this;
1024   }
1025
1026   @Override /* BeanContextBuilder */
1027   public SerializerGroupBuilder locale(Locale value) {
1028      super.locale(value);
1029      return this;
1030   }
1031
1032   @Override /* BeanContextBuilder */
1033   public SerializerGroupBuilder mediaType(MediaType value) {
1034      super.mediaType(value);
1035      return this;
1036   }
1037
1038   @Override /* BeanContextBuilder */
1039   public SerializerGroupBuilder notBeanClasses(Class<?>...values) {
1040      super.notBeanClasses(values);
1041      return this;
1042   }
1043
1044   @Override /* BeanContextBuilder */
1045   public SerializerGroupBuilder notBeanClasses(Object...values) {
1046      super.notBeanClasses(values);
1047      return this;
1048   }
1049
1050   @Override /* BeanContextBuilder */
1051   public SerializerGroupBuilder notBeanClassesReplace(Class<?>...values) {
1052      super.notBeanClassesReplace(values);
1053      return this;
1054   }
1055
1056   @Override /* BeanContextBuilder */
1057   public SerializerGroupBuilder notBeanClassesReplace(Object...values) {
1058      super.notBeanClassesReplace(values);
1059      return this;
1060   }
1061
1062   @Override /* BeanContextBuilder */
1063   public SerializerGroupBuilder notBeanClassesRemove(Class<?>...values) {
1064      super.notBeanClassesRemove(values);
1065      return this;
1066   }
1067
1068   @Override /* BeanContextBuilder */
1069   public SerializerGroupBuilder notBeanClassesRemove(Object...values) {
1070      super.notBeanClassesRemove(values);
1071      return this;
1072   }
1073
1074   @Override /* BeanContextBuilder */
1075   public SerializerGroupBuilder notBeanPackages(Object...values) {
1076      super.notBeanPackages(values);
1077      return this;
1078   }
1079
1080   @Override /* BeanContextBuilder */
1081   public SerializerGroupBuilder notBeanPackages(String...values) {
1082      super.notBeanPackages(values);
1083      return this;
1084   }
1085
1086   @Override /* BeanContextBuilder */
1087   public SerializerGroupBuilder notBeanPackagesReplace(String...values) {
1088      super.notBeanPackagesReplace(values);
1089      return this;
1090   }
1091
1092   @Override /* BeanContextBuilder */
1093   public SerializerGroupBuilder notBeanPackagesReplace(Object...values) {
1094      super.notBeanPackagesReplace(values);
1095      return this;
1096   }
1097
1098   @Override /* BeanContextBuilder */
1099   public SerializerGroupBuilder notBeanPackagesRemove(String...values) {
1100      super.notBeanPackagesRemove(values);
1101      return this;
1102   }
1103
1104   @Override /* BeanContextBuilder */
1105   public SerializerGroupBuilder notBeanPackagesRemove(Object...values) {
1106      super.notBeanPackagesRemove(values);
1107      return this;
1108   }
1109
1110   @Override /* BeanContextBuilder */
1111   public SerializerGroupBuilder pojoSwaps(Class<?>...values) {
1112      super.pojoSwaps(values);
1113      return this;
1114   }
1115
1116   @Override /* BeanContextBuilder */
1117   public SerializerGroupBuilder pojoSwaps(Object...values) {
1118      super.pojoSwaps(values);
1119      return this;
1120   }
1121
1122   @Override /* BeanContextBuilder */
1123   public SerializerGroupBuilder pojoSwapsReplace(Class<?>...values) {
1124      super.pojoSwapsReplace(values);
1125      return this;
1126   }
1127
1128   @Override /* BeanContextBuilder */
1129   public SerializerGroupBuilder pojoSwapsReplace(Object...values) {
1130      super.pojoSwapsReplace(values);
1131      return this;
1132   }
1133
1134   @Override /* BeanContextBuilder */
1135   public SerializerGroupBuilder pojoSwapsRemove(Class<?>...values) {
1136      super.pojoSwapsRemove(values);
1137      return this;
1138   }
1139
1140   @Override /* BeanContextBuilder */
1141   public SerializerGroupBuilder pojoSwapsRemove(Object...values) {
1142      super.pojoSwapsRemove(values);
1143      return this;
1144   }
1145
1146   @Override /* BeanContextBuilder */
1147   public SerializerGroupBuilder sortProperties(boolean value) {
1148      super.sortProperties(value);
1149      return this;
1150   }
1151
1152   @Override /* BeanContextBuilder */
1153   public SerializerGroupBuilder sortProperties() {
1154      super.sortProperties();
1155      return this;
1156   }
1157
1158   @Override /* BeanContextBuilder */
1159   public SerializerGroupBuilder timeZone(TimeZone value) {
1160      super.timeZone(value);
1161      return this;
1162   }
1163
1164   @Override /* BeanContextBuilder */
1165   public SerializerGroupBuilder useEnumNames(boolean value) {
1166      super.useEnumNames(value);
1167      return this;
1168   }
1169
1170   @Override /* BeanContextBuilder */
1171   public SerializerGroupBuilder useEnumNames() {
1172      super.useEnumNames();
1173      return this;
1174   }
1175
1176   @Override /* BeanContextBuilder */
1177   public SerializerGroupBuilder useInterfaceProxies(boolean value) {
1178      super.useInterfaceProxies(value);
1179      return this;
1180   }
1181
1182   @Override /* BeanContextBuilder */
1183   public SerializerGroupBuilder useJavaBeanIntrospector(boolean value) {
1184      super.useJavaBeanIntrospector(value);
1185      return this;
1186   }
1187
1188   @Override /* BeanContextBuilder */
1189   public SerializerGroupBuilder useJavaBeanIntrospector() {
1190      super.useJavaBeanIntrospector();
1191      return this;
1192   }
1193
1194   @Override /* ContextBuilder */
1195   public SerializerGroupBuilder set(String name, Object value) {
1196      super.set(name, value);
1197      return this;
1198   }
1199
1200   @Override /* ContextBuilder */
1201   public SerializerGroupBuilder set(Map<String,Object> properties) {
1202      super.set(properties);
1203      return this;
1204   }
1205
1206   @Override /* ContextBuilder */
1207   public SerializerGroupBuilder add(Map<String,Object> properties) {
1208      super.add(properties);
1209      return this;
1210   }
1211
1212   @Override /* ContextBuilder */
1213   public SerializerGroupBuilder addTo(String name, Object value) {
1214      super.addTo(name, value);
1215      return this;
1216   }
1217
1218   @Override /* ContextBuilder */
1219   public SerializerGroupBuilder addTo(String name, String key, Object value) {
1220      super.addTo(name, key, value);
1221      return this;
1222   }
1223
1224   @Override /* ContextBuilder */
1225   public SerializerGroupBuilder removeFrom(String name, Object value) {
1226      super.removeFrom(name, value);
1227      return this;
1228   }
1229
1230   @Override /* ContextBuilder */
1231   public SerializerGroupBuilder apply(PropertyStore copyFrom) {
1232      super.apply(copyFrom);
1233      return this;
1234   }
1235
1236   @Override /* ContextBuilder */
1237   public SerializerGroupBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
1238      super.applyAnnotations(al, vrs);
1239      return this;
1240   }
1241
1242   @Override /* ContextBuilder */
1243   public SerializerGroupBuilder applyAnnotations(Class<?> fromClass) {
1244      super.applyAnnotations(fromClass);
1245      return this;
1246   }
1247
1248   @Override /* ContextBuilder */
1249   public SerializerGroupBuilder applyAnnotations(Method fromMethod) {
1250      super.applyAnnotations(fromMethod);
1251      return this;
1252   }
1253}