You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/11/08 06:30:37 UTC

[08/15] isis-site git commit: ISIS-1766: updates docs for menubars

http://git-wip-us.apache.org/repos/asf/isis-site/blob/20d819b0/content/guides/rgsvc/rgsvc.html
----------------------------------------------------------------------
diff --git a/content/guides/rgsvc/rgsvc.html b/content/guides/rgsvc/rgsvc.html
index dfcdbc8..4da484e 100644
--- a/content/guides/rgsvc/rgsvc.html
+++ b/content/guides/rgsvc/rgsvc.html
@@ -1855,23 +1855,10 @@ table.CodeRay td.code>pre{padding:0}
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>MenuBarsLoaderService</code> is used by the default implementation of <a href="#_rgsvc_presentation-layer-spi_MenuBarsService">MenuBarsService</a> to return a <code>MenuBars</code> instance read from the classpath.</p> 
-         </div> 
-         <div class="admonitionblock note"> 
-          <table> 
-           <tbody>
-            <tr> 
-             <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
-             <td class="content"> 
-              <div class="paragraph"> 
-               <p>TODO: need to flesh this out…​</p> 
-              </div> </td> 
-            </tr> 
-           </tbody>
-          </table> 
+          <p>The <code>MenuBarsLoaderService</code> is used by the default implementation of <a href="#_rgsvc_presentation-layer-spi_MenuBarsService">MenuBarsService</a> to return a a <a href="../rgcms/rgcms.html#_rgcms_classes_menubars"><code>MenuBars</code></a> instance deserialized from the <code>menubars.layout.xml</code> file read from the classpath.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_10">3.10.1. SPI</h4> 
+          <h4 id="_spi_and_implementation">3.10.1. SPI and Implementation</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
@@ -1897,11 +1884,14 @@ table.CodeRay td.code>pre{padding:0}
             </tbody>
            </table> 
           </div> 
-         </div> 
-         <div class="sect3"> 
-          <h4 id="_implementation_9">3.10.2. Implementation</h4> 
           <div class="paragraph"> 
-           <p>The framework provides a default implementation of this service, namely <code>o.a.i.core.runtime.services.menu.MenuBarsLayoutServiceDefault</code>. This searches for a file resource <code>menubars.layout.xml</code> in the same package as the <code>AppManifest</code> used to bootstrap the application. It supports reloading only in prototype mode.</p> 
+           <p>The framework provides a default implementation of this service, namely <code>o.a.i.core.runtime.services.menu.MenuBarsLayoutServiceDefault</code>.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>This searches for a file resource <code>menubars.layout.xml</code>, expected to reside in the same package as the <code>AppManifest</code> used to bootstrap the application.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>It supports reloading only in prototype mode.</p> 
           </div> 
          </div> 
         </div> 
@@ -1918,30 +1908,22 @@ table.CodeRay td.code>pre{padding:0}
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>MenuBarsService</code> is responsible for returning a <code>MenuBars</code> instance, a data structure representing the arrangement of domain service actions across multiple menu bars, menus and sections. This is used by the Wicket viewer to build up the menu, and is also served as the "menuBars" resource by the <a href="../ugvro/ugvro.html">Restful Objects</a> viewer.</p> 
-         </div> 
-         <div class="admonitionblock note"> 
-          <table> 
-           <tbody>
-            <tr> 
-             <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
-             <td class="content"> 
-              <div class="paragraph"> 
-               <p>TODO: need to flesh this out…​</p> 
-              </div> </td> 
-            </tr> 
-           </tbody>
-          </table> 
+          <p>The <code>MenuBarsService</code> is responsible for returning a <a href="../rgcms/rgcms.html#_rgcms_classes_menubars"><code>MenuBars</code></a> instance, a data structure representing the arrangement of domain service actions across multiple menu bars, menus and sections. This is used by the Wicket viewer to build up the menu, and is also served as the "menuBars" resource by the <a href="../ugvro/ugvro.html">Restful Objects</a> viewer.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_11">3.11.1. SPI</h4> 
+          <h4 id="_spi_and_implementation_2">3.11.1. SPI and Implementation</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
           <div class="listingblock"> 
            <div class="content"> 
             <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">interface</span> <span class="class">MenuBarsService</span> {
-    MenuBars menuBars();                    <i class="conum" data-value="1"></i><b>(1)</b>
+    <span class="type">enum</span> Strategy {                         <i class="conum" data-value="1"></i><b>(1)</b>
+        DEFAULT,
+        FALLBACK
+    }
+    MenuBars menuBars();                    <i class="conum" data-value="2"></i><b>(2)</b>
+    MenuBars menuBars(Strategy strategy);   <i class="conum" data-value="3"></i><b>(3)</b>
 }</code></pre> 
            </div> 
           </div> 
@@ -1950,29 +1932,21 @@ table.CodeRay td.code>pre{padding:0}
             <tbody>
              <tr> 
               <td><i class="conum" data-value="1"></i><b>1</b></td> 
-              <td>An instance of <code>MenuBars</code>.</td> 
+              <td>Select whether to return the "default" <code>MenuBars</code> instance - which may be obtained from anywhere, eg read from the classpath, or to "fallback"" and derive from the metamodel facet/annotations.</td> 
              </tr> 
-            </tbody>
-           </table> 
-          </div> 
-          <div class="admonitionblock note"> 
-           <table> 
-            <tbody>
              <tr> 
-              <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
-              <td class="content"> 
-               <div class="paragraph"> 
-                <p>TODO: need to document <code>MenuBars</code> in the rgcms.adoc guide.</p> 
-               </div> </td> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>Convenience API to return the default <code>MenuBars</code> instance</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>Returns an instance of <code>MenuBars</code> according the specified strategy.</td> 
              </tr> 
             </tbody>
            </table> 
           </div> 
-         </div> 
-         <div class="sect3"> 
-          <h4 id="_implementation_10">3.11.2. Implementation</h4> 
           <div class="paragraph"> 
-           <p>The framework provides a default implementation of this service, namely <code>o.a.i.core.runtime.services.menu.MenuBarsServiceDefault</code>. This uses the <a href="#_rgsvc_presentation-layer-spi_MenuBarsLoaderService">MenuBarsLoaderService</a></p> 
+           <p>The framework provides a default implementation of this service, namely <code>o.a.i.core.runtime.services.menu.MenuBarsServiceDefault</code>. This uses the <a href="#_rgsvc_presentation-layer-spi_MenuBarsLoaderService">MenuBarsLoaderService</a> to load a serialized form of <code>MenuBars</code> instance, called <code>menubars.layout.xml</code>, from the classpath.</p> 
           </div> 
          </div> 
         </div> 
@@ -2023,7 +1997,7 @@ table.CodeRay td.code>pre{padding:0}
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_12">3.12.1. SPI</h4> 
+          <h4 id="_spi_10">3.12.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
@@ -2053,7 +2027,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_11">3.12.2. Implementation</h4> 
+          <h4 id="_implementation_9">3.12.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The framework provides a default implementation - <code>RoutingServiceDefault</code> - which will always return the original object provided, or the home page if a <code>null</code> or <code>void</code> was provided. It uses the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_HomePageProviderService"><code>HomePageProviderService</code></a>.</p> 
           </div> 
@@ -2090,7 +2064,7 @@ table.CodeRay td.code>pre{padding:0}
           <p>The <code>SessionLoggingService</code> defines an SPI to keep track of (typically: to log) the current sessions that are using the application.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_13">3.13.1. SPI</h4> 
+          <h4 id="_spi_11">3.13.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
@@ -2146,7 +2120,7 @@ table.CodeRay td.code>pre{padding:0}
           <p>The <code>TableColumnOrderService</code> provides the ability to reorder (or suppress) columns in both parented- and standalone tables.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_14">3.14.1. SPI</h4> 
+          <h4 id="_spi_12">3.14.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
@@ -2183,7 +2157,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_12">3.14.2. Implementation</h4> 
+          <h4 id="_implementation_10">3.14.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The framework provides a fallback implementation of this service, namely <code>TableColumnOrderService.Default</code>.</p> 
           </div> 
@@ -2224,7 +2198,7 @@ table.CodeRay td.code>pre{padding:0}
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_15">3.15.1. SPI</h4> 
+          <h4 id="_spi_13">3.15.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
@@ -2270,7 +2244,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_13">3.15.2. Implementation</h4> 
+          <h4 id="_implementation_11">3.15.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The Apache Isis framework provides a default implementation (<code>TranslationServicePo</code>) that uses the GNU <code>.pot</code> and <code>.po</code> files for translations. It relies on the <code>LocaleProvider</code> service (to return the <code>Locale</code> of the current user) and also the <code>TranslationsResolver</code> service (to read existing translations).</p> 
           </div> 
@@ -2338,7 +2312,7 @@ table.CodeRay td.code>pre{padding:0}
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_16">3.16.1. SPI</h4> 
+          <h4 id="_spi_14">3.16.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
@@ -2352,7 +2326,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_14">3.16.2. Implementation</h4> 
+          <h4 id="_implementation_12">3.16.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>Isis' <a href="../ugvw/ugvw.html">Wicket viewer</a> provides an implementation of this service (<code>TranslationsResolverWicket</code>) which leverages Apache Wicket APIs. This searches for translation files in the standard <code>WEB-INF/</code> directory.</p> 
           </div> 
@@ -2417,7 +2391,7 @@ table.CodeRay td.code>pre{padding:0}
           <p>The framework provides a default implementation of this service, <code>UrlEncodingServiceUsingBaseEncoding</code> (also in the applib) that uses <code>base-64</code> encoding to <code>UTF-8</code> charset.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_17">3.17.1. SPI</h4> 
+          <h4 id="_spi_15">3.17.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by the service is:</p> 
           </div> 
@@ -2447,7 +2421,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_15">3.17.2. Implementation</h4> 
+          <h4 id="_implementation_13">3.17.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The framework provides a default implementation (<code>UrlEncodingServiceUsingBaseEncoding</code>) that simply converts the string using base-64 encoding and UTF-8 character set. As already noted, be aware that the maximum length of a URL should not exceed 2083 characters. For large view models, there’s the possibility that this limit could be exceeded; in such cases register an alternative implementation of this service.</p> 
           </div> 
@@ -2475,7 +2449,7 @@ table.CodeRay td.code>pre{padding:0}
           <p>Another use case is to allow the user to switch context in some fashion or other. This might be to emulate a sort of "sudo"-like function, or perhaps to focus on some particular set of data.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_18">3.18.1. SPI</h4> 
+          <h4 id="_spi_16">3.18.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by the service is:</p> 
           </div> 
@@ -2505,7 +2479,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_16">3.18.2. Implementation</h4> 
+          <h4 id="_implementation_14">3.18.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>There is no default implementation of this service provided by the core Apache Isis framework.</p> 
           </div> 
@@ -4000,7 +3974,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_17">4.6.2. Implementation</h4> 
+          <h4 id="_implementation_15">4.6.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service, <code>o.a.i.core.runtime.services.message.MessageServiceDefault</code>.</p> 
           </div> 
@@ -4063,7 +4037,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_18">4.7.2. Implementation</h4> 
+          <h4 id="_implementation_16">4.7.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.xactn.SessionManagementServiceDefault</code>).</p> 
           </div> 
@@ -4160,7 +4134,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_19">4.8.3. Implementation</h4> 
+          <h4 id="_implementation_17">4.8.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.metamodel.services.title.TitleServiceDefault</code>).</p> 
           </div> 
@@ -4346,7 +4320,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_20">4.9.2. Implementation</h4> 
+          <h4 id="_implementation_18">4.9.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service, <code>o.a.i.core.metamodel.services.xactn.TransactionServiceDefault</code>.</p> 
           </div> 
@@ -4721,7 +4695,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           <p>The persisting of commands is only half the story; there needs to be a separate process to read the commands and execute them. The abstract <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_BackgroundService_BackgroundCommandExecution"><code>BackgroundCommandExecution</code></a> provides a mechanism to execute such commands. This can be considered an API, albeit "internal" because the implementation relies on internals of the framework.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_19">5.1.1. SPI</h4> 
+          <h4 id="_spi_17">5.1.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI of the <code>BackgroundCommandService</code> is:</p> 
           </div> 
@@ -4801,7 +4775,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_21">5.1.3. Implementation</h4> 
+          <h4 id="_implementation_19">5.1.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s command module provides an implementation (<code>org.isisaddons.module.command.dom.BackgroundCommandServiceJdo</code>) that persists <code>Command</code>s using the JDO/DataNucleus object store. It further provides a number of supporting services:</p> 
           </div> 
@@ -4916,7 +4890,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_20">5.2.2. SPI</h4> 
+          <h4 id="_spi_18">5.2.2. SPI</h4> 
           <div class="paragraph"> 
            <p>The <code>CommandService</code> service defines the following very simple API:</p> 
           </div> 
@@ -4955,7 +4929,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_22">5.2.3. Implementation</h4> 
+          <h4 id="_implementation_20">5.2.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s command module provides an implementation (<code>org.isisaddons.module.command.dom.CommandServiceJdo</code>) that persists <code>Command</code>s using the JDO/DataNucleus object store. It further provides a number of supporting services:</p> 
           </div> 
@@ -5486,7 +5460,7 @@ org.quartz.plugin.jobInitializer.failOnFileNotFound = true</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_23">6.2.2. Implementation</h4> 
+          <h4 id="_implementation_21">6.2.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.config.ConfigurationServiceDefault</code>).</p> 
           </div> 
@@ -6159,7 +6133,7 @@ container.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_24">6.3.2. Implementation</h4> 
+          <h4 id="_implementation_22">6.3.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.metamodel.services.container.DomainObjectContainerDefault</code>).</p> 
           </div> 
@@ -6772,7 +6746,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_25">6.5.3. Implementation</h4> 
+          <h4 id="_implementation_23">6.5.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.metamodel.services.factory.FactoryServiceDefault</code>).</p> 
           </div> 
@@ -7025,7 +6999,7 @@ Scratchpad scratchpad;</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_26">6.7.2. Implementation</h4> 
+          <h4 id="_implementation_24">6.7.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.user.UserServiceDefault</code>).</p> 
           </div> 
@@ -8567,7 +8541,7 @@ Element customerXsd = snapshot.getXsdElement();</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_27">8.3.2. Implementation</h4> 
+          <h4 id="_implementation_25">8.3.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The framework provides a default implementation of this service, <code>o.a.i.c.m.services.metamodel.MetaModelServiceDefault</code>.</p> 
           </div> 
@@ -8678,7 +8652,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_28">8.4.3. Implementation</h4> 
+          <h4 id="_implementation_26">8.4.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.registry.ServiceRegistryDefault</code>).</p> 
           </div> 
@@ -9052,7 +9026,7 @@ repositoryService.persist(cust);</code></pre>
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_21">9.3.1. SPI</h4> 
+          <h4 id="_spi_19">9.3.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by the service is:</p> 
           </div> 
@@ -9085,7 +9059,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_29">9.3.2. Implementation</h4> 
+          <h4 id="_implementation_27">9.3.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The <a href="../ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a> has a simple implementation of this service:</p> 
           </div> 
@@ -9163,7 +9137,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_30">9.4.2. Implementation</h4> 
+          <h4 id="_implementation_28">9.4.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.runtime.services.sudo.SudoServiceDefault</code>).</p> 
           </div> 
@@ -9230,7 +9204,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_22">9.4.4. SPI</h4> 
+          <h4 id="_spi_20">9.4.4. SPI</h4> 
           <div class="paragraph"> 
            <p>The <code>SudoService.Spi</code> service allows implementations of <code>SudoService</code> to notify other services/components that the effective user and roles are different. The default implementation of <a href="../rgsvc/rgsvc.html#_rgsvc_core-domain-api_UserService"><code>UserService</code></a> has been refactored to leverage this SPI.</p> 
           </div> 
@@ -9330,7 +9304,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_31">9.5.2. Implementation</h4> 
+          <h4 id="_implementation_29">9.5.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The framework provides a default implementation of this service: <code>SwitchUserServiceImpl</code> in <code>isis-core-runtime</code></p> 
           </div> 
@@ -10381,7 +10355,7 @@ repositoryService.persist(cust);</code></pre>
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_32">10.5.3. Implementation</h4> 
+          <h4 id="_implementation_30">10.5.3. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core framework provides a default implementation of this service (<code>o.a.i.core.metamodel.services.repository.RepositoryServiceDefault</code>).</p> 
           </div> 
@@ -10578,7 +10552,7 @@ public static final String KEY_DISABLE_AUTOFLUSH = "isis.services.container.disa
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_23">11.1.1. SPI</h4> 
+          <h4 id="_spi_21">11.1.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI for the service is:</p> 
           </div> 
@@ -10735,7 +10709,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_24">11.2.1. SPI</h4> 
+          <h4 id="_spi_22">11.2.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI for the service is:</p> 
           </div> 
@@ -10757,7 +10731,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_33">11.2.2. Implementation</h4> 
+          <h4 id="_implementation_31">11.2.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The most full-featured available implementation is the (non-ASF) <a href="http://platform.incode.org" target="_blank">Incode Platform</a>'s audit module. This creates an audit records for each changed property (ie every time that <code>AuditingService3#audit(…​)</code> is called. The implementation is <code>org.isisaddons.module.audit.dom.AuditingService</code>.</p> 
           </div> 
@@ -10832,7 +10806,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           <p>See <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a> for further discussion.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_25">11.3.1. SPI</h4> 
+          <h4 id="_spi_23">11.3.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by this service is:</p> 
           </div> 
@@ -10869,7 +10843,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_34">11.3.2. Implementation</h4> 
+          <h4 id="_implementation_32">11.3.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The (obsolete) <a href="http://github.com/isisaddons-legacy/isis-module-publishing">Isis addons' publishing</a> module provides an implementation (<code>org.isisaddons.module.publishing.dom.eventserializer.RestfulObjectsSpecEventSerializer</code>) that represents the event payload using the representation defined by the <a href="http://restfulobjects.org">Restful Objects spec</a> of (transient) objects, grafting on the metadata as additional JSON nodes.</p> 
           </div> 
@@ -10940,7 +10914,7 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
           <p>Only actions/properties/domain objects annotated for publishing (using <a href="../rgant/rgant.html#_rgant-Action_publishing"><code>@Action#publishing()</code></a>, <a href="../rgant/rgant.html#_rgant-Property_publishing"><code>@Property#publishing()</code></a> or <a href="../rgant/rgant.html#_rgant-DomainObject_publishing"><code>@DomainObject#publishing()</code></a>) are published.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_26">11.4.1. SPI</h4> 
+          <h4 id="_spi_24">11.4.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by the service is:</p> 
           </div> 
@@ -11129,7 +11103,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_27">11.5.1. SPI</h4> 
+          <h4 id="_spi_25">11.5.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by the service is:</p> 
           </div> 
@@ -11177,7 +11151,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_35">11.5.2. Implementation</h4> 
+          <h4 id="_implementation_33">11.5.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The (obsolete) <a href="http://github.com/isisaddons-legacy/isis-module-publishing">Isis addons' publishing</a> module provides an implementation (<code>org.isisaddons.module.publishing.dom.PublishingService</code>) that persists each event as a <code>PublishedEvent</code> entity. This holds the serialized form of the event metadata and payload as translated into a string by the injected <code>EventSerializer</code>. The module also provides its own implementation of <code>EventSerializer</code>, namely <code>RestfulObjectsSpecEventSerializer</code>, which represents the event payload using the representation defined by the <a href="http://restfulobjects.org">Restful Objects spec</a> of (transient) objects, grafting on the metadata as additional JSON nodes.</p> 
           </div> 
@@ -11376,7 +11350,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </table> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_28">11.6.1. SPI</h4> 
+          <h4 id="_spi_26">11.6.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by the service is:</p> 
           </div> 
@@ -11418,7 +11392,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_36">11.6.2. Implementation</h4> 
+          <h4 id="_implementation_34">11.6.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>The core Apache Isis framework itself defines only an API; there is no default implementation. Rather, the implementation will depend on the security mechanism being used.</p> 
           </div> 
@@ -11562,7 +11536,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           <p>This service is used by the <a href="../rgcms/rgcms.html#_rgcms_classes_super_FixtureScripts"><code>FixtureScripts</code></a> service to automatically locate any <a href="../rgcms/rgcms.html#_rgcms_classes_super_FixtureScript"><code>FixtureScript</code></a> implementations.</p> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_spi_29">12.1.1. SPI</h4> 
+          <h4 id="_spi_27">12.1.1. SPI</h4> 
           <div class="paragraph"> 
            <p>The SPI defined by the service is:</p> 
           </div> 
@@ -11589,7 +11563,7 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_implementation_37">12.1.2. Implementation</h4> 
+          <h4 id="_implementation_35">12.1.2. Implementation</h4> 
           <div class="paragraph"> 
            <p>Isis provides an implementation of this service, namely <code>o.a.i.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections</code>.</p> 
           </div> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/20d819b0/content/guides/ugvro/ugvro.html
----------------------------------------------------------------------
diff --git a/content/guides/ugvro/ugvro.html b/content/guides/ugvro/ugvro.html
index 427c040..a244785 100644
--- a/content/guides/ugvro/ugvro.html
+++ b/content/guides/ugvro/ugvro.html
@@ -692,24 +692,40 @@ table.CodeRay td.code>pre{padding:0}
          </div> 
          <div class="listingblock"> 
           <div class="content"> 
-           <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;mnu:menuBars</span> <span class="attribute-name">xmlns:mnu</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/applib/layout/menus</span><span class="delimiter">"</span></span> <span class="attribute-name">xmlns:lnk</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/applib/layout/links</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
-  <span class="tag">&lt;mnu:primary&gt;</span>
-    <span class="tag">&lt;mnu:menu&gt;</span>
-      <span class="tag">&lt;mnu:named&gt;</span>Hello World Objects<span class="tag">&lt;/mnu:named&gt;</span>
-      <span class="tag">&lt;mnu:section&gt;</span>
-        <span class="tag">&lt;mnu:action</span> <span class="attribute-name">oid</span>=<span class="string"><span class="delimiter">"</span><span class="content">helloworld.HelloWorldObjects:1</span><span class="delimiter">"</span></span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">create</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
-          <span class="tag">&lt;mnu:named&gt;</span>Create<span class="tag">&lt;/mnu:named&gt;</span>
-        <span class="tag">&lt;/mnu:action&gt;</span>
+           <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;mb3:menuBars</span>
+    <span class="attribute-name">xsi:schemaLocation</span>=<span class="string"><span class="delimiter">"</span><span class="content">...</span><span class="delimiter">"</span></span>
+    <span class="attribute-name">xmlns:cpt</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/applib/layout/component</span><span class="delimiter">"</span></span>
+    <span class="attribute-name">xmlns:lnk</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/applib/layout/links</span><span class="delimiter">"</span></span>
+    <span class="attribute-name">xmlns:mb3</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/applib/layout/menubars/bootstrap3</span><span class="delimiter">"</span></span>
+    <span class="attribute-name">xmlns:xsi</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://www.w3.org/2001/XMLSchema-instance</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
+    <span class="tag">&lt;mb3:primary&gt;</span>
+        <span class="tag">&lt;mb3:menu&gt;</span>
+            <span class="tag">&lt;mb3:named&gt;</span>Hello World Objects<span class="tag">&lt;/mb3:named&gt;</span>
+            <span class="tag">&lt;mb3:section&gt;</span>
+                <span class="tag">&lt;mb3:serviceAction</span> <span class="attribute-name">objectType</span>=<span class="string"><span class="delimiter">"</span><span class="content">helloworld.HelloWorldObjects</span><span class="delimiter">"</span></span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">create</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
+                    <span class="tag">&lt;cpt:named&gt;</span>Create<span class="tag">&lt;/cpt:named&gt;</span>
+                <span class="tag">&lt;/mb3:serviceAction&gt;</span>
+                ...
+            <span class="tag">&lt;/mb3:section&gt;</span>
+        <span class="tag">&lt;/mb3:menu&gt;</span>
+        <span class="tag">&lt;mb3:menu</span> <span class="attribute-name">unreferencedActions</span>=<span class="string"><span class="delimiter">"</span><span class="content">true</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
+            <span class="tag">&lt;mb3:named&gt;</span>Other<span class="tag">&lt;/mb3:named&gt;</span>
+        <span class="tag">&lt;/mb3:menu&gt;</span>
         ...
-      <span class="tag">&lt;/mnu:section&gt;</span>
-      ...
-    <span class="tag">&lt;/mnu:menu&gt;</span>
-  <span class="tag">&lt;/mnu:primary&gt;</span>
-  ...
-<span class="tag">&lt;/mnu:menuBars&gt;</span></code></pre> 
+    <span class="tag">&lt;/mb3:primary&gt;</span>
+    <span class="tag">&lt;mb3:secondary&gt;</span>
+        ...
+    <span class="tag">&lt;/mb3:secondary&gt;</span>
+    <span class="tag">&lt;mb3:tertiary&gt;</span>
+        ...
+    <span class="tag">&lt;/mb3:tertiary&gt;</span>
+<span class="tag">&lt;/mb3:menuBars&gt;</span></code></pre> 
           </div> 
          </div> 
          <div class="paragraph"> 
+          <p>Note that exactly one <code>&lt;mb3:menu&gt;</code> must have the <code>unreferencedActions</code> flag set. Any service actions that are not explicitly listed will be added to this menu.</p> 
+         </div> 
+         <div class="paragraph"> 
           <p>The representation returned by home page resource (section 5.2 of the RO spec v1.0) has been extended to provide a link to this resource:</p> 
          </div> 
          <div class="listingblock"> 
@@ -729,23 +745,23 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="paragraph"> 
-          <p>The representation returned by the <code>/menuBars</code> resource (assuming an HTTP header of <code>Accept: applicatoin/xml</code>) is a superset of the <code>menu.layout.xml</code>; each action also includes a <code>link</code> to the corresponding Restful Objects resource:</p> 
+          <p>The representation returned by the <code>/menuBars</code> resource (assuming an HTTP header of <code>Accept: application/xml</code>) is a superset of the <code>menu.layout.xml</code>; each action also includes a <code>link</code> to the corresponding Restful Objects resource:</p> 
          </div> 
          <div class="listingblock"> 
           <div class="content"> 
-           <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;mnu:action</span> <span class="attribute-name">oid</span>=<span class="string"><span class="delimiter">"</span><span class="content">helloworld.HelloWorldObjects:1</span><span class="delimiter">"</span></span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">create</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
-  <span class="tag">&lt;mnu:named&gt;</span>Create<span class="tag">&lt;/mnu:named&gt;</span>
-  <span class="tag">&lt;mnu:link&gt;</span>
-    <span class="tag">&lt;lnk:rel&gt;</span>urn:org.restfulobjects:rels/action<span class="tag">&lt;/lnk:rel&gt;</span>
-    <span class="tag">&lt;lnk:method&gt;</span>GET<span class="tag">&lt;/lnk:method&gt;</span>
-    <span class="tag">&lt;lnk:href&gt;</span>
-      http://localhost:8080/restful/objects/helloworld.HelloWorldObjects/1/actions/create
-    <span class="tag">&lt;/lnk:href&gt;</span>
-    <span class="tag">&lt;lnk:type&gt;</span>
-      application/json;profile="urn:org.restfulobjects:repr-types/object-action"
-    <span class="tag">&lt;/lnk:type&gt;</span>
-  <span class="tag">&lt;/mnu:link&gt;</span>
-<span class="tag">&lt;/mnu:action&gt;</span></code></pre> 
+           <pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;mb3:serviceAction</span> <span class="attribute-name">objectType</span>=<span class="string"><span class="delimiter">"</span><span class="content">helloworld.HelloWorldObjects</span><span class="delimiter">"</span></span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">"</span><span class="content">create</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
+  <span class="tag">&lt;cpt:named&gt;</span>Create<span class="tag">&lt;/cpt:named&gt;</span>
+    <span class="tag">&lt;cpt:link&gt;</span>
+      <span class="tag">&lt;lnk:rel&gt;</span>urn:org.restfulobjects:rels/action<span class="tag">&lt;/lnk:rel&gt;</span>
+        <span class="tag">&lt;lnk:method&gt;</span>GET<span class="tag">&lt;/lnk:method&gt;</span>
+        <span class="tag">&lt;lnk:href&gt;</span>
+          http://localhost:8080/restful/objects/helloworld.HelloWorldObjects/1/actions/create
+        <span class="tag">&lt;/lnk:href&gt;</span>
+        <span class="tag">&lt;lnk:type&gt;</span>
+          application/json;profile="urn:org.restfulobjects:repr-types/object-action"
+        <span class="tag">&lt;/lnk:type&gt;</span>
+  <span class="tag">&lt;/cpt:link&gt;</span>
+<span class="tag">&lt;/mb3:serviceAction&gt;</span></code></pre> 
           </div> 
          </div> 
          <div class="paragraph"> 
@@ -753,17 +769,17 @@ table.CodeRay td.code>pre{padding:0}
          </div> 
          <div class="listingblock"> 
           <div class="content"> 
-           <pre class="CodeRay highlight"><code data-lang="json"><span class="key"><span class="delimiter">"</span><span class="content">action</span><span class="delimiter">"</span></span>: [
+           <pre class="CodeRay highlight"><code data-lang="json"><span class="key"><span class="delimiter">"</span><span class="content">serviceAction</span><span class="delimiter">"</span></span>: [
 {
-  <span class="key"><span class="delimiter">"</span><span class="content">oid</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">helloworld.HelloWorldObjects:1</span><span class="delimiter">"</span></span>,
+  <span class="key"><span class="delimiter">"</span><span class="content">objectType</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">helloworld.HelloWorldObjects</span><span class="delimiter">"</span></span>,
   <span class="key"><span class="delimiter">"</span><span class="content">id</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">create</span><span class="delimiter">"</span></span>,
   <span class="key"><span class="delimiter">"</span><span class="content">named</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">Create</span><span class="delimiter">"</span></span>,
   <span class="key"><span class="delimiter">"</span><span class="content">link</span><span class="delimiter">"</span></span>: {
     <span class="key"><span class="delimiter">"</span><span class="content">rel</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">urn:org.restfulobjects:rels/action</span><span class="delimiter">"</span></span>,
     <span class="key"><span class="delimiter">"</span><span class="content">method</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">GET</span><span class="delimiter">"</span></span>,
     <span class="key"><span class="delimiter">"</span><span class="content">href</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">http://localhost:8080/restful/objects/helloworld.HelloWorldObjects/1/actions/create</span><span class="delimiter">"</span></span>,
-    <span class="key"><span class="delimiter">"</span><span class="content">type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">application/json;profile='urn:org.restfulobjects:repr-types/object-action'</span><span class="delimiter">"</span></span>
-   }
+    <span class="key"><span class="delimiter">"</span><span class="content">type</span><span class="delimiter">"</span></span>: <span class="string"><span class="delimiter">"</span><span class="content">application/json;profile=</span><span class="char">\"</span><span class="content">urn:org.restfulobjects:repr-types/object-action</span><span class="char">\"</span><span class="delimiter">"</span></span>
+  }
 }</code></pre> 
           </div> 
          </div>