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.xml;
014
015import static org.apache.juneau.xml.XmlSerializer.*;
016
017import java.util.*;
018
019import org.apache.juneau.*;
020import org.apache.juneau.http.*;
021import org.apache.juneau.serializer.*;
022import org.apache.juneau.xmlschema.*;
023
024/**
025 * Builder class for building instances of XML serializers.
026 */
027public class XmlSerializerBuilder extends WriterSerializerBuilder {
028
029   /**
030    * Constructor, default settings.
031    */
032   public XmlSerializerBuilder() {
033      super();
034   }
035
036   /**
037    * Constructor.
038    *
039    * @param ps The initial configuration settings for this builder.
040    */
041   public XmlSerializerBuilder(PropertyStore ps) {
042      super(ps);
043   }
044
045   @Override /* ContextBuilder */
046   public XmlSerializer build() {
047      return build(XmlSerializer.class);
048   }
049
050
051   //-----------------------------------------------------------------------------------------------------------------
052   // Properties
053   //-----------------------------------------------------------------------------------------------------------------
054
055   /**
056    * Configuration property:  Add namespace URLs to the root element.
057    *
058    * <p>
059    * Use this setting to add {@code xmlns:x} attributes to the root element for the default and all mapped namespaces.
060    *
061    * <h5 class='section'>See Also:</h5>
062    * <ul>
063    *    <li class='jf'>{@link XmlSerializer#XML_addNamespaceUrisToRoot}
064    * </ul>
065    *
066    * @param value
067    *    The new value for this property.
068    *    <br>The default is <jk>false</jk>.
069    * @return This object (for method chaining).
070    */
071   public XmlSerializerBuilder addNamespaceUrisToRoot(boolean value) {
072      return set(XML_addNamespaceUrisToRoot, value);
073   }
074
075   /**
076    * Configuration property:  Add namespace URLs to the root element.
077    *
078    * <p>
079    * Shortcut for calling <code>addNamespaceUrisToRoot(<jk>true</jk>)</code>.
080    *
081    * <h5 class='section'>See Also:</h5>
082    * <ul>
083    *    <li class='jf'>{@link XmlSerializer#XML_addNamespaceUrisToRoot}
084    * </ul>
085    *
086    * @return This object (for method chaining).
087    */
088   public XmlSerializerBuilder addNamespaceUrisToRoot() {
089      return set(XML_addNamespaceUrisToRoot, true);
090   }
091
092   /**
093    * Configuration property:  Auto-detect namespace usage.
094    *
095    * <p>
096    * Detect namespace usage before serialization.
097    *
098    * <h5 class='section'>See Also:</h5>
099    * <ul>
100    *    <li class='jf'>{@link XmlSerializer#XML_autoDetectNamespaces}
101    * </ul>
102    *
103    * @param value
104    *    The new value for this property.
105    *    <br>The default is <jk>true</jk>.
106    * @return This object (for method chaining).
107    */
108   public XmlSerializerBuilder autoDetectNamespaces(boolean value) {
109      return set(XML_autoDetectNamespaces, value);
110   }
111
112   /**
113    * Configuration property:  Default namespace.
114    *
115    * <p>
116    * Specifies the default namespace URI for this document.
117    *
118    * <h5 class='section'>See Also:</h5>
119    * <ul>
120    *    <li class='jf'>{@link XmlSerializer#XML_defaultNamespace}
121    * </ul>
122    *
123    * @param value
124    *    The new value for this property.
125    *    <br>The default is <js>"juneau: http://www.apache.org/2013/Juneau"</js>.
126    * @return This object (for method chaining).
127    */
128   public XmlSerializerBuilder defaultNamespace(String value) {
129      return set(XML_defaultNamespace, value);
130   }
131
132   /**
133    * Configuration property:  Enable support for XML namespaces.
134    *
135    * <p>
136    * If not enabled, XML output will not contain any namespaces regardless of any other settings.
137    *
138    * <h5 class='section'>See Also:</h5>
139    * <ul>
140    *    <li class='jf'>{@link XmlSerializer#XML_enableNamespaces}
141    * </ul>
142    *
143    * @param value
144    *    The new value for this property.
145    *    <br>The default is <jk>false</jk>.
146    * @return This object (for method chaining).
147    */
148   public XmlSerializerBuilder enableNamespaces(boolean value) {
149      return set(XML_enableNamespaces, value);
150   }
151
152   /**
153    * Configuration property:  Enable support for XML namespaces.
154    *
155    * <p>
156    * Shortcut for calling <code>enableNamespaces(<jk>true</jk>)</code>.
157    *
158    * <h5 class='section'>See Also:</h5>
159    * <ul>
160    *    <li class='jf'>{@link XmlSerializer#XML_enableNamespaces}
161    * </ul>
162    *
163    * @return This object (for method chaining).
164    */
165   public XmlSerializerBuilder enableNamespaces() {
166      return set(XML_enableNamespaces, true);
167   }
168
169   /**
170    * Configuration property:  Enable support for XML namespaces.
171    *
172    * <p>
173    * Shortcut for calling <code>enableNamespaces(<jk>true</jk>)</code>.
174    *
175    * <h5 class='section'>See Also:</h5>
176    * <ul>
177    *    <li class='jf'>{@link XmlSerializer#XML_enableNamespaces}
178    * </ul>
179    *
180    * @return This object (for method chaining).
181    */
182   public XmlSerializerBuilder ns() {
183      return set(XML_enableNamespaces, true);
184   }
185
186   /**
187    * Configuration property:  Default namespaces.
188    *
189    * <p>
190    * The default list of namespaces associated with this serializer.
191    *
192    * <h5 class='section'>See Also:</h5>
193    * <ul>
194    *    <li class='jf'>{@link XmlSerializer#XML_namespaces}
195    * </ul>
196    *
197    * @param values The new value for this property.
198    * @return This object (for method chaining).
199    */
200   public XmlSerializerBuilder namespaces(Namespace...values) {
201      return set(XML_namespaces, values);
202   }
203
204   /**
205    * Configuration property:  XMLSchema namespace.
206    *
207    * <p>
208    * Specifies the namespace for the <code>XMLSchema</code> namespace, used by the schema generated by the
209    * {@link XmlSchemaSerializer} class.
210    *
211    * <h5 class='section'>See Also:</h5>
212    * <ul>
213    *    <li class='jf'>{@link XmlSerializer#XML_xsNamespace}
214    * </ul>
215    *
216    * @param value
217    *    The new value for this property.
218    *    <br>The default is <js>"xs: http://www.w3.org/2001/XMLSchema"</js>.
219    * @return This object (for method chaining).
220    */
221   public XmlSerializerBuilder xsNamespace(Namespace value) {
222      return set(XML_xsNamespace, value);
223   }
224
225   @Override /* WriterSerializerBuilder */
226   public XmlSerializerBuilder maxIndent(int value) {
227      super.maxIndent(value);
228      return this;
229   }
230
231   @Override /* WriterSerializerBuilder */
232   public XmlSerializerBuilder quoteChar(char value) {
233      super.quoteChar(value);
234      return this;
235   }
236
237   @Override /* WriterSerializerBuilder */
238   public XmlSerializerBuilder sq() {
239      super.sq();
240      return this;
241   }
242
243   @Override /* WriterSerializerBuilder */
244   public XmlSerializerBuilder useWhitespace(boolean value) {
245      super.useWhitespace(value);
246      return this;
247   }
248
249   @Override /* WriterSerializerBuilder */
250   public XmlSerializerBuilder useWhitespace() {
251      super.useWhitespace();
252      return this;
253   }
254
255   @Override /* WriterSerializerBuilder */
256   public XmlSerializerBuilder ws() {
257      super.ws();
258      return this;
259   }
260
261   @Override /* SerializerBuilder */
262   public XmlSerializerBuilder addBeanTypes(boolean value) {
263      super.addBeanTypes(value);
264      return this;
265   }
266
267   @Override /* SerializerBuilder */
268   public XmlSerializerBuilder addBeanTypes() {
269      super.addBeanTypes();
270      return this;
271   }
272
273   @Override /* SerializerBuilder */
274   public XmlSerializerBuilder addRootType(boolean value) {
275      super.addRootType(value);
276      return this;
277   }
278
279   @Override /* SerializerBuilder */
280   public XmlSerializerBuilder addRootType() {
281      super.addRootType();
282      return this;
283   }
284
285   @Override /* SerializerBuilder */
286   public XmlSerializerBuilder detectRecursions(boolean value) {
287      super.detectRecursions(value);
288      return this;
289   }
290
291   @Override /* SerializerBuilder */
292   public XmlSerializerBuilder detectRecursions() {
293      super.detectRecursions();
294      return this;
295   }
296
297   @Override /* SerializerBuilder */
298   public XmlSerializerBuilder ignoreRecursions(boolean value) {
299      super.ignoreRecursions(value);
300      return this;
301   }
302
303   @Override /* SerializerBuilder */
304   public XmlSerializerBuilder ignoreRecursions() {
305      super.ignoreRecursions();
306      return this;
307   }
308   @Override /* SerializerBuilder */
309   public XmlSerializerBuilder initialDepth(int value) {
310      super.initialDepth(value);
311      return this;
312   }
313
314   @Override /* SerializerBuilder */
315   public XmlSerializerBuilder listener(Class<? extends SerializerListener> value) {
316      super.listener(value);
317      return this;
318   }
319
320   @Override /* SerializerBuilder */
321   public XmlSerializerBuilder maxDepth(int value) {
322      super.maxDepth(value);
323      return this;
324   }
325
326   @Override /* SerializerBuilder */
327   public XmlSerializerBuilder sortCollections(boolean value) {
328      super.sortCollections(value);
329      return this;
330   }
331
332   @Override /* SerializerBuilder */
333   public XmlSerializerBuilder sortCollections() {
334      super.sortCollections();
335      return this;
336   }
337
338   @Override /* SerializerBuilder */
339   public XmlSerializerBuilder sortMaps(boolean value) {
340      super.sortMaps(value);
341      return this;
342   }
343
344   @Override /* SerializerBuilder */
345   public XmlSerializerBuilder sortMaps() {
346      super.sortMaps();
347      return this;
348   }
349
350   @Override /* SerializerBuilder */
351   public XmlSerializerBuilder trimEmptyCollections(boolean value) {
352      super.trimEmptyCollections(value);
353      return this;
354   }
355
356   @Override /* SerializerBuilder */
357   public XmlSerializerBuilder trimEmptyCollections() {
358      super.trimEmptyCollections();
359      return this;
360   }
361
362   @Override /* SerializerBuilder */
363   public XmlSerializerBuilder trimEmptyMaps(boolean value) {
364      super.trimEmptyMaps(value);
365      return this;
366   }
367
368   @Override /* SerializerBuilder */
369   public XmlSerializerBuilder trimEmptyMaps() {
370      super.trimEmptyMaps();
371      return this;
372   }
373
374   @Override /* SerializerBuilder */
375   public XmlSerializerBuilder trimNullProperties(boolean value) {
376      super.trimNullProperties(value);
377      return this;
378   }
379
380   @Override /* SerializerBuilder */
381   public XmlSerializerBuilder trimStrings(boolean value) {
382      super.trimStrings(value);
383      return this;
384   }
385
386   @Override /* SerializerBuilder */
387   public XmlSerializerBuilder trimStrings() {
388      super.trimStrings();
389      return this;
390   }
391
392   @Override /* SerializerBuilder */
393   public XmlSerializerBuilder uriContext(UriContext value) {
394      super.uriContext(value);
395      return this;
396   }
397
398   @Override /* SerializerBuilder */
399   public XmlSerializerBuilder uriRelativity(UriRelativity value) {
400      super.uriRelativity(value);
401      return this;
402   }
403
404   @Override /* SerializerBuilder */
405   public XmlSerializerBuilder uriResolution(UriResolution value) {
406      super.uriResolution(value);
407      return this;
408   }
409
410   @Override /* BeanContextBuilder */
411   public XmlSerializerBuilder beanClassVisibility(Visibility value) {
412      super.beanClassVisibility(value);
413      return this;
414   }
415
416   @Override /* BeanContextBuilder */
417   public XmlSerializerBuilder beanConstructorVisibility(Visibility value) {
418      super.beanConstructorVisibility(value);
419      return this;
420   }
421
422   @Override /* BeanContextBuilder */
423   public XmlSerializerBuilder beanDictionary(boolean append, Object...values) {
424      super.beanDictionary(append, values);
425      return this;
426   }
427
428   @Override /* BeanContextBuilder */
429   public XmlSerializerBuilder beanDictionary(Class<?>...values) {
430      super.beanDictionary(values);
431      return this;
432   }
433
434   @Override /* BeanContextBuilder */
435   public XmlSerializerBuilder beanDictionary(Object...values) {
436      super.beanDictionary(values);
437      return this;
438   }
439
440   @Override /* BeanContextBuilder */
441   public XmlSerializerBuilder beanDictionaryRemove(Object...values) {
442      super.beanDictionaryRemove(values);
443      return this;
444   }
445
446   @Override /* BeanContextBuilder */
447   public XmlSerializerBuilder beanFieldVisibility(Visibility value) {
448      super.beanFieldVisibility(value);
449      return this;
450   }
451
452   @Override /* BeanContextBuilder */
453   public XmlSerializerBuilder beanFilters(boolean append, Object...values) {
454      super.beanFilters(append, values);
455      return this;
456   }
457
458   @Override /* BeanContextBuilder */
459   public XmlSerializerBuilder beanFilters(Class<?>...values) {
460      super.beanFilters(values);
461      return this;
462   }
463
464   @Override /* BeanContextBuilder */
465   public XmlSerializerBuilder beanFilters(Object...values) {
466      super.beanFilters(values);
467      return this;
468   }
469
470   @Override /* BeanContextBuilder */
471   public XmlSerializerBuilder beanFiltersRemove(Object...values) {
472      super.beanFiltersRemove(values);
473      return this;
474   }
475
476   @Override /* BeanContextBuilder */
477   public XmlSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
478      super.beanMapPutReturnsOldValue(value);
479      return this;
480   }
481
482   @Override /* BeanContextBuilder */
483   public XmlSerializerBuilder beanMapPutReturnsOldValue() {
484      super.beanMapPutReturnsOldValue();
485      return this;
486   }
487
488   @Override /* BeanContextBuilder */
489   public XmlSerializerBuilder beanMethodVisibility(Visibility value) {
490      super.beanMethodVisibility(value);
491      return this;
492   }
493
494   @Override /* BeanContextBuilder */
495   public XmlSerializerBuilder beansRequireDefaultConstructor(boolean value) {
496      super.beansRequireDefaultConstructor(value);
497      return this;
498   }
499
500   @Override /* BeanContextBuilder */
501   public XmlSerializerBuilder beansRequireDefaultConstructor() {
502      super.beansRequireDefaultConstructor();
503      return this;
504   }
505
506   @Override /* BeanContextBuilder */
507   public XmlSerializerBuilder beansRequireSerializable(boolean value) {
508      super.beansRequireSerializable(value);
509      return this;
510   }
511
512   @Override /* BeanContextBuilder */
513   public XmlSerializerBuilder beansRequireSerializable() {
514      super.beansRequireSerializable();
515      return this;
516   }
517
518   @Override /* BeanContextBuilder */
519   public XmlSerializerBuilder beansRequireSettersForGetters(boolean value) {
520      super.beansRequireSettersForGetters(value);
521      return this;
522   }
523
524   @Override /* BeanContextBuilder */
525   public XmlSerializerBuilder beansRequireSettersForGetters() {
526      super.beansRequireSettersForGetters();
527      return this;
528   }
529
530   @Override /* BeanContextBuilder */
531   public XmlSerializerBuilder beansRequireSomeProperties(boolean value) {
532      super.beansRequireSomeProperties(value);
533      return this;
534   }
535
536   @Override /* BeanContextBuilder */
537   public XmlSerializerBuilder beanTypePropertyName(String value) {
538      super.beanTypePropertyName(value);
539      return this;
540   }
541
542   @Override /* BeanContextBuilder */
543   public XmlSerializerBuilder debug() {
544      super.debug();
545      return this;
546   }
547
548   @Override /* BeanContextBuilder */
549   public <T> XmlSerializerBuilder example(Class<T> c, T o) {
550      super.example(c, o);
551      return this;
552   }
553
554   @Override /* BeanContextBuilder */
555   public XmlSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
556      super.ignoreInvocationExceptionsOnGetters(value);
557      return this;
558   }
559
560   @Override /* BeanContextBuilder */
561   public XmlSerializerBuilder ignoreInvocationExceptionsOnGetters() {
562      super.ignoreInvocationExceptionsOnGetters();
563      return this;
564   }
565
566   @Override /* BeanContextBuilder */
567   public XmlSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
568      super.ignoreInvocationExceptionsOnSetters(value);
569      return this;
570   }
571
572   @Override /* BeanContextBuilder */
573   public XmlSerializerBuilder ignoreInvocationExceptionsOnSetters() {
574      super.ignoreInvocationExceptionsOnSetters();
575      return this;
576   }
577
578   @Override /* BeanContextBuilder */
579   public XmlSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
580      super.ignorePropertiesWithoutSetters(value);
581      return this;
582   }
583
584   @Override /* BeanContextBuilder */
585   public XmlSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
586      super.ignoreUnknownBeanProperties(value);
587      return this;
588   }
589
590   @Override /* BeanContextBuilder */
591   public XmlSerializerBuilder ignoreUnknownBeanProperties() {
592      super.ignoreUnknownBeanProperties();
593      return this;
594   }
595
596   @Override /* BeanContextBuilder */
597   public XmlSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
598      super.ignoreUnknownNullBeanProperties(value);
599      return this;
600   }
601
602   @Override /* BeanContextBuilder */
603   public <T> XmlSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
604      super.implClass(interfaceClass, implClass);
605      return this;
606   }
607
608   @Override /* BeanContextBuilder */
609   public XmlSerializerBuilder implClasses(Map<String,Class<?>> values) {
610      super.implClasses(values);
611      return this;
612   }
613
614   @Override /* BeanContextBuilder */
615   public XmlSerializerBuilder locale(Locale value) {
616      super.locale(value);
617      return this;
618   }
619
620   @Override /* BeanContextBuilder */
621   public XmlSerializerBuilder mediaType(MediaType value) {
622      super.mediaType(value);
623      return this;
624   }
625
626   @Override /* BeanContextBuilder */
627   public XmlSerializerBuilder notBeanClasses(boolean append, Object...values) {
628      super.notBeanClasses(append, values);
629      return this;
630   }
631
632   @Override /* BeanContextBuilder */
633   public XmlSerializerBuilder notBeanClasses(Class<?>...values) {
634      super.notBeanClasses(values);
635      return this;
636   }
637
638   @Override /* BeanContextBuilder */
639   public XmlSerializerBuilder notBeanClasses(Object...values) {
640      super.notBeanClasses(values);
641      return this;
642   }
643
644   @Override /* BeanContextBuilder */
645   public XmlSerializerBuilder notBeanClassesRemove(Object...values) {
646      super.notBeanClassesRemove(values);
647      return this;
648   }
649
650   @Override /* BeanContextBuilder */
651   public XmlSerializerBuilder notBeanPackages(boolean append, Object...values) {
652      super.notBeanPackages(append, values);
653      return this;
654   }
655
656   @Override /* BeanContextBuilder */
657   public XmlSerializerBuilder notBeanPackages(Object...values) {
658      super.notBeanPackages(values);
659      return this;
660   }
661
662   @Override /* BeanContextBuilder */
663   public XmlSerializerBuilder notBeanPackages(String...values) {
664      super.notBeanPackages(values);
665      return this;
666   }
667
668   @Override /* BeanContextBuilder */
669   public XmlSerializerBuilder notBeanPackagesRemove(Object...values) {
670      super.notBeanPackagesRemove(values);
671      return this;
672   }
673
674   @Override /* BeanContextBuilder */
675   public XmlSerializerBuilder pojoSwaps(boolean append, Object...values) {
676      super.pojoSwaps(append, values);
677      return this;
678   }
679
680   @Override /* BeanContextBuilder */
681   public XmlSerializerBuilder pojoSwaps(Class<?>...values) {
682      super.pojoSwaps(values);
683      return this;
684   }
685
686   @Override /* BeanContextBuilder */
687   public XmlSerializerBuilder pojoSwaps(Object...values) {
688      super.pojoSwaps(values);
689      return this;
690   }
691
692   @Override /* BeanContextBuilder */
693   public XmlSerializerBuilder pojoSwapsRemove(Object...values) {
694      super.pojoSwapsRemove(values);
695      return this;
696   }
697
698   @Override /* BeanContextBuilder */
699   public XmlSerializerBuilder sortProperties(boolean value) {
700      super.sortProperties(value);
701      return this;
702   }
703
704   @Override /* BeanContextBuilder */
705   public XmlSerializerBuilder sortProperties() {
706      super.sortProperties();
707      return this;
708   }
709
710   @Override /* BeanContextBuilder */
711   public XmlSerializerBuilder timeZone(TimeZone value) {
712      super.timeZone(value);
713      return this;
714   }
715
716   @Override /* BeanContextBuilder */
717   public XmlSerializerBuilder useEnumNames() {
718      super.useEnumNames();
719      return this;
720   }
721
722   @Override /* BeanContextBuilder */
723   public XmlSerializerBuilder useInterfaceProxies(boolean value) {
724      super.useInterfaceProxies(value);
725      return this;
726   }
727
728   @Override /* BeanContextBuilder */
729   public XmlSerializerBuilder useJavaBeanIntrospector(boolean value) {
730      super.useJavaBeanIntrospector(value);
731      return this;
732   }
733
734   @Override /* BeanContextBuilder */
735   public XmlSerializerBuilder useJavaBeanIntrospector() {
736      super.useJavaBeanIntrospector();
737      return this;
738   }
739
740   @Override /* ContextBuilder */
741   public XmlSerializerBuilder set(String name, Object value) {
742      super.set(name, value);
743      return this;
744   }
745
746   @Override /* ContextBuilder */
747   public XmlSerializerBuilder set(boolean append, String name, Object value) {
748      super.set(append, name, value);
749      return this;
750   }
751
752   @Override /* ContextBuilder */
753   public XmlSerializerBuilder set(Map<String,Object> properties) {
754      super.set(properties);
755      return this;
756   }
757
758   @Override /* ContextBuilder */
759   public XmlSerializerBuilder add(Map<String,Object> properties) {
760      super.add(properties);
761      return this;
762   }
763
764   @Override /* ContextBuilder */
765   public XmlSerializerBuilder addTo(String name, Object value) {
766      super.addTo(name, value);
767      return this;
768   }
769
770   @Override /* ContextBuilder */
771   public XmlSerializerBuilder addTo(String name, String key, Object value) {
772      super.addTo(name, key, value);
773      return this;
774   }
775
776   @Override /* ContextBuilder */
777   public XmlSerializerBuilder removeFrom(String name, Object value) {
778      super.removeFrom(name, value);
779      return this;
780   }
781
782   @Override /* ContextBuilder */
783   public XmlSerializerBuilder apply(PropertyStore copyFrom) {
784      super.apply(copyFrom);
785      return this;
786   }
787}