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

commit bf9224b1c8408d6cf59f5f1c242360fcd23cb0c8
Author: JamesBognar <james.bog...@salesforce.com>
AuthorDate: Sun Aug 22 14:03:16 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/AnnotationApplier.java  | 13 +++-
 .../apache/juneau/rest/RestOperationContext.java   | 69 ----------------------
 .../juneau/rest/RestOperationContextBuilder.java   |  5 --
 .../rest/annotation/RestDeleteAnnotation.java      |  4 +-
 .../juneau/rest/annotation/RestGetAnnotation.java  |  4 +-
 .../juneau/rest/annotation/RestOpAnnotation.java   |  6 +-
 .../juneau/rest/annotation/RestPostAnnotation.java |  4 +-
 .../juneau/rest/annotation/RestPutAnnotation.java  |  4 +-
 8 files changed, 23 insertions(+), 86 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
index b9eae1b..8090301 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
@@ -102,12 +102,23 @@ public abstract class AnnotationApplier<A extends 
Annotation, B> {
         * @param in The string containing variables to resolve.
         * @return An optional containing the specified string if it exists, or 
{@link Optional#empty()} if it does not.
         */
-       protected Optional<String> string2(String in) {
+       protected Optional<String> value(String in) {
                in = vr.resolve(in);
                return isEmpty(in) ? Optional.empty() : Optional.of(in);
        }
 
        /**
+        * Returns the specified value if it's not the specified default.
+        *
+        * @param in The value to return if it's not the default.
+        * @param def The default value.
+        * @return An optional containing the specified value if it's not the 
default, or {@link Optional#empty()} if it does not.
+        */
+       protected <T> Optional<T> value(T in, T def) {
+               return in != def ? Optional.of(in) : Optional.empty();
+       }
+
+       /**
         * Resolves the specified strings in the string array.
         *
         * @param in The string array containing variables to resolve.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
index 2f7860b..6157d64 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
@@ -83,75 +83,6 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
        static final String PREFIX = "RestOperationContext";
 
        /**
-        * Configuration property:  REST method context class.
-        *
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.RestOperationContext#RESTOP_contextClass 
RESTOP_contextClass}
-        *      <li><b>Name:</b>  <js>"RestOperationContext.contextClass.c"</js>
-        *      <li><b>Data type:</b>  <c>Class&lt;? extends {@link 
org.apache.juneau.rest.RestOperationContext}&gt;</c>
-        *      <li><b>Default:</b>  {@link 
org.apache.juneau.rest.RestOperationContext}
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.Rest#restOperationContextClass()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#contextClass()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#restOperationContextClass(Class)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#contextClass(Class)}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * <p>
-        * Allows you to extend the {@link RestOperationContext} class to 
modify how any of the functions are implemented.
-        *
-        * <p>
-        * The subclass must have a public constructor that takes in any of the 
following arguments:
-        * <ul>
-        *      <li>{@link RestOperationContextBuilder} - The builder for the 
object.
-        *      <li>Any beans found in the specified {@link 
RestContext#REST_beanStore bean store}.
-        *      <li>Any {@link Optional} beans that may or may not be found in 
the specified {@link RestContext#REST_beanStore bean store}.
-        * </ul>
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Our extended context class that adds a request attribute 
to all requests.</jc>
-        *      <jc>// The attribute value is provided by an injected spring 
bean.</jc>
-        *      <jk>public</jk> MyRestOperationContext <jk>extends</jk> 
RestOperationContext {
-        *
-        *              <jk>private final</jk> Optional&lt;? <jk>extends</jk> 
Supplier&lt;Object&gt;&gt; <jf>fooSupplier</jf>;
-        *
-        *              <jc>// Constructor that takes in builder and optional 
injected attribute provider.</jc>
-        *              <jk>public</jk> 
MyRestOperationContext(RestOperationContextBuilder <jv>builder</jv>, 
Optional&lt;AnInjectedFooSupplier&gt; <jv>fooSupplier</jv>) {
-        *                      <jk>super</jk>(<jv>builder</jv>);
-        *                      <jk>this</jk>.<jf>fooSupplier</jf> = 
<jv>fooSupplier</jv>.orElseGet(()-><jk>null</jk>);
-        *              }
-        *
-        *              <jc>// Override the method used to create default 
request attributes.</jc>
-        *              <ja>@Override</ja>
-        *              <jk>protected</jk> NamedAttributeList 
createDefaultRequestAttributes(Object <jv>resource</jv>, BeanStore 
<jv>beanStore</jv>, Method <jv>method</jv>, RestContext <jv>context</jv>) 
<jk>throws</jk> Exception {
-        *                      <jk>return super</jk>
-        *                              
.createDefaultRequestAttributes(<jv>resource</jv>, <jv>beanStore</jv>, 
<jv>method</jv>, <jv>context</jv>)
-        *                              
.append(NamedAttribute.<jsm>of</jsm>(<js>"foo"</js>, 
()-><jf>fooSupplier</jf>.get());
-        *              }
-        *      }
-        * </p>
-        * <p class='bcode w800'>
-        *      <ja>@Rest</ja>
-        *      <jk>public class</jk> MyResource {
-        *              ...
-        *              
<ja>@RestGet</ja>(contextClass=MyRestOperationContext.<jk>class</jk>)
-        *              <jk>public</jk> Object foo(RequestAttributes 
<jv>attributes</jv>) {
-        *                      <jk>return</jk> 
<jv>attributes</jv>.get(<js>"foo"</js>);
-        *              }
-        *      }
-        * </p>
-        */
-       public static final String RESTOP_contextClass = PREFIX + 
".contextClass.c";
-
-       /**
         * Configuration property:  Debug mode.
         *
         * <h5 class='section'>Property:</h5>
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 2bd6e84..d14ba7a 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
@@ -56,11 +56,6 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        @Override /* BeanContextBuilder */
        public RestOperationContext build() {
                try {
-                       // 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) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
index ae96be4..fb46419 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDeleteAnnotation.java
@@ -457,7 +457,7 @@ public class RestDeleteAnnotation {
                        b.httpMethod("delete");
 
                        b.set(REST_encoders, 
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class), 
a.encoders()));
-                       b.setIf(a.contextClass() != 
RestOperationContext.Null.class, RESTOP_contextClass, a.contextClass());
+                       value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
                        stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultResponseHeaders, x));
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.appendTo(RESTOP_defaultRequestAttributes, x));
@@ -465,7 +465,7 @@ public class RestDeleteAnnotation {
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
                        b.prependTo(REST_guards, reverse(a.guards()));
                        b.prependTo(RESTOP_matchers, a.matchers());
-                       string2(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
+                       value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
                        b.setIfNotEmpty(REST_defaultCharset, 
string(a.defaultCharset()));
                        stringStream(a.path()).forEach(x -> 
b.prependTo(RESTOP_path, x));
                        b.setIfNotEmpty(RESTOP_path, a.value());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
index 17df73f..2b9c136 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
@@ -511,7 +511,7 @@ public class RestGetAnnotation {
 
                        b.set(REST_serializers, 
merge(ConverterUtils.toType(b.peek(REST_serializers), Object[].class), 
a.serializers()));
                        b.set(REST_encoders, 
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class), 
a.encoders()));
-                       b.setIf(a.contextClass() != 
RestOperationContext.Null.class, RESTOP_contextClass, a.contextClass());
+                       value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
                        stringStream(a.defaultResponseHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultResponseHeaders, x));
@@ -521,7 +521,7 @@ public class RestGetAnnotation {
                        b.prependTo(REST_converters, a.converters());
                        b.prependTo(REST_guards, reverse(a.guards()));
                        b.prependTo(RESTOP_matchers, a.matchers());
-                       string2(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
+                       value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
                        b.setIfNotEmpty(REST_defaultCharset, 
string(a.defaultCharset()));
                        stringStream(a.path()).forEach(x -> 
b.prependTo(RESTOP_path, x));
                        b.setIfNotEmpty(RESTOP_path, a.value());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
index 9aea1b0..d62a61d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
@@ -612,7 +612,7 @@ public class RestOpAnnotation {
                        b.set(REST_serializers, 
merge(ConverterUtils.toType(b.peek(REST_serializers), Object[].class), 
a.serializers()));
                        b.set(REST_parsers, 
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class), 
a.parsers()));
                        b.set(REST_encoders, 
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class), 
a.encoders()));
-                       b.setIf(a.contextClass() != 
RestOperationContext.Null.class, RESTOP_contextClass, a.contextClass());
+                       value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
                        stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
@@ -625,14 +625,14 @@ public class RestOpAnnotation {
                        b.prependTo(REST_converters, a.converters());
                        b.prependTo(REST_guards, reverse(a.guards()));
                        b.prependTo(RESTOP_matchers, a.matchers());
-                       string2(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
+                       value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
                        b.setIfNotEmpty(REST_defaultCharset, 
string(a.defaultCharset()));
                        b.setIfNotEmpty(REST_maxInput, string(a.maxInput()));
                        stringStream(a.path()).forEach(x -> 
b.prependTo(RESTOP_path, x));
                        cdStream(a.rolesDeclared()).forEach(x -> 
b.addTo(REST_rolesDeclared, x));
                        b.addToIfNotEmpty(REST_roleGuard, 
string(a.roleGuard()));
 
-                       string2(a.method()).ifPresent(x -> b.httpMethod(x));
+                       value(a.method()).ifPresent(x -> b.httpMethod(x));
                        b.setIfNotEmpty(RESTOP_debug, string(a.debug()));
 
                        String v = StringUtils.trim(string(a.value()));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
index 036d8f5..593b26d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
@@ -597,7 +597,7 @@ public class RestPostAnnotation {
                        b.set(REST_serializers, 
merge(ConverterUtils.toType(b.peek(REST_serializers), Object[].class), 
a.serializers()));
                        b.set(REST_parsers, 
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class), 
a.parsers()));
                        b.set(REST_encoders, 
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class), 
a.encoders()));
-                       b.setIf(a.contextClass() != 
RestOperationContext.Null.class, RESTOP_contextClass, a.contextClass());
+                       value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
                        stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
@@ -610,7 +610,7 @@ public class RestPostAnnotation {
                        b.prependTo(REST_converters, a.converters());
                        b.prependTo(REST_guards, reverse(a.guards()));
                        b.prependTo(RESTOP_matchers, a.matchers());
-                       string2(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
+                       value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
                        b.setIfNotEmpty(REST_defaultCharset, 
string(a.defaultCharset()));
                        b.setIfNotEmpty(REST_maxInput, string(a.maxInput()));
                        stringStream(a.path()).forEach(x -> 
b.prependTo(RESTOP_path, x));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
index f8666d9..7c33d93 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
@@ -597,7 +597,7 @@ public class RestPutAnnotation {
                        b.set(REST_serializers, 
merge(ConverterUtils.toType(b.peek(REST_serializers), Object[].class), 
a.serializers()));
                        b.set(REST_parsers, 
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class), 
a.parsers()));
                        b.set(REST_encoders, 
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class), 
a.encoders()));
-                       b.setIf(a.contextClass() != 
RestOperationContext.Null.class, RESTOP_contextClass, a.contextClass());
+                       value(a.contextClass(), 
RestOperationContext.Null.class).ifPresent(x -> b.contextClass(x));
                        b.setIfNotEmpty(REST_produces, 
stringList(a.produces()));
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
                        stringStream(a.defaultRequestHeaders()).map(x -> 
stringHeader(x)).forEach(x -> b.appendTo(RESTOP_defaultRequestHeaders, x));
@@ -610,7 +610,7 @@ public class RestPutAnnotation {
                        b.prependTo(REST_converters, a.converters());
                        b.prependTo(REST_guards, reverse(a.guards()));
                        b.prependTo(RESTOP_matchers, a.matchers());
-                       string2(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
+                       value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
                        b.setIfNotEmpty(REST_defaultCharset, 
string(a.defaultCharset()));
                        b.setIfNotEmpty(REST_maxInput, string(a.maxInput()));
                        stringStream(a.path()).forEach(x -> 
b.prependTo(RESTOP_path, x));

Reply via email to