Repository: incubator-juneau
Updated Branches:
  refs/heads/master 357342a17 -> 633619e80


Better handling of query parameters from ContentTypeMenuItem and
StyleMenuItem.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/633619e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/633619e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/633619e8

Branch: refs/heads/master
Commit: 633619e80ed9d70403c87b3cf9917eee9c5e11c1
Parents: 357342a
Author: JamesBognar <[email protected]>
Authored: Thu Jul 6 16:49:51 2017 -0400
Committer: JamesBognar <[email protected]>
Committed: Thu Jul 6 16:49:51 2017 -0400

----------------------------------------------------------------------
 .../org/apache/juneau/rest/RequestQuery.java    | 30 ++++++++++++++++++++
 .../org/apache/juneau/rest/RestRequest.java     | 30 ++++++++++++++++++++
 .../org/apache/juneau/rest/UrlPathPattern.java  |  5 ++++
 .../rest/jena/RestServletJenaDefault.java       | 10 ++++---
 .../juneau/rest/widget/ContentTypeMenuItem.java | 11 +++----
 .../juneau/rest/widget/StyleMenuItem.java       |  7 ++---
 .../org/apache/juneau/rest/styles/light.css     |  2 +-
 7 files changed, 81 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/633619e8/juneau-rest/src/main/java/org/apache/juneau/rest/RequestQuery.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RequestQuery.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RequestQuery.java
index e714344..6b6b492 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RequestQuery.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RequestQuery.java
@@ -25,6 +25,7 @@ import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.utils.*;
+import org.apache.juneau.xml.*;
 
 /**
  * Represents the query parameters in an HTTP request.
@@ -47,6 +48,15 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
        }
 
        /**
+        * Create a copy of the request query parameters.
+        */
+       RequestQuery copy() {
+               RequestQuery rq = new RequestQuery();
+               rq.putAll(this);
+               return rq;
+       }
+
+       /**
         * Adds default entries to these query parameters.
         *
         * <p>
@@ -468,6 +478,26 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
                return JsonSerializer.DEFAULT_LAX.toString(m);
        }
 
+       /**
+        * Converts this object to a query string.
+        *
+        * <p>
+        * Returned query string does not start with <js>'?'</js>.
+        *
+        * @return A new query string, or an empty string if this object is 
empty.
+        */
+       public String toQueryString() {
+               StringBuilder sb = new StringBuilder();
+               for (Map.Entry<String,String[]> e : this.entrySet()) {
+                       for (int i = 0; i < e.getValue().length; i++) {
+                               if (sb.length() > 0)
+                                       sb.append("&");
+                               
sb.append(XmlUtils.urlEncode(e.getKey())).append('=').append(XmlUtils.urlEncode(e.getValue()[i]));
+                       }
+               }
+               return sb.toString();
+       }
+
        @Override /* Object */
        public String toString() {
                return toString(false);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/633619e8/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 cb58d86..937a429 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
@@ -19,6 +19,7 @@ import static org.apache.juneau.internal.IOUtils.*;
 
 import java.io.*;
 import java.lang.reflect.*;
+import java.net.*;
 import java.nio.charset.*;
 import java.text.*;
 import java.util.*;
@@ -541,6 +542,35 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
                return new UriResolver(UriResolution.ROOT_RELATIVE, 
UriRelativity.RESOURCE, getUriContext());
        }
 
+       /**
+        * Returns the URI for this request.
+        *
+        * <p>
+        * Similar to {@link #getRequestURL()} but returns the value as a 
{@link URI}.
+        * It also gives you the capability to override the query parameters 
(e.g. add new query parameters to the existing
+        * URI).
+        *
+        * @param includeQuery If <jk>true</jk> include the query parameters on 
the request.
+        * @param addQueryParams Augment the request URI with the specified 
query parameters.
+        * @return A new URI.
+        */
+       public URI getUri(boolean includeQuery, Map<String,?> addQueryParams) {
+               StringBuffer sb = getRequestURL();
+               if (includeQuery || addQueryParams != null) {
+                       RequestQuery rq = this.queryParams.copy();
+                       if (addQueryParams != null)
+                               for (Map.Entry<String,?> e : 
addQueryParams.entrySet())
+                                       rq.put(e.getKey(), e.getValue());
+                       if (! rq.isEmpty())
+                               sb.append('?').append(rq.toQueryString());
+               }
+               try {
+                       return new URI(sb.toString());
+               } catch (URISyntaxException e) {
+                       // Shouldn't happen.
+                       throw new RuntimeException(e);
+               }
+       }
 
        
//--------------------------------------------------------------------------------
        // Labels

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/633619e8/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
index 2ed259e..bbbb716 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
@@ -94,6 +94,11 @@ public final class UrlPathPattern implements 
Comparable<UrlPathPattern> {
                if (path == null)
                        return (patternString.equals("/") ? new String[]{} : 
null);
 
+               // If we're not doing a /* match, ignore all trailing slashes.
+               if (! isDotAll)
+                       while (path.length() > 1 && 
path.charAt(path.length()-1) == '/')
+                               path = path.substring(0, path.length()-1);
+
                Matcher m = pattern.matcher(path);
                if (! m.matches())
                        return null;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/633619e8/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
index 327d6d1..4b8984a 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
@@ -261,11 +261,13 @@ public abstract class RestServletJenaDefault extends 
RestServlet {
         * @return The bean containing the contents of the OPTIONS page.
         */
        @RestMethod(name="OPTIONS", path="/*",
-               summary="Resource options",
-               description="Resource options",
                htmldoc=@HtmlDoc(
-                       links="{back:'$R{servletURI}'}"
-               )
+                       
links="{back:'servlet:/',json:'servlet:/?method=OPTIONS&Accept=text/json&plainText=true'}",
+                       description="Swagger documentation",
+                       aside="NONE"
+               ),
+               summary="Resource options",
+               description="Swagger documentation"
        )
        public Swagger getOptions(RestRequest req) {
                return req.getSwagger();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/633619e8/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
index 64c0daf..c8fd158 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/ContentTypeMenuItem.java
@@ -12,11 +12,12 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.widget;
 
+import java.net.*;
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.rest.*;
+import org.apache.juneau.utils.*;
 
 /**
  * Widget that returns back a list of hyperlinks for rendering the contents of 
a page in a variety of content types.
@@ -61,7 +62,6 @@ public class ContentTypeMenuItem extends MenuItemWidget {
         */
        @Override /* Widget */
        public String getHtml(RestRequest req) throws Exception {
-               UriResolver r = req.getUriResolver();
                StringBuilder sb = new StringBuilder();
                sb.append(""
                        + "<div class='menu-item'>"
@@ -70,9 +70,10 @@ public class ContentTypeMenuItem extends MenuItemWidget {
                );
                List<MediaType> l = new 
ArrayList<MediaType>(req.getSerializerGroup().getSupportedMediaTypes());
                Collections.sort(l);
-               for (MediaType mt : l)
-                       sb.append("\n\t\t<a class='link' 
href='").append(r.resolve("request:/?plainText=true&Accept="+mt))
-                               .append("'>").append(mt).append("</a><br>");
+               for (MediaType mt : l) {
+                       URI uri = req.getUri(true, new 
AMap<String,String>().append("plainText","true").append("Accept",mt.toString()));
+                       sb.append("\n\t\t<a class='link' 
href='").append(uri).append("'>").append(mt).append("</a><br>");
+               }
                sb.append(""
                        + "\n\t</div>"
                        + "\n</div>"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/633619e8/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
index ac11c6a..ce7d52f 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
@@ -12,8 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.widget;
 
-import org.apache.juneau.*;
 import org.apache.juneau.rest.*;
+import org.apache.juneau.utils.*;
 
 /**
  * Widget that returns back a list of hyperlinks for rendering the contents of 
a page in the various default styles.
@@ -56,7 +56,6 @@ public class StyleMenuItem extends MenuItemWidget {
         */
        @Override /* Widget */
        public String getHtml(RestRequest req) throws Exception {
-               UriResolver r = req.getUriResolver();
                StringBuilder sb = new StringBuilder();
                sb.append(""
                        + "<div class='menu-item'>"
@@ -64,8 +63,8 @@ public class StyleMenuItem extends MenuItemWidget {
                        + "\n\t<div class='popup-content'>"
                );
                for (String s : BUILT_IN_STYLES) {
-                       sb.append("\n\t\t<a class='link' 
href='").append(r.resolve("request:/?stylesheet=styles/"+s+".css"))
-                       .append("'>").append(s).append("</a><br>");
+                       java.net.URI uri = req.getUri(true, new 
AMap<String,String>().append("stylesheet", "styles/"+s+".css"));
+                       sb.append("\n\t\t<a class='link' 
href='").append(uri).append("'>").append(s).append("</a><br>");
                }
                sb.append(""
                        + "\n\t</div>"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/633619e8/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css
index f261cf7..d7787e2 100644
--- a/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css
+++ b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css
@@ -30,7 +30,7 @@ header {
        height: 50px;
        padding: 10px 20px;
        box-shadow: 5px 5px 2px #999999;
-       text-shadow: rgba(0,0,0,.2) 2px 4px 5px, rgba(125,32,191,.4) 0 -4px 
30px;
+       text-shadow: rgba(1,1,1,.2) 2px 4px 5px, rgba(125,32,191,.05) 0 -10px 
30px;
        white-space: nowrap;
 }
 header * {

Reply via email to