This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 69814d9 Update Javadocs.
69814d9 is described below
commit 69814d9ec2b14ccb5d3c6992057df7adc5937579
Author: JamesBognar <[email protected]>
AuthorDate: Sun Feb 4 19:02:38 2018 -0500
Update Javadocs.
---
.../java/org/apache/juneau/dto/LinkString.java | 1 +
.../org/apache/juneau/html/HtmlParserSession.java | 1 +
.../apache/juneau/html/HtmlSerializerSession.java | 1 +
.../juneau/html/{ => annotation}/HtmlLink.java | 4 +-
.../javadoc/doc-files/PredefinedLabelBeans.1.png | Bin 0 -> 23665 bytes
.../javadoc/doc-files/PredefinedLabelBeans.2.png | Bin 0 -> 72375 bytes
.../javadoc/doc-files/PredefinedLabelBeans.3.png | Bin 0 -> 7975 bytes
.../src/main/javadoc/doc-files/Stylesheets.1.png | Bin 0 -> 26898 bytes
.../src/main/javadoc/doc-files/Stylesheets.2.png | Bin 0 -> 347467 bytes
.../src/main/javadoc/doc-files/Stylesheets.3.png | Bin 0 -> 317232 bytes
.../main/javadoc/doc-files/UiCustomization.1.png | Bin 0 -> 278647 bytes
.../main/javadoc/doc-files/UiCustomization.2.png | Bin 0 -> 7196 bytes
.../main/javadoc/doc-files/UiCustomization.3.png | Bin 0 -> 6957 bytes
juneau-doc/src/main/javadoc/overview.html | 389 +++++++++++++++++++--
.../src/main/javadoc/resources/juneau-doc.css | 2 +-
.../examples/rest/PredefinedLabelsResource.java | 77 ++++
.../apache/juneau/examples/rest/RootResources.java | 1 +
.../juneau/microservice/ResourceJenaGroup.java | 3 +-
.../org/apache/juneau/rest/HtmlDocBuilder.java | 298 +++++++++-------
.../java/org/apache/juneau/rest/RestContext.java | 5 +
.../org/apache/juneau/rest/RestServletDefault.java | 2 +-
.../org/apache/juneau/rest/annotation/HtmlDoc.java | 105 +++---
.../apache/juneau/rest/annotation/RestMethod.java | 2 +-
.../juneau/rest/annotation/RestResource.java | 5 +
.../apache/juneau/rest/labels/BeanDescription.java | 2 +
.../apache/juneau/rest/labels/NameDescription.java | 10 +-
.../apache/juneau/rest/widget/StyleMenuItem.java | 4 +-
.../java/org/apache/juneau/rest/widget/Widget.java | 6 +-
28 files changed, 672 insertions(+), 246 deletions(-)
diff --git
a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
index 111665f..0bb04d6 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.internal.StringUtils.*;
import java.text.*;
import org.apache.juneau.html.*;
+import org.apache.juneau.html.annotation.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.utils.*;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index b1d2779..e4f22d3 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -22,6 +22,7 @@ import java.util.*;
import javax.xml.stream.*;
import org.apache.juneau.*;
+import org.apache.juneau.html.annotation.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.transform.*;
import org.apache.juneau.xml.*;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 75cfbf5..912b6f5 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -21,6 +21,7 @@ import java.util.*;
import java.util.regex.*;
import org.apache.juneau.*;
+import org.apache.juneau.html.annotation.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.transform.*;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlLink.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
similarity index 95%
rename from
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlLink.java
rename to
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
index 716ff0a..735e970 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlLink.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
@@ -10,13 +10,15 @@
// * "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.html;
+package org.apache.juneau.html.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.*;
+import org.apache.juneau.html.*;
+
/**
* Used in conjunction with the {@link HtmlSerializer} class to define
hyperlinks.
*
diff --git a/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.1.png
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.1.png
new file mode 100644
index 0000000..76a85e2
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.1.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.2.png
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.2.png
new file mode 100644
index 0000000..9a56c43
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.2.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.3.png
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.3.png
new file mode 100644
index 0000000..0ccbc37
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/PredefinedLabelBeans.3.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/Stylesheets.1.png
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.1.png
new file mode 100644
index 0000000..ab4d89f
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.1.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/Stylesheets.2.png
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.2.png
new file mode 100644
index 0000000..34fb4a1
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.2.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/Stylesheets.3.png
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.3.png
new file mode 100644
index 0000000..f2f8e87
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/Stylesheets.3.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/UiCustomization.1.png
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.1.png
new file mode 100644
index 0000000..d058fba
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.1.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/UiCustomization.2.png
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.2.png
new file mode 100644
index 0000000..a2a6a07
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.2.png differ
diff --git a/juneau-doc/src/main/javadoc/doc-files/UiCustomization.3.png
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.3.png
new file mode 100644
index 0000000..e196d1a
Binary files /dev/null and
b/juneau-doc/src/main/javadoc/doc-files/UiCustomization.3.png differ
diff --git a/juneau-doc/src/main/javadoc/overview.html
b/juneau-doc/src/main/javadoc/overview.html
index 18d8491..5f1bcd6 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -4495,7 +4495,7 @@
Extensive listener APIs.
</ul>
- <h5 class='topic'>Example:</h5>
+ <h5 class='figure'>Example:</h5>
<p class='bcode'>
<cc>#--------------------------</cc>
<cc># My section</cc>
@@ -6264,7 +6264,8 @@
</p>
<p class='bcode'>
<jk>public class</jk> IsAdminMatcher <jk>extends</jk> RestMatcher {
- <ja>@Override</ja>
+
+ <ja>@Override</ja> <jc>/* RestMatcher */</jc>
<jk>public boolean</jk> matches(RestRequest req) {
<jk>return</jk>
req.isUserInRole(<js>"ADMINS_GROUP"</js>);
}
@@ -6438,6 +6439,7 @@
<jd>/** Causes a 404 if POST isn't multipart/form-data */</jd>
<jk>public static class</jk> MultipartFormDataMatcher
<jk>extends</jk> RestMatcher {
+
<ja>@Override</ja> <jc>/* RestMatcher */</jc>
<jk>public boolean</jk> matches(RestRequest req) {
String contentType = req.getContentType();
@@ -6903,7 +6905,7 @@
<jc>// Define a guard that only lets Billy make a request</jc>
<jk>public</jk> BillyGuard <jk>extends</jk> RestGuard {
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* RestGuard */</jc>
<jk>public boolean</jk> isRequestAllowed(RestRequest req) {
<jk>return</jk>
req.getUserPrincipal().getName().equals(<js>"Billy"</js>);
}
@@ -6928,7 +6930,8 @@
</p>
<p class='bcode'>
<jk>public class</jk> AdminGuard <jk>extends</jk> RestGuard {
- <ja>@Override</ja>
+
+ <ja>@Override</ja> <jc>/* RestGuard */</jc>
<jk>public boolean</jk> isRequestAllowed(RestRequest req) {
<jk>return</jk>
req.getUserPrincipal().isUserInRole(<js>"ADMIN"</js>);
}
@@ -6942,7 +6945,8 @@
</p>
<p class='bcode'>
<jk>public class</jk> AdminGuard <jk>extends</jk> RestGuard {
- <ja>@Override</ja>
+
+ <ja>@Override</ja> <jc>/* RestGuard */</jc>
<jk>public boolean</jk> guard(RestRequest req, RestResponse
res) <jk>throws</jk> RestException {
<jk>if</jk> (! isOkay(req))
<jk>throw new</jk>
RestException(<jsf>SC_FORBIDDEN</jsf>, <js>"Access denied!!!"</js>);
@@ -7013,7 +7017,7 @@
*/</jd>
<jk>public class</jk> Traversable <jk>implements</jk> RestConverter {
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* RestConverter */</jc>
<jk>public</jk> Object convert(RestRequest req, Object o)
<jk>throws</jk> RestException {
if (o == <jk>null</jk>)
<jk>return null</jk>;
@@ -7200,7 +7204,7 @@
<jk>super</jk>(<js>"BRACKET"</js>);
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* Var */</jc>
<jk>public</jk> String resolve(VarResolverSession session,
String arg) {
<jk>return</jk> <js>'['</js> + arg + <js>']'</js>;
}
@@ -7742,7 +7746,7 @@
<jk>super</jk>(context);
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* RestInfoProvider */</jc>
<jk>public</jk> Swagger getSwagger(RestRequest req)
<jk>throws</jk> RestException {
Swagger s = <jk>super</jk>.getSwagger(req);
<jc>// Made inline modifications to generated
swagger.</jc>
@@ -7915,10 +7919,13 @@
<p>
The <l>Widget</l> class is composed of
the following methods:
</p>
- <ul>
- <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getHtml(RestRequest) getHtml(RestRequest)}
- <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getStyle(RestRequest)
getStyle(RestRequest)}
- <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getScript(RestRequest)
getScript(RestRequest)}
+ <ul class='doctree'>
+ <li class='jac'>{@link
org.apache.juneau.rest.widget.Widget}
+ <ul>
+ <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getHtml(RestRequest) getHtml(RestRequest)}
+ <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getStyle(RestRequest)
getStyle(RestRequest)}
+ <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getScript(RestRequest)
getScript(RestRequest)}
+ </ul>
</ul>
<p>
The HTML content returned by the {@link
org.apache.juneau.rest.widget.Widget#getHtml(RestRequest) getHtml(RestRequest)}
@@ -7941,13 +7948,13 @@
<p class='bcode'>
<jk>public class</jk> MyWidget <jk>extends</jk> Widget {
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* Widget */</jc>
<jk>public</jk> String getHtml(RestRequest req) <jk>throws</jk>
Exception {
UriResolver r = req.getUriResolver(); <jc>// API used
for resolving URIs.</jc>
<jk>return</jk> <js>"<img class='myimage'
onclick='myalert(this)'
src='"</js>+r.resolve(<js>"servlet:/htdocs/myimage.png"</js>)+<js>"'>"</js>;
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* Widget */</jc>
<jk>public</jk> String getScript(RestRequest req)
<jk>throws</jk> Exception {
<jk>return</jk> <js>""</js>
+ <js>"\n function myalert(imageElement) {"</js>
@@ -7955,7 +7962,7 @@
+ <js>"\n }"</js>;
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* Widget */</jc>
<jk>public</jk> String getStyle(RestRequest req)
<jk>throws</jk> Exception {
<jk>return</jk> <js>""</js>
+ <js>"\n .myimage {"</js>
@@ -7968,24 +7975,27 @@
The <l>Widget</l> class also defines
the following two convenience methods for loading Javascript and CSS
files from the classpath or file system.
</p>
- <ul>
- <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String)
getClasspathResourceAsString(String)}
- <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String,Locale)
getClasspathResourceAsString(String,Locale)}
+ <ul class='doctree'>
+ <li class='jac'>{@link
org.apache.juneau.rest.widget.Widget}
+ <ul>
+ <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String)
getClasspathResourceAsString(String)}
+ <li class='jm'>{@link
org.apache.juneau.rest.widget.Widget#getClasspathResourceAsString(String,Locale)
getClasspathResourceAsString(String,Locale)}
+ </ul>
</ul>
- <h5 class='section'>Example:</h5>
+ <h5 class='figure'>Example:</h5>
<p class='bcode'>
<jk>public class</jk> MyWidget <jk>extends</jk> Widget {
...
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* Widget */</jc>
<jk>public</jk> String getScript(RestRequest req)
<jk>throws</jk> Exception {
- <jk>return</jk>
getResourceAsString(<js>"MyWidget.js"</js>);
+ <jk>return</jk>
getClasspathResourceAsString(<js>"MyWidget.js"</js>);
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* Widget */</jc>
<jk>public</jk> String getStyle(RestRequest req)
<jk>throws</jk> Exception {
- <jk>return</jk>
getResourceAsString(<js>"MyWidget.css"</js>);
+ <jk>return</jk>
getClasspathResourceAsString(<js>"MyWidget.css"</js>);
}
}
</p>
@@ -7999,14 +8009,231 @@
<a id="juneau-rest-server.UiCustomization"></a>
<h4 class='topic' onclick='toggle(this)'>3.1.24.2 - UI
Customization</h4>
<div class='topic'>
- TODO
+ <p>
+ The HTML views of POJOs can somewhat be
considered a rudimentary User Interface.
+ <br>In reality, a better term for them
would be a Developer Interface as they're meant to be used
+ primarily by developers and not end
users.
+ <br>Despite that distinction, it is
possible to 'brand' the HTML page to whatever you desire.
+ </p>
+ <p>
+ The sample root page below includes
some default branding for Juneau and Apache:
+ </p>
+ <img class='bordered'
src='doc-files/UiCustomization.1.png' style='width:800px'/>
+ <p>
+ In particular, you may want to replace
these icons:
+ </p>
+ <img class='bordered'
src='doc-files/UiCustomization.2.png'/>
+ <img class='bordered'
src='doc-files/UiCustomization.3.png'/>
+ <p>
+ The Juneau REST framework does not
provide specific branding support (i.e. there is no concept of a brand icon).
+ <br>Instead, it just uses the existing
open-ended API for defining branding.
+ </p>
+ <p>
+ The Juneau icon shown is a result of
the header annotation on the {@link org.apache.juneau.rest.RestServletDefault}
class:
+ </p>
+ <p class='bcode'>
+ <ja>@RestResource</ja>(
+ ...
+ htmldoc=<ja>@HtmlDoc</ja>(
+ header={
+
<js>"<h1>$R{resourceTitle}</h1>"</js>,
+
<js>"<h2>$R{methodSummary,resourceDescription}</h2>"</js>,
+ <js>"<a
href='http://juneau.apache.org'>"</js>
+ +<js>"<img
src='$U{servlet:/htdocs/juneau.png}'
style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/>"</js>
+ +<js>"</a>"</js>
+ },
+ head={
+ <jc>// Browser tab icon.</jc>
+ <js>"<link rel='icon'
href='$U{servlet:/htdocs/juneau.png}'/>"</js>
+ }
+ ),
+ staticFiles={<js>"htdocs:htdocs"</js>}
+ )
+ <jk>public abstract class</jk> RestServletDefault <jk>extends</jk>
RestServlet {...}
+ </p>
+ <p>
+ The <js>"juneau.png"</js> image file is
located in <code>org.apache.juneau.rest.htdocs</code> package and
+ is served up via the
<code>staticFiles</code> annotation (i.e. anything in the
<code>org.apache.juneau.rest.htdocs</code>
+ package is served up under the path
<code>/servlet-path/htdocs</code>).
+ <br>Then we just reference using a URI
resolution variable <js>"$U{servlet:/htdocs/juneau.png}"</js>.
+ </p>
+ <p>
+ To change this image, you can extend
the <l>RestServletDefault</l> class and simply override the annotations
+ pointing to your own icon.
+ </p>
+ <p class='bcode'>
+ <ja>@RestResource</ja>(
+ ...
+ htmldoc=<ja>@HtmlDoc</ja>(
+ header={
+
<js>"<h1>$R{resourceTitle}</h1>"</js>,
+
<js>"<h2>$R{methodSummary,resourceDescription}</h2>"</js>,
+ <js>"<a
href='http://my.project.org'>"</js>
+ +<js>"<img
src='$U{servlet:/my-htdocs/my-project.png}'
style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/>"</js>
+ +<js>"</a>"</js>
+ },
+ head={
+ <jc>// Browser tab icon.</jc>
+ <js>"<link rel='icon'
href='$U{servlet:/my-htdocs/my-project.png}'/>"</js>
+ }
+ ),
+ staticFiles={<js>"my-htdocs:my-htdocs"</js>}
+ )
+ <jk>public class</jk> MyResourceBaseClass <jk>extends</jk>
RestServletDefault {...}
+ </p>
+ <p>
+ The footer icon shown is generated by a
predefined widget:
+ </p>
+ <p class='bcode'>
+ <ja>@RestResource</ja>(
+ htmldoc=<ja>@HtmlDoc</ja>(
+ widgets={
+ PoweredByApache.<jk>class</jk>
+ },
+ footer=<js>"$W{PoweredByApache}"</js>
+ ),
+ ...
+ )
+ <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup
{...}
+ </p>
+ <p>
+ The widget definition is shown below:
+ </p>
+ <p class='bcode'>
+ <jk>public class</jk> PoweredByApache <jk>extends</jk> Widget {
+
+ <jd>/**
+ * Returns an Apache image tag hyperlinked to
<js>"http://apache.org"</js>
+ */</jd>
+ <ja>@Override</ja> <jc>/* Widget */</jc>
+ <jk>public</jk> String getHtml(RestRequest req) <jk>throws</jk>
Exception {
+ UriResolver r = req.getUriResolver();
+ <jk>return</jk> <js>"<a
href='http://apache.org'><img
style='float:right;padding-right:20px;height:32px'
src='"</js>+r.resolve(<js>"servlet:/htdocs/asf.png"</js>)+<js>"'>"</js>;
+ }
+ }
+ </p>
+ <p>
+ To provide your own footer icon, simply
define it in your own footer section:
+ </p>
+ <p class='bcode'>
+ <ja>@RestResource</ja>(
+ htmldoc=<ja>@HtmlDoc</ja>(
+ footer=<js>"<img
style='float:right;padding-right:20px;height:32px'
src='$U{servlet:/my-htdocs/my-project.png}'>"</js>
+ ),
+ staticFiles={<js>"my-htdocs:my-htdocs"</js>}
+ ...
+ )
+ <jk>public class</jk> MyResourceBaseClass <jk>extends</jk>
RestServletDefault {...}
+ </p>
+ <p>
+ Note how the "User Interface" is
open-ended to pretty much lets you do whatever you want.
+ </p>
</div>
<!--
========================================================================================================
-->
<a id="juneau-rest-server.Stylesheets"></a>
<h4 class='topic' onclick='toggle(this)'>3.1.24.3 -
Stylesheets</h4>
<div class='topic'>
- TODO
+ <p>
+ The sample root page renders in the
default "devops" look-and-feel:
+ </p>
+ <img class='bordered'
src='doc-files/UiCustomization.1.png' style='width:800px'/>
+ <p>
+ The sample root page provides a
dropdown widget to try out the other default look-and-feels:
+ </p>
+ <img class='bordered'
src='doc-files/Stylesheets.1.png'/>
+ <p>
+ For example, the "light" look-and-feel:
+ </p>
+ <img class='bordered'
src='doc-files/Stylesheets.2.png' style='width:800px'/>
+ <p>
+ And the "dark" look-and-feel:
+ </p>
+ <img class='bordered'
src='doc-files/Stylesheets.3.png' style='width:800px'/>
+ <p>
+ The stylesheet URL is controlled by the
{@link org.apache.juneau.rest.annotation.HtmlDoc#stylesheet()
@HtmlDoc.stylesheet()} annotation.
+ <br>The {@link
org.apache.juneau.rest.RestServletDefault} class defines the stylesheet served
up as a static file:
+ <p class='bcode'>
+ <ja>@RestResource</ja>(
+ htmldoc=<ja>@HtmlDoc</ja>(
+
stylesheet=<js>"$C{REST/stylesheet,servlet:/styles/devops.css}"</js>,
+ ),
+
+ staticFiles={<js>"styles:styles"</js>}
+ )
+ <jk>public abstract class</jk> RestServletDefault <jk>extends</jk>
RestServlet {...}
+ </p>
+ <p>
+ The
<js>"$C{REST/stylesheet,servlet:/styles/devops.css}"</js> variable says to use
the URI defined
+ in your servlet's config file, if there
is one, and to default to serving up the file
+
<code>org/apache/juneau/rest/styles/devops.css</code>.
+ </p>
+ <p>
+ To provide your own stylesheet, simply
override the stylesheet attribute and point to a different
+ file:
+ </p>
+ <p class='bcode'>
+ <ja>@RestResource</ja>(
+ htmldoc=<ja>@HtmlDoc</ja>(
+ stylesheet=<js>"servlet:/my-styles/my-style.css}"</js>,
+ ),
+ staticFiles={<js>"my-styles:my-styles"</js>}
+ )
+ <jk>public class</jk> MyResourceBaseClass <jk>extends</jk>
RestServletDefault {...}
+ </p>
+ <p>
+ You can try out different stylesheets
by passing in a <code>stylesheet</code> attribute in the request
+ URL.
+ <br>The example above show this in use.
+ </p>
+ <p>
+ In case you're curious about how the
menu item works, it's defined via a widget:
+ </p>
+ <p class='bcode'>
+ <ja>@RestResource</ja>(
+ htmldoc=<ja>@HtmlDoc</ja>(
+ widgets={
+ PoweredByApache.<jk>class</jk>,
+ ContentTypeMenuItem.<jk>class</jk>,
+ StyleMenuItem.<jk>class</jk>
+ },
+ navlinks={
+ <js>"options: ?method=OPTIONS"</js>,
+ <js>"$W{ContentTypeMenuItem}"</js>,
+ <js>"$W{StyleMenuItem}"</js>,
+ <js>"source:
$C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js>
+ },
+ )
+ <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup
{...}
+ </p>
+ <p>
+ The <l>StyleMenuItem</l> is a widget
that extends from {@link org.apache.juneau.rest.widget.MenuItemWidget}, a
+ specialized widget for creating pop-up
menus.
+ <br>In the case of
<l>StyleMenuItem</l>, it's simply returning a list of links wrapped in a div
tag:
+ </p>
+ <p class='bcode'>
+ <jk>import static</jk> org.apache.juneau.dto.html5.HtmlBuilder.*;
+
+ <jk>public class</jk> StyleMenuItem <jk>extends</jk> MenuItemWidget {
+
+ <jk>private static final</jk> String[]
<jsf>BUILT_IN_STYLES</jsf> = {<js>"devops"</js>, <js>"light"</js>,
<js>"original"</js>, <js>"dark"</js>};
+
+ <ja>@Override</ja> <jc>/* Widget */</jc>
+ <jk>public</jk> String getLabel(RestRequest req) {
+ <jk>return</jk> <js>"styles"</js>;
+ }
+
+ <ja>@Override</ja> <jc>/* MenuItemWidget */</jc>
+ <jk>public</jk> Div getContent(RestRequest req) <jk>throws</jk>
Exception {
+ Div div = <jsm>div</jsm>();
+ <jk>for</jk> (String s : <jsf>BUILT_IN_STYLES</jsf>) {
+ java.net.URI uri = req.getUri(<jk>true</jk>,
<jk>new</jk> AMap<String,String>().append(<js>"stylesheet"</js>,
<js>"styles/"</js>+s+<js>".css"</js>));
+ div.children(<jsm>a</jsm>(uri, s),
<jsm>br</jsm>());
+ }
+ <jk>return</jk> div;
+ }
+ }
+ </p>
</div>
</div>
@@ -8385,7 +8612,8 @@
<jd>/** Serializer for converting images to byte streams */</jd>
<ja>@Produces</ja>(<js>"image/png,image/jpeg"</js>)
<jk>public static class</jk> ImageSerializer <jk>extends</jk>
OutputStreamSerializer {
- <ja>@Override</ja>
+
+ <ja>@Override</ja> <jc>/* Serializer */</jc>
<jk>public void</jk> serialize(Object o, OutputStream
out, SerializerSession session) <jk>throws</jk> IOException, SerializeException
{
RenderedImage image = (RenderedImage)o;
String mediaType = ctx.getMediaType();
@@ -8396,7 +8624,8 @@
<jd>/** Parser for converting byte streams to images */</jd>
<ja>@Consumes</ja>(<js>"image/png,image/jpeg"</js>)
<jk>public static class</jk> ImageParser <jk>extends</jk>
InputStreamParser {
- <ja>@Override</ja>
+
+ <ja>@Override</ja> <jc>/* Parser */</jc>
<jk>public</jk> <T> T parse(InputStream in,
ClassMeta<T> type, ParserSession session) <jk>throws</jk> ParseException,
IOException {
BufferedImage image =
ImageIO.<jsm>read</jsm>(in);
<jk>return</jk> (T)image;
@@ -8434,19 +8663,19 @@
<jk>private</jk> ServiceTracker <jf>httpServiceTracker</jf>;
<jk>private</jk> BundleContext <jf>context</jf>;
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* BundleActivator */</jc>
<jk>public void</jk> start(BundleContext context)
<jk>throws</jk> Exception {
<jk>this</jk>.<jf>context</jf> = context;
<jf>httpServiceTracker</jf> = <jk>new</jk>
ServiceTracker(context, HttpService.<jk>class</jk>.getName(), <jk>this</jk>);
<jf>httpServiceTracker</jf>.open();
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* BundleActivator */</jc>
<jk>public void</jk> stop(BundleContext context)
<jk>throws</jk> Exception {
<jf>httpServiceTracker</jf>.close();
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* ServiceTrackerCustomizer */</jc>
<jk>public</jk> Object addingService(ServiceReference
reference) {
Object service = <jf>context</jf>.getService(reference);
@@ -8462,11 +8691,11 @@
<jk>return</jk> service;
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* ServiceTrackerCustomizer */</jc>
<jk>public void</jk> modifiedService(ServiceReference
reference, Object service) {
}
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* ServiceTrackerCustomizer */</jc>
<jk>public void</jk> removedService(ServiceReference reference,
Object service) {
}
}
@@ -8701,7 +8930,7 @@
interfaceClass.getClassLoader(),
<jk>new</jk> Class[] { interfaceClass },
<jk>new</jk> InvocationHandler() {
- <ja>@Override</ja>
+ <ja>@Override</ja> <jc>/* InvocationHandler
*/</jc>
<jk>public</jk> Object invoke(Object proxy,
Method method, Object[] args) {
<jk>try</jk> {
String uri =
<jf>remoteableServletUri</jf> + '/' + interfaceClass.getName() + '/' +
ClassUtils.<jsm>getMethodSignature</jsm>(method);
@@ -9035,7 +9264,7 @@
<p>
Juneau is built as a veneer on top of the
Servlet API, allowing you to use low-level Servlet APIs
whenever needed.
- This allows you to take advantage of the newest
HTTP/2 features implemented in the new Servlet 4.0
+ <br>This allows you to take advantage of the
newest HTTP/2 features implemented in the new Servlet 4.0
specification.
</p>
<p>
@@ -9047,7 +9276,89 @@
<a id="juneau-rest-server.PredefinedLabelBeans"></a>
<h4 class='topic' onclick='toggle(this)'>3.1.35 - Predefined
Label Beans</h4>
<div class='topic'>
- TODO
+ <p>
+ The {@link org.apache.juneau.rest.labels}
package contains some reusable beans that are useful for
+ creating linked items in HTML views.
+ </p>
+ <p>
+ The {@link
org.apache.juneau.rest.labels.ResourceDescription} class is a bean with
name/description
+ properties for labeling and linking to child
resources.
+ <br>The following examples is pulled from the
REST examples:
+ </p>
+ <p class='bcode'>
+ <jk>public class</jk> PredefinedLabelsResource <jk>extends</jk>
Resource {
+
+ <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>)
+ <jk>public</jk> ResourceDescription[] getChildMethods() {
+ <jk>return new</jk> ResourceDescription[] {
+ <jk>new</jk>
ResourceDescription(<js>"beanDescription"</js>, <js>"BeanDescription"</js>),
+ <jk>new</jk>
ResourceDescription(<js>"htmlLinks"</js>, <js>"HtmlLink"</js>)
+ };
+ }
+ }
+ </p>
+ <p>
+ It get rendered as a table of name/description
columns with links to child methods:
+ </p>
+ <img class='bordered'
src='doc-files/PredefinedLabelBeans.1.png' style='width:240px'/>
+ <p>
+ The internals of the class show it simply has
two bean properties with a link annotation
+ defined on the name property:
+ </p>
+ <p class='bcode'>
+ <jk>public class</jk> ResourceDescription {
+
+ <ja>@Html</ja>(link=<js>"servlet:/{name}"</js>)
+ <jk>public</jk> Object getName() {...}
+
+ <jk>public</jk> Object getDescription() {...}
+ }
+ </p>
+ <p>
+ The {@link
org.apache.juneau.rest.labels.BeanDescription} class provides a simple view
+ of a bean and it's properties.
+ </p>
+ <p class='bcode'>
+ <ja>@RestMethod</ja>(name=<jsf>GET</jsf>,
path=<js>"/beanDescription"</js>)
+ <jk>public</jk> BeanDescription getBeanDescription() {
+ <jk>return new</jk> BeanDescription(Person.<jk>class</jk>);
+ }
+ </p>
+ <p>
+ This example renders the following:
+ </p>
+ <img class='bordered'
src='doc-files/PredefinedLabelBeans.2.png' style='width:584px'/>
+ <p>
+ The {@link
org.apache.juneau.html.annotation.HtmlLink @HtmlLink} annotation can also be
useful
+ for rendering custom hyperlinks:
+ </p>
+ <p class='bcode'>
+ <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/htmlLinks"</js>)
+ <jk>public</jk> ALink[] htmlLinks() {
+ <jk>return new</jk> ALink[] {
+ <jk>new</jk> ALink(<js>"apache"</js>,
<js>"http://apache.org"</js>),
+ <jk>new</jk> ALink(<js>"juneau"</js>,
<js>"http://juneau.apache.org"</js>)
+ };
+ }
+
+ <ja>@HtmlLink</ja>(nameProperty=<js>"n"</js>, hrefProperty=<js>"l"</js>)
+ <jk>public static class</jk> ALink {
+ <jk>public</jk> String <jf>n</jf>, <jf>l</jf>;
+ <jk>public</jk> ALink(String n, String l) {
+ <jk>this</jk>.<jf>n</jf> = n;
+ <jk>this</jk>.<jf>l</jf> = l;
+ }
+ }
+ </p>
+ <p>
+ This example renders the following consisting
of a list of hyperlinks:
+ </p>
+ <img class='bordered'
src='doc-files/PredefinedLabelBeans.3.png' style='width:92px'/>
+
+ <h5 class='section'>See Also:</h5>
+ <ul>
+ <li class='jf'>{@link
org.apache.juneau.dto.LinkString}
+ </ul>
</div>
<!--
========================================================================================================
-->
@@ -11152,7 +11463,7 @@
* [OPTIONS /*]
* View resource options
*/</jd>
- <ja>@Override</ja> /* RestServletDefault */
+ <ja>@Override</ja> <jc>/* RestServletDefault */</jc>
<ja>@RestMethod</ja>(name=<jsf>OPTIONS</jsf>,
path=<js>"/*"</js>)
<jk>public</jk> Swagger getOptions(RestRequest req) {
<jk>return</jk> req.getSwagger();
@@ -12207,7 +12518,8 @@
<jd>/** Serializer for converting images to byte streams */</jd>
<ja>@Produces</ja>(<js>"image/png,image/jpeg"</js>)
<jk>public static class</jk> ImageSerializer <jk>extends</jk>
OutputStreamSerializer {
- <ja>@Override</ja>
+
+ <ja>@Override</ja> <jc>/* Serializer */</jc>
<jk>public void</jk> serialize(Object o, OutputStream
out, SerializerSession session) <jk>throws</jk> IOException, SerializeException
{
RenderedImage image = (RenderedImage)o;
String mediaType = ctx.getMediaType();
@@ -12218,7 +12530,8 @@
<jd>/** Parser for converting byte streams to images */</jd>
<ja>@Consumes</ja>(<js>"image/png,image/jpeg"</js>)
<jk>public static class</jk> ImageParser <jk>extends</jk>
InputStreamParser {
- <ja>@Override</ja>
+
+ <ja>@Override</ja> <jc>/* Parser */</jc>
<jk>public</jk> <T> T parse(InputStream in,
ClassMeta<T> type, ParserSession session) <jk>throws</jk> ParseException,
IOException {
BufferedImage image =
ImageIO.<jsm>read</jsm>(in);
<jk>return</jk> (T)image;
diff --git a/juneau-doc/src/main/javadoc/resources/juneau-doc.css
b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
index 7fbf285..50d8478 100755
--- a/juneau-doc/src/main/javadoc/resources/juneau-doc.css
+++ b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
@@ -125,7 +125,7 @@ h4.closed {
div.topic { margin-left: 10px; }
-h6.figure {
+h5.figure {
color: #2c4557;
margin-left: 30px;
margin-right: 30px;
diff --git
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
new file mode 100644
index 0000000..e2c9548
--- /dev/null
+++
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
@@ -0,0 +1,77 @@
+//
***************************************************************************************************************************
+// * 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.examples.rest;
+
+import static org.apache.juneau.http.HttpMethodName.*;
+
+import org.apache.juneau.examples.addressbook.*;
+import org.apache.juneau.html.annotation.*;
+import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.widget.*;
+
+/**
+ * Sample REST resource for rendering predefined label beans.
+ */
+@RestResource(
+ path="/predefinedLabels",
+ title="Predefined Label Beans",
+ description="Shows examples of predefined label beans",
+ htmldoc=@HtmlDoc(
+ widgets={
+ ContentTypeMenuItem.class,
+ StyleMenuItem.class
+ },
+ navlinks={
+ "up: request:/..",
+ "options: servlet:/?method=OPTIONS",
+ "$W{ContentTypeMenuItem}",
+ "$W{StyleMenuItem}",
+ "source:
$C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"
+ }
+ )
+)
+public class PredefinedLabelsResource extends Resource {
+ private static final long serialVersionUID = 1L;
+
+ @RestMethod(name=GET, path="/")
+ public ResourceDescription[] getChildMethods() throws Exception {
+ return new ResourceDescription[] {
+ new ResourceDescription("beanDescription",
"BeanDescription"),
+ new ResourceDescription("htmlLinks", "HtmlLink")
+ };
+ }
+
+ @RestMethod(name=GET, path="/beanDescription")
+ public BeanDescription getBeanDescription() throws Exception {
+ return new BeanDescription(Person.class);
+ }
+
+ @RestMethod(name=GET, path="/htmlLinks")
+ public ALink[] htmlLinks() throws Exception {
+ return new ALink[] {
+ new ALink("apache", "http://apache.org"),
+ new ALink("juneau", "http://juneau.apache.org")
+ };
+ }
+
+ @HtmlLink(nameProperty="n", hrefProperty="l")
+ public static class ALink {
+ public String n, l;
+ public ALink(String n, String l) {
+ this.n = n;
+ this.l = l;
+ }
+ }
+}
diff --git
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index f643c13..fcef063 100644
---
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -76,6 +76,7 @@ import org.apache.juneau.rest.widget.*;
ConfigResource.class,
LogsResource.class,
DockerRegistryResource.class,
+ PredefinedLabelsResource.class,
DebugResource.class,
ShutdownResource.class
}
diff --git
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
index 624fe69..535af3a 100644
---
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
+++
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
@@ -50,8 +50,7 @@ import org.apache.juneau.svl.vars.*;
navlinks={
"up: request:/..",
"options: servlet:/?method=OPTIONS"
- },
- stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
+ }
),
config="$S{juneau.configFile}",
serializers={
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
index 8efc7f4..54ebe99 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HtmlDocBuilder.java
@@ -31,7 +31,7 @@ import org.apache.juneau.utils.*;
* by the {@link HtmlDocSerializer} class.
*
* <p>
- * This class is instantiated through the following methods.
+ * This class is instantiated through the following methods:
* <ul>
* <li class='jm'>{@link RestContextBuilder#getHtmlDocBuilder()} - Set
values programmatically during servlet initialization.
* <li class='jm'>{@link RestResponse#getHtmlDocBuilder()} - Set values
programmatically during a REST request.
@@ -81,22 +81,25 @@ public class HtmlDocBuilder {
* Sets the HTML header section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The page header normally contains the title and description, but
this value can be used to override the contents
* to be whatever you want.
*
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#header()
@HtmlDoc.header()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is HTML.
+ * <li>
+ * When a value is specified, the {@link
#navlinks(Object...)} value will be ignored.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#header() @HtmlDoc.header()} annotation.
+ * </ul>
*
* @param value
* The HTML header section contents.
@@ -117,25 +120,25 @@ public class HtmlDocBuilder {
* Sets the links in the HTML nav section.
*
* <p>
- * The format of this value is a lax-JSON map of key/value pairs where
the keys are the link text and the values are
- * relative (to the servlet) or absolute URLs.
- *
- * <p>
* The page links are positioned immediately under the title and text.
*
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This field can also use URIs of any support type in {@link
UriResolver}.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#navlinks()
@HtmlDoc.navlinks()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is a lax-JSON map of key/value
pairs where the keys are the link text and the values are
+ * relative (to the servlet) or absolute URLs.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#juneau-marshall.URIs">URI
resolution</a> (e.g. <js>"servlet:/..."</js>, <js>"request:/..."</js>).
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#navlinks() @HtmlDoc.navlinks()} annotation.
+ * </ul>
*
* @param value
* The HTML nav section links links.
@@ -155,27 +158,25 @@ public class HtmlDocBuilder {
* Sets the HTML nav section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The nav section of the page contains the links.
*
- * <p>
- * The format of this value is HTML.
*
- * <p>
- * When a value is specified, the {@link #navlinks(Object[])} value
will be ignored.
- *
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#nav()
@HtmlDoc.nav()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is HTML.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * When a value is specified, the {@link
#navlinks(Object[])} value will be ignored.
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#nav() @HtmlDoc.nav()} annotation.
+ * </ul>
*
* @param value
* The HTML nav section contents.
@@ -196,21 +197,22 @@ public class HtmlDocBuilder {
* Sets the HTML aside section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The aside section typically floats on the right side of the page.
*
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#aside()
@HtmlDoc.aside()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is HTML.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#aside() @HtmlDoc.aside()} annotation.
+ * </ul>
*
* @param value
* The HTML aside section contents.
@@ -231,21 +233,22 @@ public class HtmlDocBuilder {
* Sets the HTML footer section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The footer section typically floats on the bottom of the page.
*
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#footer()
@HtmlDoc.footer()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is HTML.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#footer() @HtmlDoc.footer()} annotation.
+ * </ul>
*
* @param value
* The HTML footer section contents.
@@ -265,19 +268,20 @@ public class HtmlDocBuilder {
/**
* Sets the HTML CSS style section contents.
*
- * <p>
- * The format of this value is CSS.
- *
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#style()
@HtmlDoc.style()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is CSS.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#style() @HtmlDoc.style()} annotation.
+ * </ul>
*
* @param value
* The HTML CSS style section contents.
@@ -298,21 +302,18 @@ public class HtmlDocBuilder {
* Sets the CSS URL in the HTML CSS style section.
*
* <p>
- * The format of this value is a comma-delimited list of URLs.
- *
- * <p>
* Specifies the URL to the stylesheet to add as a link in the style
tag in the header.
*
- * <p>
- * The format of this value is CSS.
- *
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>) and can use URL protocols defined
- * by {@link UriResolver}.
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * This is the programmatic equivalent to the {@link
HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is a comma-delimited list of
URLs.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.
+ * </ul>
*
* @param value
* The CSS URL in the HTML CSS style section.
@@ -332,19 +333,20 @@ public class HtmlDocBuilder {
/**
* Sets the HTML script section contents.
*
- * <p>
- * The format of this value is Javascript.
- *
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#script()
@HtmlDoc.script()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is Javascript.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#script() @HtmlDoc.script()} annotation.
+ * </ul>
*
* @param value
* The HTML script section contents.
@@ -364,19 +366,20 @@ public class HtmlDocBuilder {
/**
* Sets the HTML head section contents.
*
- * <p>
- * The format of this value is HTML.
- *
- * <p>
- * This field can contain variables (e.g.
<js>"$L{my.localized.variable}"</js>).
- * <br>See {@link RestContext#getVarResolver()} for the list of
supported variables.
- *
- * <p>
- * A value of <js>"INHERIT"</js> means copy the values from the parent.
- * <br>A value of <js>"NONE"</js> can be used to force no value.
- *
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#head()
@HtmlDoc.head()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * The format of this value is HTML.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * A value of <js>"INHERIT"</js> means copy the values
from the parent.
+ * <li>
+ * A value of <js>"NONE"</js> can be used to force no
value.
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#head() @HtmlDoc.head()} annotation.
+ * </ul>
*
* @param value
* The HTML head section contents.
@@ -395,8 +398,14 @@ public class HtmlDocBuilder {
/**
* Shorthand method for forcing the rendered HTML content to be no-wrap.
*
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#nowrap()
@HtmlDoc.nowrap()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#nowrap() @HtmlDoc.nowrap()} annotation.
+ * </ul>
*
* @param value The new nowrap setting.
* @return This object (for method chaining).
@@ -408,9 +417,14 @@ public class HtmlDocBuilder {
/**
* Specifies the text to display when serializing an empty array or
collection.
*
- * <p>
- * This is the programmatic equivalent to the {@link
HtmlDoc#noResultsMessage() @HtmlDoc.noResultsMessage()}
- * annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#noResultsMessage() @HtmlDoc.noResultsMessage()} annotation.
+ * </ul>
*
* @param value The text to display when serializing an empty array or
collection.
* @return This object (for method chaining).
@@ -426,8 +440,14 @@ public class HtmlDocBuilder {
* By default, uses {@link HtmlDocTemplateBasic} to render the
contents, although you can provide your own custom
* renderer or subclasses from the basic class to have full control
over how the page is rendered.
*
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#template()
@HtmlDoc.template()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#template() @HtmlDoc.template()} annotation.
+ * </ul>
*
* @param value The HTML page template to use to render the HTML page.
* @return This object (for method chaining).
@@ -443,8 +463,14 @@ public class HtmlDocBuilder {
* By default, uses {@link HtmlDocTemplateBasic} to render the
contents, although you can provide your own custom
* renderer or subclasses from the basic class to have full control
over how the page is rendered.
*
- * <p>
- * This is the programmatic equivalent to the {@link HtmlDoc#template()
@HtmlDoc.template()} annotation.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>
+ * Supports <a class="doclink"
href="../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
+ * <li>
+ * This is the programmatic equivalent to the {@link
HtmlDoc#template() @HtmlDoc.template()} annotation.
+ * </ul>
*
* @param value The HTML page template to use to render the HTML page.
* @return This object (for method chaining).
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 51a36af..631bf80 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -2720,6 +2720,11 @@ public final class RestContext extends BeanContext {
* <li>
* Widgets are inherited from super classes, but can be
overridden by reusing the widget name.
* </ul>
+ *
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ * <li class='link'><a class="doclink"
href="../../../../overview-summary.html#juneau-rest-server.Widgets">Overview
> juneau-rest-server > Widgets</a>
+ * </ul>
*/
public static final String REST_widgets = PREFIX + "widgets.lo";
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
index f2d193e..3e716c6 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletDefault.java
@@ -199,7 +199,7 @@ import org.apache.juneau.xml.*;
"<h2>$R{methodSummary,resourceDescription}</h2>",
"<a href='http://juneau.apache.org'><img
src='$U{servlet:/htdocs/juneau.png}'
style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/></a>"
},
- stylesheet="servlet:/styles/light.css",
+ stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}",
head={
"<link rel='icon'
href='$U{servlet:/htdocs/juneau.png}'/>"
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
index a27e9f6..fee217f 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
@@ -12,7 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.annotation;
-import org.apache.juneau.*;
import org.apache.juneau.html.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.rest.widget.*;
@@ -90,9 +89,6 @@ public @interface HtmlDoc {
* Sets the HTML aside section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The aside section typically floats on the right side of the page.
*
* <h5 class='section'>Example:</h5>
@@ -109,19 +105,21 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is HTML.
+ * <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
* (e.g. <js>"$L{my.localized.variable}"</js>).
* <li>
* A value of <js>"NONE"</js> can be used to force no
value.
* <li>
+ * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
+ * <li>
* Multiple values are combined with newlines into a
single string.
* <li>
* On methods, this value is inherited from the
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
* <li>
* On servlet/resource classes, this value is inherited
from the <ja>@HtmlDoc</ja> annotation on the
* parent class.
- * <li>
- * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
* </ul>
*
* <h5 class='section'>See Also:</h5>
@@ -136,9 +134,6 @@ public @interface HtmlDoc {
* Sets the HTML footer section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The footer section typically floats on the bottom of the page.
*
* <h5 class='section'>Example:</h5>
@@ -155,19 +150,21 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is HTML.
+ * <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
* (e.g. <js>"$L{my.localized.variable}"</js>).
* <li>
* A value of <js>"NONE"</js> can be used to force no
value.
* <li>
+ * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
+ * <li>
* Multiple values are combined with newlines into a
single string.
* <li>
* On methods, this value is inherited from the
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
* <li>
* On servlet/resource classes, this value is inherited
from the <ja>@HtmlDoc</ja> annotation on the
* parent class.
- * <li>
- * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
* </ul>
*
* <h5 class='section'>See Also:</h5>
@@ -181,9 +178,6 @@ public @interface HtmlDoc {
/**
* Adds arbitrary content to the HTML <xt><head></xt> element on
the page.
*
- * <p>
- * The format of this value is HTML.
- *
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
@@ -202,6 +196,8 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is HTML.
+ * <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
* (e.g. <js>"$L{my.localized.variable}"</js>).
* <li>
@@ -227,9 +223,6 @@ public @interface HtmlDoc {
* Sets the HTML header section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The page header normally contains the title and description, but
this value can be used to override the contents
* to be whatever you want.
*
@@ -247,8 +240,12 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is HTML.
+ * <li>
* A value of <js>"NONE"</js> can be used to force no
header.
* <li>
+ * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
+ * <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
* (e.g. <js>"$L{my.localized.variable}"</js>).
* <li>
@@ -258,8 +255,6 @@ public @interface HtmlDoc {
* <li>
* On servlet/resource classes, this value is inherited
from the <ja>@HtmlDoc</ja> annotation on the
* parent class if not overridden.
- * <li>
- * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
* </ul>
*
* <h5 class='section'>See Also:</h5>
@@ -274,14 +269,8 @@ public @interface HtmlDoc {
* Sets the HTML nav section contents.
*
* <p>
- * The format of this value is HTML.
- *
- * <p>
* The nav section of the page contains the links.
*
- * <p>
- * The format of this value is HTML.
- *
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
@@ -296,6 +285,8 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is HTML.
+ * <li>
* When a value is specified, the {@link #navlinks()}
value will be ignored.
* <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
@@ -303,14 +294,14 @@ public @interface HtmlDoc {
* <li>
* A value of <js>"NONE"</js> can be used to force no
value.
* <li>
+ * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
+ * <li>
* Multiple values are combined with newlines into a
single string.
* <li>
* On methods, this value is inherited from the
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
* <li>
* On servlet/resource classes, this value is inherited
from the <ja>@HtmlDoc</ja> annotation on the
* parent class.
- * <li>
- * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
* </ul>
*
* <h5 class='section'>See Also:</h5>
@@ -325,6 +316,9 @@ public @interface HtmlDoc {
* Sets the links in the HTML nav section.
*
* <p>
+ * The page links are positioned immediately under the title and text.
+ *
+ * <p>
* The value is an array of strings with two possible values:
* <ul>
* <li>A key-value pair representing a hyperlink label and href:
@@ -332,9 +326,6 @@ public @interface HtmlDoc {
* <li>Arbitrary HTML.
* </ul>
*
- * <p>
- * The page links are positioned immediately under the title and text.
- *
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
@@ -355,16 +346,16 @@ public @interface HtmlDoc {
* <li>
* A value of <js>"NONE"</js> can be used to force no
value.
* <li>
- * This field can also use URIs of any support type in
{@link UriResolver}.
+ * The parent links can be included by adding the literal
<js>"INHERIT"</js> as a value.
+ * <br>Use the syntax <js>"key[index]: value"</js> or
<js>"[index]: value"</js> to specify an index location
+ * to place a link inside the list of parent links.
+ * <li>
+ * Supports <a class="doclink"
href="../../../../../overview-summary.html#juneau-marshall.URIs">URI
resolution</a> (e.g. <js>"servlet:/..."</js>, <js>"request:/..."</js>).
* <li>
* On methods, this value is inherited from the
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
* <li>
* On servlet/resource classes, this value is inherited
from the <ja>@HtmlDoc</ja> annotation on the
* parent class.
- * <li>
- * The parent links can be included by adding the literal
<js>"INHERIT"</js> as a value.
- * <br>Use the syntax <js>"key[index]: value"</js> or
<js>"[index]: value"</js> to specify an index location
- * to place a link inside the list of parent links.
* </ul>
*
* <h5 class='section'>See Also:</h5>
@@ -410,9 +401,6 @@ public @interface HtmlDoc {
/**
* Sets the HTML script section contents.
*
- * <p>
- * The format of this value is Javascript.
- *
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
@@ -427,19 +415,21 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is Javascript.
+ * <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
* (e.g. <js>"$L{my.localized.variable}"</js>).
* <li>
* A value of <js>"NONE"</js> can be used to force no
value.
* <li>
+ * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
+ * <li>
* Multiple values are combined with newlines into a
single string.
* <li>
* On methods, this value is inherited from the
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
* <li>
* On servlet/resource classes, this value is inherited
from the <ja>@HtmlDoc</ja> annotation on the
* parent class.
- * <li>
- * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
* </ul>
*
* <h5 class='section'>See Also:</h5>
@@ -453,9 +443,6 @@ public @interface HtmlDoc {
/**
* Sets the HTML CSS style section contents.
*
- * <p>
- * The format of this value is CSS.
- *
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
@@ -471,19 +458,21 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is CSS.
+ * <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
* (e.g. <js>"$L{my.localized.variable}"</js>).
* <li>
* A value of <js>"NONE"</js> can be used to force no
value.
* <li>
+ * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
+ * <li>
* Multiple values are combined with newlines into a
single string.
* <li>
* On methods, this value is inherited from the
<ja>@HtmlDoc</ja> annotation on the servlet/resource class.
* <li>
* On servlet/resource classes, this value is inherited
from the <ja>@HtmlDoc</ja> annotation on the
* parent class.
- * <li>
- * The parent value can be included by adding the literal
<js>"INHERIT"</js> as a value.
* </ul>
*
* <h5 class='section'>See Also:</h5>
@@ -498,14 +487,8 @@ public @interface HtmlDoc {
* Sets the CSS URL in the HTML CSS style section.
*
* <p>
- * The format of this value is a URL.
- *
- * <p>
* Specifies the URL to the stylesheet to add as a link in the style
tag in the header.
*
- * <p>
- * The format of this value is CSS.
- *
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
@@ -518,6 +501,8 @@ public @interface HtmlDoc {
* <h5 class='section'>Notes:</h5>
* <ul class='spaced-list'>
* <li>
+ * The format of this value is a URL.
+ * <li>
* Supports <a class="doclink"
href="../../../../../overview-summary.html#DefaultRestSvlVariables">initialization-time
and request-time variables</a>
* (e.g. <js>"$L{my.localized.variable}"</js>).
* <li>
@@ -567,13 +552,18 @@ public @interface HtmlDoc {
* Defines widgets that can be used in conjunction with string
variables of the form <js>"$W{name}"</js>to quickly
* generate arbitrary replacement text.
*
+ * <p>
* Widgets resolve the following variables:
- * <ul>
- * <li><js>"$W{name}"</js> - Contents returned by {@link
Widget#getHtml(RestRequest)}.
- * <li><js>"$W{name.script}"</js> - Contents returned by {@link
Widget#getScript(RestRequest)}.
+ *
+ * <ul class='spaced-list'>
+ * <li>
+ * <js>"$W{name}"</js> - Contents returned by {@link
Widget#getHtml(RestRequest)}.
+ * <li>
+ * <js>"$W{name.script}"</js> - Contents returned by
{@link Widget#getScript(RestRequest)}.
* <br>The script contents are automatically inserted into
the <xt><head/script></xt> section
* in the HTML page.
- * <li><js>"$W{name.style}"</js> - Contents returned by {@link
Widget#getStyle(RestRequest)}.
+ * <li>
+ * <js>"$W{name.style}"</js> - Contents returned by {@link
Widget#getStyle(RestRequest)}.
* <br>The styles contents are automatically inserted into
the <xt><head/style></xt> section
* in the HTML page.
* </ul>
@@ -608,10 +598,7 @@ public @interface HtmlDoc {
*
* <h5 class='section'>See Also:</h5>
* <ul>
- * <li class='jf'>{@link RestContext#REST_widgets}
- * <li class='jm'>{@link RestContextBuilder#widgets(Class...)}
- * <li class='jm'>{@link RestContextBuilder#widgets(Widget...)}
- * <li class='jm'>{@link
RestContextBuilder#widgets(boolean,Widget...)}
+ * <li class='link'><a class="doclink"
href="../../../../../overview-summary.html#juneau-rest-server.Widgets">Overview
> juneau-rest-server > Widgets</a>
* </ul>
*/
Class<? extends Widget>[] widgets() default {};
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
index e5cacfd..b181583 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
@@ -423,7 +423,7 @@ public @interface RestMethod {
*
* <h5 class='section'>See Also:</h5>
* <ul>
- * <li class='jic'>{@link RestInfoProvider}
+ * <li class='link'><a class="doclink"
href="../../../../../overview-summary.html#juneau-rest-server.HtmlDocAnnotation">Overview
> juneau-rest-server > @HtmlDoc</a>
* </ul>
*/
HtmlDoc htmldoc() default @HtmlDoc;
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
index 67f7de2..4cc0451 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
@@ -416,6 +416,11 @@ public @interface RestResource {
* )
* )
* </p>
+ *
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ * <li class='link'><a class="doclink"
href="../../../../../overview-summary.html#juneau-rest-server.HtmlDocAnnotation">Overview
> juneau-rest-server > @HtmlDoc</a>
+ * </ul>
*/
HtmlDoc htmldoc() default @HtmlDoc;
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
index 8545d2c..080594d 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
@@ -47,6 +47,8 @@ public final class BeanDescription {
public BeanDescription(Class<?> c) {
type = c.getName();
BeanMeta<?> bm = BeanContext.DEFAULT.getBeanMeta(c);
+ if (bm == null)
+ throw new FormattedRuntimeException("Class ''{0}'' is
not a valid bean.", c);
properties = new
BeanPropertyDescription[bm.getPropertyMetas().size()];
int i = 0;
for (BeanPropertyMeta pm : bm.getPropertyMetas())
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
index 8a981d0..b0e120a 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/NameDescription.java
@@ -58,9 +58,12 @@ public class NameDescription {
* Sets the name field on this label to a new value.
*
* @param name The new name.
+ * @return This object (for method chaining).
*/
- public void setName(Object name) {
+ @BeanProperty
+ public NameDescription name(Object name) {
this.name = name;
+ return this;
}
/**
@@ -76,8 +79,11 @@ public class NameDescription {
* Sets the description field on this label to a new value.
*
* @param description The new description.
+ * @return This object (for method chaining).
*/
- public void setDescription(Object description) {
+ @BeanProperty
+ public NameDescription description(Object description) {
this.description = description;
+ return this;
}
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
index 289b453..de20d66 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
@@ -57,7 +57,7 @@ public class StyleMenuItem extends MenuItemWidget {
private static final String[] BUILT_IN_STYLES = {"devops", "light",
"original", "dark"};
- @Override /* MenuItemWidget */
+ @Override /* Widget */
public String getLabel(RestRequest req) {
return "styles";
}
@@ -65,7 +65,7 @@ public class StyleMenuItem extends MenuItemWidget {
* Looks at the supported media types from the request and constructs a
list of hyperlinks to render the data
* as plain-text.
*/
- @Override /* Widget */
+ @Override /* MenuItemWidget */
public Div getContent(RestRequest req) throws Exception {
Div div = div();
for (String s : BUILT_IN_STYLES) {
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
index bfd707d..26ba538 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
@@ -25,9 +25,9 @@ import org.apache.juneau.utils.*;
* <p>
* Widgets are associated with resources through the following
* <ul>
- * <li>{@link HtmlDoc#widgets() @HtmlDoc.widgets}
- * <li>{@link RestContextBuilder#widgets(Class...)}
- * <li>{@link RestContextBuilder#widgets(Widget...)}
+ * <li class='ja'>{@link HtmlDoc#widgets() @HtmlDoc.widgets}
+ * <li class='jm'>{@link RestContextBuilder#widgets(Class...)}
+ * <li class='jm'>{@link RestContextBuilder#widgets(Widget...)}
* </ul>
*
* <p>
--
To stop receiving notification emails like this one, please contact
[email protected].