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

commit 0bc8874be4647a1dc54fb4d888d9ce4f979bf36f
Author: JamesBognar <[email protected]>
AuthorDate: Sun Jan 24 12:45:52 2021 -0500

    REST refactoring.
---
 .../java/org/apache/juneau/rest/BasicFileFinder.java |  4 ++--
 .../apache/juneau/rest/BasicRestInfoProvider.java    |  2 +-
 .../org/apache/juneau/rest/BasicStaticFiles.java     |  4 ++--
 .../java/org/apache/juneau/rest/RestContext.java     | 20 ++++++++++++++++++--
 .../org/apache/juneau/rest/RestContextBuilder.java   | 11 ++++++-----
 .../apache/juneau/rest/RestMethodContextBuilder.java |  2 +-
 .../java/org/apache/juneau/rest/RestRequest.java     |  9 +++++++++
 .../org/apache/juneau/rest/SwaggerGenerator.java     |  6 ++----
 .../java/org/apache/juneau/rest/vars/RequestVar.java |  4 ++--
 9 files changed, 43 insertions(+), 19 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
index 3b9ebc7..961ad48 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
@@ -44,8 +44,8 @@ public class BasicFileFinder extends FileFinder {
                        .create()
                        .dir("static")
                        .dir("htdocs")
-                       .cp(context.getResource().getClass(), "htdocs", true)
-                       .cp(context.getResource().getClass(), "/htdocs", true)
+                       .cp(context.getResourceClass(), "htdocs", true)
+                       .cp(context.getResourceClass(), "/htdocs", true)
                        .caching(1_000_000)
                        .exclude("(?i).*\\.(class|properties)")
                );
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
index 299ab68..d48f812 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
@@ -66,7 +66,7 @@ public class BasicRestInfoProvider implements 
RestInfoProvider {
                        description;
 
                Builder(RestContext context) {
-                       ClassInfo ci = ClassInfo.ofProxy(context.getResource());
+                       ClassInfo ci = ClassInfo.of(context.getResourceClass());
                        for (Rest r : ci.getAnnotations(Rest.class)) {
                                if (! r.siteName().isEmpty())
                                        siteName = r.siteName();
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
index eb1f7f1..b3e091c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
@@ -47,8 +47,8 @@ public class BasicStaticFiles extends StaticFiles {
                        .create()
                        .dir("static")
                        .dir("htdocs")
-                       .cp(context.getResource().getClass(), "htdocs", true)
-                       .cp(context.getResource().getClass(), "/htdocs", true)
+                       .cp(context.getResourceClass(), "htdocs", true)
+                       .cp(context.getResourceClass(), "/htdocs", true)
                        .caching(1_000_000)
                        .exclude("(?i).*\\.(class|properties)")
                        .headers(CacheControl.of("max-age=86400, public"))
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 9c103d9..d70c08e 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
@@ -3385,6 +3385,7 @@ public class RestContext extends BeanContext {
        
//-------------------------------------------------------------------------------------------------------------------
 
        private final Supplier<?> resource;
+       private final Class<?> resourceClass;
 
        final RestContextBuilder builder;
        private final boolean
@@ -3495,7 +3496,8 @@ public class RestContext extends BeanContext {
                try {
                        this.builder = builder;
 
-                       this.resource = builder.resource instanceof Supplier ? 
(Supplier<?>)builder.resource : ()->builder.resource;
+                       this.resourceClass = builder.resourceClass;
+                       this.resource = builder.resource;
                        Object r = getResource();
 
                        parentContext = builder.parentContext;
@@ -4842,7 +4844,12 @@ public class RestContext extends BeanContext {
                                if (oc == builder.resourceClass)
                                        continue;
                                cb = RestContext.create(this, builder.inner, 
oc, null);
-                               o = BeanFactory.of(beanFactory, 
resource).addBean(RestContextBuilder.class, cb).createBean(oc);
+                               BeanFactory bf = BeanFactory.of(beanFactory, 
resource).addBean(RestContextBuilder.class, cb);
+                               if (bf.getBean(oc).isPresent()) {
+                                       o = 
(Supplier<?>)()->bf.getBean(oc).get();  // If we resolved via injection, always 
get it this way.
+                               } else {
+                                       o = bf.createBean(oc);
+                               }
                        } else {
                                cb = RestContext.create(this, builder.inner, 
o.getClass(), o);
                        }
@@ -5597,6 +5604,15 @@ public class RestContext extends BeanContext {
        }
 
        /**
+        * Returns the resource class type.
+        *
+        * @return The resource class type.
+        */
+       public Class<?> getResourceClass() {
+               return resourceClass;
+       }
+
+       /**
         * Returns the timing information returned by {@link 
#getMethodExecStats()} in a readable format.
         *
         * @return A report of all method execution times ordered by .
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 be2f879..06b8e92 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
@@ -106,7 +106,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
        // Read-only snapshots of these will be made in RestServletContext.
        
//-----------------------------------------------------------------------------------------------------------------
 
-       Object resource;
+       Supplier<?> resource;
        ServletContext servletContext;
 
        Config config;
@@ -185,7 +185,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
                try {
                        PropertyStore ps = getPropertyStore();
                        Class<? extends RestContext> c = 
ps.getClassProperty(REST_contextClass, RestContext.class, RestContext.class);
-                       BeanFactory bf = BeanFactory.of(beanFactory, resource);
+                       BeanFactory bf = BeanFactory.of(beanFactory, 
resource.get());
                        bf.addBean(RestContextBuilder.class, this);
                        return bf.createBean(c);
                } catch (Exception e) {
@@ -228,8 +228,9 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
        protected Config createConfig(Class<?> resourceClass, BeanFactory 
beanFactory) throws Exception {
                ClassInfo rci = ClassInfo.of(resourceClass);
                Config x = null;
-               if (resource instanceof Config)
-                       x = (Config)resource;
+               Object o = resource == null ? null : resource.get();
+               if (o instanceof Config)
+                       x = (Config)o;
                if (x == null)
                        x = beanFactory.getBean(Config.class).orElse(null);
 
@@ -257,7 +258,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
         * Calls all @RestHook(INIT) methods on the specified resource object.
         */
        RestContextBuilder init(Object resource) throws ServletException {
-               this.resource = resource;
+               this.resource = resource instanceof Supplier ? 
(Supplier<?>)resource : ()->resource;
 
                ClassInfo rci = ClassInfo.ofProxy(resource);
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
index a542074..f923dd0 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
@@ -64,7 +64,7 @@ public class RestMethodContextBuilder extends 
BeanContextBuilder {
                this.beanFactory = context.rootBeanFactory;
 
                String sig = method.getDeclaringClass().getName() + '.' + 
method.getName();
-               MethodInfo mi = MethodInfo.of(context.getResource().getClass(), 
method);
+               MethodInfo mi = MethodInfo.of(context.getResourceClass(), 
method);
 
                try {
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index b61c981..d26a95c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -1633,6 +1633,15 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
                return inner;
        }
 
+       /**
+        * Returns the REST object of this call.
+        *
+        * @return The REST object of this call.
+        */
+       public Object getResource() {
+               return call.getResource();
+       }
+
        <T> ClassMeta<T> getClassMeta(Type type, Type[] args) {
                return beanSession.getClassMeta(type, args);
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
index a9d9016..6e2a216 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
@@ -61,7 +61,6 @@ final class SwaggerGenerator {
        private final JsonParser jp = 
JsonParser.create().ignoreUnknownBeanProperties().build();
        private final JsonSchemaGeneratorSession js;
        private final Class<?> c;
-       private final Object resource;
        private final Messages mb;
        private final FileFinder fileFinder;
 
@@ -78,8 +77,7 @@ final class SwaggerGenerator {
                this.locale = locale;
                this.context = context;
                this.js = context.getJsonSchemaGenerator().createSession();
-               this.c = context.getResource().getClass();
-               this.resource = context.getResource();
+               this.c = context.getResourceClass();
                this.mb = context.getMessages().forLocale(locale);
                this.fileFinder = fileFinder == null ? context.getFileFinder() 
: fileFinder;
        }
@@ -97,7 +95,7 @@ final class SwaggerGenerator {
         */
        public Swagger getSwagger() throws Exception {
 
-               ClassInfo rci = ClassInfo.ofProxy(resource);
+               ClassInfo rci = ClassInfo.of(c);
 
                rci.getSimpleName();
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
index 861dbec..ace5013 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
@@ -117,9 +117,9 @@ public class RequestVar extends MultipartResolvingVar {
                                return req.getResourceTitle();
                } else if (c == 's') {
                        if ("servletClass".equals(key))
-                               return 
req.getContext().getResource().getClass().getName();
+                               return 
req.getContext().getResourceClass().getName();
                        if ("servletClassSimple".equals(key))
-                               return 
req.getContext().getResource().getClass().getSimpleName();
+                               return 
req.getContext().getResourceClass().getSimpleName();
                        if ("servletParentURI".equals(key))
                                return 
req.getUriContext().getRootRelativeServletPathParent();
                        if ("servletPath".equals(key))

Reply via email to