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 a76b82e  REST refactoring.
a76b82e is described below

commit a76b82ef4f8c20c7e2cfb6e40b1f28343b6b2728
Author: JamesBognar <[email protected]>
AuthorDate: Mon Feb 1 10:07:46 2021 -0500

    REST refactoring.
---
 .../java/org/apache/juneau/rest/Swagger_Test.java  |  4 --
 .../rest/annotation/RestAnnotation_Test.java       | 10 ++---
 .../juneau/rest/annotation/Swagger_Body_Test.java  |  1 -
 ...ggerProvider.java => BasicSwaggerProvider.java} | 36 ++++------------
 ...ssion.java => BasicSwaggerProviderSession.java} |  4 +-
 .../java/org/apache/juneau/rest/RestContext.java   | 13 ++++--
 .../org/apache/juneau/rest/RestContextBuilder.java |  4 +-
 .../org/apache/juneau/rest/SwaggerProvider.java    | 48 +++-------------------
 .../apache/juneau/rest/SwaggerProviderBuilder.java |  6 ++-
 .../org/apache/juneau/rest/annotation/Rest.java    | 21 +---------
 .../juneau/rest/annotation/RestAnnotation.java     |  2 +-
 11 files changed, 39 insertions(+), 110 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
 
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
index 7e10cad..21f9bef 100644
--- 
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
+++ 
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
@@ -23,7 +23,6 @@ import java.util.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.jsonschema.annotation.*;
 import org.apache.juneau.jsonschema.annotation.Tag;
-import org.apache.juneau.marshall.*;
 import org.apache.juneau.xml.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
@@ -1614,7 +1613,6 @@ public class Swagger_Test {
 
        @Test
        public void l02_query_example_swaggerOnClass() throws Exception {
-               System.err.println(getSwagger(new L2()));
                assertEquals("{id:2}", getSwagger(new 
L2()).getPaths().get("/path/{foo}/query").get("get").getParameter("query", 
"foo").getExample());
                assertEquals("{id:2}", getSwaggerWithFile(new 
L2()).getPaths().get("/path/{foo}/query").get("get").getParameter("query", 
"foo").getExample());
        }
@@ -2348,8 +2346,6 @@ public class Swagger_Test {
                Operation o = s.getOperation("/", "get");
                ParameterInfo pi = o.getParameter("body", null);
 
-               SimpleJson.DEFAULT_READABLE.println(s);
-
                assertEquals("{\n\tf1: 1,\n\tf2: 2\n}", 
pi.getExamples().get("application/json+simple"));
                ResponseInfo ri = o.getResponse("200");
                assertEquals("{\n\tf1: 1,\n\tf2: 2\n}", 
ri.getExamples().get("application/json+simple"));
diff --git 
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
 
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
index 4aff0f9..3574d9d 100644
--- 
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
+++ 
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
@@ -82,7 +82,7 @@ public class RestAnnotation_Test {
                .siteName("siteName")
                .staticFiles(StaticFiles.class)
                .swagger(SwaggerAnnotation.DEFAULT)
-               .swaggerProvider(SwaggerProvider.class)
+               .swaggerProvider(BasicSwaggerProvider.class)
                .title("title")
                .uriAuthority("uriAuthority")
                .uriContext("uriContext")
@@ -136,7 +136,7 @@ public class RestAnnotation_Test {
                .siteName("siteName")
                .staticFiles(StaticFiles.class)
                .swagger(SwaggerAnnotation.DEFAULT)
-               .swaggerProvider(SwaggerProvider.class)
+               .swaggerProvider(BasicSwaggerProvider.class)
                .title("title")
                .uriAuthority("uriAuthority")
                .uriContext("uriContext")
@@ -193,7 +193,7 @@ public class RestAnnotation_Test {
                                + "siteName:'siteName',"
                                + 
"staticFiles:'org.apache.juneau.rest.StaticFiles',"
                                + 
"swagger:{contact:{email:'',name:'',url:'',value:[]},description:[],externalDocs:{description:[],url:'',value:[]},license:{name:'',url:'',value:[]},tags:[],termsOfService:[],title:[],value:[],version:''},"
-                               + 
"swaggerProvider:'org.apache.juneau.rest.SwaggerProvider',"
+                               + 
"swaggerProvider:'org.apache.juneau.rest.BasicSwaggerProvider',"
                                + "title:['title'],"
                                + "uriAuthority:'uriAuthority',"
                                + "uriContext:'uriContext',"
@@ -292,7 +292,7 @@ public class RestAnnotation_Test {
                siteName="siteName",
                staticFiles=StaticFiles.class,
                swagger=@Swagger,
-               swaggerProvider=SwaggerProvider.class,
+               swaggerProvider=BasicSwaggerProvider.class,
                title="title",
                uriAuthority="uriAuthority",
                uriContext="uriContext",
@@ -348,7 +348,7 @@ public class RestAnnotation_Test {
                siteName="siteName",
                staticFiles=StaticFiles.class,
                swagger=@Swagger,
-               swaggerProvider=SwaggerProvider.class,
+               swaggerProvider=BasicSwaggerProvider.class,
                title="title",
                uriAuthority="uriAuthority",
                uriContext="uriContext",
diff --git 
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
 
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
index 64e1d43..40825c1 100644
--- 
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
+++ 
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
@@ -83,7 +83,6 @@ public class Swagger_Body_Test {
        @Test
        public void a01_fromPojo() throws Exception {
                org.apache.juneau.dto.swagger.Swagger s = getSwagger(A.class);
-               System.err.println(s);
                ParameterInfo x;
 
                x = s.getParameterInfo("/a","get","body",null);
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/BasicSwaggerProvider.java
similarity index 78%
copy from 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
copy to 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
index 793deaf..9e410cd 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/BasicSwaggerProvider.java
@@ -22,32 +22,11 @@ import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.svl.*;
 
 /**
- * Interface for retrieving Swagger on a REST resource.
+ * Basic implementation of a {@link SwaggerProvider}.
+ * 
+ * TODO
  */
-public class SwaggerProvider {
-
-       /**
-        * Represents no SwaggerProvider.
-        *
-        * <p>
-        * Used on annotation to indicate that the value should be inherited 
from the parent class, and
-        * ultimately {@link SwaggerProvider} if not specified at any level.
-        */
-       public class Null extends SwaggerProvider {
-               @SuppressWarnings("javadoc")
-               public Null(SwaggerProviderBuilder builder) {
-                       super(builder);
-               }
-       }
-
-       /**
-        * Creator.
-        *
-        * @return A new builder for this object.
-        */
-       public static SwaggerProviderBuilder create() {
-               return new SwaggerProviderBuilder();
-       }
+public class BasicSwaggerProvider implements SwaggerProvider {
 
        private final VarResolver vr;
        private final JsonSchemaGenerator js;
@@ -59,7 +38,7 @@ public class SwaggerProvider {
         *
         * @param builder The builder containing the settings for this Swagger 
provider.
         */
-       public SwaggerProvider(SwaggerProviderBuilder builder) {
+       public BasicSwaggerProvider(SwaggerProviderBuilder builder) {
                BeanFactory bf = builder.beanFactory;
                this.vr = firstNonNull(builder.varResolver, 
bf.getBean(VarResolver.class).orElse(VarResolver.DEFAULT));
                this.js = firstNonNull(builder.jsonSchemaGenerator, 
bf.getBean(JsonSchemaGenerator.class).orElse(JsonSchemaGenerator.DEFAULT));
@@ -68,7 +47,7 @@ public class SwaggerProvider {
        }
 
        /**
-        * Returns the Swagger associated with the specified {@link 
Rest}-annotated class.
+        * Returns the Swagger associated with the specified context of a 
{@link Rest}-annotated class.
         *
         * <p>
         * Subclasses can override this to provide their own method for 
generating Swagger.
@@ -78,13 +57,14 @@ public class SwaggerProvider {
         * @return A new {@link Swagger} object.
         * @throws Exception If an error occurred producing the Swagger.
         */
+       @Override /* SwaggerProvider */
        public Swagger getSwagger(RestContext context, Locale locale) throws 
Exception {
 
                Class<?> c = context.getResourceClass();
                FileFinder ff = fileFinder != null ? fileFinder : 
FileFinder.create().cp(c,null,false).build();
                Messages mb = messages != null ? messages.forLocale(locale) : 
Messages.create(c).build().forLocale(locale);
                VarResolverSession vrs = 
vr.createSession().bean(Messages.class, mb);
-               SwaggerProviderSession session = new 
SwaggerProviderSession(context, locale, ff, messages, vrs, js.createSession());
+               BasicSwaggerProviderSession session = new 
BasicSwaggerProviderSession(context, locale, ff, messages, vrs, 
js.createSession());
 
                return session.getSwagger();
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderSession.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
similarity index 99%
rename from 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderSession.java
rename to 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
index 438722d..8262337 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderSession.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
@@ -45,7 +45,7 @@ import org.apache.juneau.svl.*;
 /**
  * A single session of generating a Swagger document.
  */
-public class SwaggerProviderSession {
+public class BasicSwaggerProviderSession {
 
        private final RestContext context;
        private final Class<?> c;
@@ -68,7 +68,7 @@ public class SwaggerProviderSession {
         * @param vr The variable resolver to use for resolving variables in 
the swagger.
         * @param js The JSON-schema generator to use for stuff like examples.
         */
-       public SwaggerProviderSession(RestContext context, Locale locale, 
FileFinder ff, Messages messages, VarResolverSession vr, 
JsonSchemaGeneratorSession js) {
+       public BasicSwaggerProviderSession(RestContext context, Locale locale, 
FileFinder ff, Messages messages, VarResolverSession vr, 
JsonSchemaGeneratorSession js) {
                this.context = context;
                this.c = context.getResourceClass();
                this.rci = ClassInfo.of(c);
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 d84375b..47d70d2 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
@@ -3009,7 +3009,7 @@ public class RestContext extends BeanContext {
         *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.RestContext#REST_swaggerProvider REST_swaggerProvider}
         *      <li><b>Name:</b>  <js>"RestContext.swaggerProvider.o"</js>
         *      <li><b>Data type:</b>  {@link 
org.apache.juneau.rest.SwaggerProvider}
-        *      <li><b>Default:</b>  {@link 
org.apache.juneau.rest.SwaggerProvider}
+        *      <li><b>Default:</b>  {@link 
org.apache.juneau.rest.BasicSwaggerProvider}
         *      <li><b>Session property:</b>  <jk>false</jk>
         *      <li><b>Annotations:</b>
         *              <ul>
@@ -4506,7 +4506,7 @@ public class RestContext extends BeanContext {
         *                      <li>Any {@doc RestInjection injected beans}.
         *              </ul>
         *      <li>Resolves it via the bean factory registered in this context.
-        *      <li>Instantiates a default {@link SwaggerProvider}.
+        *      <li>Instantiates a default {@link BasicSwaggerProvider}.
         * </ul>
         *
         * <ul class='seealso'>
@@ -4519,7 +4519,14 @@ public class RestContext extends BeanContext {
         * @throws Exception If info provider could not be instantiated.
         */
        protected SwaggerProvider createSwaggerProvider(Object resource, 
BeanFactory beanFactory) throws Exception {
-               SwaggerProvider x = 
beanFactory.getBean(SwaggerProvider.class).orElse(null);
+
+               SwaggerProvider x = null;
+
+               if (resource instanceof SwaggerProvider)
+                       x = (SwaggerProvider)resource;
+
+               if (x == null)
+                       x = 
beanFactory.getBean(SwaggerProvider.class).orElse(null);
 
                Object o = getProperty(REST_swaggerProvider);
                if (o instanceof SwaggerProvider)
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 5266c57..8f72c68 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
@@ -2050,7 +2050,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         *
         * @param value
         *      The new value for this setting.
-        *      <br>The default is {@link SwaggerProvider}.
+        *      <br>The default is {@link BasicSwaggerProvider}.
         * @return This object (for method chaining).
         */
        @FluentSetter
@@ -2070,7 +2070,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         *
         * @param value
         *      The new value for this setting.
-        *      <br>The default is {@link SwaggerProvider}.
+        *      <br>The default is {@link BasicSwaggerProvider}.
         * @return This object (for method chaining).
         */
        @FluentSetter
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 793deaf..51140b9 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,33 +12,24 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ObjectUtils.*;
 import java.util.*;
 
-import org.apache.juneau.cp.*;
 import org.apache.juneau.dto.swagger.Swagger;
-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 class SwaggerProvider {
+public interface SwaggerProvider {
 
        /**
         * Represents no SwaggerProvider.
         *
         * <p>
         * Used on annotation to indicate that the value should be inherited 
from the parent class, and
-        * ultimately {@link SwaggerProvider} if not specified at any level.
+        * ultimately {@link BasicSwaggerProvider} if not specified at any 
level.
         */
-       public class Null extends SwaggerProvider {
-               @SuppressWarnings("javadoc")
-               public Null(SwaggerProviderBuilder builder) {
-                       super(builder);
-               }
-       }
+       public abstract class Null implements SwaggerProvider {};
 
        /**
         * Creator.
@@ -49,43 +40,14 @@ public class SwaggerProvider {
                return new SwaggerProviderBuilder();
        }
 
-       private final VarResolver vr;
-       private final JsonSchemaGenerator js;
-       private final Messages messages;
-       private final FileFinder fileFinder;
-
-       /**
-        * Constructor.
-        *
-        * @param builder The builder containing the settings for this Swagger 
provider.
-        */
-       public SwaggerProvider(SwaggerProviderBuilder builder) {
-               BeanFactory bf = builder.beanFactory;
-               this.vr = firstNonNull(builder.varResolver, 
bf.getBean(VarResolver.class).orElse(VarResolver.DEFAULT));
-               this.js = firstNonNull(builder.jsonSchemaGenerator, 
bf.getBean(JsonSchemaGenerator.class).orElse(JsonSchemaGenerator.DEFAULT));
-               this.messages = builder.messages;
-               this.fileFinder = builder.fileFinder;
-       }
-
        /**
         * Returns the Swagger associated with the specified {@link 
Rest}-annotated class.
         *
-        * <p>
-        * Subclasses can override this to provide their own method for 
generating Swagger.
-        *
         * @param context The context of the {@link Rest}-annotated class.
         * @param locale The request locale.
-        * @return A new {@link Swagger} object.
+        * @return A new {@link Swagger} DTO object.
         * @throws Exception If an error occurred producing the Swagger.
         */
-       public Swagger getSwagger(RestContext context, Locale locale) throws 
Exception {
+       public Swagger getSwagger(RestContext context, Locale locale) throws 
Exception;
 
-               Class<?> c = context.getResourceClass();
-               FileFinder ff = fileFinder != null ? fileFinder : 
FileFinder.create().cp(c,null,false).build();
-               Messages mb = messages != null ? messages.forLocale(locale) : 
Messages.create(c).build().forLocale(locale);
-               VarResolverSession vrs = 
vr.createSession().bean(Messages.class, mb);
-               SwaggerProviderSession session = new 
SwaggerProviderSession(context, locale, ff, messages, vrs, js.createSession());
-
-               return session.getSwagger();
-       }
 }
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
index f8d89f6..7c48002 100644
--- 
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
@@ -35,12 +35,16 @@ public class SwaggerProviderBuilder {
 
        /**
         * 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 = implClass == null 
? SwaggerProvider.class : implClass;
+                       Class<? extends SwaggerProvider> ic = (implClass == 
null || implClass == SwaggerProvider.class) ? BasicSwaggerProvider.class : 
implClass;
                        return 
BeanFactory.of(beanFactory).addBean(SwaggerProviderBuilder.class, 
this).createBean(ic);
                } catch (Exception e) {
                        throw toHttpException(e, InternalServerError.class);
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index b942c4a..bc33d22 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -1138,26 +1138,7 @@ public @interface Rest {
        /**
         * Configuration property:  Swagger provider.
         *
-        * <p>
-        * Class used to retrieve swagger information about a resource.
-        *
-        * <ul class='notes'>
-        *      <li>
-        *              The default info provider if not specified is {@link 
SwaggerProvider}.
-        *      <li>
-        *              The resource class itself will be used if it implements 
the {@link SwaggerProvider} interface and not
-        *              explicitly overridden via this annotation.
-        *      <li>
-        *              The implementation must have one of the following 
constructors:
-        *              <ul>
-        *                      <li><code><jk>public</jk> T(RestContext)</code>
-        *                      <li><code><jk>public</jk> T()</code>
-        *                      <li><code><jk>public static</jk> T 
<jsm>create</jsm>(RestContext)</code>
-        *                      <li><code><jk>public static</jk> T 
<jsm>create</jsm>()</code>
-        *              </ul>
-        *      <li>
-        *              Inner classes of the REST resource class are allowed.
-        * </ul>
+        * TODO
         *
         * <ul class='seealso'>
         *      <li class='jf'>{@link RestContext#REST_swaggerProvider}
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index 475248a..89944c4 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -93,7 +93,7 @@ public class RestAnnotation {
                Class<? extends RestContext> contextClass = 
RestContext.Null.class;
                Class<? extends RestConverter>[] converters = new Class[0];
                Class<? extends RestGuard>[] guards = new Class[0];
-               Class<? extends SwaggerProvider> 
swaggerProvider=SwaggerProvider.Null.class;
+               Class<? extends SwaggerProvider> swaggerProvider = 
SwaggerProvider.Null.class;
                Class<? extends RestOperationParam>[] restOperationParams = new 
Class[0];
                Class<? extends BeanFactory> beanFactory = 
BeanFactory.Null.class;
                Class<? extends RestOperationContext> restOperationContextClass 
= RestOperationContext.Null.class;

Reply via email to