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.jsonschema; 014 015import static org.apache.juneau.jsonschema.JsonSchemaGenerator.*; 016 017import java.util.*; 018 019import org.apache.juneau.*; 020import org.apache.juneau.annotation.*; 021import org.apache.juneau.http.*; 022 023/** 024 * Builder class for building instances of JSON Schema generators. 025 */ 026public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder { 027 028 /** 029 * Constructor, default settings. 030 */ 031 public JsonSchemaGeneratorBuilder() { 032 super(); 033 } 034 035 /** 036 * Constructor. 037 * 038 * @param ps The initial configuration settings for this builder. 039 */ 040 public JsonSchemaGeneratorBuilder(PropertyStore ps) { 041 super(ps); 042 } 043 044 @Override /* ContextBuilder */ 045 public JsonSchemaGenerator build() { 046 return build(JsonSchemaGenerator.class); 047 } 048 049 050 //----------------------------------------------------------------------------------------------------------------- 051 // Properties 052 //----------------------------------------------------------------------------------------------------------------- 053 054 /** 055 * Configuration property: Add descriptions. 056 * 057 * <p> 058 * Identifies which categories of types that descriptions should be automatically added to generated schemas. 059 * <p> 060 * The description is the result of calling {@link ClassMeta#getReadableName()}. 061 * 062 * <h5 class='section'>See Also:</h5> 063 * <ul> 064 * <li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addDescriptionsTo} 065 * </ul> 066 * 067 * @param value 068 * The new value for this property. 069 * <br>The default is <jk>false</jk>. 070 * @return This object (for method chaining). 071 */ 072 public JsonSchemaGeneratorBuilder addDescriptionsTo(String value) { 073 return set(JSONSCHEMA_addDescriptionsTo, value); 074 } 075 076 /** 077 * Configuration property: Add examples. 078 * 079 * <p> 080 * Identifies which categories of types that examples should be automatically added to generated schemas. 081 * <p> 082 * The examples come from calling {@link ClassMeta#getExample(BeanSession)} which in turn gets examples 083 * from the following: 084 * <ul class='doctree'> 085 * <li class='ja'>{@link Example} 086 * <li class='jf'>{@link BeanContext#BEAN_examples} 087 * </ul> 088 * 089 * <h5 class='section'>See Also:</h5> 090 * <ul> 091 * <li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addExamplesTo} 092 * </ul> 093 * 094 * @param value 095 * The new value for this property. 096 * <br>The default is <jk>false</jk>. 097 * @return This object (for method chaining). 098 */ 099 public JsonSchemaGeneratorBuilder addExamplesTo(String value) { 100 return set(JSONSCHEMA_addExamplesTo, value); 101 } 102 103 /** 104 * Configuration property: Allow nested descriptions. 105 * 106 * <p> 107 * Identifies whether nested descriptions are allowed in schema definitions. 108 * 109 * <h5 class='section'>See Also:</h5> 110 * <ul> 111 * <li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_allowNestedDescriptions} 112 * </ul> 113 * 114 * @return This object (for method chaining). 115 */ 116 public JsonSchemaGeneratorBuilder allowNestedDescriptions() { 117 return set(JSONSCHEMA_allowNestedDescriptions, true); 118 } 119 120 /** 121 * Configuration property: Allow nested examples. 122 * 123 * <p> 124 * Identifies whether nested examples are allowed in schema definitions. 125 * 126 * <h5 class='section'>See Also:</h5> 127 * <ul> 128 * <li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_allowNestedExamples} 129 * </ul> 130 * 131 * @return This object (for method chaining). 132 */ 133 public JsonSchemaGeneratorBuilder allowNestedExamples() { 134 return set(JSONSCHEMA_allowNestedExamples, true); 135 } 136 137 /** 138 * Configuration property: Schema definition mapper. 139 * 140 * <p> 141 * Interface to use for converting Bean classes to definition IDs and URIs. 142 * <p> 143 * Used primarily for defining common definition sections for beans in Swagger JSON. 144 * <p> 145 * This setting is ignored if {@link JsonSchemaGenerator#JSONSCHEMA_useBeanDefs} is not enabled. 146 * 147 * <h5 class='section'>See Also:</h5> 148 * <ul> 149 * <li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_beanDefMapper} 150 * </ul> 151 * 152 * @param value 153 * The new value for this property. 154 * <br>The default is <jk>false</jk>. 155 * @return This object (for method chaining). 156 */ 157 public JsonSchemaGeneratorBuilder beanDefMapper(Class<? extends BeanDefMapper> value) { 158 return set(JSONSCHEMA_beanDefMapper, value); 159 } 160 161 /** 162 * Configuration property: Bean schema definition mapper. 163 * 164 * <p> 165 * Interface to use for converting Bean classes to definition IDs and URIs. 166 * <p> 167 * Used primarily for defining common definition sections for beans in Swagger JSON. 168 * <p> 169 * This setting is ignored if {@link JsonSchemaGenerator#JSONSCHEMA_useBeanDefs} is not enabled. 170 * 171 * <h5 class='section'>See Also:</h5> 172 * <ul> 173 * <li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_beanDefMapper} 174 * </ul> 175 * 176 * @param value 177 * The new value for this property. 178 * <br>The default is <jk>false</jk>. 179 * @return This object (for method chaining). 180 */ 181 public JsonSchemaGeneratorBuilder beanDefMapper(BeanDefMapper value) { 182 return set(JSONSCHEMA_beanDefMapper, value); 183 } 184 185 /** 186 * Configuration property: Default schemas. 187 * 188 * <p> 189 * Allows you to override or provide custom schema information for particular class types. 190 * <p> 191 * Keys are full class names. 192 * 193 * <h5 class='section'>See Also:</h5> 194 * <ul> 195 * <li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_defaultSchemas} 196 * </ul> 197 * 198 * @param c 199 * The class to define a default schema for. 200 * @param schema 201 * The schema. 202 * @return This object (for method chaining). 203 */ 204 public JsonSchemaGeneratorBuilder defaultSchema(Class<?> c, ObjectMap schema) { 205 return addTo(JSONSCHEMA_defaultSchemas, c.getName(), schema); 206 } 207 208 /** 209 * Configuration property: Use bean definitions. 210 * 211 * <p> 212 * When enabled, schemas on beans will be serialized as the following: 213 * <p class='bcode w800'> 214 * { 215 * type: <js>'object'</js>, 216 * <js>'$ref'</js>: <js>'#/definitions/TypeId'</js> 217 * } 218 * </p> 219 * 220 * <p> 221 * The definitions can then be retrieved from the session using {@link JsonSchemaGeneratorSession#getBeanDefs()}. 222 * <p> 223 * Definitions can also be added programmatically using {@link JsonSchemaGeneratorSession#addBeanDef(String, ObjectMap)}. 224 * 225 * @return This object (for method chaining). 226 */ 227 public JsonSchemaGeneratorBuilder useBeanDefs() { 228 return set(JSONSCHEMA_useBeanDefs, true); 229 } 230 231 @Override /* BeanContextBuilder */ 232 public JsonSchemaGeneratorBuilder beanClassVisibility(Visibility value) { 233 super.beanClassVisibility(value); 234 return this; 235 } 236 237 @Override /* BeanContextBuilder */ 238 public JsonSchemaGeneratorBuilder beanConstructorVisibility(Visibility value) { 239 super.beanConstructorVisibility(value); 240 return this; 241 } 242 243 @Override /* BeanContextBuilder */ 244 public JsonSchemaGeneratorBuilder beanDictionary(boolean append, Object...values) { 245 super.beanDictionary(append, values); 246 return this; 247 } 248 249 @Override /* BeanContextBuilder */ 250 public JsonSchemaGeneratorBuilder beanDictionary(Class<?>...values) { 251 super.beanDictionary(values); 252 return this; 253 } 254 255 @Override /* BeanContextBuilder */ 256 public JsonSchemaGeneratorBuilder beanDictionary(Object...values) { 257 super.beanDictionary(values); 258 return this; 259 } 260 261 @Override /* BeanContextBuilder */ 262 public JsonSchemaGeneratorBuilder beanDictionaryRemove(Object...values) { 263 super.beanDictionaryRemove(values); 264 return this; 265 } 266 267 @Override /* BeanContextBuilder */ 268 public JsonSchemaGeneratorBuilder beanFieldVisibility(Visibility value) { 269 super.beanFieldVisibility(value); 270 return this; 271 } 272 273 @Override /* BeanContextBuilder */ 274 public JsonSchemaGeneratorBuilder beanFilters(boolean append, Object...values) { 275 super.beanFilters(append, values); 276 return this; 277 } 278 279 @Override /* BeanContextBuilder */ 280 public JsonSchemaGeneratorBuilder beanFilters(Class<?>...values) { 281 super.beanFilters(values); 282 return this; 283 } 284 285 @Override /* BeanContextBuilder */ 286 public JsonSchemaGeneratorBuilder beanFilters(Object...values) { 287 super.beanFilters(values); 288 return this; 289 } 290 291 @Override /* BeanContextBuilder */ 292 public JsonSchemaGeneratorBuilder beanFiltersRemove(Object...values) { 293 super.beanFiltersRemove(values); 294 return this; 295 } 296 297 @Override /* BeanContextBuilder */ 298 public JsonSchemaGeneratorBuilder beanMapPutReturnsOldValue(boolean value) { 299 super.beanMapPutReturnsOldValue(value); 300 return this; 301 } 302 303 @Override /* BeanContextBuilder */ 304 public JsonSchemaGeneratorBuilder beanMapPutReturnsOldValue() { 305 super.beanMapPutReturnsOldValue(); 306 return this; 307 } 308 309 @Override /* BeanContextBuilder */ 310 public JsonSchemaGeneratorBuilder beanMethodVisibility(Visibility value) { 311 super.beanMethodVisibility(value); 312 return this; 313 } 314 315 @Override /* BeanContextBuilder */ 316 public JsonSchemaGeneratorBuilder beansRequireDefaultConstructor(boolean value) { 317 super.beansRequireDefaultConstructor(value); 318 return this; 319 } 320 321 @Override /* BeanContextBuilder */ 322 public JsonSchemaGeneratorBuilder beansRequireDefaultConstructor() { 323 super.beansRequireDefaultConstructor(); 324 return this; 325 } 326 327 @Override /* BeanContextBuilder */ 328 public JsonSchemaGeneratorBuilder beansRequireSerializable(boolean value) { 329 super.beansRequireSerializable(value); 330 return this; 331 } 332 333 @Override /* BeanContextBuilder */ 334 public JsonSchemaGeneratorBuilder beansRequireSerializable() { 335 super.beansRequireSerializable(); 336 return this; 337 } 338 339 @Override /* BeanContextBuilder */ 340 public JsonSchemaGeneratorBuilder beansRequireSettersForGetters(boolean value) { 341 super.beansRequireSettersForGetters(value); 342 return this; 343 } 344 345 @Override /* BeanContextBuilder */ 346 public JsonSchemaGeneratorBuilder beansRequireSettersForGetters() { 347 super.beansRequireSettersForGetters(); 348 return this; 349 } 350 351 @Override /* BeanContextBuilder */ 352 public JsonSchemaGeneratorBuilder beansRequireSomeProperties(boolean value) { 353 super.beansRequireSomeProperties(value); 354 return this; 355 } 356 357 @Override /* BeanContextBuilder */ 358 public JsonSchemaGeneratorBuilder beanTypePropertyName(String value) { 359 super.beanTypePropertyName(value); 360 return this; 361 } 362 363 @Override /* BeanContextBuilder */ 364 public JsonSchemaGeneratorBuilder debug() { 365 super.debug(); 366 return this; 367 } 368 369 @Override /* BeanContextBuilder */ 370 public <T> JsonSchemaGeneratorBuilder example(Class<T> c, T o) { 371 super.example(c, o); 372 return this; 373 } 374 375 @Override /* BeanContextBuilder */ 376 public JsonSchemaGeneratorBuilder ignoreInvocationExceptionsOnGetters(boolean value) { 377 super.ignoreInvocationExceptionsOnGetters(value); 378 return this; 379 } 380 381 @Override /* BeanContextBuilder */ 382 public JsonSchemaGeneratorBuilder ignoreInvocationExceptionsOnGetters() { 383 super.ignoreInvocationExceptionsOnGetters(); 384 return this; 385 } 386 387 @Override /* BeanContextBuilder */ 388 public JsonSchemaGeneratorBuilder ignoreInvocationExceptionsOnSetters(boolean value) { 389 super.ignoreInvocationExceptionsOnSetters(value); 390 return this; 391 } 392 393 @Override /* BeanContextBuilder */ 394 public JsonSchemaGeneratorBuilder ignoreInvocationExceptionsOnSetters() { 395 super.ignoreInvocationExceptionsOnSetters(); 396 return this; 397 } 398 399 @Override /* BeanContextBuilder */ 400 public JsonSchemaGeneratorBuilder ignorePropertiesWithoutSetters(boolean value) { 401 super.ignorePropertiesWithoutSetters(value); 402 return this; 403 } 404 405 @Override /* BeanContextBuilder */ 406 public JsonSchemaGeneratorBuilder ignoreUnknownBeanProperties(boolean value) { 407 super.ignoreUnknownBeanProperties(value); 408 return this; 409 } 410 411 @Override /* BeanContextBuilder */ 412 public JsonSchemaGeneratorBuilder ignoreUnknownBeanProperties() { 413 super.ignoreUnknownBeanProperties(); 414 return this; 415 } 416 417 @Override /* BeanContextBuilder */ 418 public JsonSchemaGeneratorBuilder ignoreUnknownNullBeanProperties(boolean value) { 419 super.ignoreUnknownNullBeanProperties(value); 420 return this; 421 } 422 423 @Override /* BeanContextBuilder */ 424 public <T> JsonSchemaGeneratorBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) { 425 super.implClass(interfaceClass, implClass); 426 return this; 427 } 428 429 @Override /* BeanContextBuilder */ 430 public JsonSchemaGeneratorBuilder implClasses(Map<String,Class<?>> values) { 431 super.implClasses(values); 432 return this; 433 } 434 435 @Override /* BeanContextBuilder */ 436 public JsonSchemaGeneratorBuilder locale(Locale value) { 437 super.locale(value); 438 return this; 439 } 440 441 @Override /* BeanContextBuilder */ 442 public JsonSchemaGeneratorBuilder mediaType(MediaType value) { 443 super.mediaType(value); 444 return this; 445 } 446 447 @Override /* BeanContextBuilder */ 448 public JsonSchemaGeneratorBuilder notBeanClasses(boolean append, Object...values) { 449 super.notBeanClasses(append, values); 450 return this; 451 } 452 453 @Override /* BeanContextBuilder */ 454 public JsonSchemaGeneratorBuilder notBeanClasses(Class<?>...values) { 455 super.notBeanClasses(values); 456 return this; 457 } 458 459 @Override /* BeanContextBuilder */ 460 public JsonSchemaGeneratorBuilder notBeanClasses(Object...values) { 461 super.notBeanClasses(values); 462 return this; 463 } 464 465 @Override /* BeanContextBuilder */ 466 public JsonSchemaGeneratorBuilder notBeanClassesRemove(Object...values) { 467 super.notBeanClassesRemove(values); 468 return this; 469 } 470 471 @Override /* BeanContextBuilder */ 472 public JsonSchemaGeneratorBuilder notBeanPackages(boolean append, Object...values) { 473 super.notBeanPackages(append, values); 474 return this; 475 } 476 477 @Override /* BeanContextBuilder */ 478 public JsonSchemaGeneratorBuilder notBeanPackages(Object...values) { 479 super.notBeanPackages(values); 480 return this; 481 } 482 483 @Override /* BeanContextBuilder */ 484 public JsonSchemaGeneratorBuilder notBeanPackages(String...values) { 485 super.notBeanPackages(values); 486 return this; 487 } 488 489 @Override /* BeanContextBuilder */ 490 public JsonSchemaGeneratorBuilder notBeanPackagesRemove(Object...values) { 491 super.notBeanPackagesRemove(values); 492 return this; 493 } 494 495 @Override /* BeanContextBuilder */ 496 public JsonSchemaGeneratorBuilder pojoSwaps(boolean append, Object...values) { 497 super.pojoSwaps(append, values); 498 return this; 499 } 500 501 @Override /* BeanContextBuilder */ 502 public JsonSchemaGeneratorBuilder pojoSwaps(Class<?>...values) { 503 super.pojoSwaps(values); 504 return this; 505 } 506 507 @Override /* BeanContextBuilder */ 508 public JsonSchemaGeneratorBuilder pojoSwaps(Object...values) { 509 super.pojoSwaps(values); 510 return this; 511 } 512 513 @Override /* BeanContextBuilder */ 514 public JsonSchemaGeneratorBuilder pojoSwapsRemove(Object...values) { 515 super.pojoSwapsRemove(values); 516 return this; 517 } 518 519 @Override /* BeanContextBuilder */ 520 public JsonSchemaGeneratorBuilder sortProperties(boolean value) { 521 super.sortProperties(value); 522 return this; 523 } 524 525 @Override /* BeanContextBuilder */ 526 public JsonSchemaGeneratorBuilder sortProperties() { 527 super.sortProperties(); 528 return this; 529 } 530 531 @Override /* BeanContextBuilder */ 532 public JsonSchemaGeneratorBuilder timeZone(TimeZone value) { 533 super.timeZone(value); 534 return this; 535 } 536 537 @Override /* BeanContextBuilder */ 538 public JsonSchemaGeneratorBuilder useEnumNames() { 539 super.useEnumNames(); 540 return this; 541 } 542 543 @Override /* BeanContextBuilder */ 544 public JsonSchemaGeneratorBuilder useInterfaceProxies(boolean value) { 545 super.useInterfaceProxies(value); 546 return this; 547 } 548 549 @Override /* BeanContextBuilder */ 550 public JsonSchemaGeneratorBuilder useJavaBeanIntrospector(boolean value) { 551 super.useJavaBeanIntrospector(value); 552 return this; 553 } 554 555 @Override /* BeanContextBuilder */ 556 public JsonSchemaGeneratorBuilder useJavaBeanIntrospector() { 557 super.useJavaBeanIntrospector(); 558 return this; 559 } 560 561 @Override /* ContextBuilder */ 562 public JsonSchemaGeneratorBuilder set(String name, Object value) { 563 super.set(name, value); 564 return this; 565 } 566 567 @Override /* ContextBuilder */ 568 public JsonSchemaGeneratorBuilder set(boolean append, String name, Object value) { 569 super.set(append, name, value); 570 return this; 571 } 572 573 @Override /* ContextBuilder */ 574 public JsonSchemaGeneratorBuilder set(Map<String,Object> properties) { 575 super.set(properties); 576 return this; 577 } 578 579 @Override /* ContextBuilder */ 580 public JsonSchemaGeneratorBuilder add(Map<String,Object> properties) { 581 super.add(properties); 582 return this; 583 } 584 585 @Override /* ContextBuilder */ 586 public JsonSchemaGeneratorBuilder addTo(String name, Object value) { 587 super.addTo(name, value); 588 return this; 589 } 590 591 @Override /* ContextBuilder */ 592 public JsonSchemaGeneratorBuilder addTo(String name, String key, Object value) { 593 super.addTo(name, key, value); 594 return this; 595 } 596 597 @Override /* ContextBuilder */ 598 public JsonSchemaGeneratorBuilder removeFrom(String name, Object value) { 599 super.removeFrom(name, value); 600 return this; 601 } 602 603 @Override /* ContextBuilder */ 604 public JsonSchemaGeneratorBuilder apply(PropertyStore copyFrom) { 605 super.apply(copyFrom); 606 return this; 607 } 608 609}