This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new aedf584  Context API refactoring.
aedf584 is described below

commit aedf584e433f527345db8cb7bfb89a275ee4336c
Author: JamesBognar <[email protected]>
AuthorDate: Mon Sep 13 21:49:26 2021 -0400

    Context API refactoring.
---
 .../apache/juneau/rest/BasicSwaggerProvider.java   |  11 +-
 .../java/org/apache/juneau/rest/RestContext.java   | 114 +----------
 .../org/apache/juneau/rest/RestContextBuilder.java |  93 ++++++++-
 .../org/apache/juneau/rest/SwaggerProvider.java    | 210 ++++++++++++++++++++-
 .../apache/juneau/rest/SwaggerProviderBuilder.java | 129 -------------
 5 files changed, 302 insertions(+), 255 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
index 5164369..50cf2ec 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ObjectUtils.*;
 import java.util.*;
 
 import org.apache.juneau.cp.*;
@@ -38,12 +37,12 @@ public class BasicSwaggerProvider implements 
SwaggerProvider {
         *
         * @param builder The builder containing the settings for this Swagger 
provider.
         */
-       public BasicSwaggerProvider(SwaggerProviderBuilder builder) {
+       public BasicSwaggerProvider(SwaggerProvider.Builder builder) {
                BeanStore bs = builder.beanStore;
-               this.vr = firstNonNull(builder.varResolver, 
bs.getBean(VarResolver.class).orElse(VarResolver.DEFAULT));
-               this.js = firstNonNull(builder.jsonSchemaGenerator, 
bs.getBean(JsonSchemaGenerator.class).orElse(JsonSchemaGenerator.DEFAULT));
-               this.messages = builder.messages;
-               this.fileFinder = builder.fileFinder;
+               this.vr = 
builder.varResolver().orElse(bs.getBean(VarResolver.class).orElse(VarResolver.DEFAULT));
+               this.js = 
builder.jsonSchemaGenerator().orElse(bs.getBean(JsonSchemaGenerator.class).orElse(JsonSchemaGenerator.DEFAULT));
+               this.messages = builder.messages().orElse(null);
+               this.fileFinder = builder.fileFinder().orElse(null);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 586b582..5728559 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -296,9 +296,7 @@ public class RestContext extends Context {
                        postCallMethods = 
builder.postCallMethods().stream().map(this::toRestOpInvoker).toArray(RestOpInvoker[]::
 new);
                        restOperations = builder.restOperations(this).build();
                        restChildren = builder.restChildren(this).build();
-
-                       Object r = resource.get();
-                       swaggerProvider = createSwaggerProvider(r, builder, bs, 
fileFinder, messages, varResolver);
+                       swaggerProvider = builder.swaggerProvider().build();
 
                        List<RestOpContext> opContexts = 
restOperations.getOpContexts();
 
@@ -350,116 +348,6 @@ public class RestContext extends Context {
        }
 
        /**
-        * Instantiates the REST info provider for this REST resource.
-        *
-        * <p>
-        * Instantiates based on the following logic:
-        * <ul>
-        *      <li>Returns the resource class itself is an instance of {@link 
SwaggerProvider}.
-        *      <li>Looks for swagger provider set via any of the following:
-        *              <ul>
-        *                      <li>{@link 
RestContextBuilder#swaggerProvider(Class)}/{@link 
RestContextBuilder#swaggerProvider(SwaggerProvider)}
-        *                      <li>{@link Rest#swaggerProvider()}.
-        *              </ul>
-        *      <li>Looks for a static or non-static 
<c>createSwaggerProvider()</> method that returns {@link SwaggerProvider} on the
-        *              resource class with any of the following arguments:
-        *              <ul>
-        *                      <li>{@link RestContext}
-        *                      <li>{@link BeanStore}
-        *                      <li>Any {@doc RestInjection injected beans}.
-        *              </ul>
-        *      <li>Resolves it via the bean store registered in this context.
-        *      <li>Instantiates a default {@link BasicSwaggerProvider}.
-        * </ul>
-        *
-        * <ul class='seealso'>
-        *      <li class='jm'>{@link RestContextBuilder#swaggerProvider(Class)}
-        *      <li class='jm'>{@link 
RestContextBuilder#swaggerProvider(SwaggerProvider)}
-        * </ul>
-        *
-        * @param resource
-        *      The REST servlet or bean that this context defines.
-        * @param builder
-        *      The builder for this object.
-        * @param beanStore
-        *      The factory used for creating beans and retrieving injected 
beans.
-        *      <br>Created by {@link RestContextBuilder#beanStore()}.
-        * @param fileFinder The file finder configured on this bean created by 
{@link RestContextBuilder#createFileFinder(BeanStore,Supplier)}.
-        * @param messages The localized messages configured on this bean.
-        * @param varResolver The variable resolver configured on this bean.
-        * @return The info provider for this REST resource.
-        * @throws Exception If info provider could not be instantiated.
-        */
-       protected SwaggerProvider createSwaggerProvider(Object resource, 
RestContextBuilder builder, BeanStore beanStore, FileFinder fileFinder, 
Messages messages, VarResolver varResolver) throws Exception {
-
-               SwaggerProvider x = 
builder.swaggerProvider.value().orElse(null);
-
-               if (resource instanceof SwaggerProvider)
-                       x = (SwaggerProvider)resource;
-
-               if (x == null)
-                       x = 
beanStore.getBean(SwaggerProvider.class).orElse(null);
-
-               if (x == null)
-                       x = createSwaggerProviderBuilder(resource, builder, 
beanStore, fileFinder, messages, varResolver).build();
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(SwaggerProvider.class, x)
-                       .beanCreateMethodFinder(SwaggerProvider.class, resource)
-                       .find("createSwaggerProvider")
-                       .withDefault(x)
-                       .run();
-
-               return x;
-       }
-
-       /**
-        * Instantiates the REST API builder for this REST resource.
-        *
-        * <p>
-        * Allows subclasses to intercept and modify the builder used by the 
{@link 
#createSwaggerProvider(Object,RestContextBuilder,BeanStore,FileFinder,Messages,VarResolver)}
 method.
-        *
-        * @param resource
-        *      The REST servlet or bean that this context defines.
-        * @param builder
-        *      The builder for this object.
-        *      <br>Consists of all properties gathered through the builder and 
annotations on this class and all parent classes.
-        * @param beanStore
-        *      The factory used for creating beans and retrieving injected 
beans.
-        *      <br>Created by {@link RestContextBuilder#beanStore()}.
-        * @param fileFinder The file finder configured on this bean created by 
{@link RestContextBuilder#createFileFinder(BeanStore,Supplier)}.
-        * @param messages The localized messages configured on this bean.
-        * @param varResolver The variable resolver configured on this bean.
-        * @return The REST API builder for this REST resource.
-        * @throws Exception If REST API builder could not be instantiated.
-        */
-       protected SwaggerProviderBuilder createSwaggerProviderBuilder(Object 
resource, RestContextBuilder builder, BeanStore beanStore, FileFinder 
fileFinder, Messages messages, VarResolver varResolver) throws Exception {
-
-               Class<? extends SwaggerProvider> c = 
builder.swaggerProvider.type().orElse(null);
-
-               SwaggerProviderBuilder x = SwaggerProvider
-                               .create()
-                               .beanStore(beanStore)
-                               .fileFinder(fileFinder)
-                               .messages(messages)
-                               .varResolver(varResolver)
-                               
.jsonSchemaGenerator(beanStore.getBean(JsonSchemaGenerator.class).get())
-                               .implClass(c);
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(SwaggerProviderBuilder.class, x)
-                       .beanCreateMethodFinder(SwaggerProviderBuilder.class, 
resource)
-                       .find("createSwaggerProviderBuilder")
-                       .withDefault(x)
-                       .run();
-
-               return x;
-
-       }
-
-       /**
         * Returns the bean store associated with this context.
         *
         * <p>
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 5cb2d7b..14ae1fd 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -61,7 +61,6 @@ import org.apache.juneau.rest.vars.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.svl.vars.*;
-import org.apache.juneau.utils.*;
 
 /**
  * Defines the initial configuration of a <c>RestServlet</c> or <c>@Rest</c> 
annotated object.
@@ -147,6 +146,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
        private MethodList startCallMethods, endCallMethods, postInitMethods, 
postInitChildFirstMethods, destroyMethods, preCallMethods, postCallMethods;
        private RestOperations.Builder restOperations;
        private RestChildren.Builder restChildren;
+       private SwaggerProvider.Builder swaggerProvider;
 
        String
                allowedHeaderParams = env("RestContext.allowedHeaderParams", 
"Accept,Content-Type"),
@@ -169,7 +169,6 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
        Class<? extends RestOpContext> opContextClass = RestOpContext.class;
        Class<? extends RestOperations> operationsClass = RestOperations.class;
 
-       BeanRef<SwaggerProvider> swaggerProvider = 
BeanRef.of(SwaggerProvider.class);
        EncoderGroup.Builder encoders = 
EncoderGroup.create().add(IdentityEncoder.INSTANCE);
        SerializerGroup.Builder serializers = SerializerGroup.create();
        ParserGroup.Builder parsers = ParserGroup.create();
@@ -3267,8 +3266,92 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
                return v.get();
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // swaggerProvider
+       
//-----------------------------------------------------------------------------------------------------------------
 
-       private int TODO;
+       /**
+        * Returns the list of rest operations.
+        *
+        * @return The list of rest operations.
+        */
+       public final SwaggerProvider.Builder swaggerProvider() {
+               if (swaggerProvider == null)
+                       swaggerProvider = createSwaggerProvider(beanStore(), 
resource());
+               return swaggerProvider;
+       }
+
+       /**
+        * Instantiates the REST info provider for this REST resource.
+        *
+        * <p>
+        * Instantiates based on the following logic:
+        * <ul>
+        *      <li>Returns the resource class itself is an instance of {@link 
SwaggerProvider}.
+        *      <li>Looks for swagger provider set via any of the following:
+        *              <ul>
+        *                      <li>{@link 
RestContextBuilder#swaggerProvider(Class)}/{@link 
RestContextBuilder#swaggerProvider(SwaggerProvider)}
+        *                      <li>{@link Rest#swaggerProvider()}.
+        *              </ul>
+        *      <li>Looks for a static or non-static 
<c>createSwaggerProvider()</> method that returns {@link SwaggerProvider} on the
+        *              resource class with any of the following arguments:
+        *              <ul>
+        *                      <li>{@link RestContext}
+        *                      <li>{@link BeanStore}
+        *                      <li>Any {@doc RestInjection injected beans}.
+        *              </ul>
+        *      <li>Resolves it via the bean store registered in this context.
+        *      <li>Instantiates a default {@link BasicSwaggerProvider}.
+        * </ul>
+        *
+        * <ul class='seealso'>
+        *      <li class='jm'>{@link RestContextBuilder#swaggerProvider(Class)}
+        *      <li class='jm'>{@link 
RestContextBuilder#swaggerProvider(SwaggerProvider)}
+        * </ul>
+        *
+        * @param beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param resource
+        *      The REST servlet or bean that this context defines.
+        * @return The info provider for this REST resource.
+        */
+       protected SwaggerProvider.Builder createSwaggerProvider(BeanStore 
beanStore, Supplier<?> resource) {
+
+               Object r = resource.get();
+
+               Value<SwaggerProvider.Builder> v = Value.of(
+                       SwaggerProvider
+                               .create()
+                               .beanStore(beanStore)
+                               
.varResolver(()->beanStore.getBean(VarResolver.class).orElseThrow(()->runtimeException("VarResolver
 bean not found.")))
+                               
.fileFinder(()->beanStore.getBean(FileFinder.class).orElseThrow(()->runtimeException("FileFinder
 bean not found.")))
+                               
.messages(()->beanStore.getBean(Messages.class).orElseThrow(()->runtimeException("Messages
 bean not found.")))
+                               
.jsonSchemaGenerator(()->beanStore.getBean(JsonSchemaGenerator.class).orElseThrow(()->runtimeException("JsonSchemaGenerator
 bean not found.")))
+               );
+
+               beanStore.getBean(SwaggerProvider.Builder.class).map(x -> 
x.copy()).ifPresent(x -> v.set(x));
+
+               if (r instanceof SwaggerProvider)
+                       v.get().impl((SwaggerProvider)r);
+
+               beanStore.getBean(SwaggerProvider.class).ifPresent(x -> 
v.get().impl(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(SwaggerProvider.Builder.class, v.get())
+                       .beanCreateMethodFinder(SwaggerProvider.Builder.class, 
resource)
+                       .find("createSwaggerProviderBuilder")
+                       .run(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, resource)
+                       .addBean(SwaggerProvider.Builder.class, v.get())
+                       .beanCreateMethodFinder(SwaggerProvider.class, resource)
+                       .find("createSwaggerProviderBuilder")
+                       .run(x -> v.get().impl(x));
+
+               return v.get();
+       }
 
        
//-----------------------------------------------------------------------------------------------------------------
        // Miscellaneous settings
@@ -4628,7 +4711,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
         */
        @FluentSetter
        public RestContextBuilder swaggerProvider(Class<? extends 
SwaggerProvider> value) {
-               swaggerProvider.type(value);
+               swaggerProvider().type(value);
                return this;
        }
 
@@ -4644,7 +4727,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
         */
        @FluentSetter
        public RestContextBuilder swaggerProvider(SwaggerProvider value) {
-               swaggerProvider.value(value);
+               swaggerProvider().impl(value);
                return this;
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
index 51140b9..a29b087 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
@@ -12,16 +12,28 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest;
 
+import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.rest.HttpRuntimeException.*;
+
 import java.util.*;
+import java.util.function.*;
 
+import org.apache.juneau.cp.*;
 import org.apache.juneau.dto.swagger.Swagger;
+import org.apache.juneau.http.response.*;
+import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.svl.*;
 
 /**
  * Interface for retrieving Swagger on a REST resource.
  */
 public interface SwaggerProvider {
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Static
+       
//-----------------------------------------------------------------------------------------------------------------
+
        /**
         * Represents no SwaggerProvider.
         *
@@ -36,10 +48,204 @@ public interface SwaggerProvider {
         *
         * @return A new builder for this object.
         */
-       public static SwaggerProviderBuilder create() {
-               return new SwaggerProviderBuilder();
+       public static Builder create() {
+               return new Builder();
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Builder
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Builder class.
+        */
+       public class Builder {
+
+               Class<? extends SwaggerProvider> type;
+               BeanStore beanStore;
+               Class<?> resourceClass;
+               Supplier<VarResolver> varResolver;
+               Supplier<JsonSchemaGenerator> jsonSchemaGenerator;
+               Supplier<Messages> messages;
+               Supplier<FileFinder> fileFinder;
+               SwaggerProvider impl;
+
+               /**
+                * Constructor.
+                */
+               protected Builder() {}
+
+               /**
+                * Copy constructor.
+                *
+                * @param copyFrom The builder being copied.
+                */
+               protected Builder(Builder copyFrom) {
+                       type = copyFrom.type;
+                       beanStore = copyFrom.beanStore;
+                       resourceClass = copyFrom.resourceClass;
+                       varResolver = copyFrom.varResolver;
+                       jsonSchemaGenerator = copyFrom.jsonSchemaGenerator;
+                       messages = copyFrom.messages;
+                       fileFinder = copyFrom.fileFinder;
+                       impl = copyFrom.impl;
+               }
+               /**
+                * Creates a new {@link SwaggerProvider} object from this 
builder.
+                *
+                * <p>
+                * Instantiates an instance of the {@link #type(Class) 
implementation class} or
+                * else {@link BasicSwaggerProvider} if implementation class 
was not specified.
+                *
+                * @return A new {@link SwaggerProvider} object.
+                */
+               public SwaggerProvider build() {
+                       try {
+                               if (impl != null)
+                                       return impl;
+                               Class<? extends SwaggerProvider> ic = 
isConcrete(type) ? type : getDefaultType();
+                               return 
BeanStore.of(beanStore).addBeans(Builder.class, this).createBean(ic);
+                       } catch (Exception e) {
+                               throw toHttpException(e, 
InternalServerError.class);
+                       }
+               }
+
+               /**
+                * Returns the var resolver in this builder if it's been 
specified.
+                *
+                * @return The var resolver.
+                */
+               public Optional<VarResolver> varResolver() {
+                       return Optional.ofNullable(varResolver == null ? null : 
varResolver.get());
+               }
+
+               /**
+                * Returns the JSON schema generator in this builder if it's 
been specified.
+                *
+                * @return The JSON schema generator.
+                */
+               public Optional<JsonSchemaGenerator> jsonSchemaGenerator() {
+                       return Optional.ofNullable(jsonSchemaGenerator == null 
? null : jsonSchemaGenerator.get());
+               }
+
+               /**
+                * Returns the messages in this builder if it's been specified.
+                *
+                * @return The messages.
+                */
+               public Optional<Messages> messages() {
+                       return Optional.ofNullable(messages == null ? null : 
messages.get());
+               }
+
+               /**
+                * Returns the file finder in this builder if it's been 
specified.
+                *
+                * @return The file finder.
+                */
+               public Optional<FileFinder> fileFinder() {
+                       return Optional.ofNullable(fileFinder == null ? null : 
fileFinder.get());
+               }
+
+               /**
+                * Specifies the default implementation class if not specified 
via {@link #type(Class)}.
+                *
+                * @return The default implementation class if not specified 
via {@link #type(Class)}.
+                */
+               protected Class<? extends SwaggerProvider> getDefaultType() {
+                       return BasicSwaggerProvider.class;
+               }
+
+               /**
+                * Specifies the bean store to use for instantiating the {@link 
SwaggerProvider} object.
+                *
+                * @param value The new value for this setting.
+                * @return  This object.
+                */
+               public Builder beanStore(BeanStore value) {
+                       beanStore = value;
+                       return this;
+               }
+
+               /**
+                * Specifies a subclass of {@link SwaggerProvider} to create 
when the {@link #build()} method is called.
+                *
+                * @param value The new value for this setting.
+                * @return  This object.
+                */
+               public Builder type(Class<? extends SwaggerProvider> value) {
+                       type = value;
+                       return this;
+               }
+
+               /**
+                * Specifies the variable resolver to use for the {@link 
SwaggerProvider} object.
+                *
+                * @param value The new value for this setting.
+                * @return  This object.
+                */
+               public Builder varResolver(Supplier<VarResolver> value) {
+                       varResolver = value;
+                       return this;
+               }
+
+               /**
+                * Specifies the JSON-schema generator to use for the {@link 
SwaggerProvider} object.
+                *
+                * @param value The new value for this setting.
+                * @return  This object.
+                */
+               public Builder 
jsonSchemaGenerator(Supplier<JsonSchemaGenerator> value) {
+                       jsonSchemaGenerator = value;
+                       return this;
+               }
+
+               /**
+                * Specifies the messages to use for the {@link 
SwaggerProvider} object.
+                *
+                * @param value The new value for this setting.
+                * @return  This object.
+                */
+               public Builder messages(Supplier<Messages> value) {
+                       messages = value;
+                       return this;
+               }
+
+               /**
+                * Specifies the file-finder to use for the {@link 
SwaggerProvider} object.
+                *
+                * @param value The new value for this setting.
+                * @return  This object.
+                */
+               public Builder fileFinder(Supplier<FileFinder> value) {
+                       fileFinder = value;
+                       return this;
+               }
+
+               /**
+                * Specifies an already-instantiated bean for the {@link 
#build()} method too return.
+                *
+                * @param value The new value for this setting.
+                * @return  This object.
+                */
+               public Builder impl(SwaggerProvider value) {
+                       impl = value;
+                       return this;
+               }
+
+               /**
+                * Creates a copy of this builder.
+                *
+                * @return A copy of this builder.
+                */
+               public Builder copy() {
+                       return new Builder(this);
+               }
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Instance
+       
//-----------------------------------------------------------------------------------------------------------------
+
        /**
         * Returns the Swagger associated with the specified {@link 
Rest}-annotated class.
         *
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderBuilder.java
deleted file mode 100644
index 5b3f930..0000000
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderBuilder.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.rest;
-
-import static org.apache.juneau.rest.HttpRuntimeException.*;
-import static org.apache.juneau.internal.ClassUtils.*;
-
-import org.apache.juneau.cp.*;
-import org.apache.juneau.http.response.*;
-import org.apache.juneau.jsonschema.*;
-import org.apache.juneau.svl.*;
-
-/**
- * Builder class for {@link SwaggerProvider} objects.
- */
-public class SwaggerProviderBuilder {
-
-       private Class<? extends SwaggerProvider> implClass;
-
-       BeanStore beanStore;
-       Class<?> resourceClass;
-       VarResolver varResolver;
-       JsonSchemaGenerator jsonSchemaGenerator;
-       Messages messages;
-       FileFinder fileFinder;
-
-       /**
-        * Creates a new {@link SwaggerProvider} object from this builder.
-        *
-        * <p>
-        * Instantiates an instance of the {@link #implClass(Class) 
implementation class} or
-        * else {@link BasicSwaggerProvider} if implementation class was not 
specified.
-        *
-        * @return A new {@link SwaggerProvider} object.
-        */
-       public SwaggerProvider build() {
-               try {
-                       Class<? extends SwaggerProvider> ic = 
isConcrete(implClass) ? implClass : getDefaultImplClass();
-                       return 
BeanStore.of(beanStore).addBeans(SwaggerProviderBuilder.class, 
this).createBean(ic);
-               } catch (Exception e) {
-                       throw toHttpException(e, InternalServerError.class);
-               }
-       }
-
-       /**
-        * Specifies the default implementation class if not specified via 
{@link #implClass(Class)}.
-        *
-        * @return The default implementation class if not specified via {@link 
#implClass(Class)}.
-        */
-       protected Class<? extends SwaggerProvider> getDefaultImplClass() {
-               return BasicSwaggerProvider.class;
-       }
-
-       /**
-        * Specifies the bean store to use for instantiating the {@link 
SwaggerProvider} object.
-        *
-        * @param value The new value for this setting.
-        * @return  This object (for method chaining).
-        */
-       public SwaggerProviderBuilder beanStore(BeanStore value) {
-               this.beanStore = value;
-               return this;
-       }
-
-       /**
-        * Specifies a subclass of {@link SwaggerProvider} to create when the 
{@link #build()} method is called.
-        *
-        * @param value The new value for this setting.
-        * @return  This object (for method chaining).
-        */
-       public SwaggerProviderBuilder implClass(Class<? extends 
SwaggerProvider> value) {
-               this.implClass = value;
-               return this;
-       }
-
-       /**
-        * Specifies the variable resolver to use for the {@link 
SwaggerProvider} object.
-        *
-        * @param value The new value for this setting.
-        * @return  This object (for method chaining).
-        */
-       public SwaggerProviderBuilder varResolver(VarResolver value) {
-               this.varResolver = value;
-               return this;
-       }
-
-       /**
-        * Specifies the JSON-schema generator to use for the {@link 
SwaggerProvider} object.
-        *
-        * @param value The new value for this setting.
-        * @return  This object (for method chaining).
-        */
-       public SwaggerProviderBuilder jsonSchemaGenerator(JsonSchemaGenerator 
value) {
-               this.jsonSchemaGenerator = value;
-               return this;
-       }
-
-       /**
-        * Specifies the messages to use for the {@link SwaggerProvider} object.
-        *
-        * @param value The new value for this setting.
-        * @return  This object (for method chaining).
-        */
-       public SwaggerProviderBuilder messages(Messages value) {
-               this.messages = value;
-               return this;
-       }
-
-       /**
-        * Specifies the file-finder to use for the {@link SwaggerProvider} 
object.
-        *
-        * @param value The new value for this setting.
-        * @return  This object (for method chaining).
-        */
-       public SwaggerProviderBuilder fileFinder(FileFinder value) {
-               this.fileFinder = value;
-               return this;
-       }
-}

Reply via email to