001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.juneau.html; 018 019import static org.apache.juneau.collections.JsonMap.*; 020 021import java.lang.annotation.*; 022import java.nio.charset.*; 023import java.util.*; 024 025import org.apache.juneau.*; 026import org.apache.juneau.annotation.*; 027import org.apache.juneau.collections.*; 028import org.apache.juneau.internal.*; 029import org.apache.juneau.json.*; 030import org.apache.juneau.jsonschema.*; 031import org.apache.juneau.utils.*; 032import org.apache.juneau.xml.*; 033 034/** 035 * Serializes POJO metamodels to HTML. 036 * 037 * <h5 class='topic'>Media types</h5> 038 * 039 * Handles <c>Accept</c> types: <bc>text/html+schema</bc> 040 * <p> 041 * Produces <c>Content-Type</c> types: <bc>text/html</bc> 042 * 043 * <h5 class='topic'>Description</h5> 044 * 045 * Essentially the same as {@link HtmlSerializer}, except serializes the POJO metamodel instead of the model itself. 046 * 047 * <p> 048 * Produces output that describes the POJO metamodel similar to an XML schema document. 049 * 050 * <p> 051 * The easiest way to create instances of this class is through the {@link HtmlSerializer#getSchemaSerializer()}, 052 * which will create a schema serializer with the same settings as the originating serializer. 053 * 054 * <h5 class='section'>Notes:</h5><ul> 055 * <li class='note'>This class is thread safe and reusable. 056 * </ul> 057 * 058 * <h5 class='section'>See Also:</h5><ul> 059 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a> 060 061 * </ul> 062 */ 063public class HtmlSchemaSerializer extends HtmlSerializer { 064 065 //------------------------------------------------------------------------------------------------------------------- 066 // Static 067 //------------------------------------------------------------------------------------------------------------------- 068 069 /** Default serializer, all default settings.*/ 070 public static final HtmlSchemaSerializer DEFAULT = new HtmlSchemaSerializer(create()); 071 072 /** Default serializer, all default settings.*/ 073 public static final HtmlSchemaSerializer DEFAULT_READABLE = new Readable(create()); 074 075 /** Default serializer, single quotes, simple mode. */ 076 public static final HtmlSchemaSerializer DEFAULT_SIMPLE = new Simple(create()); 077 078 /** Default serializer, single quotes, simple mode, with whitespace. */ 079 public static final HtmlSchemaSerializer DEFAULT_SIMPLE_READABLE = new SimpleReadable(create()); 080 081 /** 082 * Creates a new builder for this object. 083 * 084 * @return A new builder. 085 */ 086 public static Builder create() { 087 return new Builder(); 088 } 089 090 //------------------------------------------------------------------------------------------------------------------- 091 // Static subclasses 092 //------------------------------------------------------------------------------------------------------------------- 093 094 /** Default serializer, with whitespace. */ 095 public static class Readable extends HtmlSchemaSerializer { 096 097 /** 098 * Constructor. 099 * 100 * @param builder The builder for this object. 101 */ 102 public Readable(Builder builder) { 103 super(builder.useWhitespace()); 104 } 105 } 106 107 /** Default serializer, single quotes, simple mode. */ 108 public static class Simple extends HtmlSchemaSerializer { 109 110 /** 111 * Constructor. 112 * 113 * @param builder The builder for this object. 114 */ 115 public Simple(Builder builder) { 116 super(builder.quoteChar('\'')); 117 } 118 } 119 120 /** Default serializer, single quotes, simple mode, with whitespace. */ 121 public static class SimpleReadable extends HtmlSchemaSerializer { 122 123 /** 124 * Constructor. 125 * 126 * @param builder The builder for this object. 127 */ 128 public SimpleReadable(Builder builder) { 129 super(builder.quoteChar('\'').useWhitespace()); 130 } 131 } 132 133 //------------------------------------------------------------------------------------------------------------------- 134 // Builder 135 //------------------------------------------------------------------------------------------------------------------- 136 137 /** 138 * Builder class. 139 */ 140 public static class Builder extends HtmlSerializer.Builder { 141 142 private static final Cache<HashKey,HtmlSchemaSerializer> CACHE = Cache.of(HashKey.class, HtmlSchemaSerializer.class).build(); 143 144 JsonSchemaGenerator.Builder generatorBuilder; 145 146 /** 147 * Constructor, default settings. 148 */ 149 protected Builder() { 150 produces("text/html"); 151 accept("text/html+schema"); 152 generatorBuilder = JsonSchemaGenerator.create().beanContext(beanContext()); 153 } 154 155 /** 156 * Copy constructor. 157 * 158 * @param copyFrom The bean to copy from. 159 */ 160 protected Builder(HtmlSchemaSerializer copyFrom) { 161 super(copyFrom); 162 generatorBuilder = copyFrom.generator.copy().beanContext(beanContext()); 163 } 164 165 /** 166 * Copy constructor. 167 * 168 * @param copyFrom The builder to copy from. 169 */ 170 protected Builder(Builder copyFrom) { 171 super(copyFrom); 172 generatorBuilder = copyFrom.generatorBuilder.copy().beanContext(beanContext()); 173 } 174 175 @Override /* Context.Builder */ 176 public Builder copy() { 177 return new Builder(this); 178 } 179 180 @Override /* Context.Builder */ 181 public HtmlSchemaSerializer build() { 182 return cache(CACHE).build(HtmlSchemaSerializer.class); 183 } 184 185 @Override /* Context.Builder */ 186 public HashKey hashKey() { 187 return HashKey.of( 188 super.hashKey(), 189 generatorBuilder.hashKey() 190 ); 191 } 192 193 //----------------------------------------------------------------------------------------------------------------- 194 // Properties 195 //----------------------------------------------------------------------------------------------------------------- 196 197 /** 198 * <i><l>HtmlSchemaSerializer</l> configuration property: </i> Add descriptions. 199 * 200 * <p> 201 * Identifies which categories of types that descriptions should be automatically added to generated schemas. 202 * <p> 203 * The description is the result of calling {@link ClassMeta#getFullName()}. 204 * 205 * <h5 class='section'>See Also:</h5><ul> 206 * <li class='jm'>{@link org.apache.juneau.jsonschema.JsonSchemaGenerator.Builder#addDescriptionsTo(TypeCategory...)} 207 * </ul> 208 * 209 * @param values 210 * The values to add to this setting. 211 * <br>The default is an empty string. 212 * @return This object. 213 */ 214 public Builder addDescriptionsTo(TypeCategory...values) { 215 generatorBuilder.addDescriptionsTo(values); 216 return this; 217 } 218 219 /** 220 * <i><l>HtmlSchemaSerializer</l> configuration property: </i> Add examples. 221 * 222 * <p> 223 * Identifies which categories of types that examples should be automatically added to generated schemas. 224 * <p> 225 * The examples come from calling {@link ClassMeta#getExample(BeanSession,JsonParserSession)} which in turn gets examples 226 * from the following: 227 * <ul class='javatree'> 228 * <li class='ja'>{@link Example} 229 * <li class='ja'>{@link Marshalled#example() Marshalled(example)} 230 * </ul> 231 * 232 * <h5 class='section'>See Also:</h5><ul> 233 * <li class='jm'>{@link org.apache.juneau.jsonschema.JsonSchemaGenerator.Builder#addExamplesTo(TypeCategory...)} 234 * </ul> 235 * 236 * @param values 237 * The values to add to this setting. 238 * <br>The default is an empty string. 239 * @return This object. 240 */ 241 public Builder addExamplesTo(TypeCategory...values) { 242 generatorBuilder.addExamplesTo(values); 243 return this; 244 } 245 246 /** 247 * <i><l>HtmlSchemaSerializer</l> configuration property: </i> Allow nested descriptions. 248 * 249 * <p> 250 * Identifies whether nested descriptions are allowed in schema definitions. 251 * 252 * <h5 class='section'>See Also:</h5><ul> 253 * <li class='jm'>{@link org.apache.juneau.jsonschema.JsonSchemaGenerator.Builder#allowNestedDescriptions()} 254 * </ul> 255 * 256 * @return This object. 257 */ 258 public Builder allowNestedDescriptions() { 259 generatorBuilder.allowNestedDescriptions(); 260 return this; 261 } 262 263 /** 264 * <i><l>HtmlSchemaSerializer</l> configuration property: </i> Allow nested examples. 265 * 266 * <p> 267 * Identifies whether nested examples are allowed in schema definitions. 268 * 269 * <h5 class='section'>See Also:</h5><ul> 270 * <li class='jm'>{@link org.apache.juneau.jsonschema.JsonSchemaGenerator.Builder#allowNestedExamples()} 271 * </ul> 272 * 273 * @return This object. 274 */ 275 public Builder allowNestedExamples() { 276 generatorBuilder.allowNestedExamples(); 277 return this; 278 } 279 280 /** 281 * <i><l>HtmlSchemaSerializer</l> configuration property: </i> Schema definition mapper. 282 * 283 * <p> 284 * Interface to use for converting Bean classes to definition IDs and URIs. 285 * <p> 286 * Used primarily for defining common definition sections for beans in Swagger JSON. 287 * <p> 288 * This setting is ignored if {@link org.apache.juneau.jsonschema.JsonSchemaGenerator.Builder#useBeanDefs()} is not enabled. 289 * 290 * <h5 class='section'>See Also:</h5><ul> 291 * <li class='jm'>{@link org.apache.juneau.jsonschema.JsonSchemaGenerator.Builder#beanDefMapper(Class)} 292 * </ul> 293 * 294 * @param value 295 * The new value for this property. 296 * <br>The default is {@link org.apache.juneau.jsonschema.BasicBeanDefMapper}. 297 * @return This object. 298 */ 299 public Builder beanDefMapper(Class<? extends BeanDefMapper> value) { 300 generatorBuilder.beanDefMapper(value); 301 return this; 302 } 303 304 /** 305 * <i><l>HtmlSchemaSerializer</l> configuration property: </i> Use bean definitions. 306 * 307 * <p> 308 * When enabled, schemas on beans will be serialized as the following: 309 * <p class='bjson'> 310 * { 311 * type: <js>'object'</js>, 312 * <js>'$ref'</js>: <js>'#/definitions/TypeId'</js> 313 * } 314 * </p> 315 * 316 * @return This object. 317 */ 318 public Builder useBeanDefs() { 319 generatorBuilder.useBeanDefs(); 320 return this; 321 } 322 @Override /* Overridden from Builder */ 323 public Builder annotations(Annotation...values) { 324 super.annotations(values); 325 return this; 326 } 327 328 @Override /* Overridden from Builder */ 329 public Builder apply(AnnotationWorkList work) { 330 super.apply(work); 331 return this; 332 } 333 334 @Override /* Overridden from Builder */ 335 public Builder applyAnnotations(Object...from) { 336 super.applyAnnotations(from); 337 return this; 338 } 339 340 @Override /* Overridden from Builder */ 341 public Builder applyAnnotations(Class<?>...from) { 342 super.applyAnnotations(from); 343 return this; 344 } 345 346 @Override /* Overridden from Builder */ 347 public Builder cache(Cache<HashKey,? extends org.apache.juneau.Context> value) { 348 super.cache(value); 349 return this; 350 } 351 352 @Override /* Overridden from Builder */ 353 public Builder debug() { 354 super.debug(); 355 return this; 356 } 357 358 @Override /* Overridden from Builder */ 359 public Builder debug(boolean value) { 360 super.debug(value); 361 return this; 362 } 363 364 @Override /* Overridden from Builder */ 365 public Builder impl(Context value) { 366 super.impl(value); 367 return this; 368 } 369 370 @Override /* Overridden from Builder */ 371 public Builder type(Class<? extends org.apache.juneau.Context> value) { 372 super.type(value); 373 return this; 374 } 375 376 @Override /* Overridden from Builder */ 377 public Builder beanClassVisibility(Visibility value) { 378 super.beanClassVisibility(value); 379 return this; 380 } 381 382 @Override /* Overridden from Builder */ 383 public Builder beanConstructorVisibility(Visibility value) { 384 super.beanConstructorVisibility(value); 385 return this; 386 } 387 388 @Override /* Overridden from Builder */ 389 public Builder beanContext(BeanContext value) { 390 super.beanContext(value); 391 return this; 392 } 393 394 @Override /* Overridden from Builder */ 395 public Builder beanContext(BeanContext.Builder value) { 396 super.beanContext(value); 397 return this; 398 } 399 400 @Override /* Overridden from Builder */ 401 public Builder beanDictionary(java.lang.Class<?>...values) { 402 super.beanDictionary(values); 403 return this; 404 } 405 406 @Override /* Overridden from Builder */ 407 public Builder beanFieldVisibility(Visibility value) { 408 super.beanFieldVisibility(value); 409 return this; 410 } 411 412 @Override /* Overridden from Builder */ 413 public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) { 414 super.beanInterceptor(on, value); 415 return this; 416 } 417 418 @Override /* Overridden from Builder */ 419 public Builder beanMapPutReturnsOldValue() { 420 super.beanMapPutReturnsOldValue(); 421 return this; 422 } 423 424 @Override /* Overridden from Builder */ 425 public Builder beanMethodVisibility(Visibility value) { 426 super.beanMethodVisibility(value); 427 return this; 428 } 429 430 @Override /* Overridden from Builder */ 431 public Builder beanProperties(Map<String,Object> values) { 432 super.beanProperties(values); 433 return this; 434 } 435 436 @Override /* Overridden from Builder */ 437 public Builder beanProperties(Class<?> beanClass, String properties) { 438 super.beanProperties(beanClass, properties); 439 return this; 440 } 441 442 @Override /* Overridden from Builder */ 443 public Builder beanProperties(String beanClassName, String properties) { 444 super.beanProperties(beanClassName, properties); 445 return this; 446 } 447 448 @Override /* Overridden from Builder */ 449 public Builder beanPropertiesExcludes(Map<String,Object> values) { 450 super.beanPropertiesExcludes(values); 451 return this; 452 } 453 454 @Override /* Overridden from Builder */ 455 public Builder beanPropertiesExcludes(Class<?> beanClass, String properties) { 456 super.beanPropertiesExcludes(beanClass, properties); 457 return this; 458 } 459 460 @Override /* Overridden from Builder */ 461 public Builder beanPropertiesExcludes(String beanClassName, String properties) { 462 super.beanPropertiesExcludes(beanClassName, properties); 463 return this; 464 } 465 466 @Override /* Overridden from Builder */ 467 public Builder beanPropertiesReadOnly(Map<String,Object> values) { 468 super.beanPropertiesReadOnly(values); 469 return this; 470 } 471 472 @Override /* Overridden from Builder */ 473 public Builder beanPropertiesReadOnly(Class<?> beanClass, String properties) { 474 super.beanPropertiesReadOnly(beanClass, properties); 475 return this; 476 } 477 478 @Override /* Overridden from Builder */ 479 public Builder beanPropertiesReadOnly(String beanClassName, String properties) { 480 super.beanPropertiesReadOnly(beanClassName, properties); 481 return this; 482 } 483 484 @Override /* Overridden from Builder */ 485 public Builder beanPropertiesWriteOnly(Map<String,Object> values) { 486 super.beanPropertiesWriteOnly(values); 487 return this; 488 } 489 490 @Override /* Overridden from Builder */ 491 public Builder beanPropertiesWriteOnly(Class<?> beanClass, String properties) { 492 super.beanPropertiesWriteOnly(beanClass, properties); 493 return this; 494 } 495 496 @Override /* Overridden from Builder */ 497 public Builder beanPropertiesWriteOnly(String beanClassName, String properties) { 498 super.beanPropertiesWriteOnly(beanClassName, properties); 499 return this; 500 } 501 502 @Override /* Overridden from Builder */ 503 public Builder beansRequireDefaultConstructor() { 504 super.beansRequireDefaultConstructor(); 505 return this; 506 } 507 508 @Override /* Overridden from Builder */ 509 public Builder beansRequireSerializable() { 510 super.beansRequireSerializable(); 511 return this; 512 } 513 514 @Override /* Overridden from Builder */ 515 public Builder beansRequireSettersForGetters() { 516 super.beansRequireSettersForGetters(); 517 return this; 518 } 519 520 @Override /* Overridden from Builder */ 521 public Builder dictionaryOn(Class<?> on, java.lang.Class<?>...values) { 522 super.dictionaryOn(on, values); 523 return this; 524 } 525 526 @Override /* Overridden from Builder */ 527 public Builder disableBeansRequireSomeProperties() { 528 super.disableBeansRequireSomeProperties(); 529 return this; 530 } 531 532 @Override /* Overridden from Builder */ 533 public Builder disableIgnoreMissingSetters() { 534 super.disableIgnoreMissingSetters(); 535 return this; 536 } 537 538 @Override /* Overridden from Builder */ 539 public Builder disableIgnoreTransientFields() { 540 super.disableIgnoreTransientFields(); 541 return this; 542 } 543 544 @Override /* Overridden from Builder */ 545 public Builder disableIgnoreUnknownNullBeanProperties() { 546 super.disableIgnoreUnknownNullBeanProperties(); 547 return this; 548 } 549 550 @Override /* Overridden from Builder */ 551 public Builder disableInterfaceProxies() { 552 super.disableInterfaceProxies(); 553 return this; 554 } 555 556 @Override /* Overridden from Builder */ 557 public <T> Builder example(Class<T> pojoClass, T o) { 558 super.example(pojoClass, o); 559 return this; 560 } 561 562 @Override /* Overridden from Builder */ 563 public <T> Builder example(Class<T> pojoClass, String json) { 564 super.example(pojoClass, json); 565 return this; 566 } 567 568 @Override /* Overridden from Builder */ 569 public Builder findFluentSetters() { 570 super.findFluentSetters(); 571 return this; 572 } 573 574 @Override /* Overridden from Builder */ 575 public Builder findFluentSetters(Class<?> on) { 576 super.findFluentSetters(on); 577 return this; 578 } 579 580 @Override /* Overridden from Builder */ 581 public Builder ignoreInvocationExceptionsOnGetters() { 582 super.ignoreInvocationExceptionsOnGetters(); 583 return this; 584 } 585 586 @Override /* Overridden from Builder */ 587 public Builder ignoreInvocationExceptionsOnSetters() { 588 super.ignoreInvocationExceptionsOnSetters(); 589 return this; 590 } 591 592 @Override /* Overridden from Builder */ 593 public Builder ignoreUnknownBeanProperties() { 594 super.ignoreUnknownBeanProperties(); 595 return this; 596 } 597 598 @Override /* Overridden from Builder */ 599 public Builder ignoreUnknownEnumValues() { 600 super.ignoreUnknownEnumValues(); 601 return this; 602 } 603 604 @Override /* Overridden from Builder */ 605 public Builder implClass(Class<?> interfaceClass, Class<?> implClass) { 606 super.implClass(interfaceClass, implClass); 607 return this; 608 } 609 610 @Override /* Overridden from Builder */ 611 public Builder implClasses(Map<Class<?>,Class<?>> values) { 612 super.implClasses(values); 613 return this; 614 } 615 616 @Override /* Overridden from Builder */ 617 public Builder interfaceClass(Class<?> on, Class<?> value) { 618 super.interfaceClass(on, value); 619 return this; 620 } 621 622 @Override /* Overridden from Builder */ 623 public Builder interfaces(java.lang.Class<?>...value) { 624 super.interfaces(value); 625 return this; 626 } 627 628 @Override /* Overridden from Builder */ 629 public Builder locale(Locale value) { 630 super.locale(value); 631 return this; 632 } 633 634 @Override /* Overridden from Builder */ 635 public Builder mediaType(MediaType value) { 636 super.mediaType(value); 637 return this; 638 } 639 640 @Override /* Overridden from Builder */ 641 public Builder notBeanClasses(java.lang.Class<?>...values) { 642 super.notBeanClasses(values); 643 return this; 644 } 645 646 @Override /* Overridden from Builder */ 647 public Builder notBeanPackages(String...values) { 648 super.notBeanPackages(values); 649 return this; 650 } 651 652 @Override /* Overridden from Builder */ 653 public Builder propertyNamer(Class<? extends org.apache.juneau.PropertyNamer> value) { 654 super.propertyNamer(value); 655 return this; 656 } 657 658 @Override /* Overridden from Builder */ 659 public Builder propertyNamer(Class<?> on, Class<? extends org.apache.juneau.PropertyNamer> value) { 660 super.propertyNamer(on, value); 661 return this; 662 } 663 664 @Override /* Overridden from Builder */ 665 public Builder sortProperties() { 666 super.sortProperties(); 667 return this; 668 } 669 670 @Override /* Overridden from Builder */ 671 public Builder sortProperties(java.lang.Class<?>...on) { 672 super.sortProperties(on); 673 return this; 674 } 675 676 @Override /* Overridden from Builder */ 677 public Builder stopClass(Class<?> on, Class<?> value) { 678 super.stopClass(on, value); 679 return this; 680 } 681 682 @Override /* Overridden from Builder */ 683 public <T, S> Builder swap(Class<T> normalClass, Class<S> swappedClass, ThrowingFunction<T,S> swapFunction) { 684 super.swap(normalClass, swappedClass, swapFunction); 685 return this; 686 } 687 688 @Override /* Overridden from Builder */ 689 public <T, S> Builder swap(Class<T> normalClass, Class<S> swappedClass, ThrowingFunction<T,S> swapFunction, ThrowingFunction<S,T> unswapFunction) { 690 super.swap(normalClass, swappedClass, swapFunction, unswapFunction); 691 return this; 692 } 693 694 @Override /* Overridden from Builder */ 695 public Builder swaps(Object...values) { 696 super.swaps(values); 697 return this; 698 } 699 700 @Override /* Overridden from Builder */ 701 public Builder swaps(Class<?>...values) { 702 super.swaps(values); 703 return this; 704 } 705 706 @Override /* Overridden from Builder */ 707 public Builder timeZone(TimeZone value) { 708 super.timeZone(value); 709 return this; 710 } 711 712 @Override /* Overridden from Builder */ 713 public Builder typeName(Class<?> on, String value) { 714 super.typeName(on, value); 715 return this; 716 } 717 718 @Override /* Overridden from Builder */ 719 public Builder typePropertyName(String value) { 720 super.typePropertyName(value); 721 return this; 722 } 723 724 @Override /* Overridden from Builder */ 725 public Builder typePropertyName(Class<?> on, String value) { 726 super.typePropertyName(on, value); 727 return this; 728 } 729 730 @Override /* Overridden from Builder */ 731 public Builder useEnumNames() { 732 super.useEnumNames(); 733 return this; 734 } 735 736 @Override /* Overridden from Builder */ 737 public Builder useJavaBeanIntrospector() { 738 super.useJavaBeanIntrospector(); 739 return this; 740 } 741 742 @Override /* Overridden from Builder */ 743 public Builder detectRecursions() { 744 super.detectRecursions(); 745 return this; 746 } 747 748 @Override /* Overridden from Builder */ 749 public Builder detectRecursions(boolean value) { 750 super.detectRecursions(value); 751 return this; 752 } 753 754 @Override /* Overridden from Builder */ 755 public Builder ignoreRecursions() { 756 super.ignoreRecursions(); 757 return this; 758 } 759 760 @Override /* Overridden from Builder */ 761 public Builder ignoreRecursions(boolean value) { 762 super.ignoreRecursions(value); 763 return this; 764 } 765 766 @Override /* Overridden from Builder */ 767 public Builder initialDepth(int value) { 768 super.initialDepth(value); 769 return this; 770 } 771 772 @Override /* Overridden from Builder */ 773 public Builder maxDepth(int value) { 774 super.maxDepth(value); 775 return this; 776 } 777 778 @Override /* Overridden from Builder */ 779 public Builder accept(String value) { 780 super.accept(value); 781 return this; 782 } 783 784 @Override /* Overridden from Builder */ 785 public Builder addBeanTypes() { 786 super.addBeanTypes(); 787 return this; 788 } 789 790 @Override /* Overridden from Builder */ 791 public Builder addBeanTypes(boolean value) { 792 super.addBeanTypes(value); 793 return this; 794 } 795 796 @Override /* Overridden from Builder */ 797 public Builder addRootType() { 798 super.addRootType(); 799 return this; 800 } 801 802 @Override /* Overridden from Builder */ 803 public Builder addRootType(boolean value) { 804 super.addRootType(value); 805 return this; 806 } 807 808 @Override /* Overridden from Builder */ 809 public Builder keepNullProperties() { 810 super.keepNullProperties(); 811 return this; 812 } 813 814 @Override /* Overridden from Builder */ 815 public Builder keepNullProperties(boolean value) { 816 super.keepNullProperties(value); 817 return this; 818 } 819 820 @Override /* Overridden from Builder */ 821 public Builder listener(Class<? extends org.apache.juneau.serializer.SerializerListener> value) { 822 super.listener(value); 823 return this; 824 } 825 826 @Override /* Overridden from Builder */ 827 public Builder produces(String value) { 828 super.produces(value); 829 return this; 830 } 831 832 @Override /* Overridden from Builder */ 833 public Builder sortCollections() { 834 super.sortCollections(); 835 return this; 836 } 837 838 @Override /* Overridden from Builder */ 839 public Builder sortCollections(boolean value) { 840 super.sortCollections(value); 841 return this; 842 } 843 844 @Override /* Overridden from Builder */ 845 public Builder sortMaps() { 846 super.sortMaps(); 847 return this; 848 } 849 850 @Override /* Overridden from Builder */ 851 public Builder sortMaps(boolean value) { 852 super.sortMaps(value); 853 return this; 854 } 855 856 @Override /* Overridden from Builder */ 857 public Builder trimEmptyCollections() { 858 super.trimEmptyCollections(); 859 return this; 860 } 861 862 @Override /* Overridden from Builder */ 863 public Builder trimEmptyCollections(boolean value) { 864 super.trimEmptyCollections(value); 865 return this; 866 } 867 868 @Override /* Overridden from Builder */ 869 public Builder trimEmptyMaps() { 870 super.trimEmptyMaps(); 871 return this; 872 } 873 874 @Override /* Overridden from Builder */ 875 public Builder trimEmptyMaps(boolean value) { 876 super.trimEmptyMaps(value); 877 return this; 878 } 879 880 @Override /* Overridden from Builder */ 881 public Builder trimStrings() { 882 super.trimStrings(); 883 return this; 884 } 885 886 @Override /* Overridden from Builder */ 887 public Builder trimStrings(boolean value) { 888 super.trimStrings(value); 889 return this; 890 } 891 892 @Override /* Overridden from Builder */ 893 public Builder uriContext(UriContext value) { 894 super.uriContext(value); 895 return this; 896 } 897 898 @Override /* Overridden from Builder */ 899 public Builder uriRelativity(UriRelativity value) { 900 super.uriRelativity(value); 901 return this; 902 } 903 904 @Override /* Overridden from Builder */ 905 public Builder uriResolution(UriResolution value) { 906 super.uriResolution(value); 907 return this; 908 } 909 910 @Override /* Overridden from Builder */ 911 public Builder fileCharset(Charset value) { 912 super.fileCharset(value); 913 return this; 914 } 915 916 @Override /* Overridden from Builder */ 917 public Builder maxIndent(int value) { 918 super.maxIndent(value); 919 return this; 920 } 921 922 @Override /* Overridden from Builder */ 923 public Builder quoteChar(char value) { 924 super.quoteChar(value); 925 return this; 926 } 927 928 @Override /* Overridden from Builder */ 929 public Builder quoteCharOverride(char value) { 930 super.quoteCharOverride(value); 931 return this; 932 } 933 934 @Override /* Overridden from Builder */ 935 public Builder sq() { 936 super.sq(); 937 return this; 938 } 939 940 @Override /* Overridden from Builder */ 941 public Builder streamCharset(Charset value) { 942 super.streamCharset(value); 943 return this; 944 } 945 946 @Override /* Overridden from Builder */ 947 public Builder useWhitespace() { 948 super.useWhitespace(); 949 return this; 950 } 951 952 @Override /* Overridden from Builder */ 953 public Builder useWhitespace(boolean value) { 954 super.useWhitespace(value); 955 return this; 956 } 957 958 @Override /* Overridden from Builder */ 959 public Builder ws() { 960 super.ws(); 961 return this; 962 } 963 964 @Override /* Overridden from Builder */ 965 public Builder addBeanTypesXml() { 966 super.addBeanTypesXml(); 967 return this; 968 } 969 970 @Override /* Overridden from Builder */ 971 public Builder addBeanTypesXml(boolean value) { 972 super.addBeanTypesXml(value); 973 return this; 974 } 975 976 @Override /* Overridden from Builder */ 977 public Builder addNamespaceUrisToRoot() { 978 super.addNamespaceUrisToRoot(); 979 return this; 980 } 981 982 @Override /* Overridden from Builder */ 983 public Builder addNamespaceUrisToRoot(boolean value) { 984 super.addNamespaceUrisToRoot(value); 985 return this; 986 } 987 988 @Override /* Overridden from Builder */ 989 public Builder defaultNamespace(Namespace value) { 990 super.defaultNamespace(value); 991 return this; 992 } 993 994 @Override /* Overridden from Builder */ 995 public Builder disableAutoDetectNamespaces() { 996 super.disableAutoDetectNamespaces(); 997 return this; 998 } 999 1000 @Override /* Overridden from Builder */ 1001 public Builder disableAutoDetectNamespaces(boolean value) { 1002 super.disableAutoDetectNamespaces(value); 1003 return this; 1004 } 1005 1006 @Override /* Overridden from Builder */ 1007 public Builder enableNamespaces() { 1008 super.enableNamespaces(); 1009 return this; 1010 } 1011 1012 @Override /* Overridden from Builder */ 1013 public Builder enableNamespaces(boolean value) { 1014 super.enableNamespaces(value); 1015 return this; 1016 } 1017 1018 @Override /* Overridden from Builder */ 1019 public Builder namespaces(Namespace...values) { 1020 super.namespaces(values); 1021 return this; 1022 } 1023 1024 @Override /* Overridden from Builder */ 1025 public Builder ns() { 1026 super.ns(); 1027 return this; 1028 } 1029 1030 @Override /* Overridden from Builder */ 1031 public Builder addBeanTypesHtml() { 1032 super.addBeanTypesHtml(); 1033 return this; 1034 } 1035 1036 @Override /* Overridden from Builder */ 1037 public Builder addBeanTypesHtml(boolean value) { 1038 super.addBeanTypesHtml(value); 1039 return this; 1040 } 1041 1042 @Override /* Overridden from Builder */ 1043 public Builder addKeyValueTableHeaders() { 1044 super.addKeyValueTableHeaders(); 1045 return this; 1046 } 1047 1048 @Override /* Overridden from Builder */ 1049 public Builder addKeyValueTableHeaders(boolean value) { 1050 super.addKeyValueTableHeaders(value); 1051 return this; 1052 } 1053 1054 @Override /* Overridden from Builder */ 1055 public Builder disableDetectLabelParameters() { 1056 super.disableDetectLabelParameters(); 1057 return this; 1058 } 1059 1060 @Override /* Overridden from Builder */ 1061 public Builder disableDetectLabelParameters(boolean value) { 1062 super.disableDetectLabelParameters(value); 1063 return this; 1064 } 1065 1066 @Override /* Overridden from Builder */ 1067 public Builder disableDetectLinksInStrings() { 1068 super.disableDetectLinksInStrings(); 1069 return this; 1070 } 1071 1072 @Override /* Overridden from Builder */ 1073 public Builder disableDetectLinksInStrings(boolean value) { 1074 super.disableDetectLinksInStrings(value); 1075 return this; 1076 } 1077 1078 @Override /* Overridden from Builder */ 1079 public Builder labelParameter(String value) { 1080 super.labelParameter(value); 1081 return this; 1082 } 1083 1084 @Override /* Overridden from Builder */ 1085 public Builder uriAnchorText(AnchorText value) { 1086 super.uriAnchorText(value); 1087 return this; 1088 } 1089 } 1090 1091 //------------------------------------------------------------------------------------------------------------------- 1092 // Instance 1093 //------------------------------------------------------------------------------------------------------------------- 1094 1095 final JsonSchemaGenerator generator; 1096 1097 /** 1098 * Constructor. 1099 * 1100 * @param builder The builder for this serializer. 1101 */ 1102 public HtmlSchemaSerializer(Builder builder) { 1103 super(builder.detectRecursions().ignoreRecursions()); 1104 1105 generator = builder.generatorBuilder.build(); 1106 } 1107 1108 @Override /* Context */ 1109 public Builder copy() { 1110 return new Builder(this); 1111 } 1112 1113 @Override /* Context */ 1114 public HtmlSchemaSerializerSession.Builder createSession() { 1115 return HtmlSchemaSerializerSession.create(this); 1116 } 1117 1118 @Override /* Context */ 1119 public HtmlSchemaSerializerSession getSession() { 1120 return createSession().build(); 1121 } 1122 1123 JsonSchemaGenerator getGenerator() { 1124 return generator; 1125 } 1126 1127 //----------------------------------------------------------------------------------------------------------------- 1128 // Other methods 1129 //----------------------------------------------------------------------------------------------------------------- 1130 1131 @Override /* Context */ 1132 protected JsonMap properties() { 1133 return filteredMap("generator", generator); 1134 } 1135}