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 055423a Context API refactoring.
055423a is described below
commit 055423a57cf4db99d69baa45f1416197d3e3cd4f
Author: JamesBognar <[email protected]>
AuthorDate: Sun Aug 22 14:47:19 2021 -0400
Context API refactoring.
---
.../apache/juneau/rest/RestOperationContext.java | 53 ++++------------------
.../juneau/rest/RestOperationContextBuilder.java | 18 ++++++--
.../rest/annotation/RestDeleteAnnotation.java | 4 +-
.../juneau/rest/annotation/RestGetAnnotation.java | 4 +-
.../juneau/rest/annotation/RestOpAnnotation.java | 4 +-
.../juneau/rest/annotation/RestPostAnnotation.java | 4 +-
.../juneau/rest/annotation/RestPutAnnotation.java | 4 +-
7 files changed, 33 insertions(+), 58 deletions(-)
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 f44c4bb..61f19b0 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
@@ -342,43 +342,6 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
*/
public static final String RESTOP_matchers = PREFIX + ".matchers.lo";
- /**
- * Configuration property: Resource method paths.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.rest.RestOperationContext#RESTOP_path RESTOP_path}
- * <li><b>Name:</b> <js>"RestOperationContext.path.ls"</js>
- * <li><b>Data type:</b> <c>String[]</c>
- * <li><b>System property:</b> <c>RestOperationContext.path</c>
- * <li><b>Environment variable:</b>
<c>RESTOPERATIONCONTEXT_PATH</c>
- * <li><b>Default:</b> <jk>null</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.rest.annotation.RestOp#path()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.rest.RestOperationContextBuilder#path(String...)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Identifies the URL subpath relative to the servlet class.
- *
- * <p>
- * <ul class='notes'>
- * <li>
- * This method is only applicable for Java methods.
- * <li>
- * Slashes are trimmed from the path ends.
- * <br>As a convention, you may want to start your path
with <js>'/'</js> simple because it make it easier to read.
- * </ul>
- */
- public static final String RESTOP_path = PREFIX + ".path.ls";
-
//-------------------------------------------------------------------------------------------------------------------
// Instance
//-------------------------------------------------------------------------------------------------------------------
@@ -480,7 +443,7 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
requiredMatchers = matchers.stream().filter(x ->
x.required()).toArray(RestMatcher[]::new);
optionalMatchers = matchers.stream().filter(x -> !
x.required()).toArray(RestMatcher[]::new);
- pathMatchers = createPathMatchers(r, cp, bs).asArray();
+ pathMatchers = createPathMatchers(r, cp, builder,
bs).asArray();
bs.addBean(UrlPathMatcher[].class, pathMatchers);
bs.addBean(UrlPathMatcher.class, pathMatchers.length >
0 ? pathMatchers[0] : null);
@@ -1001,20 +964,22 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
*
* @param resource The REST resource object.
* @param properties xxx
+ * @param builder The builder for this bean.
* @param beanStore The bean store to use for retrieving and creating
beans.
* @return The HTTP part parser for this REST resource.
* @throws Exception If parser could not be instantiated.
- * @see #RESTOP_path
*/
- protected UrlPathMatcherList createPathMatchers(Object resource,
ContextProperties properties, BeanStore beanStore) throws Exception {
+ protected UrlPathMatcherList createPathMatchers(Object resource,
ContextProperties properties, RestOperationContextBuilder builder, BeanStore
beanStore) throws Exception {
UrlPathMatcherList x = UrlPathMatcherList.create();
boolean dotAll =
properties.getBoolean("RestOperationContext.dotAll.b").orElse(false);
- for (String p : properties.getArray(RESTOP_path,
String.class).orElse(new String[0])) {
- if (dotAll && ! p.endsWith("/*"))
- p += "/*";
- x.add(UrlPathMatcher.of(p));
+ if (builder.path != null) {
+ for (String p : builder.path) {
+ if (dotAll && ! p.endsWith("/*"))
+ p += "/*";
+ x.add(UrlPathMatcher.of(p));
+ }
}
if (x.isEmpty()) {
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 05c6c59..23fe0b4 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
@@ -44,6 +44,7 @@ public class RestOperationContextBuilder extends
BeanContextBuilder {
Method restMethod;
String httpMethod, clientVersion;
Enablement debug;
+ List<String> path;
private BeanStore beanStore;
@@ -210,7 +211,7 @@ public class RestOperationContextBuilder extends
BeanContextBuilder {
* <li>
* HTTP request/response bodies are cached in memory for
logging purposes.
* </ul>
- *
+ *
* <p>
* If not sppecified, the debug enablement is inherited from the class
context.
*
@@ -593,8 +594,13 @@ public class RestOperationContextBuilder extends
BeanContextBuilder {
* <p>
* Identifies the URL subpath relative to the servlet class.
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestOperationContext#RESTOP_path}
+ * <p>
+ * <ul class='notes'>
+ * <li>
+ * This method is only applicable for Java methods.
+ * <li>
+ * Slashes are trimmed from the path ends.
+ * <br>As a convention, you may want to start your path
with <js>'/'</js> simple because it make it easier to read.
* </ul>
*
* @param values The new values for this setting.
@@ -602,7 +608,11 @@ public class RestOperationContextBuilder extends
BeanContextBuilder {
*/
@FluentSetter
public RestOperationContextBuilder path(String...values) {
- return set(RESTOP_path, values);
+ if (path == null)
+ path = new ArrayList<>(Arrays.asList(values));
+ else
+ path.addAll(0, Arrays.asList(values));
+ return this;
}
// <FluentSetters>
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 21c4a39..19840a0 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
@@ -467,8 +467,8 @@ public class RestDeleteAnnotation {
b.prependTo(RESTOP_matchers, a.matchers());
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());
+ stringStream(a.path()).forEach(x -> b.path(x));
+ value(a.value()).ifPresent(x -> b.path(x));
cdStream(a.rolesDeclared()).forEach(x ->
b.addTo(REST_rolesDeclared, x));
b.addToIfNotEmpty(REST_roleGuard,
string(a.roleGuard()));
value(a.debug()).map(Enablement::fromString).ifPresent(x -> b.debug(x));
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 c292327..134919c 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
@@ -523,8 +523,8 @@ public class RestGetAnnotation {
b.prependTo(RESTOP_matchers, a.matchers());
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());
+ stringStream(a.path()).forEach(x -> b.path(x));
+ value(a.value()).ifPresent(x -> b.path(x));
cdStream(a.rolesDeclared()).forEach(x ->
b.addTo(REST_rolesDeclared, x));
b.addToIfNotEmpty(REST_roleGuard,
string(a.roleGuard()));
value(a.debug()).map(Enablement::fromString).ifPresent(x -> b.debug(x));
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 6cd38d9..60feba0 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
@@ -628,7 +628,7 @@ public class RestOpAnnotation {
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));
+ stringStream(a.path()).forEach(x -> b.path(x));
cdStream(a.rolesDeclared()).forEach(x ->
b.addTo(REST_rolesDeclared, x));
b.addToIfNotEmpty(REST_roleGuard,
string(a.roleGuard()));
@@ -642,7 +642,7 @@ public class RestOpAnnotation {
b.httpMethod(v);
} else {
b.httpMethod(v.substring(0, i).trim());
- b.prependTo(RESTOP_path,
v.substring(i).trim());
+ b.path(v.substring(i).trim());
}
}
}
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 348251c..1f3d9c8 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
@@ -613,8 +613,8 @@ public class RestPostAnnotation {
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));
- b.setIfNotEmpty(RESTOP_path, a.value());
+ stringStream(a.path()).forEach(x -> b.path(x));
+ value(a.value()).ifPresent(x -> b.path(x));
cdStream(a.rolesDeclared()).forEach(x ->
b.addTo(REST_rolesDeclared, x));
b.addToIfNotEmpty(REST_roleGuard,
string(a.roleGuard()));
value(a.debug()).map(Enablement::fromString).ifPresent(x -> b.debug(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 8b72ff7..dbd921e 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
@@ -613,8 +613,8 @@ public class RestPutAnnotation {
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));
- b.setIfNotEmpty(RESTOP_path, a.value());
+ stringStream(a.path()).forEach(x -> b.path(x));
+ value(a.value()).ifPresent(x -> b.path(x));
cdStream(a.rolesDeclared()).forEach(x ->
b.addTo(REST_rolesDeclared, x));
b.addToIfNotEmpty(REST_roleGuard,
string(a.roleGuard()));
value(a.debug()).map(Enablement::fromString).ifPresent(x -> b.debug(x));