http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/NameDescription.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
new file mode 100644
index 0000000..ab4f598
--- /dev/null
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
@@ -0,0 +1,72 @@
+// 
***************************************************************************************************************************
+// * 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.labels;
+
+import org.apache.juneau.annotation.*;
+
+/**
+ * Simple bean with {@code name} and {@code description} properties.
+ * <p>
+ *     Primarily used for constructing tables with name/description columns on 
REST OPTIONS requests.
+ */
+@Bean(properties="name,description")
+public class NameDescription {
+
+       private Object name;
+       private Object description;
+
+       /** No-arg constructor.  Used for JUnit testing of OPTIONS pages. */
+       public NameDescription() {}
+
+       /**
+        * Constructor.
+        * @param name A name.
+        * @param description A description.
+        */
+       public NameDescription(Object name, Object description) {
+               this.name = name;
+               this.description = description;
+       }
+
+       /**
+        * Returns the name field on this label.
+        * @return The name.
+        */
+       public Object getName() {
+               return name;
+       }
+
+       /**
+        * Sets the name field on this label to a new value.
+        * @param name The new name.
+        */
+       public void setName(Object name) {
+               this.name = name;
+       }
+
+       /**
+        * Returns the description field on this label.
+        * @return The description.
+        */
+       public Object getDescription() {
+               return description;
+       }
+
+       /**
+        * Sets the description field on this label to a new value.
+        * @param description The new description.
+        */
+       public void setDescription(Object description) {
+               this.description = description;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
new file mode 100644
index 0000000..f99c3c9
--- /dev/null
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
@@ -0,0 +1,106 @@
+// 
***************************************************************************************************************************
+// * 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.labels;
+
+import org.apache.juneau.dto.*;
+import org.apache.juneau.rest.*;
+
+/**
+ * Shortcut label for child resources.  Typically used in router resources.
+ *
+ * <h6 class='topic'>Example:</h6>
+ * <p class='bcode'>
+ *     <jc>// Instead of this...</jc>
+ *     <jk>new</jk> NameDescription(<jk>new</jk> Link(<js>"httpTool"</js>, uri 
+ <js>"/httpTool"</js>), <js>"HTTP request test client"</js>);
+ *
+ *     <jc>// ...use this simpler equivalent...</jc>
+ *     <jk>new</jk> ResourceLink(uri, <js>"httpTool"</js>, <js>"HTTP request 
test client"</js>);
+ * </p>
+ */
+public final class ResourceDescription extends NameDescription implements 
Comparable<ResourceDescription> {
+
+       /**
+        * Constructor.
+        *
+        * @param rootUrl The root URI of the child resource (e.g. the URI of 
the parent resource).
+        *              Must not end with <js>'/'</js>.
+        *              Must be URL-Encoded.
+        * @param name The name of the child resource.
+        *              This will be URL-encoded and appended onto the root URL 
to create the hyperlink for the resource.
+        * @param description The description of the child resource.
+        */
+       public ResourceDescription(String rootUrl, String name, String 
description) {
+               super(new Link(name, (rootUrl.equals("/") || rootUrl.isEmpty() 
? "/" : rootUrl + "/") + RestUtils.encode(name)), description);
+       }
+
+       /**
+        * Constructor for resources that are children of a REST resource.
+        *
+        * @param req The HTTP request.
+        * @param childPath The childPath The path of the child resource 
relative to the servlet.
+        * @param description The description of the child resource.
+        */
+       public ResourceDescription(RestRequest req, String childPath, String 
description) {
+               super(new Link(calcName(childPath), calcHref(req, childPath)), 
description);
+       }
+
+       private static String calcName(String childPath) {
+               return RestUtils.decode(childPath.indexOf('/') == -1 ? 
childPath : childPath.substring(childPath.lastIndexOf('/')+1));
+       }
+
+       private static String calcHref(RestRequest req, String childPath) {
+               return 
req.getServletURIBuilder().append('/').append(childPath).toString();
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param name The name of the child resource.
+        * @param description The description of the child resource.
+        */
+       public ResourceDescription(String name, String description) {
+               super(new Link(name, name), description);
+       }
+
+       /** No-arg constructor.  Used for JUnit testing of OPTIONS pages. */
+       public ResourceDescription() {}
+
+       @Override /* NameDescription */
+       public Link getName() {
+               return (Link)super.getName();
+       }
+
+       /**
+        * Overridden setter.
+        *
+        * @param name The new name.
+        */
+       public void setName(Link name) {
+               super.setName(name);
+       }
+
+       @Override /* Comparable */
+       public int compareTo(ResourceDescription o) {
+               return getName().compareTo(o.getName());
+       }
+
+       @Override /* Object */
+       public boolean equals(Object o) {
+               return (o instanceof ResourceDescription) && 
((ResourceDescription)o).getName().equals(getName());
+       }
+
+       @Override /* Object */
+       public int hashCode() {
+               return getName().hashCode();
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java
new file mode 100644
index 0000000..4c3e234
--- /dev/null
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/ResourceLink.java
@@ -0,0 +1,66 @@
+// 
***************************************************************************************************************************
+// * 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.labels;
+
+import java.text.*;
+
+import org.apache.juneau.dto.*;
+import org.apache.juneau.rest.*;
+
+/**
+ * A simple link to a child of a parent resource.
+ */
+public class ResourceLink extends Link {
+
+       /**
+        * Constructor.
+        *
+        * @param req The HTTP request from the parent resource.
+        * @param childPath The child resource path.
+        * @param args Optional {@link MessageFormat}-style arguments in the 
child path.
+        */
+       public ResourceLink(RestRequest req, String childPath, Object...args) {
+               super(getName(getPath(childPath,args)), getHref(req, 
getPath(childPath,args)));
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param label The label for the link.
+        * @param req The HTTP request from the parent resource.
+        * @param childPath The child resource path.
+        * @param args Optional {@link MessageFormat}-style arguments in the 
child path.
+        */
+       public ResourceLink(String label, RestRequest req, String childPath, 
Object...args) {
+               super(label, getHref(req, getPath(childPath,args)));
+       }
+
+       private static String getName(String childPath) {
+               String s = childPath;
+               if (childPath.indexOf('/') == -1)
+                       s = childPath;
+               else
+                       s = childPath.substring(childPath.lastIndexOf('/')+1);
+               return RestUtils.decode(s);
+       }
+
+       private static String getHref(RestRequest req, String childPath) {
+               return 
req.getServletURIBuilder().append('/').append(childPath).toString();
+       }
+
+       private static String getPath(String childPath, Object...args) {
+               if (args.length > 0)
+                       childPath = MessageFormat.format(childPath, args);
+               return childPath;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/java/org/apache/juneau/rest/labels/package.html
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/labels/package.html 
b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/package.html
new file mode 100644
index 0000000..4e03390
--- /dev/null
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/labels/package.html
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML>
+<!--
+/***************************************************************************************************************************
+ * 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.
+ *
+ 
***************************************************************************************************************************/
+ -->
+<html>
+<head>
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+       <style type="text/css">
+               /* For viewing in Page Designer */
+               @IMPORT url("../../../../javadoc.css");
+
+               /* For viewing in REST interface */
+               @IMPORT url("../htdocs/javadoc.css");
+               body { 
+                       margin: 20px; 
+               }       
+       </style>
+       <script>
+               /* Replace all @code and @link tags. */ 
+               window.onload = function() {
+                       document.body.innerHTML = 
document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>');
+                       document.body.innerHTML = 
document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, 
'<code>$3</code>');
+               }
+       </script>
+</head>
+<body>
+<p>Various REST interface label classes</p>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
new file mode 100644
index 0000000..a27d0f1
--- /dev/null
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
@@ -0,0 +1,26 @@
+// 
***************************************************************************************************************************
+// * 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.matchers;
+
+import org.apache.juneau.rest.*;
+
+/**
+ * Predefined matcher for matching requests with content type 
<js>"multipart/form-data"</js>.
+ */
+public class MultipartFormDataMatcher extends RestMatcher {
+       @Override /* RestMatcher */
+       public boolean matches(RestRequest req) {
+               String contentType = req.getContentType();
+               return contentType != null && 
contentType.startsWith("multipart/form-data"); //$NON-NLS-1$
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
new file mode 100644
index 0000000..6a39db6
--- /dev/null
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
@@ -0,0 +1,26 @@
+// 
***************************************************************************************************************************
+// * 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.matchers;
+
+import org.apache.juneau.rest.*;
+
+/**
+ * Predefined matcher for matching requests with content type 
<js>"application/x-www-form-urlencoded"</js>.
+ */
+public class UrlEncodedFormMatcher extends RestMatcher {
+       @Override /* RestMatcher */
+       public boolean matches(RestRequest req) {
+               String contentType = req.getContentType();
+               return contentType != null && 
contentType.equals("application/x-www-form-urlencoded"); //$NON-NLS-1$
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/91a388d0/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/package.html
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/package.html 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/package.html
new file mode 100644
index 0000000..7eacf3a
--- /dev/null
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/package.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML>
+<!--
+/***************************************************************************************************************************
+ * 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.
+ *
+ 
***************************************************************************************************************************/
+ -->
+<html>
+<head>
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+       <style type="text/css">
+               /* For viewing in Page Designer */
+               @IMPORT url("../../../../../javadoc.css");
+
+               /* For viewing in REST interface */
+               @IMPORT url("../htdocs/javadoc.css");
+               body { 
+                       margin: 20px; 
+               }       
+       </style>
+</head>
+<body>
+<p>Predefined Matchers</p>
+</body>
+</html>
\ No newline at end of file

Reply via email to