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<? 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));