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

Reply via email to