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 8b73403  REST refactoring.
8b73403 is described below

commit 8b73403ca9be868f14c5d06049f2e1596a935c25
Author: JamesBognar <[email protected]>
AuthorDate: Tue Jan 12 18:13:55 2021 -0500

    REST refactoring.
---
 .../apache/juneau/rest/ClientVersionMatcher.java   |  2 +-
 .../java/org/apache/juneau/rest/RestMatcher.java   |  2 +-
 .../org/apache/juneau/rest/RestMethodContext.java  | 94 +++++++++++-----------
 3 files changed, 48 insertions(+), 50 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ClientVersionMatcher.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ClientVersionMatcher.java
index 0708e52..0b7f8e9 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ClientVersionMatcher.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ClientVersionMatcher.java
@@ -50,7 +50,7 @@ public class ClientVersionMatcher extends RestMatcher {
        }
 
        @Override /* RestMatcher */
-       public boolean mustMatch() {
+       public boolean required() {
                return true;
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcher.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcher.java
index a47b9d6..caf0e72 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcher.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMatcher.java
@@ -85,7 +85,7 @@ public abstract class RestMatcher {
         *
         * @return <jk>true</jk> if this matcher is required to match in order 
for the method to be invoked.
         */
-       public boolean mustMatch() {
+       public boolean required() {
                return false;
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
index d8d0e22..77218e8 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
@@ -562,14 +562,6 @@ public class RestMethodContext extends BeanContext 
implements Comparable<RestMet
                        PropertyStore ps = getPropertyStore();
                        Object r = context.getResource();
 
-                       int _hierarchyDepth = 0;
-                       Class<?> sc = 
b.method.getDeclaringClass().getSuperclass();
-                       while (sc != null) {
-                               _hierarchyDepth++;
-                               sc = sc.getSuperclass();
-                       }
-                       hierarchyDepth = _hierarchyDepth;
-
                        beanFactory = new BeanFactory(context.getBeanFactory(), 
r)
                                .addBean(RestMethodContext.class, this)
                                .addBean(Method.class, method);
@@ -587,6 +579,24 @@ public class RestMethodContext extends BeanContext 
implements Comparable<RestMet
                        partParser = createPartParser(r, beanFactory, ps);
                        beanFactory.addBean(HttpPartParser.class, partParser);
 
+                       converters = createConverters(r, beanFactory);
+                       beanFactory.addBean(RestConverter[].class, converters);
+
+                       guards = createGuards(r, beanFactory);
+                       beanFactory.addBean(RestGuard[].class, guards);
+
+                       List<RestMatcher> matchers = 
Arrays.asList(createMatchers(r, beanFactory));
+                       requiredMatchers = matchers.stream().filter(x -> 
x.required()).toArray(RestMatcher[]::new);
+                       optionalMatchers = matchers.stream().filter(x -> ! 
x.required()).toArray(RestMatcher[]::new);
+
+                       int _hierarchyDepth = 0;
+                       Class<?> sc = 
b.method.getDeclaringClass().getSuperclass();
+                       while (sc != null) {
+                               _hierarchyDepth++;
+                               sc = sc.getSuperclass();
+                       }
+                       hierarchyDepth = _hierarchyDepth;
+
                        String _httpMethod = getProperty(RESTMETHOD_httpMethod, 
String.class, null);
                        if (_httpMethod == null)
                                _httpMethod = 
HttpUtils.detectHttpMethod(method, true, "GET");
@@ -598,56 +608,24 @@ public class RestMethodContext extends BeanContext 
implements Comparable<RestMet
 
                        maxInput = 
StringUtils.parseLongWithSuffix(getProperty(REST_maxInput, String.class, 
"100M"));
 
-
-                       this.responseMeta = ResponseBeanMeta.create(mi, ps);
+                       responseMeta = ResponseBeanMeta.create(mi, ps);
 
                        boolean dotAll = b.dotAll;
-                       List<UrlPathMatcher> pathMatchers = new ArrayList<>();
+                       List<UrlPathMatcher> _pathMatchers = new ArrayList<>();
                        for (String p : getArrayProperty(RESTMETHOD_paths, 
String.class)) {
                                if (dotAll && ! p.endsWith("/*"))
                                        p += "/*";
-                               pathMatchers.add(UrlPathMatcher.of(p));
+                               _pathMatchers.add(UrlPathMatcher.of(p));
                        }
-                       if (pathMatchers.isEmpty()) {
+                       if (_pathMatchers.isEmpty()) {
                                String p = HttpUtils.detectHttpPath(method, 
true);
                                if (dotAll && ! p.endsWith("/*"))
                                        p += "/*";
-                               pathMatchers.add(UrlPathMatcher.of(p));
-                       }
-
-                       this.pathMatchers = pathMatchers.toArray(new 
UrlPathMatcher[pathMatchers.size()]);
-
-                       this.methodParams = context.findParams(mi, false, 
this.pathMatchers[this.pathMatchers.length-1]);
-
-                       this.converters = createConverters(r, beanFactory);
-
-                       AList<RestGuard> _guards = AList.of();
-                       _guards.a(createGuards(r, beanFactory));
-                       Set<String> rolesDeclared = 
getSetProperty(REST_rolesDeclared, String.class, null);
-                       Set<String> roleGuard = getSetProperty(REST_roleGuard, 
String.class, Collections.emptySet());
-
-                       for (String rg : roleGuard) {
-                               try {
-                                       _guards.add(new 
RoleBasedRestGuard(rolesDeclared, rg));
-                               } catch (java.text.ParseException e1) {
-                                       throw new ServletException(e1);
-                               }
+                               _pathMatchers.add(UrlPathMatcher.of(p));
                        }
-                       this.guards = _guards.toArray(new 
RestGuard[_guards.size()]);
-
-                       List<RestMatcher> optionalMatchers = new 
LinkedList<>(), requiredMatchers = new LinkedList<>();
-                       for (RestMatcher matcher : createMatchers(r, 
beanFactory)) {
-                               if (matcher.mustMatch())
-                                       requiredMatchers.add(matcher);
-                               else
-                                       optionalMatchers.add(matcher);
-                       }
-                       String clientVersion = 
getProperty(RESTMETHOD_clientVersion, String.class, null);
-                       if (clientVersion != null)
-                               requiredMatchers.add(new 
ClientVersionMatcher(context.getClientVersionHeader(), mi));
+                       pathMatchers = _pathMatchers.toArray(new 
UrlPathMatcher[_pathMatchers.size()]);
 
-                       this.requiredMatchers = requiredMatchers.toArray(new 
RestMatcher[requiredMatchers.size()]);
-                       this.optionalMatchers = optionalMatchers.toArray(new 
RestMatcher[optionalMatchers.size()]);
+                       methodParams = context.findParams(mi, false, 
this.pathMatchers[this.pathMatchers.length-1]);
 
                        this.encoders = EncoderGroup
                                .create()
@@ -825,7 +803,22 @@ public class RestMethodContext extends BeanContext 
implements Comparable<RestMet
                        x = beanFactory.getBean(RestGuard[].class).orElse(null);
                if (x == null)
                        x = new RestGuard[0];
-               return x;
+
+               AList<RestGuard> xl = AList.of();
+               xl.a(x);
+
+               Set<String> rolesDeclared = getSetProperty(REST_rolesDeclared, 
String.class, null);
+               Set<String> roleGuard = getSetProperty(REST_roleGuard, 
String.class, Collections.emptySet());
+
+               for (String rg : roleGuard) {
+                       try {
+                               xl.add(new RoleBasedRestGuard(rolesDeclared, 
rg));
+                       } catch (java.text.ParseException e1) {
+                               throw new ServletException(e1);
+                       }
+               }
+
+               return xl.toArray(new RestGuard[xl.size()]);
        }
 
        /**
@@ -864,6 +857,11 @@ public class RestMethodContext extends BeanContext 
implements Comparable<RestMet
                        x = 
beanFactory.getBean(RestMatcher[].class).orElse(null);
                if (x == null)
                        x = new RestMatcher[0];
+
+               String clientVersion = getProperty(RESTMETHOD_clientVersion, 
String.class, null);
+               if (clientVersion != null)
+                       x = ArrayUtils.append(x, new 
ClientVersionMatcher(context.getClientVersionHeader(), mi));
+
                return x;
        }
 

Reply via email to