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 ec1dc5f  Clean up builders.
ec1dc5f is described below

commit ec1dc5fc3cbe051872fc821d4f3a9dd3b9bdd6db
Author: JamesBognar <[email protected]>
AuthorDate: Sun Aug 8 13:17:00 2021 -0400

    Clean up builders.
---
 .../java/org/apache/juneau/ContextBuilder.java     | 22 ++++++++
 .../java/org/apache/juneau/rest/RestContext.java   |  4 +-
 .../org/apache/juneau/rest/RestContextBuilder.java | 27 ++++------
 .../juneau/rest/RestOperationContextBuilder.java   | 59 +++++-----------------
 4 files changed, 47 insertions(+), 65 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index 707eab6..49eb13c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -53,6 +53,7 @@ public abstract class ContextBuilder {
        private final ContextPropertiesBuilder cpb;
 
        boolean debug;
+       Class<? extends Context> contextClass;
 
        /**
         * Constructor.
@@ -83,6 +84,27 @@ public abstract class ContextBuilder {
        public abstract Context build();
 
        /**
+        * Associates a context class with this builder.
+        *
+        * @param value The context class that this builder should create.
+        * @return This object (for method chaining).
+        */
+       @FluentSetter
+       public ContextBuilder contextClass(Class<? extends Context> value) {
+               this.contextClass = value;
+               return this;
+       }
+
+       /**
+        * Returns the context class that this builder should create.
+        *
+        * @return The context class if it was specified.
+        */
+       public Optional<Class<?>> getContextClass() {
+               return Optional.ofNullable(contextClass);
+       }
+
+       /**
         * Copies the settings from the specified property store into this 
builder.
         *
         * <h5 class='section'>Example:</h5>
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 80b5f97..e86cb57 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
@@ -5493,7 +5493,7 @@ public class RestContext extends BeanContext {
                                        RestOperationContext roc = 
RestOperationContext
                                                .create(mi.inner(), this)
                                                .beanStore(beanStore)
-                                               
.implClass(properties.getClass(REST_restOperationContextClass, 
RestOperationContext.class).orElse(null))
+                                               
.contextClass(properties.getClass(REST_restOperationContextClass, 
RestOperationContext.class).orElse(null))
                                                .build();
 
                                        String httpMethod = roc.getHttpMethod();
@@ -5507,7 +5507,7 @@ public class RestContext extends BeanContext {
                                                        .create(mi.inner(), 
this)
                                                        .dotAll()
                                                        
.beanStore(rootBeanStore)
-                                                       
.implClass(RrpcRestOperationContext.class)
+                                                       
.contextClass(RrpcRestOperationContext.class)
                                                        .build();
                                                x
                                                        .add("GET", roc2)
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 edeb1e4..c735f31 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
@@ -188,10 +188,16 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
                }
        }
 
+       @SuppressWarnings("unchecked")
        @Override /* BeanContextBuilder */
        public RestContext build() {
                try {
-                       Class<? extends RestContext> c = 
getContextProperties().getClass(REST_contextClass, 
RestContext.class).orElse(getDefaultImplClass());
+                       // Temporary.
+                       Class<? extends RestContext> c = 
getContextProperties().getClass(REST_contextClass, 
RestContext.class).orElse(null);
+                       if (c != null)
+                               contextClass(c);
+
+                       c = (Class<? extends 
RestContext>)getContextClass().orElse(getDefaultImplClass());
                        return BeanStore.of(beanStore, 
resource.get()).addBeans(RestContextBuilder.class, this).createBean(c);
                } catch (Exception e) {
                        throw toHttpException(e, InternalServerError.class);
@@ -743,22 +749,11 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
                return set(REST_clientVersionHeader, value);
        }
 
-       /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  REST 
context class.
-        *
-        * <p>
-        * Allows you to extend the {@link RestContext} class to modify how any 
of the methods are implemented.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_contextClass}
-        * </ul>
-        *
-        * @param value The new value for this setting.
-        * @return This object (for method chaining).
-        */
+       @Override
        @FluentSetter
-       public RestContextBuilder contextClass(Class<? extends RestContext> 
value) {
-               return set(REST_contextClass, value);
+       public RestContextBuilder contextClass(Class<? extends Context> value) {
+               super.contextClass(value);
+               return this;
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
index 91685ef..3352f66 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
@@ -42,17 +42,17 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        Method restMethod;
 
        private BeanStore beanStore;
-       private Class<? extends RestOperationContext> implClass;
 
+       @SuppressWarnings("unchecked")
        @Override /* BeanContextBuilder */
        public RestOperationContext build() {
                try {
-                       ContextProperties cp = getContextProperties();
-
-                       Class<? extends RestOperationContext> ic = implClass;
-                       if (ic == null)
-                               ic = cp.getClass(RESTOP_contextClass, 
RestOperationContext.class).orElse(getDefaultImplClass());
+                       // Temporary.
+                       Class<? extends RestOperationContext> c = 
getContextProperties().getClass(RESTOP_contextClass, 
RestOperationContext.class).orElse(null);
+                       if (c != null)
+                               contextClass(c);
 
+                       Class<? extends RestOperationContext> ic = (Class<? 
extends RestOperationContext>) getContextClass().orElse(getDefaultImplClass());
                        return 
BeanStore.of(beanStore).addBean(RestOperationContextBuilder.class, 
this).createBean(ic);
                } catch (Exception e) {
                        throw toHttpException(e, InternalServerError.class);
@@ -60,9 +60,9 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        }
 
        /**
-        * Specifies the default implementation class if not specified via 
{@link #implClass(Class)}.
+        * Specifies the default implementation class if not specified via 
{@link #contextClass(Class)}.
         *
-        * @return The default implementation class if not specified via {@link 
#implClass(Class)}.
+        * @return The default implementation class if not specified via {@link 
#contextClass(Class)}.
         */
        protected Class<? extends RestOperationContext> getDefaultImplClass() {
                return RestOperationContext.class;
@@ -98,29 +98,6 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
                return this;
        }
 
-
-       /**
-        * Specifies a {@link RestOperationContext} implementation subclass to 
use.
-        *
-        * <p>
-        * When specified, the {@link #build()} method will create an instance 
of that class instead of the default {@link RestOperationContext}.
-        *
-        * <p>
-        * The subclass must have a public constructor that takes in any of the 
following arguments:
-        * <ul>
-        *      <li>{@link RestOperationContextBuilder} - This object.
-        *      <li>Any beans found in the specified {@link 
#beanStore(BeanStore) bean store}.
-        *      <li>Any {@link Optional} beans that may or may not be found in 
the specified {@link #beanStore(BeanStore) bean store}.
-        * </ul>
-        *
-        * @param implClass The implementation class to build.
-        * @return This object (for method chaining).
-        */
-       public RestOperationContextBuilder implClass(Class<? extends 
RestOperationContext> implClass) {
-               this.implClass = implClass;
-               return this;
-       }
-
        /**
         * Specifies a {@link BeanStore} to use when resolving constructor 
arguments.
         *
@@ -154,23 +131,11 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
                return set(RESTOP_clientVersion, value);
        }
 
-       /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
REST method context class.
-        *
-        * Allows you to extend the {@link RestOperationContext} class to 
modify how any of the methods are implemented.
-        *
-        * <p>
-        * The subclass must provide the following:
-        * <ul>
-        *      <li>A public constructor that takes in one parameter that 
should be passed to the super constructor:  {@link RestOperationContextBuilder}.
-        * </ul>
-        *
-        * @param value The new value for this setting.
-        * @return This object (for method chaining).
-        */
+       @Override
        @FluentSetter
-       public RestOperationContextBuilder contextClass(Class<? extends 
RestOperationContext> value) {
-               return set(RESTOP_contextClass, value);
+       public RestOperationContextBuilder contextClass(Class<? extends 
Context> value) {
+               super.contextClass(value);
+               return this;
        }
 
        /**

Reply via email to