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: </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: </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; }