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

commit 57d11ebd612a2dc93dbb05c649a4eac2a25a838e
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 19 18:28:49 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/rest/RestOpContext.java | 38 +---------------
 .../apache/juneau/rest/RestOpContextBuilder.java   | 52 ++++++++++++++++++++--
 2 files changed, 49 insertions(+), 41 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 afe723a..612cf85 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
@@ -151,6 +151,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        parsers = bs.add(ParserGroup.class, 
builder.getParsers().orElse(context.getParsers()));
                        partSerializer = bs.add(HttpPartSerializer.class, 
builder.getPartSerializer().orElse(context.getPartSerializer()));
                        partParser = bs.add(HttpPartParser.class, 
builder.getPartParser().orElse(context.getPartParser()));
+                       jsonSchemaGenerator = bs.add(JsonSchemaGenerator.class, 
builder.getJsonSchemaGenerator().orElse(context.getJsonSchemaGenerator()));
                        converters = bs.add(RestConverter[].class, 
builder.converters().build().asArray());
                        guards = bs.add(RestGuard[].class, 
builder.getGuards().asArray());
 
@@ -161,9 +162,6 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
                        pathMatchers = bs.add(UrlPathMatcher[].class, 
builder.getPathMatchers().asArray());
                        bs.addBean(UrlPathMatcher.class, pathMatchers.length > 
0 ? pathMatchers[0] : null);
 
-                       jsonSchemaGenerator = createJsonSchemaGenerator(r, 
builder, bs);
-                       bs.addBean(JsonSchemaGenerator.class, 
jsonSchemaGenerator);
-
                        supportedAcceptTypes = 
unmodifiableList(ofNullable(builder.produces).orElse(serializers.getSupportedMediaTypes()));
                        supportedContentTypes = 
unmodifiableList(ofNullable(builder.consumes).orElse(parsers.getSupportedMediaTypes()));
 
@@ -213,40 +211,6 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        }
 
        /**
-        * Instantiates the JSON-schema generator for this method.
-        *
-        * @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 JSON-schema generator for this method.
-        * @throws Exception If schema generator could not be instantiated.
-        */
-       protected JsonSchemaGenerator createJsonSchemaGenerator(Object 
resource, RestOpContextBuilder builder, BeanStore beanStore) throws Exception {
-
-               JsonSchemaGenerator x = null;
-
-               if (resource instanceof JsonSchemaGenerator)
-                       x = (JsonSchemaGenerator)resource;
-
-               if (x == null)
-                       x = 
beanStore.getBean(JsonSchemaGenerator.class).orElse(null);
-
-               if (x == null)
-                       x = 
JsonSchemaGenerator.create().apply(builder.getApplied()).build();
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(JsonSchemaGenerator.class, x)
-                       .createMethodFinder(JsonSchemaGenerator.class, resource)
-                       .find("createJsonSchemaGenerator", Method.class)
-                       .thenFind("createJsonSchemaGenerator")
-                       .withDefault(x)
-                       .run();
-
-               return x;
-       }
-
-       /**
         * Instantiates the default request headers 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 b5d01b6..4d67c3d 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,6 +32,7 @@ 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.jsonschema.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
@@ -66,6 +67,7 @@ public class RestOpContextBuilder extends ContextBuilder {
        private HttpPartSerializer.Creator partSerializer;
        private HttpPartParser.Creator partParser;
        private RestMatcherList.Builder matchers;
+       private JsonSchemaGeneratorBuilder jsonSchemaGenerator;
 
        PartList.Builder defaultFormData, defaultQueryData;
        NamedAttributeList defaultRequestAttributes;
@@ -139,6 +141,8 @@ public class RestOpContextBuilder extends ContextBuilder {
                                partSerializer().apply(al);
                        if (context.builder.partParser().canApply(al))
                                partParser().apply(al);
+                       if (context.builder.jsonSchemaGenerator().canApply(al))
+                               jsonSchemaGenerator().apply(al);
 
                } catch (Exception e) {
                        throw toHttpException(e, InternalServerError.class);
@@ -431,6 +435,46 @@ public class RestOpContextBuilder extends ContextBuilder {
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
+       // jsonSchemaGenerator
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the {@link JsonSchemaGenerator} object in 
the REST context.
+        *
+        * @return The builder for the {@link JsonSchemaGenerator} object in 
the REST context.
+        */
+       public final JsonSchemaGeneratorBuilder jsonSchemaGenerator() {
+               if (jsonSchemaGenerator == null)
+                       jsonSchemaGenerator = 
createJsonSchemaGenerator(beanStore(), parent, resource());
+               return jsonSchemaGenerator;
+       }
+
+       /**
+        * Constructs the JSON schema generator 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 JsonSchemaGeneratorBuilder 
createJsonSchemaGenerator(BeanStore beanStore, RestContextBuilder parent, 
Supplier<?> resource) {
+
+               // Default value.
+               Value<JsonSchemaGeneratorBuilder> v = Value.of(
+                       parent.jsonSchemaGenerator().copy()
+               );
+
+               return v.get();
+       }
+
+       final Optional<JsonSchemaGenerator> getJsonSchemaGenerator() {
+               return jsonSchemaGenerator == null ? empty() : 
of(jsonSchemaGenerator.build());
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
        // converters
        
//-----------------------------------------------------------------------------------------------------------------
 
@@ -852,6 +896,10 @@ public class RestOpContextBuilder extends ContextBuilder {
                return this;
        }
 
+       
//----------------------------------------------------------------------------------------------------
+       // Properties
+       
//----------------------------------------------------------------------------------------------------
+
        /**
         * Specifies a {@link BeanStore} to use when resolving constructor 
arguments.
         *
@@ -863,10 +911,6 @@ public class RestOpContextBuilder extends ContextBuilder {
                return this;
        }
 
-       
//----------------------------------------------------------------------------------------------------
-       // Properties
-       
//----------------------------------------------------------------------------------------------------
-
        /**
         * Client version pattern matcher.
         *

Reply via email to