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