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

commit 69bb10c31976709f1f31a8a3e3aef84160264e41
Author: JamesBognar <[email protected]>
AuthorDate: Sat Aug 28 11:48:29 2021 -0400

    Context API refactoring.
---
 .../org/apache/juneau/rest/NamedAttributeList.java |  9 ++++
 .../java/org/apache/juneau/rest/RestContext.java   |  6 +--
 .../apache/juneau/rest/RestOperationContext.java   | 55 ++--------------------
 .../juneau/rest/RestOperationContextBuilder.java   | 55 ++++++++++++++++++----
 .../rest/annotation/RestDeleteAnnotation.java      |  2 +-
 .../juneau/rest/annotation/RestGetAnnotation.java  |  2 +-
 .../juneau/rest/annotation/RestOpAnnotation.java   |  2 +-
 .../juneau/rest/annotation/RestPostAnnotation.java |  2 +-
 .../juneau/rest/annotation/RestPutAnnotation.java  |  2 +-
 9 files changed, 66 insertions(+), 69 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
index 7370487..ce0a073 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/NamedAttributeList.java
@@ -46,6 +46,15 @@ public class NamedAttributeList extends 
AList<NamedAttribute> {
        }
 
        /**
+        * Returns a copy of this list.
+        *
+        * @return A new copy of this list.
+        */
+       public NamedAttributeList copy() {
+               return NamedAttributeList.of(asArray());
+       }
+
+       /**
         * Appends or replaces the named attribute values in this list.
         *
         * <p>
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 7fb22ae..61f68c4 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
@@ -3376,7 +3376,7 @@ public class RestContext extends BeanContext {
        private final JsonSchemaGenerator jsonSchemaGenerator;
        private final List<MediaType> consumes, produces;
        private final HeaderList defaultRequestHeaders, defaultResponseHeaders;
-       private final List<NamedAttribute> defaultRequestAttributes;
+       private final NamedAttributeList defaultRequestAttributes;
        private final List<ResponseProcessor> responseProcessors;
        private final Messages messages;
        private final Config config;
@@ -3522,7 +3522,7 @@ public class RestContext extends BeanContext {
 
                        defaultRequestHeaders = createDefaultRequestHeaders(r, 
cp, bf).build();
                        defaultResponseHeaders = 
createDefaultResponseHeaders(r, cp, bf).build();
-                       defaultRequestAttributes = 
unmodifiableList(createDefaultRequestAttributes(r, cp, bf));
+                       defaultRequestAttributes = 
createDefaultRequestAttributes(r, cp, bf);
 
                        opArgs = createRestOperationArgs(r, cp, bf).asArray();
                        hookMethodArgs = createHookMethodArgs(r, cp, 
bf).asArray();
@@ -6156,7 +6156,7 @@ public class RestContext extends BeanContext {
         *      The default request headers for this resource in an 
unmodifiable list.
         *      <br>Never <jk>null</jk>.
         */
-       public List<NamedAttribute> getDefaultRequestAttributes() {
+       public NamedAttributeList getDefaultRequestAttributes() {
                return defaultRequestAttributes;
        }
 
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 5ad76c7..1e162f5 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,50 +83,6 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
        static final String PREFIX = "RestOperationContext";
 
        /**
-        * Configuration property:  Default request attributes.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.RestOperationContext#RESTOP_defaultRequestAttributes 
RESTOP_defaultRequestAttributes}
-        *      <li><b>Name:</b>  <js>"RestOperationContext.reqAttrs.lo"</js>
-        *      <li><b>Data type:</b>  <c>{@link 
org.apache.juneau.rest.NamedAttribute}[]</c>
-        *      <li><b>System property:</b>  
<c>RestOperationContext.defaultRequestAttributes</c>
-        *      <li><b>Environment variable:</b>  
<c>RESTOPERATIONCONTEXT_DEFAULTREQUESTATTRIBUTES</c>
-        *      <li><b>Default:</b>  empty list
-        *      <li><b>Session property:</b>  <jk>false</jk>
-        *      <li><b>Annotations:</b>
-        *              <ul>
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#defaultRequestAttributes()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultRequestAttribute(String,Object)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultRequestAttribute(String,Supplier)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestOperationContextBuilder#defaultRequestAttributes(NamedAttribute...)}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * <p>
-        * Default request attributes.
-        *
-        * <p>
-        * Specifies default values for request attributes if they are not 
already set on the request.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
-        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestAttributes={<js>"Foo=bar"</js>})
-        *      <jk>public</jk> String doGet()  {...}
-        * </p>
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
-        * </ul>
-        */
-       public static final String RESTOP_defaultRequestAttributes = PREFIX + 
".defaultRequestAttributes.lo";
-
-       /**
         * Configuration property:  Default request headers.
         *
         * <h5 class='section'>Property:</h5>
@@ -381,7 +337,7 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
                        defaultResponseHeaders = 
createDefaultResponseHeaders(r, cp, bs, method, context).build();
                        defaultRequestQuery = createDefaultRequestQuery(r, 
builder, bs, method).build();
                        defaultRequestFormData = 
createDefaultRequestFormData(r, builder, bs, method).build();
-                       defaultRequestAttributes = 
unmodifiableList(createDefaultRequestAttributes(r, cp, bs, method, context));
+                       defaultRequestAttributes = 
unmodifiableList(createDefaultRequestAttributes(r, builder, bs, method, 
context));
 
                        int _hierarchyDepth = 0;
                        Class<?> sc = 
method.getDeclaringClass().getSuperclass();
@@ -1051,19 +1007,16 @@ public class RestOperationContext extends BeanContext 
implements Comparable<Rest
         * Instantiates the default request attributes for this method.
         *
         * @param resource The REST resource object.
-        * @param properties xxx
+        * @param builder The builder for this object.
         * @param beanStore The bean store to use for retrieving and creating 
beans.
         * @param method This Java method.
         * @param context The REST class context.
         * @return The default request attributes for this method.
         * @throws Exception If default request headers could not be 
instantiated.
         */
-       protected NamedAttributeList createDefaultRequestAttributes(Object 
resource, ContextProperties properties, BeanStore beanStore, Method method, 
RestContext context) throws Exception {
-               NamedAttributeList x = NamedAttributeList.create();
-
-               x.appendUnique(context.getDefaultRequestAttributes());
+       protected NamedAttributeList createDefaultRequestAttributes(Object 
resource, RestOperationContextBuilder builder, BeanStore beanStore, Method 
method, RestContext context) throws Exception {
 
-               
x.appendUnique(properties.getInstanceArray(RESTOP_defaultRequestAttributes, 
NamedAttribute.class, beanStore).orElse(new NamedAttribute[0]));
+               NamedAttributeList x = 
context.getDefaultRequestAttributes().copy().appendUnique(builder.defaultRequestAttributes);
 
                x = BeanStore
                        .of(beanStore, resource)
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 eecd605..8f180ac 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
@@ -46,6 +46,7 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        Enablement debug;
        List<String> path;
        PartListBuilder defaultFormData, defaultQueryData;
+       NamedAttributeList defaultRequestAttributes;
 
        private BeanStore beanStore;
 
@@ -81,6 +82,7 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
                this.beanStore = context.getRootBeanStore();
                this.defaultFormData = PartList.create();
                this.defaultQueryData = PartList.create();
+               this.defaultRequestAttributes = NamedAttributeList.create();
 
                MethodInfo mi = MethodInfo.of(context.getResourceClass(), 
method);
 
@@ -406,13 +408,24 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        }
 
        /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default request attributes.
+        * Default request attributes.
         *
         * <p>
-        * Adds a single default request attribute.
+        * Specifies a default value for a request attribute if it is not 
already set on the request.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
+        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestAttributes={<js>"Foo=bar"</js>})
+        *      <jk>public</jk> String doGet()  {...}
+        * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultRequestAttributes}
+        *      <li class='ja'>{@link RestOp#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestGet#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestPut#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestPost#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestDelete#defaultRequestAttributes()}
         * </ul>
         *
         * @param name The attribute name.
@@ -425,13 +438,24 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        }
 
        /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default request attributes.
+        * Default request attributes.
         *
         * <p>
-        * Adds a single default request attribute.
+        * Specifies a default value for a request attribute if it is not 
already set on the request.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
+        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestAttributes={<js>"Foo=bar"</js>})
+        *      <jk>public</jk> String doGet()  {...}
+        * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultRequestAttributes}
+        *      <li class='ja'>{@link RestOp#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestGet#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestPut#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestPost#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestDelete#defaultRequestAttributes()}
         * </ul>
         *
         * @param name The attribute name.
@@ -444,13 +468,24 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
        }
 
        /**
-        * <i><l>RestOperationContext</l> configuration property:&emsp;</i>  
Default request attributes.
+        * Default request attributes.
         *
         * <p>
-        * Adds multiple default request attributes.
+        * Specifies default values for request attributes if they are not 
already set on the request.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Assume "text/json" Accept value when Accept not 
specified</jc>
+        *      <ja>@RestGet</ja>(path=<js>"/*"</js>, 
defaultRequestAttributes={<js>"Foo=bar"</js>})
+        *      <jk>public</jk> String doGet()  {...}
+        * </p>
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link 
RestOperationContext#RESTOP_defaultRequestAttributes}
+        *      <li class='ja'>{@link RestOp#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestGet#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestPut#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestPost#defaultRequestAttributes()}
+        *      <li class='ja'>{@link RestDelete#defaultRequestAttributes()}
         * </ul>
         *
         * @param values The request attributes to add.
@@ -458,7 +493,7 @@ public class RestOperationContextBuilder extends 
BeanContextBuilder {
         */
        @FluentSetter
        public RestOperationContextBuilder 
defaultRequestAttributes(NamedAttribute...values) {
-               asList(values).stream().forEach(x -> 
appendTo(RESTOP_defaultRequestAttributes, x));
+               defaultRequestAttributes.append(values);
                return this;
        }
 
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 db2447f..89b9e4d 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
@@ -460,7 +460,7 @@ public class RestDeleteAnnotation {
                        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));
+                       stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
                        b.prependTo(REST_guards, reverse(a.guards()));
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 60f2682..74ba820 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
@@ -515,7 +515,7 @@ public class RestGetAnnotation {
                        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));
-                       stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> 
b.appendTo(RESTOP_defaultRequestAttributes, x));
+                       stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
                        b.prependTo(REST_converters, a.converters());
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 40899b1..c6b337c 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
@@ -617,7 +617,7 @@ public class RestOpAnnotation {
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
                        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));
+                       stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
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 e83d25e..1d93a42 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
@@ -602,7 +602,7 @@ public class RestPostAnnotation {
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
                        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));
+                       stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
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 b69dc23..10c2494 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
@@ -602,7 +602,7 @@ public class RestPutAnnotation {
                        b.setIfNotEmpty(REST_consumes, 
stringList(a.consumes()));
                        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));
+                       stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));

Reply via email to