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