This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit a27dcdb0ded3379847a290cec596b416fb4fb39b Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Fri Apr 3 10:35:05 2020 +0700 JAMES-3092 Set up parameter resolving --- .../main/java/org/apache/james/jmap/Endpoint.java | 4 +++ .../main/java/org/apache/james/jmap/JMAPRoute.java | 9 ++++++- .../org/apache/james/jmap/UriPathTemplate.java | 30 ++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/Endpoint.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/Endpoint.java index 222d40b..a1a3f8c 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/Endpoint.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/Endpoint.java @@ -48,6 +48,10 @@ public class Endpoint { && uriPathTemplate.matches(request.uri()); } + UriPathTemplate getUriPathTemplate() { + return uriPathTemplate; + } + @Override public final boolean equals(Object o) { if (o instanceof Endpoint) { diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoute.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoute.java index 8ad8ecf..d81e47b 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoute.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoute.java @@ -58,7 +58,14 @@ public class JMAPRoute { } private JMAPRoute build(Action action) { - return new JMAPRoute(endpoint, action); + return new JMAPRoute(endpoint, actionWithParameterResolving(action)); + } + + Action actionWithParameterResolving(Action action) { + return (req, res) -> + action.handleRequest( + req.paramsResolver(s -> endpoint.getUriPathTemplate().match(s)), + res); } } } diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/UriPathTemplate.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/UriPathTemplate.java index a9b3759..6c158a9 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/UriPathTemplate.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/UriPathTemplate.java @@ -136,4 +136,34 @@ public class UriPathTemplate { return m; } + /** + * Matches the template against the given {@code uri} returning a map of path + * parameters extracted from the uri, keyed by the names in the template. If the + * uri does not match, or there are no path parameters, an empty map is returned. + * + * @param uri The uri to match + * + * @return the path parameters from the uri. Never {@code null}. + */ + final Map<String, String> match(String uri) { + Map<String, String> pathParameters = vars.get(uri); + if (null != pathParameters) { + return pathParameters; + } + + pathParameters = new HashMap<>(); + Matcher m = matcher(uri); + if (m.matches()) { + int i = 1; + for (String name : pathVariables) { + String val = m.group(i++); + pathParameters.put(name, val); + } + } + synchronized (vars) { + vars.put(uri, pathParameters); + } + + return pathParameters; + } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org