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