Repository: incubator-juneau
Updated Branches:
  refs/heads/master f83685984 -> 095900928


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
index a563863..a6ce725 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/converters/Queryable.java
@@ -12,14 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.converters;
 
-import static javax.servlet.http.HttpServletResponse.*;
-
-import java.util.*;
-
 import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -30,65 +24,39 @@ import org.apache.juneau.utils.*;
  * <p>
  * The following HTTP request parameters are available for tabular data (e.g. 
{@code Collections} of {@code Maps}, arrays of beans, etc...):
  * <ul class='spaced-list'>
- *     <li><b>&amp;q=<i>JSON-object</i></b> - Query parameter.  Only return 
rows that match the specified search string. <br>
- *                     The JSON object keys are column names, and the values 
are search parameter strings.<br>
- *                     Example:  
<code>&amp;s=(name=Bill*,birthDate=&gt;2000)</code>
- *     <li><b>&amp;v=<i>JSON-array or comma-delimited list</i></b> - View 
parameter.  Only return the specified columns.<br>
- *                     Example:  <code>&amp;v=(name,birthDate)</code>
- *     <li><b>&amp;s=<i>JSON-object</i></b> - Sort parameter.  Sort the 
results by the specified columns.<br>
- *                     The JSON object keys are the column names, and the 
values are either {@code 'A'} for ascending or {@code 'D'} for descending.
- *                     Example:  <code>&amp;s=(name=A,birthDate=D)</code>
- *     <li><b>&amp;i=<i>true/false</i></b> - Case-insensitive parameter.  
Specify <jk>true</jk> for case-insensitive matching on the {@code &amp;q} 
parameter.
- *     <li><b>&amp;p=<i>number</i></b> - Position parameter.  Only return rows 
starting at the specified index position (zero-indexed).  Default is {@code 0}.
- *     <li><b>&amp;q=<i>number</i></b> - Limit parameter.  Only return the 
specified number of rows. Default is {@code 0} (meaning return all rows).
+ *     <li><code>&amp;s=</code> Search arguments.
+ *                     <br>Comma-delimited list of key/value pairs 
representing column names and search tokens.
+ *                     <br>Example:  
<js>"&amp;s=name=Bill*,birthDate&gt;2000"</js>
+ *     <li><code>&amp;v=</code> Visible columns.
+ *                     <br>Comma-delimited list of column names to display.
+ *                     <br>Example:  <js>"&amp;v=name,birthDate"</js>
+ *     <li><code>&amp;o=</code> Sort commands.
+ *                     <br>Comma-delimited list of columns to sort by.
+ *                     <br>Column names can be suffixed with <js>'+'</js> or 
<js>'-'</js> to indicate ascending or descending order.
+ *                     <br>The default is ascending order.
+ *                     <br>Example:  <js>"&amp;o=name,birthDate-"</js>
+ *     <li><code>&amp;i=</code> Case-insensitive parameter.
+ *                     <br>Boolean flag for case-insensitive matching on the 
search parameters.
+ *     <li><code>&amp;p=</code> - Position parameter.
+ *                     <br>Only return rows starting at the specified index 
position (zero-indexed).
+ *                     <br>Default is {@code 0}.
+ *     <li><code>&amp;l=</code> Limit parameter.
+ *                     <br>Only return the specified number of rows.
+ *                     <br>Default is {@code 0} (meaning return all rows).
  * </ul>
  *
  * <p>
- * The <b>&amp;v</b> parameter can also be used on {@code Maps} and beans.
- *
- * <p>
  * See {@link PojoQuery} for additional information on filtering POJO models.
  */
 public final class Queryable implements RestConverter {
 
        @Override /* RestConverter */
-       @SuppressWarnings({ "unchecked", "rawtypes" })
-       public Object convert(RestRequest req, Object o, ClassMeta cm) {
+       public Object convert(RestRequest req, Object o, ClassMeta<?> cm) {
                if (o == null)
                        return null;
-
-               try {
-                       RequestQuery q = req.getQuery();
-
-                       // If no actual filtering parameters have been passed 
in, and there is no map augmenter specified,
-                       // then just pass the original object back.
-                       if (q.containsAnyKeys("q","v","s","g","i","p","l")) {
-                               BeanSession session = req.getBeanSession();
-
-                               if (cm.getPojoSwap() != null)
-                                       o = cm.getPojoSwap().swap(session, o);
-
-                               PojoQuery f = new PojoQuery(o, session);
-
-                               if (o instanceof Collection || 
o.getClass().isArray()) {
-                                       ObjectMap query = q.get("q", 
ObjectMap.class);
-                                       List<String> view = q.get("v", 
List.class, String.class);
-                                       List sort = q.get("s", List.class, 
String.class);
-                                       boolean ignoreCase = q.get("i", false, 
Boolean.class);
-                                       int pos = q.get("p", 0, Integer.class);
-                                       int limit = q.get("l", 0, 
Integer.class);
-                                       o = f.filterCollection(query, view, 
sort, pos, limit, ignoreCase);
-
-                               } else {
-                                       List<String> view = q.get("v", 
List.class, String.class);
-                                       o = f.filterMap(view);
-                               }
-                       }
+               SearchArgs searchArgs = req.getQuery().getSearchArgs();
+               if (searchArgs == null)
                        return o;
-               } catch (SerializeException e) {
-                       throw new RestException(SC_BAD_REQUEST, e);
-               } catch (ParseException e) {
-                       throw new RestException(SC_BAD_REQUEST, e);
-               }
+               return new PojoQuery(o, 
req.getBeanSession()).filter(searchArgs);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/package.html 
b/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
index d5dec8b..7c04791 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
@@ -2091,14 +2091,14 @@
                                        <ul>
                                                <li><ck>$R{attribute.X}</ck> - 
Value returned by {@link 
org.apache.juneau.rest.RestRequest#getAttribute(String)} converted to a string.
                                                <li><ck>$R{contextPath}</ck> - 
Value returned by {@link org.apache.juneau.rest.RestRequest#getContextPath()}.
-                                               <li><ck>$R{formData.X}</ck> - 
Value returned by {@link 
org.apache.juneau.rest.RequestFormData#getFirst(String)}.
-                                               <li><ck>$R{header.X}</ck> - 
Value returned by {@link 
org.apache.juneau.rest.RequestHeaders#getFirst(String)}.
+                                               <li><ck>$R{formData.X}</ck> - 
Value returned by {@link 
org.apache.juneau.rest.RequestFormData#getString(String)}.
+                                               <li><ck>$R{header.X}</ck> - 
Value returned by {@link 
org.apache.juneau.rest.RequestHeaders#getString(String)}.
                                                <li><ck>$R{method}</ck> - Value 
returned by {@link org.apache.juneau.rest.RestRequest#getMethod()}.
                                                <li><ck>$R{methodSummary}</ck> 
- Value returned by {@link 
org.apache.juneau.rest.RestRequest#getMethodSummary()}.
                                                
<li><ck>$R{methodDescription}</ck> - Value returned by {@link 
org.apache.juneau.rest.RestRequest#getMethodDescription()}.
                                                <li><ck>$R{path.X}</ck> - Value 
returned by {@link org.apache.juneau.rest.RequestPathMatch#get(Object)}.
                                                <li><ck>$R{pathInfo}</ck> - 
Value returned by {@link org.apache.juneau.rest.RestRequest#getPathInfo()}.
-                                               <li><ck>$R{query.X}</ck> - 
Value returned by {@link org.apache.juneau.rest.RequestQuery#getFirst(String)}.
+                                               <li><ck>$R{query.X}</ck> - 
Value returned by {@link org.apache.juneau.rest.RequestQuery#getString(String)}.
                                                
<li><ck>$R{requestParentURI}</ck> - Value returned by {@link 
org.apache.juneau.UriContext#getRootRelativePathInfoParent()}.
                                                <li><ck>$R{requestURI}</ck> - 
Value returned by {@link org.apache.juneau.rest.RestRequest#getRequestURI()}.
                                                
<li><ck>$R{servletDescription}</ck> - Value returned by {@link 
org.apache.juneau.rest.RestRequest#getServletDescription()}.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/response/DefaultHandler.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/response/DefaultHandler.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/response/DefaultHandler.java
index fe7aab6..fad726e 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/response/DefaultHandler.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/response/DefaultHandler.java
@@ -38,7 +38,7 @@ public class DefaultHandler implements ResponseHandler {
        @Override /* ResponseHandler */
        public boolean handle(RestRequest req, RestResponse res, Object output) 
throws IOException, RestException {
                SerializerGroup g = res.getSerializerGroup();
-               String accept = req.getHeaders().getFirst("Accept", "");
+               String accept = req.getHeaders().getString("Accept", "");
                SerializerMatch sm = g.getSerializerMatch(accept);
                if (sm != null) {
                        Serializer s = sm.getSerializer();
@@ -87,7 +87,7 @@ public class DefaultHandler implements ResponseHandler {
                } else {
                        throw new RestException(SC_NOT_ACCEPTABLE,
                                "Unsupported media-type in request header 
''Accept'': ''{0}''\n\tSupported media-types: {1}",
-                               req.getHeaders().getFirst("Accept", ""), 
g.getSupportedMediaTypes()
+                               req.getHeaders().getString("Accept", ""), 
g.getSupportedMediaTypes()
                        );
                }
                return true;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/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 aeaefbd..3764cf8 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
@@ -72,9 +72,9 @@ public class RequestVar extends SimpleVar {
                                        if ("path".equals(prefix))
                                                return 
req.getPathMatch().get(remainder);
                                        if ("query".equals(prefix))
-                                               return 
req.getQuery().getFirst(remainder);
+                                               return 
req.getQuery().getString(remainder);
                                        if ("formData".equals(prefix))
-                                               return 
req.getFormData().getFirst(remainder);
+                                               return 
req.getFormData().getString(remainder);
                                        if ("header".equals(prefix))
                                                return req.getHeader(remainder);
                                        if ("attribute".equals(prefix))

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryWidget.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryWidget.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryWidget.java
new file mode 100644
index 0000000..c21aa21
--- /dev/null
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/QueryWidget.java
@@ -0,0 +1,130 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.rest.widget;
+
+import org.apache.juneau.internal.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.converters.*;
+
+/**
+ * Adds a <code>QUERY</code> link to the page that allows you to perform 
search/view/sort/paging on the page data.
+ * <p>
+ * A typical usage of the query widget is to include it as a navigation link 
as shown in the example below
+ *     pulled from the <code>PetStoreResource</code> example:
+ * <p class='bcode'>
+ *     <ja>@RestResource</ja>(
+ *             widgets={
+ *                     QueryWidget.<jk>class</jk>
+ *             },
+ *             htmldoc=<ja>@HtmlDoc</ja>(
+ *                     
links=<js>"{up:'...',options:'...',query:'$W{query}',source:'...'}"</js>
+ *             )
+ *     )
+ * </p>
+ * <p>
+ * In the above example, this adds a <code>QUERY</code> that displays a search 
popup that can be used for
+ *     filtering the page results...
+ * <p>
+ * <img class='bordered' src='doc-files/PetStore_Query.png'>
+ * <p>
+ * Tooltips are provided by hovering over the field names.
+ * <p>
+ * <img class='bordered' src='doc-files/PetStore_Query_tooltip.png'>
+ * <p>
+ * When submitted, the form submits a GET request against the current URI with 
special GET search API query parameters.
+ * (e.g. 
<js>"?s=column1=Foo*&amp;v=column1,column2&amp;o=column1,column2-&amp;p=100&amp;l=100"</js>).
+ * <p>
+ * The search arguments can be retrieved programmatically using {@link 
RequestQuery#getSearchArgs()}.
+ * <p>
+ * Typically, the search functionality is implemented by applying the 
predefined {@link Queryable} converter on the
+ *     method that's returning a 2-dimensional table of POJOs that you wish to 
filter:
+ * <p class='bcode'>
+ *     <ja>@RestMethod</ja>(
+ *             name=<js>"GET"</js>,
+ *             path=<js>"/"</js>,
+ *             converters=Queryable.<jk>class</jk>
+ *     )
+ *     <jk>public</jk> Collection&lt;Pet&gt; getPets() {
+ * </p>
+ * <p>
+ * The following shows various search arguments and their results on the page:
+ * <table style='width:auto'>
+ *     <tr>
+ *             <th>Search type</th><th>Query arguments</th><th>Query 
results</th>
+ *     </tr>
+ *     <tr>
+ *             <td>No arguments</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q1.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r1.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>String search</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q2.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r2.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>Numeric range</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q3.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r3.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>ANDed terms</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q4.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r4.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>Date range (entire year)</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q8.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r8.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>Date range</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q9.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r9.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>Date range</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q10.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r10.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>Hide columns</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q5.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r5.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>Sort</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q6.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r6.png'></td>
+ *     </tr>
+ *     <tr>
+ *             <td>Sort descending</td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_q7.png'></td>
+ *             <td><img class='bordered' 
src='doc-files/PetStore_Query_r7.png'></td>
+ *     </tr>
+ * </table>
+ *
+ */
+public class QueryWidget extends Widget {
+
+       @Override
+       public String getName() {
+               return "query";
+       }
+
+       @Override /* Widget */
+       public String resolve(RestRequest req) throws Exception {
+               // Note we're stripping off the license header.
+               return 
IOUtils.read(getClass().getResourceAsStream("QueryWidget.html")).replaceFirst("(?s)<!--(.*?)-->\\s*",
 "");
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query.png
new file mode 100644
index 0000000..0db9c0d
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q1.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q1.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q1.png
new file mode 100644
index 0000000..65b08dc
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q1.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q10.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q10.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q10.png
new file mode 100644
index 0000000..3ec59c1
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q10.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q2.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q2.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q2.png
new file mode 100644
index 0000000..935b2f0
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q2.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q3.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q3.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q3.png
new file mode 100644
index 0000000..a0b72c7
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q3.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q4.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q4.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q4.png
new file mode 100644
index 0000000..b324817
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q4.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q5.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q5.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q5.png
new file mode 100644
index 0000000..3fc6aab
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q5.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q6.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q6.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q6.png
new file mode 100644
index 0000000..d3fbd7c
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q6.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q7.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q7.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q7.png
new file mode 100644
index 0000000..ba8c997
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q7.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q8.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q8.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q8.png
new file mode 100644
index 0000000..e42fbbe
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q8.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q9.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q9.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q9.png
new file mode 100644
index 0000000..7cd2ffe
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_q9.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r1.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r1.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r1.png
new file mode 100644
index 0000000..dcc26b3
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r1.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r10.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r10.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r10.png
new file mode 100644
index 0000000..8cf450b
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r10.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r2.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r2.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r2.png
new file mode 100644
index 0000000..5904efa
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r2.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r3.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r3.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r3.png
new file mode 100644
index 0000000..4adf7cc
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r3.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r4.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r4.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r4.png
new file mode 100644
index 0000000..5904efa
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r4.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r5.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r5.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r5.png
new file mode 100644
index 0000000..9b6185a
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r5.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r6.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r6.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r6.png
new file mode 100644
index 0000000..d0f21be
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r6.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r8.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r8.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r8.png
new file mode 100644
index 0000000..c3450d8
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r8.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r9.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r9.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r9.png
new file mode 100644
index 0000000..8cf450b
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_r9.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_tooltip.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_tooltip.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_tooltip.png
new file mode 100644
index 0000000..4373661
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/PetStore_Query_tooltip.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/Petstore_Query_r7.png
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/Petstore_Query_r7.png
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/Petstore_Query_r7.png
new file mode 100644
index 0000000..472a2ce
Binary files /dev/null and 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/doc-files/Petstore_Query_r7.png
 differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/09590092/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryWidget.html
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryWidget.html 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryWidget.html
new file mode 100644
index 0000000..66ae23a
--- /dev/null
+++ 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/widget/QueryWidget.html
@@ -0,0 +1,139 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ 
***************************************************************************************************************************/
+ -->
+<a class='link' 
href='javascript:document.getElementById("query").classList.remove("hidden")'>query</a>
+<style>
+       .queryInput, .queryInput table {
+               padding:3px;
+               border: 1px solid black;
+               border-radius:3px;
+               background-color:#fefefe;
+               box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
+               position: fixed;
+               font-size: 9pt;
+       color: #26343F;
+       white-space: nowrap;
+       text-align: left;
+       margin:20px;
+       }
+
+       .hidden {
+               display:none;
+       }
+       
+       .tooltip {
+           position: relative;
+           display: inline-block;          
+       }
+
+       .tooltip .tooltiptext {
+           visibility: hidden;
+           background-color: #FEF9E7;
+           color: black;
+           padding: 5px;
+           border-radius: 6px;
+           position: absolute;
+           z-index: 1;
+           top: 0;
+           left: 0;
+           margin-left: 30px;
+               box-shadow: 2px 3px 3px 0px rgba(0, 0, 0, 0.5);
+           opacity: 0;
+           transition: opacity 0.5s;
+           font-weight: normal;
+       }
+
+       .tooltip:hover .tooltiptext {
+           visibility: visible;
+           opacity: 1;
+       }       
+       
+       .tooltiptext {
+               white-space: nowrap;
+               float: left;
+       }
+}
+
+</style>
+<form id='queryForm' style='display:inline'>
+       <table id='query' class='queryInput hidden'>
+               <tr>
+                       <th>
+                               <div class="tooltip">
+                                       Search <small>(?)</small>:
+                                       <span class="tooltiptext">
+                                               Comma-delimited list of 
key/value pair search terms.
+                                               <br>Keys are column names.
+                                               <br>Values are search terms.
+                                               <br>Refer to the 
<code>Queryable</code> javadocs for a full explanation of possible search terms.
+                                               <br>Example: 
<code>column1=foo*, column2&lt;100, column3=2013-2016.06.30</code>
+                                       </span>
+                               </div>
+                       </th>
+                       <td>
+                               <input name="s" size="50">
+                       </td>
+               </tr>
+               <tr>
+                       <th>
+                               <div class="tooltip">
+                                       View <small>(?)</small>:
+                                       <span class="tooltiptext">
+                                               Comma-delimited list of columns 
to display.
+                                               <br>Example: <code>column1, 
column2</code>
+                                       </span>
+                               </div>
+                       </th>
+                       <td>
+                               <input name="v" size="50">
+                       </td>
+               </tr>
+               <tr>
+                       <th>
+                               <div class="tooltip">
+                                       Sort <small>(?)</small>:
+                                       <span class="tooltiptext">
+                                               Comma-delimited list of columns 
to sort by.
+                                               <br>Columns can be suffixed 
with '-' to indicate descending order.
+                                               <br>Example: <code>column1, 
column2-</code>
+                                       </span>
+                               </div>
+                       </th>
+                       <td>
+                               <input name="o" size="50">
+                       </td>
+               </tr>
+               <tr>
+                       <th>
+                               Page:
+                       </th>
+                       <td>
+                               Position: <input name='p' type='number' 
style='width:50px' step=20 min=0 value='0'>
+                               Limit: <input name='l' type='number' 
style='width:50px' step=20 min=0 value='0'>
+                               Ignore-case: <input name='i' type='checkbox' 
value='true'>
+                       </td>
+               </tr>
+               <tr>
+                       <th>
+                               &nbsp;
+                       </th>
+                       <td style='float:right'>
+                               <input type='button' value='Cancel' 
onclick='getElementById("query").classList.add("hidden")'>
+                               <input type="submit" value='Submit'>
+                       </td>
+               </tr>
+       </table>
+</form>
+

Reply via email to