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>&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>&s=(name=Bill*,birthDate=>2000)</code> - * <li><b>&v=<i>JSON-array or comma-delimited list</i></b> - View parameter. Only return the specified columns.<br> - * Example: <code>&v=(name,birthDate)</code> - * <li><b>&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>&s=(name=A,birthDate=D)</code> - * <li><b>&i=<i>true/false</i></b> - Case-insensitive parameter. Specify <jk>true</jk> for case-insensitive matching on the {@code &q} parameter. - * <li><b>&p=<i>number</i></b> - Position parameter. Only return rows starting at the specified index position (zero-indexed). Default is {@code 0}. - * <li><b>&q=<i>number</i></b> - Limit parameter. Only return the specified number of rows. Default is {@code 0} (meaning return all rows). + * <li><code>&s=</code> Search arguments. + * <br>Comma-delimited list of key/value pairs representing column names and search tokens. + * <br>Example: <js>"&s=name=Bill*,birthDate>2000"</js> + * <li><code>&v=</code> Visible columns. + * <br>Comma-delimited list of column names to display. + * <br>Example: <js>"&v=name,birthDate"</js> + * <li><code>&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>"&o=name,birthDate-"</js> + * <li><code>&i=</code> Case-insensitive parameter. + * <br>Boolean flag for case-insensitive matching on the search parameters. + * <li><code>&p=</code> - Position parameter. + * <br>Only return rows starting at the specified index position (zero-indexed). + * <br>Default is {@code 0}. + * <li><code>&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>&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*&v=column1,column2&o=column1,column2-&p=100&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<Pet> 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<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> + + </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> +
