Repository: incubator-juneau
Updated Branches:
  refs/heads/master 8825af8ad -> f0db7c99d


Add 'light' style and STYLES links to examples.

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

Branch: refs/heads/master
Commit: f0db7c99d4c769de084b29f35c4a922d36050694
Parents: 8825af8
Author: JamesBognar <[email protected]>
Authored: Tue Jul 4 12:54:09 2017 -0400
Committer: JamesBognar <[email protected]>
Committed: Tue Jul 4 12:54:09 2017 -0400

----------------------------------------------------------------------
 .../juneau/html/HtmlDocSerializerContext.java   |  16 +-
 .../juneau/html/HtmlDocSerializerSession.java   |  14 +-
 .../juneau/html/HtmlDocTemplateBasic.java       |   8 +-
 .../doc-files/ReleaseNotes_631_DevopsStyle.png  | Bin 0 -> 173865 bytes
 .../doc-files/ReleaseNotes_631_LightStyle.png   | Bin 0 -> 187319 bytes
 .../ReleaseNotes_631_StyleMenuItem.png          | Bin 0 -> 66839 bytes
 juneau-core/src/main/javadoc/overview.html      |  36 +++-
 .../juneau/examples/rest/AtomFeedResource.java  |   6 +-
 .../juneau/examples/rest/DirectoryResource.java |   5 +-
 .../examples/rest/JsonSchemaResource.java       |   5 +-
 .../juneau/examples/rest/PetStoreResource.java  |   6 +-
 .../examples/rest/RequestEchoResource.java      |   5 +-
 .../juneau/examples/rest/RootResources.java     |   4 +-
 .../examples/rest/SystemPropertiesResource.java |   4 +-
 .../juneau/examples/rest/TempDirResource.java   |   5 +-
 .../rest/addressbook/AddressBookResource.java   |   5 +-
 .../apache/juneau/microservice/Resource.java    |   2 +-
 .../juneau/microservice/ResourceGroup.java      |   2 +-
 .../juneau/microservice/ResourceJena.java       |   2 +-
 .../juneau/microservice/ResourceJenaGroup.java  |   2 +-
 .../java/org/apache/juneau/rest/CallMethod.java |  17 +-
 .../java/org/apache/juneau/rest/RestConfig.java |  12 +-
 .../org/apache/juneau/rest/RestContext.java     |  14 +-
 .../org/apache/juneau/rest/RestRequest.java     |  13 +-
 .../org/apache/juneau/rest/RestResponse.java    |   6 +-
 .../apache/juneau/rest/RestServletDefault.java  |   8 +-
 .../apache/juneau/rest/annotation/HtmlDoc.java  |   6 +-
 .../rest/jena/RestServletJenaDefault.java       |   2 +-
 .../java/org/apache/juneau/rest/package.html    |   4 +-
 .../juneau/rest/widget/StyleMenuItem.java       |  76 +++++++
 .../org/apache/juneau/rest/styles/light.css     | 211 +++++++++++++++++++
 31 files changed, 414 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
 
b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
index fa5070a..0fba6e3 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerContext.java
@@ -453,7 +453,7 @@ public final class HtmlDocSerializerContext extends 
HtmlSerializerContext {
         * <b>Configuration property:</b>  Stylesheet import URLs.
         *
         * <ul>
-        *      <li><b>Name:</b> <js>"HtmlDocSerializer.styleImport"</js>
+        *      <li><b>Name:</b> <js>"HtmlDocSerializer.stylesheet"</js>
         *      <li><b>Data type:</b> <code>List&lt;String&gt;</code>
         *      <li><b>Default:</b> empty list
         *      <li><b>Session-overridable:</b> <jk>true</jk>
@@ -463,17 +463,17 @@ public final class HtmlDocSerializerContext extends 
HtmlSerializerContext {
         * Adds a link to the specified stylesheet URL.
         *
         * <p>
-        * Note that this stylesheet is controlled by the 
<code><ja>@RestResource</ja>.styleImport()</code> annotation.
+        * Note that this stylesheet is controlled by the 
<code><ja>@RestResource</ja>.stylesheet()</code> annotation.
         *
         * <p>
         * A value of <js>"NONE"</js> can be used to represent no value to 
differentiate it from an empty string.
         */
-       public static final String HTMLDOC_styleImport = 
"HtmlDocSerializer.styleImport";
+       public static final String HTMLDOC_stylesheet = 
"HtmlDocSerializer.stylesheet";
 
        /**
-        * <b>Configuration property:</b>  Add to the {@link 
#HTMLDOC_styleImport} property.
+        * <b>Configuration property:</b>  Add to the {@link 
#HTMLDOC_stylesheet} property.
         */
-       public static final String HTMLDOC_styleImport_add = 
"HtmlDocSerializer.styleImport.list.add";
+       public static final String HTMLDOC_stylesheet_add = 
"HtmlDocSerializer.stylesheet.list.add";
 
        /**
         * <b>Configuration property:</b>  CSS style code.
@@ -584,7 +584,7 @@ public final class HtmlDocSerializerContext extends 
HtmlSerializerContext {
        public static final String HTMLDOC_template = 
"HtmlDocSerializer.template";
 
 
-       final String[] style, styleImport, script;
+       final String[] style, stylesheet, script;
        final Map<String,Object> links;
        final String title, description, branding, header, nav, aside, footer, 
noResultsMessage;
        final boolean nowrap;
@@ -601,7 +601,7 @@ public final class HtmlDocSerializerContext extends 
HtmlSerializerContext {
        public HtmlDocSerializerContext(PropertyStore ps) {
                super(ps);
                style = ps.getProperty(HTMLDOC_style, String[].class, new 
String[0]);
-               styleImport = ps.getProperty(HTMLDOC_styleImport, 
String[].class, new String[0]);
+               stylesheet = ps.getProperty(HTMLDOC_stylesheet, String[].class, 
new String[0]);
                script = ps.getProperty(HTMLDOC_script, String[].class, new 
String[0]);
                title = ps.getProperty(HTMLDOC_title, String.class, null);
                description = ps.getProperty(HTMLDOC_description, String.class, 
null);
@@ -629,7 +629,7 @@ public final class HtmlDocSerializerContext extends 
HtmlSerializerContext {
                                .append("aside", aside)
                                .append("footer", footer)
                                .append("style", style)
-                               .append("styleImport", styleImport)
+                               .append("stylesheet", stylesheet)
                                .append("nowrap", nowrap)
                                .append("template", template)
                                .append("noResultsMessage", noResultsMessage)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
 
b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 19a3661..66dbe25 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -35,7 +35,7 @@ import org.apache.juneau.serializer.*;
 public final class HtmlDocSerializerSession extends HtmlSerializerSession {
 
        private final String title, description, branding, header, nav, aside, 
footer, noResultsMessage;
-       private final String[] style, styleImport, script;
+       private final String[] style, stylesheet, script;
        private final Map<String,Object> links;
        private final boolean nowrap;
        private final HtmlDocTemplate template;
@@ -78,7 +78,7 @@ public final class HtmlDocSerializerSession extends 
HtmlSerializerSession {
                        footer = ctx.footer;
                        links = ctx.links;
                        style = ctx.style;
-                       styleImport = ctx.styleImport;
+                       stylesheet = ctx.stylesheet;
                        script = ctx.script;
                        nowrap = ctx.nowrap;
                        noResultsMessage = ctx.noResultsMessage;
@@ -94,7 +94,7 @@ public final class HtmlDocSerializerSession extends 
HtmlSerializerSession {
                        Map m = op.getMap(HTMLDOC_links, ctx.links);
                        links = ObjectUtils.isEmpty(m) ? null : new 
LinkedHashMap(m);
                        style = op.getStringArray(HTMLDOC_style, ctx.style);
-                       styleImport = op.getStringArray(HTMLDOC_styleImport, 
ctx.styleImport);
+                       stylesheet = op.getStringArray(HTMLDOC_stylesheet, 
ctx.stylesheet);
                        script = op.getStringArray(HTMLDOC_script, ctx.script);
                        nowrap = op.getBoolean(HTMLDOC_nowrap, ctx.nowrap);
                        noResultsMessage = 
op.getString(HTMLDOC_noResultsMessage, ctx.noResultsMessage);
@@ -115,15 +115,15 @@ public final class HtmlDocSerializerSession extends 
HtmlSerializerSession {
        }
 
        /**
-        * Returns the {@link HtmlDocSerializerContext#HTMLDOC_styleImport} 
setting value in this context.
+        * Returns the {@link HtmlDocSerializerContext#HTMLDOC_stylesheet} 
setting value in this context.
         *
         * @return
-        *      The {@link HtmlDocSerializerContext#HTMLDOC_styleImport} 
setting value in this context.
+        *      The {@link HtmlDocSerializerContext#HTMLDOC_stylesheet} setting 
value in this context.
         *      An empty array if not specified.
         *      Never <jk>null</jk>.
         */
-       public final String[] getStyleImport() {
-               return styleImport;
+       public final String[] getStylesheet() {
+               return stylesheet;
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java 
b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
index 326973f..4f21bb3 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
@@ -41,10 +41,10 @@ public class HtmlDocTemplateBasic implements 
HtmlDocTemplate {
        @Override /* HtmlDocTemplate */
        public void style(HtmlDocSerializerSession session, HtmlWriter w, 
HtmlDocSerializer s, Object o) throws Exception {
 
-               String[] styleImport = session.getStyleImport();
-               if (! ArrayUtils.contains("NONE", styleImport))
-                       for (String si : styleImport)
-                               w.append(2, "@import 
").q().append(session.resolveUri(si)).q().appendln("; ");
+               String[] stylesheet = session.getStylesheet();
+               if (! ArrayUtils.contains("NONE", stylesheet))
+                       for (String ss : stylesheet)
+                               w.append(2, "@import 
").q().append(session.resolveUri(ss)).q().appendln("; ");
 
                if (session.isNoWrap())
                        w.appendln("div.data * {white-space:nowrap;} ");

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_DevopsStyle.png
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_DevopsStyle.png 
b/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_DevopsStyle.png
new file mode 100644
index 0000000..9675ac8
Binary files /dev/null and 
b/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_DevopsStyle.png differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_LightStyle.png
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_LightStyle.png 
b/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_LightStyle.png
new file mode 100644
index 0000000..600ee47
Binary files /dev/null and 
b/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_LightStyle.png differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_StyleMenuItem.png
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_StyleMenuItem.png 
b/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_StyleMenuItem.png
new file mode 100644
index 0000000..8d216f4
Binary files /dev/null and 
b/juneau-core/src/main/javadoc/doc-files/ReleaseNotes_631_StyleMenuItem.png 
differ

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-core/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/javadoc/overview.html 
b/juneau-core/src/main/javadoc/overview.html
index a8acd02..1a98047 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -574,10 +574,16 @@
                                {@link 
org.apache.juneau.ObjectList#serializeTo(java.io.Writer)} methods.
                        <li>
                                Passing them to one of the {@link 
org.apache.juneau.serializer.Serializer} serialize methods.
+                       <li>
+                               Simply calling the {@link 
org.apache.juneau.ObjectMap#toString()} or {@link 
org.apache.juneau.ObjectList#toString()}
+                               methods which will serialize it as Simplified 
JSON.
                </ol>
                <p>
                        Any valid JSON can be parsed into an unstructured model 
consisting of generic 
-                               {@link org.apache.juneau.ObjectMap} and {@link 
org.apache.juneau.ObjectList} objects. 
+                       {@link org.apache.juneau.ObjectMap} and {@link 
org.apache.juneau.ObjectList} objects. 
+                       <br>
+                       (In theory, any valid XML can also be parsed into an 
unstructured model, although this has not been 
+                       officially 'tested')
                </p>
                <p class='bcode'>
        <jc>// Parse an arbitrary JSON document into an unstructered data model
@@ -594,6 +600,9 @@
        
        <jc>// Or convert it to XML.</jc>
        String xml = XmlSerializer.<jsf>DEFAULT</jsf>.serialize(m);
+
+       <jc>// Or just use toString().</jc>
+       json = m.toString();
                </p>
                <ul class='doctree'>
                        <li class='info'>
@@ -2185,7 +2194,7 @@
                        <jsm>link</jsm>(<js>"alternate"</js>, 
<js>"text/html"</js>, 
<js>"http://juneau.apache.org";</js>).hreflang(<js>"en"</js>),
                        <jsm>link</jsm>(<js>"self"</js>, 
<js>"application/atom+xml"</js>, <js>"http://juneau.apache.org/feed.atom";</js>)
                )
-               .rights(<js>"Copyright (c) 2016, Apache Foundation"</js>)
+               .rights(<js>"Copyright (c) ..."</js>)
                .generator(
                        
<jsm>generator</jsm>(<js>"Juneau"</js>).uri(<js>"http://juneau.apache.org/";</js>).version(<js>"1.0"</js>)
                )
@@ -2234,7 +2243,7 @@
                <xt>&lt;link</xt> 
<xa>href</xa>=<xs>'http://juneau.apache.org/feed.atom'</xs> 
<xa>rel</xa>=<xs>'self'</xs> 
                        
<xa>type</xa>=<xs>'application/atom+xml'</xs>/<xt>&gt;</xt>
                <xt>&lt;rights&gt;</xt>
-                       Copyright (c) 2016, Apache Foundation
+                       Copyright (c) ...
                <xt>&lt;/rights&gt;</xt>
                <xt>&lt;title</xt> <xa>type</xa>=<xs>'text'</xs>&gt;</xt>
                        Juneau ATOM specification
@@ -2479,7 +2488,7 @@
                },
                
                <jc>// Our stylesheet for the HTML rendition.</jc>
-               styleImport=<js>"styles/devops.css"</js>,
+               stylesheet=<js>"styles/devops.css"</js>,
                
                <jc>// Support GZIP encoding on Accept-Encoding header.</jc>
                encoders=GzipEncoder.<jk>class</jk>,
@@ -4681,7 +4690,7 @@
                },
                
                <jc>// Our stylesheet for the HTML rendition.</jc>
-               styleImport=<js>"styles/devops.css"</js>,
+               stylesheet=<js>"styles/devops.css"</js>,
                
                <jc>// Support GZIP encoding on Accept-Encoding header.</jc>
                encoders=GzipEncoder.<jk>class</jk>,
@@ -5504,7 +5513,7 @@
                        
<ja>@Property</ja>(name=<js>"DirectoryResource.allowDeletes"</js>, 
value=<js>"true"</js>), 
                        
<ja>@Property</ja>(name=<js>"DirectoryResource.allowPuts"</js>, 
value=<js>"false"</js>) 
                }, 
-               styleImport=<js>"styles/devops.css"</js> 
+               stylesheet=<js>"styles/devops.css"</js> 
        ) 
        <jk>public class</jk> TempDirResource <jk>extends</jk> 
DirectoryResource { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
@@ -5650,7 +5659,7 @@
                                                <jk>new</jk> 
Link(<js>"alternate"</js>, <js>"text/html"</js>, 
<js>"http://juneau.apache.org/";</js>).setHreflang(<js>"en"</js>), 
                                                <jk>new</jk> 
Link(<js>"self"</js>, <js>"application/atom+xml"</js>, 
<js>"http://juneau.apache.org/feed.atom";</js>)
                                        ) 
-                                       .setRights(<jk>new</jk> 
Text(<js>"Copyright (c) 2016, Apache Foundation"</js>)) 
+                                       .setRights(<jk>new</jk> 
Text(<js>"Copyright (c) ..."</js>)) 
                                        .setGenerator(<jk>new</jk> 
Generator(<js>"Juneau"</js>).setUri(<jk>new</jk> 
URI(<js>"http://juneau.apache.org/";</js>)).setVersion(<js>"1.0"</js>)) 
                                        .addEntries( 
                                                <jk>new</jk> Entry() 
@@ -6842,7 +6851,7 @@
                                <ul>
                                        <li>{@link 
org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_script HTMLDOC_script}
                                        <li>{@link 
org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_style HTMLDOC_style} - 
Was <jsf>HTMLDOC_css</jsf>.
-                                       <li>{@link 
org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_styleImport 
HTMLDOC_styleImport} - Was <jsf>HTMLDOC_cssUrl</jsf>.  Now an array.
+                                       <li>{@link 
org.apache.juneau.html.HtmlDocSerializerContext#HTMLDOC_stylesheet 
HTMLDOC_stylesheet} - Was <jsf>HTMLDOC_cssUrl</jsf>.  Now an array.
                                </ul>
                        <li>
                                New {@link 
org.apache.juneau.utils.ResourceFinder} utility class.
@@ -6853,6 +6862,11 @@
                <h6 class='topic'>org.apache.juneau.rest</h6>
                <ul class='spaced-list'>
                        <li>
+                               New 'light' stylesheet:
+                               <br><img 
src='doc-files/ReleaseNotes_631_LightStyle.png'>
+                               <br>Compared with previous 'devops':
+                               <br><img 
src='doc-files/ReleaseNotes_631_DevopsStyle.png'>
+                       <li>
                                Improvements made to the {@link 
org.apache.juneau.rest.widget.Widget} API.
                                <ul>
                                        <li>
@@ -6874,12 +6888,16 @@
                                                of a search/view/order-by/page 
form:
                                                <br><img 
src='doc-files/ReleaseNotes_631_QueryMenuItem.png'>
                                                <br>Fields are now pre-filled 
with current query parameters.
+                                       <li>
+                                               New {@link 
org.apache.juneau.rest.widget.StyleMenuItem} widget that provides a pull-down 
menu 
+                                               with hyperlinks to show the 
content in the default stylesheets:
+                                               <br><img 
src='doc-files/ReleaseNotes_631_StyleMenuItem.png'>
                                </ul>
                        <li>
                                New/modified annotations on {@link 
org.apache.juneau.rest.annotation.HtmlDoc @HtmlDoc}:
                                <ul>
                                        <li>{@link 
org.apache.juneau.rest.annotation.HtmlDoc#style() style()} - Renamed from 
<code>css()</code>.
-                                       <li>{@link 
org.apache.juneau.rest.annotation.HtmlDoc#styleImport() styleImport()} - 
Renamed from <code>cssUrl()</code>.
+                                       <li>{@link 
org.apache.juneau.rest.annotation.HtmlDoc#stylesheet() stylesheet()} - Renamed 
from <code>cssUrl()</code>.
                                                <br>Can now be a 
comma-delimited list of URLs.
                                        <li>{@link 
org.apache.juneau.rest.annotation.HtmlDoc#script() script()} - Add arbitrary 
Javascript to page header.
                                </ul>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
index ad72535..ca25161 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
@@ -33,10 +33,11 @@ import org.apache.juneau.rest.widget.*;
        title="Sample ATOM feed resource",
        description="Sample resource that shows how to render ATOM feeds",
        widgets={
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
        htmldoc=@HtmlDoc(
-               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/AtomFeedResource.java'}"
+               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/AtomFeedResource.java'}"
        ),
        properties={
                @Property(name=SERIALIZER_quoteChar, value="'"),
@@ -61,7 +62,6 @@ public class AtomFeedResource extends ResourceJena {
                                        link("alternate", "text/html", 
"http://www.sample.com/";).hreflang("en"),
                                        link("self", "application/atom+xml", 
"http://www.sample.com/feed.atom";)
                                )
-                               .rights("Copyright (c) 2016, Apache Foundation")
                                .generator(
                                        
generator("Juneau").uri("http://juneau.apache.org/";).version("1.0")
                                )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
index 86b8101..78123f9 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
@@ -37,10 +37,11 @@ import org.apache.juneau.utils.*;
 @RestResource(
        messages="nls/DirectoryResource",
        widgets={
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
        htmldoc=@HtmlDoc(
-               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/DirectoryResource.java'}"
+               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/DirectoryResource.java'}"
        ),
        properties={
                @Property(name=HTML_uriAnchorText, value=PROPERTY_NAME),

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
index 62e7d5b..4120e22 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
@@ -26,10 +26,11 @@ import org.apache.juneau.rest.widget.*;
        title="Sample JSON-Schema document",
        description="Sample resource that shows how to generate JSON-Schema 
documents",
        widgets={
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
        htmldoc=@HtmlDoc(
-               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/JsonSchemaResource.java'}",
+               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/JsonSchemaResource.java'}",
                aside=""
                        + "<div style='min-width:200px' class='text'>"
                        + "     <p>Shows how to produce JSON-Schema documents 
in a variety of languages using the JSON-Schema DTOs.</p>"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
index 4144caf..26b2f03 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
@@ -36,10 +36,11 @@ import org.apache.juneau.transforms.*;
        description="An example of a typical REST resource where beans are 
rendered in summary and details views.",
        path="/petstore",
        widgets={
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
        htmldoc=@HtmlDoc(
-               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java'}",
+               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java'}",
                aside=""
                        + "<div style='max-width:400px' class='text'>"
                        + "     <p>This page shows a standard REST resource 
that renders bean summaries and details.</p>"
@@ -85,6 +86,7 @@ public class PetStoreResource extends ResourceJena {
                                + "options:'servlet:/?method=OPTIONS',"
                                + "query:'$W{queryMenuItem}',"
                                + "contentTypes:'$W{contentTypeMenuItem}',"
+                               + "styles:'$W{styleMenuItem}',"
                                + 
"source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/PetStoreResource.java'"
                        + "}"
                )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
index 2df7a68..21e6118 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
@@ -33,10 +33,11 @@ import org.apache.juneau.transforms.*;
        title="Request echo service",
        description="Echos the current HttpServletRequest object back to the 
browser.",
        widgets={
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
        htmldoc=@HtmlDoc(
-               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/RequestEchoResource.java'}",
+               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/RequestEchoResource.java'}",
                aside=""
                        + "<div style='max-width:400px;min-width:200px' 
class='text'>"
                        + "     <p>Shows how even arbitrary POJOs such as 
<code>HttpServletRequest</code> can be serialized by the framework.</p>"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index e16db4a..24d3c4b 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -27,12 +27,14 @@ import org.apache.juneau.rest.widget.*;
        description="Example of a router resource page.",
        widgets={
                PoweredByApacheWidget.class,
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
        htmldoc=@HtmlDoc(
                links="{"
                        + "options:'?method=OPTIONS',"
                        + "contentTypes:'$W{contentTypeMenuItem}',"
+                       + "styles:'$W{styleMenuItem}',"
                        + 
"source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/RootResources.java'"
                + "}",
                aside=""

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
index e61ee9b..1976de4 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
@@ -36,7 +36,8 @@ import org.apache.juneau.rest.widget.*;
 
        // Widget used for content-type pull-down menu.         
        widgets={
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
 
        // Links on the HTML rendition page.
@@ -51,6 +52,7 @@ import org.apache.juneau.rest.widget.*;
                        + "options:'servlet:/?method=OPTIONS',"
                        + "form:'servlet:/formPage',"
                        + "contentTypes:'$W{contentTypeMenuItem}',"
+                       + "styles:'$W{styleMenuItem}',"
                        + 
"source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/SystemPropertiesResource.java'"
                        +"}",
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
index 6529474..04732de 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
@@ -32,10 +32,11 @@ import org.apache.juneau.utils.*;
        title="Temp Directory View Service",
        description="View and download files in the '$S{java.io.tmpdir}' 
directory.",
        widgets={
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
        htmldoc=@HtmlDoc(
-               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',upload:'servlet:/upload',contentTypes:'$W{contentTypeMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/TempDirResource.java'}",
+               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',upload:'servlet:/upload',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/TempDirResource.java'}",
                aside=""
                        + "<div style='max-width:400px' class='text'>"
                        + "     <p>Shows how to use the predefined 
DirectoryResource class.</p>"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
index bcbe585..e6e4327 100644
--- 
a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
+++ 
b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
@@ -46,7 +46,8 @@ import org.apache.juneau.utils.*;
        // Widgets for $W variables above.
        widgets={
                PoweredByJuneauWidget.class,
-               ContentTypeMenuItem.class
+               ContentTypeMenuItem.class,
+               StyleMenuItem.class
        },
 
        // Links on the HTML rendition page.
@@ -54,7 +55,7 @@ import org.apache.juneau.utils.*;
        // "servlet:/..." URIs are relative to the servlet URI.
        // "$C{...}" variables are pulled from the config file.
        htmldoc=@HtmlDoc(
-               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java',contentTypes:'$W{contentTypeMenuItem}'}",
+               
links="{up:'request:/..',options:'servlet:/?method=OPTIONS',source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java',contentTypes:'$W{contentTypeMenuItem}',styles:'$W{styleMenuItem}'}",
                        aside=""
                                + "<div 
style='max-width:400px;min-width:200px'>"
                                + "     <p>Proof-of-concept resource that shows 
off the capabilities of working with POJO resources.</p>"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
----------------------------------------------------------------------
diff --git 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
index ec634e1..292eee8 100755
--- 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
+++ 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/Resource.java
@@ -44,7 +44,7 @@ import org.apache.juneau.svl.vars.*;
 @RestResource(
        htmldoc=@HtmlDoc(
                links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
-               styleImport="$C{REST/stylesheet,servlet:/styles/devops.css}"
+               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
        ),
        config="$S{juneau.configFile}"
 )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
----------------------------------------------------------------------
diff --git 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
index d476bf2..5681ec3 100755
--- 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
+++ 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
@@ -45,7 +45,7 @@ import org.apache.juneau.svl.vars.*;
 @RestResource(
        htmldoc=@HtmlDoc(
                links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
-               styleImport="$C{REST/stylesheet,servlet:/styles/devops.css}"
+               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
        ),
        config="$S{juneau.configFile}"
 )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
----------------------------------------------------------------------
diff --git 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
index 458f858..4a319f1 100755
--- 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
+++ 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJena.java
@@ -22,7 +22,7 @@ import org.apache.juneau.rest.jena.*;
 @RestResource(
        htmldoc=@HtmlDoc(
                links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
-               styleImport="$C{REST/stylesheet,servlet:/styles/devops.css}"
+               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
        ),
        config="$S{juneau.configFile}"
 )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
----------------------------------------------------------------------
diff --git 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
index f9e1b96..719a4cd 100644
--- 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
+++ 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
@@ -46,7 +46,7 @@ import org.apache.juneau.svl.vars.*;
 @RestResource(
        htmldoc=@HtmlDoc(
                links="{up:'request:/..',options:'servlet:/?method=OPTIONS'}",
-               styleImport="$C{REST/stylesheet,servlet:/styles/devops.css}"
+               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
        ),
        config="$S{juneau.configFile}"
 )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
index 04d60a2..2d3774c 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/CallMethod.java
@@ -69,7 +69,7 @@ class CallMethod implements Comparable<CallMethod>  {
        private final RestContext context;
        private final BeanContext beanContext;
        private final String htmlTitle, htmlDescription, htmlBranding, 
htmlHeader, htmlLinks, htmlNav, htmlAside,
-               htmlFooter, htmlStyle, htmlStyleImport, htmlScript, 
htmlNoResultsMessage;
+               htmlFooter, htmlStyle, htmlStylesheet, htmlScript, 
htmlNoResultsMessage;
        private final boolean htmlNoWrap;
        private final HtmlDocTemplate htmlTemplate;
        private final Map<String,Widget> widgets;
@@ -113,7 +113,7 @@ class CallMethod implements Comparable<CallMethod>  {
                this.htmlAside = b.htmlAside;
                this.htmlFooter = b.htmlFooter;
                this.htmlStyle = b.htmlStyle;
-               this.htmlStyleImport = b.htmlStyleImport;
+               this.htmlStylesheet = b.htmlStylesheet;
                this.htmlScript = b.htmlScript;
                this.htmlNoWrap = b.htmlNoWrap;
                this.htmlTemplate = b.htmlTemplate;
@@ -123,7 +123,7 @@ class CallMethod implements Comparable<CallMethod>  {
 
        private static class Builder  {
                private String httpMethod, defaultCharset, description, tags, 
summary, externalDocs, htmlTitle, htmlDescription,
-                       htmlBranding, htmlLinks, htmlNav, htmlAside, 
htmlFooter, htmlStyle, htmlStyleImport, htmlScript, htmlHeader, 
htmlNoResultsMessage;
+                       htmlBranding, htmlLinks, htmlNav, htmlAside, 
htmlFooter, htmlStyle, htmlStylesheet, htmlScript, htmlHeader, 
htmlNoResultsMessage;
                private boolean htmlNoWrap;
                private HtmlDocTemplate htmlTemplate;
                private UrlPathPattern pathPattern;
@@ -190,7 +190,7 @@ class CallMethod implements Comparable<CallMethod>  {
                                htmlAside = hd.aside().isEmpty() ? 
context.getHtmlAside() : hd.aside();
                                htmlFooter = hd.footer().isEmpty() ? 
context.getHtmlFooter() : hd.footer();
                                htmlStyle = hd.style().isEmpty() ? 
context.getHtmlStyle() : hd.style();
-                               htmlStyleImport = hd.styleImport().isEmpty() ? 
context.getHtmlStyleImport() : hd.styleImport();
+                               htmlStylesheet = hd.stylesheet().isEmpty() ? 
context.getHtmlStylesheet() : hd.stylesheet();
                                htmlScript = hd.script().isEmpty() ? 
context.getHtmlScript() : hd.script();
                                htmlNoWrap = hd.nowrap() ? hd.nowrap() : 
context.getHtmlNoWrap();
                                htmlNoResultsMessage = 
hd.noResultsMessage().isEmpty() ? context.getHtmlNoResultsMessage() : 
hd.header();
@@ -969,8 +969,13 @@ class CallMethod implements Comparable<CallMethod>  {
                                                }
                                                return l;
                                        }
-                                       if (k.equals(HTMLDOC_styleImport))
-                                               return htmlStyleImport == null 
? null : req.resolveVars(htmlStyleImport);
+                                       if (k.equals(HTMLDOC_stylesheet)) {
+                                               String s = req.getStylesheet();
+                                               // Exclude absolute URIs to 
stylesheets for security reasons.
+                                               if (s == null || 
isAbsoluteUri(s))
+                                                       s = htmlStylesheet;
+                                               return s == null ? null : 
req.resolveVars(s);
+                                       }
                                        if (k.equals(HTMLDOC_template))
                                                return htmlTemplate;
                                        if (k.equals(HTMLDOC_nowrap))

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
index 3c43a8a..691136b 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
@@ -113,7 +113,7 @@ public class RestConfig implements ServletConfig {
        List<Object> staticFiles;
        RestContext parentContext;
        String path, htmlTitle, htmlDescription, htmlBranding, htmlLinks, 
htmlHeader, htmlNav, htmlAside, htmlFooter,
-               htmlStyle, htmlStyleImport, htmlScript, htmlNoResultsMessage;
+               htmlStyle, htmlStylesheet, htmlScript, htmlNoResultsMessage;
        String clientVersionHeader = "X-Client-Version";
 
        Object resourceResolver = RestResourceResolver.class;
@@ -241,8 +241,8 @@ public class RestConfig implements ServletConfig {
                                        setHtmlFooter(hd.footer());
                                if (! hd.style().isEmpty())
                                        setHtmlStyle(hd.style());
-                               if (! hd.styleImport().isEmpty())
-                                       setHtmlStyleImport(hd.styleImport());
+                               if (! hd.stylesheet().isEmpty())
+                                       setHtmlStylesheet(hd.stylesheet());
                                if (! hd.noResultsMessage().isEmpty())
                                        
setHtmlNoResultsMessage(hd.noResultsMessage());
                                if (hd.nowrap())
@@ -1399,13 +1399,13 @@ public class RestConfig implements ServletConfig {
         * by {@link UriResolver}.
         *
         * <p>
-        * This is the programmatic equivalent to the {@link 
HtmlDoc#styleImport() @HtmlDoc.styleImport()} annotation.
+        * This is the programmatic equivalent to the {@link 
HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.
         *
         * @param value The CSS URL in the HTML CSS style section.
         * @return This object (for method chaining).
         */
-       public RestConfig setHtmlStyleImport(String value) {
-               this.htmlStyleImport = value;
+       public RestConfig setHtmlStylesheet(String value) {
+               this.htmlStylesheet = value;
                return this;
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
index cd41c80..10bbc6a 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -358,7 +358,7 @@ public final class RestContext extends Context {
                htmlNav,
                htmlAside,
                htmlStyle,
-               htmlStyleImport,
+               htmlStylesheet,
                htmlScript,
                htmlFooter,
                htmlNoResultsMessage;
@@ -473,7 +473,7 @@ public final class RestContext extends Context {
                        this.htmlNav = b.htmlNav;
                        this.htmlAside = b.htmlAside;
                        this.htmlStyle = b.htmlStyle;
-                       this.htmlStyleImport = b.htmlStyleImport;
+                       this.htmlStylesheet = b.htmlStylesheet;
                        this.htmlScript = b.htmlScript;
                        this.htmlFooter = b.htmlFooter;
                        this.htmlNoWrap = b.htmlNoWrap;
@@ -653,7 +653,7 @@ public final class RestContext extends Context {
                UrlEncodingParser urlEncodingParser;
                EncoderGroup encoders;
                String clientVersionHeader = "", defaultCharset, paramFormat, 
htmlTitle, htmlDescription, htmlBranding,
-                       htmlHeader, htmlLinks, htmlNav, htmlAside, htmlStyle, 
htmlStyleImport, htmlScript, htmlFooter, htmlNoResultsMessage;
+                       htmlHeader, htmlLinks, htmlNav, htmlAside, htmlStyle, 
htmlStylesheet, htmlScript, htmlFooter, htmlNoResultsMessage;
                boolean htmlNoWrap;
                HtmlDocTemplate htmlTemplate;
 
@@ -794,7 +794,7 @@ public final class RestContext extends Context {
                        htmlNav = sc.htmlNav;
                        htmlAside = sc.htmlAside;
                        htmlStyle = sc.htmlStyle;
-                       htmlStyleImport = sc.htmlStyleImport;
+                       htmlStylesheet = sc.htmlStylesheet;
                        htmlScript = sc.htmlScript;
                        htmlFooter = sc.htmlFooter;
                        htmlNoWrap = sc.htmlNoWrap;
@@ -1100,12 +1100,12 @@ public final class RestContext extends Context {
         * The HTML page stylesheet URL.
         *
         * <p>
-        * Defined by the {@link HtmlDoc#styleImport()} annotation or {@link 
RestConfig#setHtmlStyleImport(String)} method.
+        * Defined by the {@link HtmlDoc#stylesheet()} annotation or {@link 
RestConfig#setHtmlStylesheet(String)} method.
         *
         * @return The HTML page CSS URL.
         */
-       public String getHtmlStyleImport() {
-               return htmlStyleImport;
+       public String getHtmlStylesheet() {
+               return htmlStylesheet;
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
index 161c578..cb58d86 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -69,7 +69,7 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
 
        private final RestContext context;
 
-       private final String method;
+       private final String method, stylesheet;
        private RequestBody body;
        private Method javaMethod;
        private ObjectMap properties;
@@ -120,6 +120,8 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
 
                        method = _method;
 
+                       stylesheet = getQuery().getString("stylesheet");
+
                        headers = new RequestHeaders();
                        for (Enumeration<String> e = getHeaderNames(); 
e.hasMoreElements();) {
                                String name = e.nextElement();
@@ -597,6 +599,15 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
        
//--------------------------------------------------------------------------------
 
        /**
+        * Returns the value of the <jk>"stylesheet"</js> parameter.
+        *
+        * @return The value of the <jk>"stylesheet"</js> parameter, or 
<jk>null</jk> if it wasn't specified.
+        */
+       protected String getStylesheet() {
+               return stylesheet;
+       }
+
+       /**
         * Returns the serializers associated with this request.
         *
         * @return The serializers associated with this request.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
index 9aa6672..f52f2c1 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -802,7 +802,7 @@ public final class RestResponse extends 
HttpServletResponseWrapper {
         * by {@link UriResolver}.
         *
         * <p>
-        * This is the programmatic equivalent to the {@link 
HtmlDoc#styleImport() @HtmlDoc.styleImport()} annotation.
+        * This is the programmatic equivalent to the {@link 
HtmlDoc#stylesheet() @HtmlDoc.stylesheet()} annotation.
         *
         * @param value
         *      The CSS URL in the HTML CSS style section.
@@ -815,8 +815,8 @@ public final class RestResponse extends 
HttpServletResponseWrapper {
         *      </ul>
         * @return This object (for method chaining).
         */
-       public RestResponse setHtmlStyleImport(Object value) {
-               properties.put(HtmlDocSerializerContext.HTMLDOC_styleImport, 
value);
+       public RestResponse setHtmlStylesheet(Object value) {
+               properties.put(HtmlDocSerializerContext.HTMLDOC_stylesheet, 
value);
                return this;
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
index 32f2b18..0cbb5aa 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServletDefault.java
@@ -148,7 +148,7 @@ import org.apache.juneau.xml.*;
  * <h6 class='topic'>Other Notes</h6>
  * <ul class='spaced-list'>
  *     <li>
- *             Provides a default HTML stylesheet by setting {@link 
HtmlDoc#styleImport() @HtmlDoc.styleImport()}
+ *             Provides a default HTML stylesheet by setting {@link 
HtmlDoc#stylesheet() @HtmlDoc.stylesheet()}
  *             to <js>"styles/juneau.css"</js>.
  *     <li>
  *             Provides a default favicon by setting {@link 
RestResource#favicon() @RestResource.favicon()} to
@@ -191,12 +191,12 @@ import org.apache.juneau.xml.*;
        },
        htmldoc=@HtmlDoc(
                branding="<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>",
-               styleImport="servlet:/styles/devops.css"
+               stylesheet="servlet:/styles/devops.css"
        ),
-       
+
        // The location on the classpath or file system of the fav-icon.
        favicon="htdocs/juneau.png",
-       
+
        // These are static files that are served up by the servlet under the 
specified sub-paths.
        staticFiles="{htdocs:'htdocs',styles:'styles'}"
 )

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
index fe1a5de..d43fac8 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HtmlDoc.java
@@ -393,7 +393,7 @@ public @interface HtmlDoc {
         * <p class='bcode'>
         *      <ja>@RestResource</ja>(
         *              htmldoc=<ja>@HtmlDoc</ja>(
-        *                      
cssUrl=<js>"http://someOtherHost/stealTheir.css";</js>
+        *                      
stylesheet=<js>"http://someOtherHost/stealTheir.css";</js>
         *              )
         *      )
         * </p>
@@ -404,9 +404,9 @@ public @interface HtmlDoc {
         *
         * <p>
         * The programmatic equivalent to this annotation are the
-        * {@link RestConfig#setHtmlStyleImport(String)}/{@link 
RestResponse#setHtmlStyleImport(Object)} methods.
+        * {@link RestConfig#setHtmlStylesheet(String)}/{@link 
RestResponse#setHtmlStylesheet(Object)} methods.
         */
-       String styleImport() default "";
+       String stylesheet() default "";
 
        /**
         * Sets the HTML script section contents.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
index 2f9e420..327d6d1 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/jena/RestServletJenaDefault.java
@@ -246,7 +246,7 @@ import org.apache.juneau.xml.*;
        },
        htmldoc=@HtmlDoc(
                branding="<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>",
-               styleImport="servlet:/styles/devops.css"
+               stylesheet="servlet:/styles/devops.css"
        ),
        favicon="htdocs/juneau.png",
        staticFiles="{htdocs:'htdocs',styles:'styles'}"

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/package.html 
b/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
index c2a7328..65e611a 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/package.html
@@ -2718,7 +2718,7 @@
        <ja>@RestResource</ja>(
                <jc>// Get stylesheet from myconfig.cfg, but default to 
devops.css if it's not specified</jc>
                htmldoc=<ja>@HtmlDoc</ja>(
-                       
styleImport=<js>"$C{MyServlet/stylesheet,servlet:/styles/devops.css}"</js>,
+                       
stylesheet=<js>"$C{MyServlet/stylesheet,servlet:/styles/devops.css}"</js>,
                )
                ...
        )
@@ -3439,7 +3439,7 @@
                        links=<js>"{up:'request:/..', 
options:'servlet:/?method=OPTIONS', 
source:'$C{Source/gitHub}/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java'}"</js>
                
                        <jc>// Our stylesheet for the HTML rendition.</jc>
-                       styleImport=<js>"servlet:/styles/devops.css"</js>,
+                       stylesheet=<js>"servlet:/styles/devops.css"</js>,
                ),
 
                <jc>// Properties that get applied to all serializers and 
parsers.</jc>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
new file mode 100644
index 0000000..92af31f
--- /dev/null
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/widget/StyleMenuItem.java
@@ -0,0 +1,76 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.rest.widget;
+
+import org.apache.juneau.*;
+import org.apache.juneau.rest.*;
+
+/**
+ * Widget that returns back a list of hyperlinks for rendering the contents of 
a page in the various default styles.
+ *
+ * <p>
+ * The variable it resolves is <js>"$W{styleMenuItem}"</js>.
+ *
+ * <p>
+ * An example of this widget can be found in the <code>PetStoreResource</code> 
in the examples that provides
+ * a drop-down menu item for rendering all other supported content types in 
plain text:
+ * <p class='bcode'>
+ *     <ja>@RestMethod</ja>(
+ *             name=<js>"GET"</js>,
+ *             path=<js>"/"</js>,
+ *             widgets={
+ *                     StyleMenuItem.<jk>class</jk>,
+ *             },
+ *             htmldoc=<ja>@HtmlDoc</ja>(
+ *                     
links=<js>"{up:'...',options:'...',query:'...',contentTypes:'...',style='$W{styleMenuItem}',source:'...'}"</js>
+ *             )
+ *     )
+ *     <jk>public</jk> Collection&lt;Pet&gt; getPets() {
+ * </p>
+ */
+public class StyleMenuItem extends MenuItemWidget {
+
+       private static final String[] BUILT_IN_STYLES = {"devops", "light"};
+
+       /**
+        * Returns <js>"styleMenuItem"</js>.
+        */
+       @Override /* Widget */
+       public String getName() {
+               return "styleMenuItem";
+       }
+
+       /**
+        * Looks at the supported media types from the request and constructs a 
list of hyperlinks to render the data
+        * as plain-text.
+        */
+       @Override /* Widget */
+       public String getHtml(RestRequest req) throws Exception {
+               UriResolver r = req.getUriResolver();
+               StringBuilder sb = new StringBuilder();
+               sb.append(""
+                       + "<div class='menu-item'>"
+                       + "\n\t<a class='link' 
onclick='menuClick(this)'>styles</a>"
+                       + "\n\t<div class='popup-content'>"
+               );
+               for (String s : BUILT_IN_STYLES) {
+                       sb.append("\n\t\t<a class='link' 
href='").append(r.resolve("request:/?stylesheet=styles/"+s+".css"))
+                       .append("'>").append(s).append("</a><br>");
+               }
+               sb.append(""
+                       + "\n\t</div>"
+                       + "\n</div>"
+               );
+               return sb.toString();
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f0db7c99/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css 
b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css
new file mode 100644
index 0000000..f261cf7
--- /dev/null
+++ b/juneau-rest/src/main/resources/org/apache/juneau/rest/styles/light.css
@@ -0,0 +1,211 @@
+/***************************************************************************************************************************
+ * 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.  
                                            *
+ 
***************************************************************************************************************************/
+ 
+/**********************************************************************************************************************/
+/**  Sections                                                                  
                                      **/
+/**********************************************************************************************************************/
+html {
+}
+body {
+       background-color: white;
+       margin: 0px;
+       font-size: 11pt;
+       font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica 
Neue",Helvetica,Arial,"Lucida Grande",sans-serif;
+       color: #2c4557;
+       height: 100%;   
+}
+header {
+       background-color: #e8ebef;
+       font-size: 14pt;
+       height: 50px;
+       padding: 10px 20px;
+       box-shadow: 5px 5px 2px #999999;
+       text-shadow: rgba(0,0,0,.2) 2px 4px 5px, rgba(125,32,191,.4) 0 -4px 
30px;
+       white-space: nowrap;
+}
+header * {
+       color: #af2222;;
+       font-weight: lighter;
+}
+nav {
+    margin: 10px;
+    padding: 5px;
+    box-shadow: 5px 5px 2px #999999;
+    color: #2c4557;
+    background-color: #eef3f7;
+    font-size: 1.0em;
+    font-weight: lighter;
+}
+section {
+       display: table;
+       width: 100%;
+}
+article {
+       display: table-cell;
+}
+aside {
+       display: table-cell;
+       vertical-align: top;
+       padding: 20px 20px;
+}
+footer { 
+       padding: 10px;
+       width: 100%;
+       bottom: 0;
+       position: fixed;
+       background-color: #e8ebef;
+}
+
+/**********************************************************************************************************************/
+/**  Page elements                                                             
                                      **/
+/**********************************************************************************************************************/
+
+/* Hyperlinks */
+.link {
+       font-size: 10pt;
+       color: #2c4557;
+       text-decoration: none;
+       margin: 0px 10px;
+       text-transform: uppercase;
+       cursor: pointer;
+}
+.link:active, .link:hover {
+       text-decoration: none;
+       color: #94a3ab;
+}
+
+/* Title */
+h3.title {
+}
+h3.title, h3.title * {
+       margin: 0px;
+       padding: 0px;
+}
+
+/* Description */
+h5.description {
+}
+h5.description, h5.description * {
+       margin: 0px;
+       padding: 0px;
+}
+
+/************************************************************************************/
+/**  Pop-ups                                                                   
    **/
+/************************************************************************************/
+
+.popup-content {
+       display: none;
+       position: absolute;
+       background-color: #eef3f7;
+       white-space: nowrap;
+       padding: 5px;
+       box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
+       z-index: 1;
+       margin-top: 10px;
+       border-radius: 4px;
+}
+
+.popup-content * {
+       color: black;
+       font-size: 10pt;
+}
+
+.popup-content a:hover {
+       color: #94A3AB;
+}
+
+
+.popup-show {display:block;}
+
+
+/************************************************************************************/
+/**  Data section                                                              
    **/
+/************************************************************************************/
+div.outerdata {
+       width: 100%;
+       height: 100%;
+}
+
+div.data {
+       padding:10px;
+       border-radius: 4px;
+       margin: 15px 30px;
+       display: inline-block;
+       overflow-x: auto;
+       color:#26343F;
+}
+div.data * {
+       font-size: 9pt;
+       color: #26343F;
+}
+div.data td {
+       vertical-align: top;
+       border-bottom:1px solid #d9dcde;
+       border-right:1px solid #d9dcde;
+       padding:0.2em 0.5em;
+}
+
+
+/************************************************************************************/
+/**  Other                                                                     
    **/
+/************************************************************************************/
+
+table {
+       border: none;
+}
+
+div.data a {
+       color: #416e8e;
+       text-decoration: none;
+}
+
+div.data a:hover {
+       text-decoration: underline;
+}
+
+div.data th, .header {
+       padding: 4px 8px;
+       font-weight: bold;
+       text-align:center;
+       background-color: #eef3f7;
+       box-shadow: 1px 1px 2px #999999;
+}
+
+div.data ul {
+       margin:0px;
+       padding-left:20px;
+}
+
+div.data textarea, pre { 
+       -moz-tab-size:3; 
+       -o-tab-size:3; 
+       -webkit-tab-size:3; 
+       tab-size:3; 
+}
+
+.table {
+       display:table;
+}
+.row {display:table-row;}
+.cell {display:table-cell;}
+.monospace {font-family:monospace;}
+
+iframe.output {
+       background-color: #F6F7F9;
+    border: 1px solid gray;
+    padding: 0px;
+    overflow: hidden;
+    width:100%;
+       min-height:400px;
+}
\ No newline at end of file

Reply via email to