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

commit 168fae0f2e032754b4edc7813f8e73ae2bb75314
Author: JamesBognar <james.bog...@salesforce.com>
AuthorDate: Sun Aug 29 19:10:22 2021 -0400

    Context API refactoring.
---
 .../main/java/org/apache/juneau/utils/BeanRef.java | 78 ++++++++++++++++++++++
 .../java/org/apache/juneau/rest/RestContext.java   | 20 +++---
 .../org/apache/juneau/rest/RestContextBuilder.java | 43 +++++-------
 3 files changed, 105 insertions(+), 36 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/BeanRef.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/BeanRef.java
new file mode 100644
index 0000000..9f9c875
--- /dev/null
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/BeanRef.java
@@ -0,0 +1,78 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.utils;
+
+import static java.util.Optional.*;
+
+import java.util.*;
+
+/**
+ * Represents a holder for a bean or bean type.
+ * 
+ * @param <T> The bean type.
+ */
+public class BeanRef<T> {
+
+       private T value;
+       private Class<? extends T> type;
+
+       /**
+        * Creator.
+        *
+        * @param type The bean type.
+        * @return A new object.
+        */
+       public static <T> BeanRef<T> of(Class<T> type) {
+               return new BeanRef<>();
+       }
+
+       /**
+        * Sets the bean on this reference.
+        *
+        * @param value The bean.
+        * @return This object (for method chaining).
+        */
+       public BeanRef<T> value(T value) {
+               this.value = value;
+               return this;
+       }
+
+       /**
+        * Sets the bean type on this reference.
+        *
+        * @param value The bean type.
+        * @return This object (for method chaining).
+        */
+       public BeanRef<T> type(Class<? extends T> value) {
+               this.type = value;
+               return this;
+       }
+
+       /**
+        * Returns the bean on this reference if the reference contains an 
instantiated bean.
+        *
+        * @return The bean on this reference if the reference contains an 
instantiated bean.
+        */
+       public Optional<T> value() {
+               return ofNullable(value);
+       }
+
+       /**
+        * Returns the bean type on this reference if the reference contains a 
bean type.
+        *
+        * @return The bean type on this reference if the reference contains a 
bean type.
+        */
+       public Optional<Class<? extends T>> type() {
+               return ofNullable(type);
+       }
+}
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 6d4b785..9065918 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
@@ -1362,8 +1362,7 @@ public class RestContext extends BeanContext {
        final Charset defaultCharset;
        final long maxInput;
 
-       final RestLogger callLoggerDefault;
-       final Class<? extends RestLogger> callLoggerDefaultClass;
+       final BeanRef<RestLogger> callLoggerDefault;
 
        final Enablement debugDefault;
 
@@ -1473,7 +1472,6 @@ public class RestContext extends BeanContext {
                        responseProcessors = createResponseProcessors(r, 
builder, bf).toArray();
 
                        callLoggerDefault = builder.callLoggerDefault;
-                       callLoggerDefaultClass = builder.callLoggerDefaultClass;
                        debugDefault = builder.debugDefault;
 
                        callLogger = createCallLogger(r, builder, bf, l, ts);
@@ -2018,13 +2016,13 @@ public class RestContext extends BeanContext {
                        x = (RestLogger)resource;
 
                if (x == null)
-                       x = builder.callLogger;
+                       x = builder.callLogger.value().orElse(null);
 
                if (x == null)
                        x = beanStore.getBean(RestLogger.class).orElse(null);
 
                if (x == null)
-                       x = builder.callLoggerDefault;
+                       x = builder.callLoggerDefault.value().orElse(null);
 
                if (x == null)
                        x = createCallLoggerBuilder(resource, builder, 
beanStore, logger, thrownStore).build();
@@ -2064,10 +2062,10 @@ public class RestContext extends BeanContext {
         */
        protected RestLoggerBuilder createCallLoggerBuilder(Object resource, 
RestContextBuilder builder, BeanStore beanStore, Logger logger, ThrownStore 
thrownStore) throws Exception {
 
-               Class<? extends RestLogger> c = builder.callLoggerClass;
+               Class<? extends RestLogger> c = 
builder.callLogger.type().orElse(null);
 
                if (c == null)
-                       c = builder.callLoggerDefaultClass;
+                       c = builder.callLoggerDefault.type().orElse(null);
 
                RestLoggerBuilder x = RestLogger
                        .create()
@@ -2593,7 +2591,7 @@ public class RestContext extends BeanContext {
         */
        protected SwaggerProvider createSwaggerProvider(Object resource, 
RestContextBuilder builder, BeanStore beanStore, FileFinder fileFinder, 
Messages messages, VarResolver varResolver) throws Exception {
 
-               SwaggerProvider x = builder.swaggerProvider;
+               SwaggerProvider x = 
builder.swaggerProvider.value().orElse(null);
 
                if (resource instanceof SwaggerProvider)
                        x = (SwaggerProvider)resource;
@@ -2637,7 +2635,7 @@ public class RestContext extends BeanContext {
         */
        protected SwaggerProviderBuilder createSwaggerProviderBuilder(Object 
resource, RestContextBuilder builder, BeanStore beanStore, FileFinder 
fileFinder, Messages messages, VarResolver varResolver) throws Exception {
 
-               Class<? extends SwaggerProvider> c = 
builder.swaggerProviderClass;
+               Class<? extends SwaggerProvider> c = 
builder.swaggerProvider.type().orElse(null);
 
                SwaggerProviderBuilder x = SwaggerProvider
                                .create()
@@ -3042,7 +3040,7 @@ public class RestContext extends BeanContext {
                        x = (DebugEnablement)resource;
 
                if (x == null)
-                       x = builder.debugEnablement;
+                       x = builder.debugEnablement.value().orElse(null);
 
                if (x == null)
                        x = 
beanStore.getBean(DebugEnablement.class).orElse(null);
@@ -3077,7 +3075,7 @@ public class RestContext extends BeanContext {
         */
        protected DebugEnablementBuilder createDebugEnablementBuilder(Object 
resource, RestContextBuilder builder, BeanStore beanStore) throws Exception {
 
-               Class<? extends DebugEnablement> c = 
builder.debugEnablementClass;
+               Class<? extends DebugEnablement> c = 
builder.debugEnablement.type().orElse(null);
 
                DebugEnablementBuilder x = DebugEnablement
                        .create()
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 570f35e..40c6dea 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
@@ -117,34 +117,28 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
                allowedMethodHeaders = env("RestContext.allowedMethodHeaders", 
""),
                allowedMethodParams = env("RestContext.allowedMethodParams", 
"HEAD,OPTIONS"),
                clientVersionHeader = env("RestContext.clientVersionHeader", 
"Client-Version"),
+               debugOn = env("RestContext.debugOn", null),
+               path = null,
                uriAuthority = env("RestContext.uriAuthority", (String)null),
-               uriContext = env("RestContext.uriContext", (String)null),
-               path;
+               uriContext = env("RestContext.uriContext", (String)null);
        UriRelativity uriRelativity = env("RestContext.uriRelativity", 
UriRelativity.RESOURCE);
        UriResolution uriResolution = env("RestContext.uriResolution", 
UriResolution.ROOT_RELATIVE);
        Charset defaultCharset = env("RestContext.defaultCharset", 
IOUtils.UTF8);
        long maxInput = parseLongWithSuffix(env("RestContext.maxInput", 
"100M"));
        List<MediaType> consumes, produces;
        Boolean disableBodyParam = env("RestContext.disableBodyParam", false);
+
        Class<? extends RestChildren> childrenClass = RestChildren.class;
        Class<? extends RestOpContext> opContextClass = RestOpContext.class;
        Class<? extends RestOperations> operationsClass = RestOperations.class;
-       Class<? extends SwaggerProvider> swaggerProviderClass;
-       SwaggerProvider swaggerProvider;
-
-       RestLogger callLoggerDefault;
-       Class<? extends RestLogger> callLoggerDefaultClass;
 
-       RestLogger callLogger;
-       Class<? extends RestLogger> callLoggerClass;
+       BeanRef<SwaggerProvider> swaggerProvider = 
BeanRef.of(SwaggerProvider.class);
+       BeanRef<RestLogger> callLoggerDefault = BeanRef.of(RestLogger.class);
+       BeanRef<RestLogger> callLogger = BeanRef.of(RestLogger.class);
+       BeanRef<DebugEnablement> debugEnablement = 
BeanRef.of(DebugEnablement.class);
 
        Enablement debugDefault, debug;
 
-       DebugEnablement debugEnablement;
-       Class<? extends DebugEnablement> debugEnablementClass;
-
-       String debugOn = env("RestContext.debugOn", null);
-
        @SuppressWarnings("unchecked")
        ResponseProcessorList.Builder responseProcessors = 
ResponseProcessorList.create().append(
                ReaderProcessor.class,
@@ -179,7 +173,6 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
                        if (parentContext.isPresent()) {
                                RestContext pc = parentContext.get();
                                callLoggerDefault = pc.callLoggerDefault;
-                               callLoggerDefaultClass = 
pc.callLoggerDefaultClass;
                                debugDefault = pc.debugDefault;
                                ContextProperties pcp = 
pc.getContextProperties();
                                set(REST_staticFilesDefault, 
pcp.get(REST_staticFilesDefault).orElse(null));
@@ -773,7 +766,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder callLogger(Class<? extends RestLogger> value) 
{
-               callLoggerClass = value;
+               callLogger.type(value);
                return this;
        }
 
@@ -795,7 +788,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder callLogger(RestLogger value) {
-               callLogger = value;
+               callLogger.value(value);
                return this;
        }
 
@@ -815,7 +808,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder callLoggerDefault(Class<? extends RestLogger> 
value) {
-               callLoggerDefaultClass = value;
+               callLoggerDefault.type(value);
                return this;
        }
 
@@ -835,7 +828,7 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder callLoggerDefault(RestLogger value) {
-               callLoggerDefault = value;
+               callLoggerDefault.value(value);
                return this;
        }
 
@@ -1085,7 +1078,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
        }
 
        /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Debug 
enablement bean.
+        * Debug enablement bean.
         *
         * TODO
         *
@@ -1094,12 +1087,12 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder debugEnablement(Class<? extends 
DebugEnablement> value) {
-               debugEnablementClass = value;
+               debugEnablement.type(value);
                return this;
        }
 
        /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Debug 
enablement bean.
+        * Debug enablement bean.
         *
         * TODO
         *
@@ -1108,7 +1101,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder debugEnablement(DebugEnablement value) {
-               debugEnablement = value;
+               debugEnablement.value(value);
                return this;
        }
 
@@ -2546,7 +2539,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder swaggerProvider(Class<? extends 
SwaggerProvider> value) {
-               swaggerProviderClass = value;
+               swaggerProvider.type(value);
                return this;
        }
 
@@ -2562,7 +2555,7 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
         */
        @FluentSetter
        public RestContextBuilder swaggerProvider(SwaggerProvider value) {
-               swaggerProvider = value;
+               swaggerProvider.value(value);
                return this;
        }
 

Reply via email to