Repository: incubator-juneau Updated Branches: refs/heads/master 82f0bd8ed -> 6e47b7ff9
Clean up how request variables are resolved. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/6e47b7ff Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/6e47b7ff Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/6e47b7ff Branch: refs/heads/master Commit: 6e47b7ff9ce1b2eb18f2a12af6b97c1d98f9363a Parents: 82f0bd8 Author: JamesBognar <[email protected]> Authored: Mon Jul 10 16:51:31 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Mon Jul 10 16:51:31 2017 -0400 ---------------------------------------------------------------------- .../juneau/html/HtmlDocSerializerContext.java | 12 +- .../java/org/apache/juneau/rest/CallMethod.java | 137 +---------- .../org/apache/juneau/rest/RestContext.java | 120 ---------- .../org/apache/juneau/rest/RestRequest.java | 234 +++++++++++++++++++ .../apache/juneau/rest/annotation/HtmlDoc.java | 8 +- .../org/apache/juneau/rest/vars/RequestVar.java | 56 +---- 6 files changed, 266 insertions(+), 301 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6e47b7ff/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java index daa225a..b185829 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java @@ -81,7 +81,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext { * <b>Configuration property:</b> Page title. * * <ul> - * <li><b>Name:</b> <js>"HtmlSerializer.title"</js> + * <li><b>Name:</b> <js>"HtmlDocSerializer.title"</js> * <li><b>Data type:</b> <code>String</code> * <li><b>Default:</b> <jk>null</jk> * <li><b>Session-overridable:</b> <jk>true</jk> @@ -134,13 +134,13 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext { * <p> * A value of <js>"NONE"</js> can be used to represent no value to differentiate it from an empty string. */ - public static final String HTMLDOC_title = "HtmlSerializer.title"; + public static final String HTMLDOC_title = "HtmlDocSerializer.title"; /** * <b>Configuration property:</b> Page description. * * <ul> - * <li><b>Name:</b> <js>"HtmlSerializer.description"</js> + * <li><b>Name:</b> <js>"HtmlDocSerializer.description"</js> * <li><b>Data type:</b> <code>String</code> * <li><b>Default:</b> <jk>null</jk> * <li><b>Session-overridable:</b> <jk>true</jk> @@ -197,13 +197,13 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext { * <p> * A value of <js>"NONE"</js> can be used to represent no value to differentiate it from an empty string. */ - public static final String HTMLDOC_description = "HtmlSerializer.description"; + public static final String HTMLDOC_description = "HtmlDocSerializer.description"; /** * <b>Configuration property:</b> Page branding. * * <ul> - * <li><b>Name:</b> <js>"HtmlSerializer.branding"</js> + * <li><b>Name:</b> <js>"HtmlDocSerializer.branding"</js> * <li><b>Data type:</b> <code>String</code> * <li><b>Default:</b> <jk>null</jk> * <li><b>Session-overridable:</b> <jk>true</jk> @@ -216,7 +216,7 @@ public final class HtmlDocSerializerContext extends HtmlSerializerContext { * <p> * A value of <js>"NONE"</js> can be used to represent no value to differentiate it from an empty string. */ - public static final String HTMLDOC_branding = "HtmlSerializer.branding"; + public static final String HTMLDOC_branding = "HtmlDocSerializer.branding"; /** * <b>Configuration property:</b> Header section contents. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6e47b7ff/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java b/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java index 21c148c..ef8aed8 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java @@ -14,7 +14,6 @@ package org.apache.juneau.rest; import static javax.servlet.http.HttpServletResponse.*; import static org.apache.juneau.dto.swagger.SwaggerBuilder.*; -import static org.apache.juneau.html.HtmlDocSerializerContext.*; import static org.apache.juneau.internal.ClassUtils.*; import static org.apache.juneau.internal.StringUtils.*; import static org.apache.juneau.internal.Utils.*; @@ -68,11 +67,11 @@ class CallMethod implements Comparable<CallMethod> { private final Response[] responses; private final RestContext context; private final BeanContext beanContext; - private final String htmlTitle, htmlDescription, htmlBranding, htmlHeader, htmlNav, htmlAside, + final String htmlTitle, htmlDescription, htmlBranding, htmlHeader, htmlNav, htmlAside, htmlFooter, htmlStyle, htmlStylesheet, htmlScript, htmlNoResultsMessage; - private final String[] htmlLinks; - private final boolean htmlNoWrap; - private final HtmlDocTemplate htmlTemplate; + final String[] htmlLinks; + final boolean htmlNoWrap; + final HtmlDocTemplate htmlTemplate; private final Map<String,Widget> widgets; CallMethod(Object servlet, java.lang.reflect.Method method, RestContext context) throws RestServletException { @@ -872,128 +871,14 @@ class CallMethod implements Comparable<CallMethod> { Object o = super.get(key); if (o == null) { String k = key.toString(); - if (k.indexOf('.') != -1) { - String prefix = k.substring(0, k.indexOf('.')); - String remainder = k.substring(k.indexOf('.')+1); - if ("path".equals(prefix)) - return req.getPathMatch().get(remainder); - if ("query".equals(prefix)) - return req.getQuery().get(remainder); - if ("formData".equals(prefix)) - return req.getFormData().get(remainder); - if ("header".equals(prefix)) - return req.getHeader(remainder); + int i = k.indexOf('.'); + if (i != -1) { + String prefix = k.substring(0, i); + String remainder = k.substring(i+1); + Object v = req.resolveProperty(CallMethod.this, prefix, remainder); + if (v != null) + return v; } - if (k.equals(REST_servletPath)) - return req.getServletPath(); - if (k.equals(REST_servletURI)) - return req.getUriContext().getRootRelativeServletPath(); - if (k.equals(REST_pathInfo)) - return req.getPathInfo(); - if (k.equals(REST_requestURI)) - return req.getRequestURI(); - if (k.equals(REST_method)) - return req.getMethod(); - if (k.equals(REST_siteName)) - return req.getSiteName(); - if (k.equals(REST_servletTitle)) - return req.getServletTitle(); - if (k.equals(REST_servletDescription)) - return req.getServletDescription(); - if (k.equals(REST_methodSummary)) - return req.getMethodSummary(); - if (k.equals(REST_methodDescription)) - return req.getMethodDescription(); - if (k.equals(HTMLDOC_title)) { - String s = htmlTitle; - if (! StringUtils.isEmpty(s)) - return req.resolveVars(s); - return req.getServletTitle(); - } - if (k.equals(HTMLDOC_description)) { - String s = htmlDescription; - if (! StringUtils.isEmpty(s)) - return req.resolveVars(s); - s = req.getMethodSummary(); - if (StringUtils.isEmpty(s)) - s = req.getServletDescription(); - return s; - } - if (k.equals(HTMLDOC_header)) - return htmlHeader == null ? null : req.resolveVars(htmlHeader); - if (k.equals(HTMLDOC_branding)) - return htmlBranding == null ? null : req.resolveVars(htmlBranding); - if (k.equals(HTMLDOC_links)) { - if (htmlLinks == null || htmlLinks.length == 0) - return null; - try { - List<String> la = new ArrayList<String>(); - for (String l : htmlLinks) { - // Temporary backwards compatibility with JSON object format. - if (l.startsWith("{")) { - ObjectMap m = new ObjectMap(l); - for (Map.Entry<String,Object> e : m.entrySet()) - la.add(req.resolveVars(e.getKey()) + ":" + req.resolveVars(StringUtils.toString(e.getValue()))); - } else { - la.add(req.resolveVars(l)); - } - } - return la; - } catch (ParseException e) { - throw new RuntimeException(e); - } - } - if (k.equals(HTMLDOC_nav)) - return htmlNav == null ? null : req.resolveVars(htmlNav); - if (k.equals(HTMLDOC_aside)) - return htmlAside == null ? null : req.resolveVars(htmlAside); - if (k.equals(HTMLDOC_footer)) - return htmlFooter == null ? null : req.resolveVars(htmlFooter); - if (k.equals(HTMLDOC_style)) { - Set<String> l = new LinkedHashSet<String>(); - if (htmlStyle != null) - l.add(req.resolveVars(htmlStyle)); - for (Widget w : req.getWidgets().values()) { - String style; - try { - style = w.getStyle(req); - } catch (Exception e) { - style = e.getLocalizedMessage(); - } - if (style != null) - l.add(req.resolveVars(style)); - } - return l; - } - if (k.equals(HTMLDOC_script)) { - Set<String> l = new LinkedHashSet<String>(); - if (htmlScript != null) - l.add(req.resolveVars(htmlScript)); - for (Widget w : req.getWidgets().values()) { - String script; - try { - script = w.getScript(req); - } catch (Exception e) { - script = e.getLocalizedMessage(); - } - if (script != null) - l.add(req.resolveVars(script)); - } - return l; - } - if (k.equals(HTMLDOC_stylesheet)) { - String s = req.getStylesheet(); - // Exclude absolute URIs to stylesheets for security reasons. - if (s == null || isAbsoluteUri(s)) - s = htmlStylesheet; - return s == null ? null : req.resolveVars(s); - } - if (k.equals(HTMLDOC_template)) - return htmlTemplate; - if (k.equals(HTMLDOC_nowrap)) - return htmlNoWrap; - if (k.equals(HTMLDOC_noResultsMessage)) - return htmlNoResultsMessage == null ? null : req.resolveVars(htmlNoResultsMessage); o = req.getPathMatch().get(k); if (o == null) o = req.getHeader(k); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6e47b7ff/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java index f21d364..f7ae070 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java @@ -229,126 +229,6 @@ public final class RestContext extends Context { public static final String REST_paramFormat = "RestServlet.paramFormat"; - //-------------------------------------------------------------------------------- - // Automatically added properties. - //-------------------------------------------------------------------------------- - - /** - * The request servlet path. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getServletPath()} - */ - public static final String REST_servletPath = "RestServlet.servletPath"; - - /** - * The request servlet URI. - * - * <p> - * Equivalent to the value returned by {@link UriContext#getRootRelativeServletPath()} - */ - public static final String REST_servletURI = "RestServlet.servletURI"; - - /** - * The request URI path info. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getPathInfo()} - */ - public static final String REST_pathInfo = "RestServlet.pathInfo"; - - /** - * The request URI. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getRequestURI()} - */ - public static final String REST_requestURI = "RestServlet.requestURI"; - - /** - * The request method. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getMethod()} - */ - public static final String REST_method = "RestServlet.method"; - - /** - * The localized site name. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getSiteName()} - */ - public static final String REST_siteName = "RestServlet.siteName"; - - /** - * The localized servlet title. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getServletTitle()} - */ - public static final String REST_servletTitle = "RestServlet.servletTitle"; - - /** - * The localized servlet description. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getServletDescription()} - */ - public static final String REST_servletDescription = "RestServlet.servletDescription"; - - /** - * The localized method summary. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getMethodSummary()} - */ - public static final String REST_methodSummary = "RestServlet.methodSummary"; - - /** - * The localized method description. - * - * <p> - * Automatically added to properties returned by {@link SerializerSession#getProperty(String)} and - * {@link ParserSession#getProperty(String)}. - * - * <p> - * Equivalent to the value returned by {@link RestRequest#getMethodDescription()} - */ - public static final String REST_methodDescription = "RestServlet.methodDescription"; - private final Object resource; private final RestConfig config; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6e47b7ff/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java index 59b0d86..00f70b5 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java @@ -16,6 +16,7 @@ import static java.util.Collections.*; import static java.util.logging.Level.*; import static javax.servlet.http.HttpServletResponse.*; import static org.apache.juneau.internal.IOUtils.*; +import static org.apache.juneau.internal.StringUtils.*; import java.io.*; import java.lang.reflect.*; @@ -31,9 +32,12 @@ import javax.servlet.http.*; import org.apache.juneau.*; import org.apache.juneau.dto.swagger.*; import org.apache.juneau.encoders.*; +import org.apache.juneau.html.*; import org.apache.juneau.http.*; import org.apache.juneau.ini.*; +import org.apache.juneau.internal.*; import org.apache.juneau.parser.*; +import org.apache.juneau.parser.ParseException; import org.apache.juneau.rest.widget.*; import org.apache.juneau.serializer.*; import org.apache.juneau.svl.*; @@ -233,6 +237,227 @@ public final class RestRequest extends HttpServletRequestWrapper { } + /** + * Resolves the specified property. + * + * @param cm + * The <code>CallMethod</code> object where the <code>HtmlDocSerializer</code> settings are defined. + * Optional value. If not specified, then won't resolve <code>HtmlDocSerializer</code> properties. + * @param category + * The property category. + * The possible values are: + * <ul> + * <li> + * <js>"Attribute"</js> - Value returned by {@link HttpServletRequest#getAttribute(String)}. + * <li> + * <js>"FormData"</js> - Value returned by {@link RestRequest#getFormData(String)}. + * <li> + * <js>"Header"</js> - Value returned by {@link RestRequest#getHeader(String)}. + * <li> + * <js>"HtmlDocSerializer"</js> + * <br>Valid names: + * <ul> + * <li><js>"aside"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_aside} + * <li><js>"branding"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_branding} + * <li><js>"description"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_description} + * <li><js>"footer"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_footer} + * <li><js>"header"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_header} + * <li><js>"links.list"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_links} + * <li><js>"nav"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_nav} + * <li><js>"noResultsMessage"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_noResultsMessage} + * <li><js>"nowrap"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_nowrap} + * <li><js>"script.list"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_script} + * <li><js>"style.list"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_style} + * <li><js>"stylesheet"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_stylesheet} + * <li><js>"template"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_template} + * <li><js>"title"</js> - See {@link HtmlDocSerializerContext#HTMLDOC_title} + * </ul> + * <li> + * <js>"Path"</js> - Value returned by {@link RestRequest#getPath(String)}. + * <li> + * <js>"Query"</js> = Value returned by {@link RestRequest#getQuery(String)}. + * <li> + * <js>"Request"</js> + * <br>Valid names: + * <ul> + * <li><js>"contextPath"</js> - Value returned by {@link RestRequest#getContextPath()} + * <li><js>"method"</js> - Value returned by {@link RestRequest#getMethod()} + * <li><js>"methodDescription"</js> - Value returned by {@link RestRequest#getMethodDescription()} + * <li><js>"methodSummary"</js> - Value returned by {@link RestRequest#getMethodSummary()} + * <li><js>"pathInfo"</js> - Value returned by {@link RestRequest#getPathInfo()} + * <li><js>"requestParentURI"</js> - Value returned by {@link UriContext#getRootRelativePathInfoParent()} + * <li><js>"requestURI"</js> - Value returned by {@link RestRequest#getRequestURI()} + * <li><js>"servletDescription"</js> - Value returned by {@link RestRequest#getServletDescription()} + * <li><js>"servletParentURI"</js> - Value returned by {@link UriContext#getRootRelativeServletPathParent()} + * <li><js>"servletPath"</js> - See {@link RestRequest#getServletPath()} + * <li><js>"servletTitle"</js> - See {@link RestRequest#getServletTitle()} + * <li><js>"servletURI"</js> - See {@link UriContext#getRootRelativeServletPath()} + * <li><js>"siteName"</js> - See {@link RestRequest#getSiteName()} + * </ul> + * </ul> + * @param name The property name. + * @return The resolve property, or <jk>null</jk> if it wasn't found. + */ + public Object resolveProperty(CallMethod cm, String category, String name) { + char c = category.charAt(0); + if (c == 'A') { + if ("Attribute".equals(category)) + return getAttribute(name); + } else if (c == 'F') { + if ("FormData".equals(category)) + return getFormData(name); + } else if (c == 'H') { + if ("Header".equals(category)) + return getHeader(name); + if ("HtmlDocSerializer".equals(category) && cm != null) { + char c2 = StringUtils.charAt(name, 0); + if (c2 == 'a') { + if ("aside".equals(name)) + return cm.htmlAside == null ? null : resolveVars(cm.htmlAside); + } else if (c2 == 'b') { + if ("branding".equals(name)) + return cm.htmlBranding == null ? null : resolveVars(cm.htmlBranding); + } else if (c2 == 'd') { + if ("description".equals(name)) { + String s = cm.htmlDescription; + if (! StringUtils.isEmpty(s)) + return resolveVars(s); + s = getMethodSummary(); + if (StringUtils.isEmpty(s)) + s = getServletDescription(); + return s; + } + } else if (c2 == 'f') { + if ("footer".equals(name)) + return cm.htmlFooter == null ? null : resolveVars(cm.htmlFooter); + } else if (c2 == 'h') { + if ("header".equals(name)) + return cm.htmlHeader == null ? null : resolveVars(cm.htmlHeader); + } else if (c2 == 'l') { + if ("links.list".equals(name)) { + if (cm.htmlLinks == null || cm.htmlLinks.length == 0) + return null; + try { + List<String> la = new ArrayList<String>(); + for (String l : cm.htmlLinks) { + // Temporary backwards compatibility with JSON object format. + if (l.startsWith("{")) { + ObjectMap m = new ObjectMap(l); + for (Map.Entry<String,Object> e : m.entrySet()) + la.add(resolveVars(e.getKey()) + ":" + resolveVars(StringUtils.toString(e.getValue()))); + } else { + la.add(resolveVars(l)); + } + } + return la; + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + } else if (c2 == 'n') { + if ("nav".equals(name)) + return cm.htmlNav == null ? null : resolveVars(cm.htmlNav); + if ("noResultsMessage".equals(name)) + return cm.htmlNoResultsMessage == null ? null : resolveVars(cm.htmlNoResultsMessage); + if ("nowrap".equals(name)) + return cm.htmlNoWrap; + } else if (c2 == 's') { + if ("script.list".equals(name)) { + Set<String> l = new LinkedHashSet<String>(); + if (cm.htmlScript != null) + l.add(resolveVars(cm.htmlScript)); + for (Widget w : getWidgets().values()) { + String script; + try { + script = w.getScript(this); + } catch (Exception e) { + script = e.getLocalizedMessage(); + } + if (script != null) + l.add(resolveVars(script)); + } + return l; + } + if ("style.list".equals(name)) { + Set<String> l = new LinkedHashSet<String>(); + if (cm.htmlStyle != null) + l.add(resolveVars(cm.htmlStyle)); + for (Widget w : getWidgets().values()) { + String style; + try { + style = w.getStyle(this); + } catch (Exception e) { + style = e.getLocalizedMessage(); + } + if (style != null) + l.add(resolveVars(style)); + } + return l; + } + if ("stylesheet".equals(name)) { + String s = getStylesheet(); + // Exclude absolute URIs to stylesheets for security reasons. + if (s == null || isAbsoluteUri(s)) + s = cm.htmlStylesheet; + return s == null ? null : resolveVars(s); + } + } else if (c2 == 't') { + if ("template".equals(name)) + return cm.htmlTemplate; + if ("title".equals(name)) { + String s = cm.htmlTitle; + if (! StringUtils.isEmpty(s)) + return resolveVars(s); + return getServletTitle(); + } + } + } + } else if (c == 'P') { + if ("Path".equals(category)) + return getPath(name); + } else if (c == 'Q') { + if ("Query".equals(category)) + return getQuery(name); + } else if (c == 'R') { + if ("Request".equals(category)) { + char c2 = StringUtils.charAt(name, 0); + if (c == 'c') { + if ("contextPath".equals(name)) + return getContextPath(); + } else if (c2 == 'm') { + if ("method".equals(name)) + return getMethod(); + if ("methodDescription".equals(name)) + return getMethodDescription(); + if ("methodSummary".equals(name)) + return getMethodSummary(); + } else if (c2 == 'p') { + if ("pathInfo".equals(name)) + return getPathInfo(); + } else if (c2 == 'r') { + if ("requestParentURI".equals(name)) + return getUriContext().getRootRelativePathInfoParent(); + if ("requestURI".equals(name)) + return getRequestURI(); + } else if (c2 == 's') { + if ("servletDescription".equals(name)) + return getServletDescription(); + if ("servletParentURI".equals(name)) + return getUriContext().getRootRelativeServletPathParent(); + if ("servletPath".equals(name)) + return getServletPath(); + if ("servletTitle".equals(name)) + return getServletTitle(); + if ("servletURI".equals(name)) + return getUriContext().getRootRelativeServletPath(); + if ("siteName".equals(name)) + return getSiteName(); + } + } + } + return null; + } + //-------------------------------------------------------------------------------- // Properties //-------------------------------------------------------------------------------- @@ -448,6 +673,15 @@ public final class RestRequest extends HttpServletRequestWrapper { return pathParams; } + /** + * Shortcut for calling <code>getPathMatch().get(name)</code>. + * + * @param name The path variable name. + * @return The path variable value, or <jk>null<jk> if not found. + */ + public String getPath(String name) { + return getPathMatch().get(name); + } //-------------------------------------------------------------------------------- // Body methods http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6e47b7ff/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java index 9d2ccf3..f1a5608 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java @@ -91,8 +91,8 @@ public @interface HtmlDoc { * <p> * If not specified, the page title is pulled from one of the following locations: * <ol> - * <li><code>{servletClass}.{methodName}.pageTitle</code> resource bundle value. - * <li><code>{servletClass}.pageTitle</code> resource bundle value. + * <li><code>{servletClass}.{methodName}.title</code> resource bundle value. + * <li><code>{servletClass}.title</code> resource bundle value. * <li><code><ja>@RestResource</ja>(title)</code> annotation. * <li><code>{servletClass}.title</code> resource bundle value. * <li><code>info/title</code> entry in swagger file. @@ -134,8 +134,8 @@ public @interface HtmlDoc { * <p> * If not specified, the page title is pulled from one of the following locations: * <ol> - * <li><code>{servletClass}.{methodName}.pageText</code> resource bundle value. - * <li><code>{servletClass}.pageText</code> resource bundle value. + * <li><code>{servletClass}.{methodName}.summary</code> resource bundle value. + * <li><code>{servletClass}.summary</code> resource bundle value. * <li><code><ja>@RestMethod</ja>(summary)</code> annotation. * <li><code>{servletClass}.{methodName}.summary</code> resource bundle value. * <li><code>summary</code> entry in swagger file for method. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6e47b7ff/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java index e1a7060..dc49fe8 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java @@ -13,7 +13,6 @@ package org.apache.juneau.rest.vars; import org.apache.juneau.*; -import org.apache.juneau.internal.*; import org.apache.juneau.rest.*; import org.apache.juneau.svl.*; @@ -69,50 +68,17 @@ public class RequestVar extends SimpleVar { RestRequest req = session.getSessionObject(RestRequest.class, SESSION_req); if (key.length() > 0) { String k = key.toString(); - if (k.indexOf('.') != -1) { - String prefix = k.substring(0, k.indexOf('.')); - String remainder = k.substring(k.indexOf('.')+1); - if ("path".equals(prefix)) - return req.getPathMatch().get(remainder); - if ("query".equals(prefix)) - return req.getQuery().getString(remainder); - if ("formData".equals(prefix)) - return req.getFormData().getString(remainder); - if ("header".equals(prefix)) - return req.getHeader(remainder); - if ("attribute".equals(prefix)) - return StringUtils.toString(req.getAttribute(remainder)); - } - char c = key.charAt(0); - if (c == 'c') { - if (key.equals("contextPath")) - return req.getContextPath(); - } else if (c == 'm') { - if (key.equals("method")) - return req.getMethod(); - if (key.equals("methodSummary")) - return req.getMethodSummary(); - if (key.equals("methodDescription")) - return req.getMethodDescription(); - } else if (c == 'p') { - if (key.equals("pathInfo")) - return req.getPathInfo(); - } else if (c == 'r') { - if (key.equals("requestURI")) - return req.getRequestURI(); - if (key.equals("requestParentURI")) - return req.getUriContext().getRootRelativePathInfoParent(); - } else if (c == 's') { - if (key.equals("servletPath")) - return req.getServletPath(); - if (key.equals("servletURI")) - return req.getUriContext().getRootRelativeServletPath(); - if (key.equals("servletParentURI")) - return req.getUriContext().getRootRelativeServletPathParent(); - if (key.equals("servletTitle")) - return req.getServletTitle(); - if (key.equals("servletDescription")) - return req.getServletDescription(); + int i = k.indexOf('.'); + if (i != -1) { + String prefix = k.substring(0, i); + String remainder = k.substring(i+1); + Object o = req.resolveProperty(null, prefix, remainder); + if (o != null) + return o.toString(); + } else { + Object o = req.resolveProperty(null, "Request", key); + if (o != null) + return o.toString(); } Object o = req.getProperties().get(key); if (o != null)
