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: </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: </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: </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())));