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 8505d89  Context API refactoring.
8505d89 is described below

commit 8505d89f361d4028e28810456b5122218502496f
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 12 19:35:40 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/rest/RestContext.java   | 53 +------------
 .../org/apache/juneau/rest/RestContextBuilder.java | 87 ++++++++++++++++++++--
 2 files changed, 83 insertions(+), 57 deletions(-)

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 61d1b94..ab3abc0 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
@@ -53,7 +53,6 @@ import org.apache.juneau.mstat.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.args.*;
 import org.apache.juneau.rest.logging.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.response.*;
@@ -266,11 +265,10 @@ public class RestContext extends Context {
                        defaultResponseHeaders = 
bs.add("RestContext.defaultResponseHeaders", 
builder.defaultResponseHeaders().build());
                        defaultRequestAttributes = 
bs.add("RestContext.defaultRequestAttributes", 
builder.defaultRequestAttributes());
                        restOpArgs = builder.restOpArgs().build().asArray();
+                       hookMethodArgs = 
builder.hookMethodArgs().build().asArray();
 
                        Object r = resource.get();
 
-                       hookMethodArgs = createHookMethodArgs(r, builder, 
bs).asArray();
-
                        uriContext = builder.uriContext;
                        uriAuthority = builder.uriAuthority;
                        uriResolution = builder.uriResolution;
@@ -361,55 +359,6 @@ public class RestContext extends Context {
        }
 
        /**
-        * Instantiates the hook method parameter resolvers for this REST 
resource.
-        *
-        * @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()}.
-        * @return The REST method parameter resolvers for this REST resource.
-        * @throws Exception If parameter resolvers could not be instantiated.
-        */
-       protected RestOpArgList createHookMethodArgs(Object resource, 
RestContextBuilder builder, BeanStore beanStore) throws Exception {
-
-               RestOpArgList.Builder x = RestOpArgList.create();
-
-               x.add(
-                       ConfigArg.class,
-                       HeaderArg.class,
-                       HttpServletRequestArg.class,
-                       HttpServletResponseArg.class,
-                       InputStreamArg.class,
-                       LocaleArg.class,
-                       MessagesArg.class,
-                       MethodArg.class,
-                       OutputStreamArg.class,
-                       ReaderArg.class,
-                       ResourceBundleArg.class,
-                       RestContextArg.class,
-                       RestRequestArg.class,
-                       ServetInputStreamArg.class,
-                       ServletOutputStreamArg.class,
-                       TimeZoneArg.class,
-                       WriterArg.class,
-                       DefaultArg.class
-               );
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(RestOpArgList.Builder.class, x)
-                       .beanCreateMethodFinder(RestOpArgList.Builder.class, 
resource)
-                       .find("createHookMethodArgs")
-                       .withDefault(x)
-                       .run();
-
-               return x.build();
-       }
-
-       /**
         * Instantiates the REST info provider for this REST resource.
         *
         * <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 989b6dc..ff04570 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
@@ -137,10 +137,9 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
        private JsonSchemaGeneratorBuilder jsonSchemaGenerator;
        private FileFinder.Builder fileFinder;
        private StaticFiles.Builder staticFiles;
-       private HeaderList.Builder defaultRequestHeaders;
-       private HeaderList.Builder defaultResponseHeaders;
+       private HeaderList.Builder defaultRequestHeaders, 
defaultResponseHeaders;
        private NamedAttributeList defaultRequestAttributes;
-       private RestOpArgList.Builder restOpArgs;
+       private RestOpArgList.Builder restOpArgs, hookMethodArgs;
 
        String
                allowedHeaderParams = env("RestContext.allowedHeaderParams", 
"Accept,Content-Type"),
@@ -2482,7 +2481,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
                Value<RestOpArgList.Builder> v = Value.empty();
                Object r = resource.get();
 
-               beanStore.getBean(RestOpArgList.Builder.class).map(x -> 
x.copy()).ifPresent(x -> v.set(x));
+               beanStore.getBean("RestContext.restOpArgs", 
RestOpArgList.Builder.class).map(x -> x.copy()).ifPresent(x -> v.set(x));
 
                if (v.isEmpty()) {
                        v.set(
@@ -2533,7 +2532,7 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
                        );
                }
 
-               beanStore.getBean(RestOpArgList.class).ifPresent(x -> 
v.get().impl(x));
+               beanStore.getBean("RestContext.restOpArgs", 
RestOpArgList.class).ifPresent(x -> v.get().impl(x));
 
                BeanStore
                        .of(beanStore, r)
@@ -2554,6 +2553,84 @@ public class RestContextBuilder extends ContextBuilder 
implements ServletConfig
                return v.get();
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // hookMethodArgs
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the default requests attributes in the REST 
context.
+        *
+        * @return The builder for the default request attributer object in the 
REST context.
+        */
+       public final RestOpArgList.Builder hookMethodArgs() {
+               if (hookMethodArgs == null)
+                       hookMethodArgs = createHookMethodArgs(beanStore(), 
resource());
+               return hookMethodArgs;
+       }
+
+       /**
+        * Instantiates the hook method parameter resolvers for this REST 
resource.
+        *
+        * @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 REST method parameter resolvers for this REST resource.
+        */
+       protected RestOpArgList.Builder createHookMethodArgs(BeanStore 
beanStore, Supplier<?> resource) {
+
+
+               Value<RestOpArgList.Builder> v = Value.empty();
+               Object r = resource.get();
+
+               beanStore.getBean("RestContext.hookMethodArgs", 
RestOpArgList.Builder.class).map(x -> x.copy()).ifPresent(x -> v.set(x));
+
+               if (v.isEmpty()) {
+                       v.set(
+                               RestOpArgList
+                                       .of(
+                                               ConfigArg.class,
+                                               HeaderArg.class,
+                                               HttpServletRequestArg.class,
+                                               HttpServletResponseArg.class,
+                                               InputStreamArg.class,
+                                               LocaleArg.class,
+                                               MessagesArg.class,
+                                               MethodArg.class,
+                                               OutputStreamArg.class,
+                                               ReaderArg.class,
+                                               ResourceBundleArg.class,
+                                               RestContextArg.class,
+                                               RestRequestArg.class,
+                                               ServetInputStreamArg.class,
+                                               ServletOutputStreamArg.class,
+                                               TimeZoneArg.class,
+                                               WriterArg.class,
+                                               DefaultArg.class
+                                       )
+                       );
+               }
+
+               beanStore.getBean("RestContext.hookMethodArgs", 
RestOpArgList.class).ifPresent(x -> v.get().impl(x));
+
+               BeanStore
+                       .of(beanStore, r)
+                       .addBean(RestOpArgList.Builder.class, v.get())
+                       .beanCreateMethodFinder(RestOpArgList.Builder.class, r)
+                       .find("createHookMethodArgs")
+                       .execute()
+                       .ifPresent(x -> v.set(x));
+
+               BeanStore
+                       .of(beanStore, r)
+                       .addBean(RestOpArgList.Builder.class, v.get())
+                       .beanCreateMethodFinder(RestOpArgList.class, r)
+                       .find("createHookMethodArgs")
+                       .execute()
+                       .ifPresent(x -> v.get().impl(x));
+
+               return v.get();
+       }
 
        
//----------------------------------------------------------------------------------------------------
        // Methods that give access to the config file, var resolver, and 
properties.

Reply via email to