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

commit d3d8fe9a814e87b425b894428671786ebdf7497b
Author: JamesBognar <james.bog...@salesforce.com>
AuthorDate: Sun Sep 19 17:24:35 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/rest/RestOpContext.java | 59 +---------------------
 .../apache/juneau/rest/RestOpContextBuilder.java   | 59 +++++++++++++++-------
 2 files changed, 42 insertions(+), 76 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index 957fb69..8ff1f87 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -48,7 +48,6 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.httppart.bean.*;
 import org.apache.juneau.internal.HttpUtils;
 import org.apache.juneau.jsonschema.*;
-import org.apache.juneau.oapi.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
@@ -152,10 +151,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        serializers = bs.add(SerializerGroup.class, 
builder.getSerializers().orElse(context.getSerializers()));
                        parsers = bs.add(ParserGroup.class, 
builder.getParsers().orElse(context.getParsers()));
                        partSerializer = bs.add(HttpPartSerializer.class, 
builder.getPartSerializer().orElse(context.getPartSerializer()));
-
-                       partParser = createPartParser(r, builder, bs);
-                       bs.addBean(HttpPartParser.class, partParser);
-
+                       partParser = bs.add(HttpPartParser.class, 
builder.getPartParser().orElse(context.getPartParser()));
                        converters = bs.add(RestConverter[].class, 
builder.converters().build().asArray());
 
                        guards = createGuards(r, builder, bs).asArray();
@@ -325,59 +321,6 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        }
 
        /**
-        * Instantiates the HTTP part parser for this REST resource.
-        *
-        * <p>
-        * Instantiates based on the following logic:
-        * <ul>
-        *      <li>Returns the resource class itself is an instance of {@link 
HttpPartParser}.
-        *      <li>Looks for part parser set via any of the following:
-        *              <ul>
-        *                      <li>{@link RestContextBuilder#partParser()}
-        *                      <li>{@link Rest#partParser()}.
-        *              </ul>
-        *      <li>Looks for a static or non-static <c>createPartParser()</> 
method that returns <c>{@link HttpPartParser}</c> 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 an {@link OpenApiSerializer}.
-        * </ul>
-        *
-        * @param resource The REST resource object.
-        * @param builder The builder for this object.
-        * @param beanStore The bean store to use for retrieving and creating 
beans.
-        * @return The HTTP part parser for this REST resource.
-        * @throws Exception If parser could not be instantiated.
-        */
-       protected HttpPartParser createPartParser(Object resource, 
RestOpContextBuilder builder, BeanStore beanStore) throws Exception {
-
-               HttpPartParser g = 
beanStore.getBean(HttpPartParser.class).orElse(null);
-
-               if (g != null)
-                       return g;
-
-               HttpPartParser.Creator x = builder.partParser;
-
-               if (x == null)
-                       x = builder.restContext.builder.partParser();
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(HttpPartParser.Creator.class, x)
-                       .createMethodFinder(HttpPartParser.Creator.class, 
resource)
-                       .find("createPartParser", Method.class)
-                       .thenFind("createPartParser")
-                       .withDefault(x)
-                       .run();
-
-               return x.create();
-       }
-
-       /**
         * Instantiates the path matchers for this method.
         *
         * @param resource The REST resource object.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
index 35c5b04..1aec019 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
@@ -32,7 +32,6 @@ import org.apache.juneau.http.remote.*;
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.oapi.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
@@ -136,7 +135,7 @@ public class RestOpContextBuilder extends ContextBuilder {
                        if (context.builder.partSerializer().canApply(al))
                                partSerializer().apply(al);
                        if (context.builder.partParser().canApply(al))
-                               getPartParser().apply(al);
+                               partParser().apply(al);
 
                } catch (Exception e) {
                        throw toHttpException(e, InternalServerError.class);
@@ -389,6 +388,46 @@ public class RestOpContextBuilder extends ContextBuilder {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
+       // partParser
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the {@link HttpPartParser} object in the 
REST context.
+        *
+        * @return The builder for the {@link HttpPartParser} object in the 
REST context.
+        */
+       public final HttpPartParser.Creator partParser() {
+               if (partParser == null)
+                       partParser = createPartParser(beanStore(), parent, 
resource());
+               return partParser;
+       }
+
+       /**
+        * Constructs the part parser builder for this REST method.
+        *
+        * @param beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param parent
+        *      The builder for the REST resource class.
+        * @param resource
+        *      The REST servlet/bean instance that this context is defined 
against.
+        * @return The part serializer builder for this REST resource.
+        */
+       protected HttpPartParser.Creator createPartParser(BeanStore beanStore, 
RestContextBuilder parent, Supplier<?> resource) {
+
+               // Default value.
+               Value<HttpPartParser.Creator> v = Value.of(
+                       parent.partParser().copy()
+               );
+
+               return v.get();
+       }
+
+       final Optional<HttpPartParser> getPartParser() {
+               return partParser == null ? empty() : of(partParser.create());
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
        // converters
        
//-----------------------------------------------------------------------------------------------------------------
 
@@ -543,22 +582,6 @@ public class RestOpContextBuilder extends ContextBuilder {
                return this;
        }
 
-       /**
-        * Returns the HTTP part parser creator containing the part parser for 
parsing HTTP parts into POJOs.
-        *
-        * <p>
-        * The default value is {@link OpenApiParser} which allows for both 
plain-text and URL-Encoded-Object-Notation values.
-        * <br>If your parts contain text that can be confused with UON (e.g. 
<js>"(foo)"</js>), you can switch to
-        * {@link SimplePartParser} which treats everything as plain text.
-        *
-        * @return The HTTP part parser creator.
-        */
-       public HttpPartParser.Creator getPartParser() {
-               if (partParser == null)
-                       partParser = restContext.builder.partParser().copy();
-               return partParser;
-       }
-
        
//----------------------------------------------------------------------------------------------------
        // Properties
        
//----------------------------------------------------------------------------------------------------

Reply via email to