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 <[email protected]>
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<? extends {@link
org.apache.juneau.rest.RestOperationContext}></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<? <jk>extends</jk>
Supplier<Object>> <jf>fooSupplier</jf>;
- *
- * <jc>// Constructor that takes in builder and optional
injected attribute provider.</jc>
- * <jk>public</jk>
MyRestOperationContext(RestOperationContextBuilder <jv>builder</jv>,
Optional<AnInjectedFooSupplier> <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));