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)

Reply via email to