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