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 2018/01/08 23:28:23 UTC

[38/52] [abbrv] [partial] isis-site git commit: republishes, updating content and creates new SNAPSHOT

http://git-wip-us.apache.org/repos/asf/isis-site/blob/9d921a51/content/guides/rgcms/rgcms.html
----------------------------------------------------------------------
diff --git a/content/guides/rgcms/rgcms.html b/content/guides/rgcms/rgcms.html
index da8eebf..0ccd5c0 100644
--- a/content/guides/rgcms/rgcms.html
+++ b/content/guides/rgcms/rgcms.html
@@ -179,6 +179,7 @@ table.CodeRay td.code>pre{padding:0}
         <li><a href="../../guides/ugfun/ugfun.html">Fundamentals</a></li> 
         <li><a href="../../guides/ugvw/ugvw.html">Wicket Viewer</a></li> 
         <li><a href="../../guides/ugvro/ugvro.html">Restful Objects Viewer</a></li> 
+        <li><a href="../../guides/ugodn/ugodn.html">DataNucleus Object Store</a></li> 
         <li><a href="../../guides/ugsec/ugsec.html">Security</a></li> 
         <li><a href="../../guides/ugtst/ugtst.html">Testing</a></li> 
         <li><a href="../../guides/ugbtb/ugbtb.html">Beyond the Basics</a></li> 
@@ -196,25 +197,32 @@ table.CodeRay td.code>pre{padding:0}
        </ul> </li> 
       <li class="dropdown  hidden-sm hidden-md"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Downloads<span class="caret"></span></a> 
        <ul class="dropdown-menu"> 
-        <li><a href="../../downloads.html">Downloads</a></li> 
-        <li><a href="../../release-notes/release-notes.html">Release Notes</a></li> 
-        <li><a href="../../migration-notes/migration-notes.html">Migration Notes</a></li> 
-        <li role="separator" class="divider"></li> 
         <li class="dropdown-header">Maven archetypes</li> 
         <li><a href="../../guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">helloworld</a></li> 
         <li><a href="../../guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">simpleapp</a></li> 
         <li role="separator" class="divider"></li> 
-        <li><a href="https://issues.apache.org/jira/browse/ISIS">ASF JIRA</a></li> 
+        <li><a href="../../downloads.html">Downloads</a></li> 
+        <li><a href="../../release-notes/release-notes.html">Release Notes</a></li> 
+        <li><a href="../../migration-notes/migration-notes.html">Migration Notes</a></li> 
+        <li role="separator" class="divider"></li> 
         <li><a href="https://github.com/apache/isis">Github mirror</a></li> 
        </ul> </li> 
       <li class="dropdown  hidden-sm"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Support<span class="caret"></span></a> 
        <ul class="dropdown-menu"> 
-        <li><a href="../../support.html">Mailing lists</a></li> 
+        <li class="dropdown-header">Guides</li> 
+        <li><a href="../../guides/dg/dg.html">Developers' Guide</a></li> 
+        <li><a href="../../guides/cgcom/cgcom.html">Committers' Guide</a></li> 
+        <li><a href="../../guides/htg.html">Hints-n-Tips Guide</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Mailing Lists</li> 
+        <li><a href="../../support.html">How to subscribe</a></li> 
         <li><a href="https://lists.apache.org/list.html?users@isis.apache.org">Archives (ASF Pony mail)</a></li> 
         <li><a href="http://isis.markmail.org/search/?q=">Archives (Markmail)</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Other Resources</li> 
+        <li><a href="https://issues.apache.org/jira/browse/ISIS">ASF JIRA</a></li> 
         <li><a href="http://stackoverflow.com/questions/tagged/isis">Stack Overflow</a></li> 
-        <li><a href="../../guides/dg/dg.html">How to contribute</a></li> 
-        <li><a href="../../help.html">Other resources</a></li> 
+        <li><a href="../../help.html">Wiki, Fisheye etc.</a></li> 
        </ul> </li> 
       <li class="dropdown hidden-sm hidden-md"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">@ASF<span class="caret"></span></a> 
        <ul class="dropdown-menu"> 
@@ -2520,7 +2528,7 @@ table.CodeRay td.code>pre{padding:0}
               <td class="icon"> <i class="fa icon-warning" title="Warning"></i> </td> 
               <td class="content"> 
                <div class="paragraph"> 
-                <p>(As of <code>1.8.0</code>) there are known limitations with this functionality. Invariants are enforced when an object is initially created and when it is edited, however invariants are currently <em>not</em> enforced if an action is invoked.</p> 
+                <p>There are known limitations with this functionality. Invariants <em>are</em> enforced when an object is initially created and when it is edited, however invariants are currently <em>not</em> enforced if an action is invoked.</p> 
                </div> </td> 
              </tr> 
             </tbody>
@@ -3121,7 +3129,7 @@ table.CodeRay td.code>pre{padding:0}
              <td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td> 
              <td class="content"> 
               <div class="paragraph"> 
-               <p>(As of <code>1.15.0</code>), the framework-provided <code>AppManifestAbstract</code> and <code>AppManifestAbstract.Builder</code> make it easy to write <code>AppManifest</code> that can be used both to bootstrap the application "proper", and to be tweaked for use within integration tests.</p> 
+               <p>The framework-provided <code>AppManifestAbstract2</code> and <code>AppManifestAbstract2.Builder</code> makes it easy to write an <code>AppManifest</code>, defined by a set of <a href="#_rgcms_classes_Module"><code>Module</code></a> implementations. The app manifest can then be used both to bootstrap the application "proper", or for integration tests.</p> 
               </div> </td> 
             </tr> 
            </tbody>
@@ -3331,6 +3339,19 @@ table.CodeRay td.code>pre{padding:0}
          </div> 
          <div class="sect3"> 
           <h4 id="__rgcms_classes_AppManifest-bootstrapping_bootstrapping">3.1.2. Bootstrapping</h4> 
+          <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>The recommendations in this section no longer apply if using the <a href="../rgcms/rgcms.html#__rgcms_classes_AppManifest2-bootstrapping_bootstrapping"><code>AppManifest2</code></a> interface and <code>Module</code>s to bootstrap your application.</p> 
+               </div> </td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
           <div class="paragraph"> 
            <p>One of the primary goals of the <code>AppManifest</code> is to unify the bootstrapping of both integration tests and the webapp. This requires that the integration tests and webapp can both reference the implementation.</p> 
           </div> 
@@ -3383,8 +3404,21 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
           <div class="sect4"> 
            <h5 id="__rgcms_classes_AppManifest-bootstrapping_bootstrapping_AppManifestAbstract">AppManifestAbstract</h5> 
+           <div class="admonitionblock important"> 
+            <table> 
+             <tbody>
+              <tr> 
+               <td class="icon"> <i class="fa icon-important" title="Important"></i> </td> 
+               <td class="content"> 
+                <div class="paragraph"> 
+                 <p>The framework-provided <code>AppManifestAbstract2</code> and <code>AppManifestAbstract2.Builder</code> supercede <code>AppManifestAbstract</code>, making it easy to write an <code>AppManifest</code> defined by a set of <a href="#_rgcms_classes_Module"><code>Module</code></a> implementations.</p> 
+                </div> </td> 
+              </tr> 
+             </tbody>
+            </table> 
+           </div> 
            <div class="paragraph"> 
-            <p>(As of <code>1.15.0</code>), the <code>AppManifestAbstract</code> and its associated builder (<code>AppManifestAbstract.Builder</code>) make it easy to bootstrap the application both as a webapp and also as an integration test.</p> 
+            <p>The <code>AppManifestAbstract</code> and its associated builder (<code>AppManifestAbstract.Builder</code>) make it easy to bootstrap the application both as a webapp and also as an integration test.</p> 
            </div> 
            <div class="paragraph"> 
             <p>Rather than implement <code>AppManifest</code> interface directly, instead your application subclasses from <code>AppManifestAbstract</code>. This takes an instance of a <code>AppManifestAbstract.Builder</code> in its constructor; the builder is what allows for variation between environments.</p> 
@@ -3834,10 +3868,10 @@ table.CodeRay td.code>pre{padding:0}
            </ul>
           </div> 
           <div class="paragraph"> 
-           <p>This abstract class is intended to allow a domain service that can execute <a href="../rgcms/rgcms.html#_rgcms_classes_super_FixtureScript"><code>FixtureScript</code></a>s to be easily written.</p> 
+           <p>This abstract class constitutes the API of a domain service to execute <a href="../rgcms/rgcms.html#_rgcms_classes_super_FixtureScript"><code>FixtureScript</code></a>s.</p> 
           </div> 
           <div class="paragraph"> 
-           <p>However, it has now been deprecated; instead we recommend that the <a href="../rgsvc/rgsvc.html#_rgsvc_testing_FixtureScriptsSpecificationProvider"><code>FixtureScriptsSpecificationProvider</code></a> service is implemented instead. The framework will then automatically use <a href="../rgsvc/rgsvc.html#_rgsvc_testing_FixtureScriptsDefault"><code>FixtureScriptsDefault</code></a> as a fallback implementation of this class.</p> 
+           <p>For more information, see <a href="../rgsvc/rgsvc.html#_rgsvc_testing_FixtureScripts"><code>FixtureScripts</code></a> in the domain services guide.</p> 
           </div> 
           <div class="paragraph"> 
            <p>See the see the <a href="../ugtst/ugtst.html#_ugtst_fixture-scripts">user guide’s testing chapter</a> for further discussion on the use of fixture scripts, in particular <a href="../ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage">fixture scripts' API and usage</a>.</p> 
@@ -4988,7 +5022,7 @@ table.CodeRay td.code>pre{padding:0}
             </div> </li> 
            <li> <p><code>o.a.i.applib.value.Markup</code></p> 
             <div class="paragraph"> 
-             <p>(As of <code>1.15.1</code>), intended for use as a read-only property to display arbitrary HTML.</p> 
+             <p>Intended for use as a read-only property to display arbitrary HTML.</p> 
             </div> </li> 
            <li> <p><code>o.a.i.applib.value.Clob</code></p> 
             <div class="paragraph"> 
@@ -5252,7 +5286,7 @@ table.CodeRay td.code>pre{padding:0}
           </div> 
          </div> 
          <div class="sect3"> 
-          <h4 id="_rgcms_classes_utility_ObjectContracts">3.7.2. <code>ObjectContracts</code></h4>
+          <h4 id="_rgcms_classes_utility_ObjectContracts">3.7.2. <code>ObjectContracts2</code></h4>
           <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
            <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_utility_ObjectContracts.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -5264,7 +5298,7 @@ table.CodeRay td.code>pre{padding:0}
            </ul>
           </div> 
           <div class="paragraph"> 
-           <p>The <code>ObjectContracts</code> test provides a series of methods to make it easy for your domain objects to:</p> 
+           <p>The <code>ObjectContracts2</code> utility class provides a series of methods to make it easy for your domain objects to:</p> 
           </div> 
           <div class="ulist"> 
            <ul> 
@@ -5287,11 +5321,11 @@ table.CodeRay td.code>pre{padding:0}
     <span class="directive">public</span> <span class="predefined-type">String</span> getOwnedBy() { ... }
 
     <span class="directive">public</span> <span class="type">int</span> compareTo(<span class="directive">final</span> ToDoItem other) {
-        <span class="keyword">return</span> ObjectContracts.compare(<span class="local-variable">this</span>, other, <span class="string"><span class="delimiter">"</span><span class="content">complete</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">dueBy</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">description</span><span class="delimiter">"</span></span>);
+        <span class="keyword">return</span> ObjectContracts2.compare(<span class="local-variable">this</span>, other, <span class="string"><span class="delimiter">"</span><span class="content">complete</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">dueBy</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">description</span><span class="delimiter">"</span></span>);
     }
 
     <span class="directive">public</span> <span class="predefined-type">String</span> toString() {
-        <span class="keyword">return</span> ObjectContracts.toString(<span class="local-variable">this</span>, <span class="string"><span class="delimiter">"</span><span class="content">description</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">complete</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">dueBy</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">ownedBy</span><span class="delimiter">"</span></span>);
+        <span class="keyword">return</span> ObjectContracts2.toString(<span class="local-variable">this</span>, <span class="string"><span class="delimiter">"</span><span class="content">description</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">complete</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">dueBy</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">ownedBy</span><span class="delimiter">"</span></span>);
     }
 }</code></pre> 
            </div> 
@@ -5303,7 +5337,7 @@ table.CodeRay td.code>pre{padding:0}
               <td class="icon"> <i class="fa icon-warning" title="Warning"></i> </td> 
               <td class="content"> 
                <div class="paragraph"> 
-                <p>Note that <code>ObjectContracts</code> makes heavy use of Java Reflection. While it’s great to get going quickly in prototyping, we recommend you use your IDE to code generate implementations of these methods for production code.</p> 
+                <p>Note that <code>ObjectContracts2</code> makes heavy use of Java Reflection. While it’s great to get going quickly in prototyping, we recommend you use your IDE to code generate implementations of these methods for production code.</p> 
                </div> 
                <div class="paragraph"> 
                 <p>Moreover (and perhaps even more importantly) <code>ObjectContracts</code> implementation can cause DataNucleus to recursively rehydrate a larger number of associated entities (More detail below).</p> 
@@ -5679,7 +5713,7 @@ table.CodeRay td.code>pre{padding:0}
               <td class="icon"> <i class="fa icon-note" title="Note"></i> </td> 
               <td class="content"> 
                <div class="paragraph"> 
-                <p>Prior to <code>1.13.0</code>, this identifier was the GUID of the Isis transaction in which the object was created (hence the name). As of <code>1.13.0</code>, this identifier actually is for the request/interaction in which the object was created, so is actually now mis-named.</p> 
+                <p>This identifier actually is for the request/interaction in which the object was created, so is actually now mis-named.</p> 
                </div> </td> 
              </tr> 
             </tbody>
@@ -5937,6 +5971,9 @@ table.CodeRay td.code>pre{padding:0}
           <div class="paragraph"> 
            <p>The framework provides a single mixin that contributes to simply <code>java.lang.Object</code>. It provides the ability to download the layout XML for any domain object (in practical terms: entities and view models).</p> 
           </div> 
+          <div class="paragraph"> 
+           <p>These mixin actions are all associated with the "Metadata" fieldset. A number of other <a href="../rgcms/rgcms.html#_rgcms_classes_mixins_Persistable">mixins</a> also contribute properties or actions to the "Metadata" fieldset.</p> 
+          </div> 
           <div class="sect4"> 
            <h5 id="__rgcms_classes_mixins_Object_clearHints"><code>clearHints()</code></h5> 
            <div class="paragraph"> 
@@ -5953,12 +5990,6 @@ table.CodeRay td.code>pre{padding:0}
             </div> 
            </div> 
            <div class="sect5"> 
-            <h6 id="_appearance_in_the_ui">Appearance in the UI</h6> 
-            <div class="paragraph"> 
-             <p>This mixin actions are all associated with the "Metadata" fieldset. If there is no such field set, then the action will be rendered as a top-level action).</p> 
-            </div> 
-           </div> 
-           <div class="sect5"> 
             <h6 id="_related_services">Related Services</h6> 
             <div class="paragraph"> 
              <p>This mixin uses the <a href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_HintStore"><code>HintStore</code></a> service to store and retrieve UI hints for each rendered object, per user.</p> 
@@ -5994,15 +6025,6 @@ table.CodeRay td.code>pre{padding:0}
             <p>See the documentation on <a href="../ugvw/ugvw.html#_ugvw_layout_file-based">layout XML</a> and also the <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_LayoutService"><code>LayoutService</code></a> for more information on these styles</p> 
            </div> 
            <div class="sect5"> 
-            <h6 id="_appearance_in_the_ui_2">Appearance in the UI</h6> 
-            <div class="paragraph"> 
-             <p>This mixin actions are all associated with the "Metadata" fieldset.</p> 
-            </div> 
-            <div class="paragraph"> 
-             <p>A number of other <a href="../rgcms/rgcms.html#_rgcms_classes_mixins_Persistable">mixins</a> also contribute properties and actions to the "Metadata" fieldset.</p> 
-            </div> 
-           </div> 
-           <div class="sect5"> 
             <h6 id="_related_services_2">Related Services</h6> 
             <div class="paragraph"> 
              <p>This mixin calls <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_LayoutService"><code>LayoutService</code></a> to obtain the layout XML.</p> 
@@ -6022,18 +6044,61 @@ table.CodeRay td.code>pre{padding:0}
             </div> 
            </div> 
            <div class="sect5"> 
-            <h6 id="_appearance_in_the_ui_3">Appearance in the UI</h6> 
+            <h6 id="_related_services_3">Related Services</h6> 
             <div class="paragraph"> 
-             <p>This mixin actions are all associated with the "Metadata" fieldset.</p> 
+             <p>This mixin calls <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_MetamodelService"><code>MetaModelService</code></a> and the <a href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridService"><code>GridService</code></a> to invalidate their caches.</p> 
             </div> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__rgcms_classes_mixins_Object_downloadLayoutXml"><code>downloadLayoutXml()</code></h5> 
+           <div class="paragraph"> 
+            <p>The <code>Object_downloadLayoutXml</code> mixin provides an action to download the <a href="../ugvw/ugvw.html#_ugvw_layout_file-based">layout XML</a> for the current domain object. It has the following signature:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="predefined-type">Object</span> downloadLayoutXml(
+    <span class="annotation">@ParameterLayout</span>(named = <span class="string"><span class="delimiter">"</span><span class="content">File name</span><span class="delimiter">"</span></span>)
+    <span class="directive">final</span> <span class="predefined-type">String</span> fileName,
+    <span class="directive">final</span> LayoutService.Style style) {          <i class="conum" data-value="1"></i><b>(1)</b>
+    ...
+}</code></pre> 
+            </div> 
+           </div> 
+           <div class="colist arabic"> 
+            <table> 
+             <tbody>
+              <tr> 
+               <td><i class="conum" data-value="1"></i><b>1</b></td> 
+               <td>either current, complete, normalized or minimal.</td> 
+              </tr> 
+             </tbody>
+            </table> 
+           </div> 
+           <div class="paragraph"> 
+            <p>See the documentation on <a href="../ugvw/ugvw.html#_ugvw_layout_file-based">layout XML</a> and also the <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_LayoutService"><code>LayoutService</code></a> for more information on these styles</p> 
+           </div> 
+           <div class="sect5"> 
+            <h6 id="_related_services_4">Related Services</h6> 
             <div class="paragraph"> 
-             <p>A number of other <a href="../rgcms/rgcms.html#_rgcms_classes_mixins_Persistable">mixins</a> also contribute properties and actions to the "Metadata" fieldset.</p> 
+             <p>This mixin calls <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_LayoutService"><code>LayoutService</code></a> to obtain the layout XML.</p> 
+            </div> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__rgcms_classes_mixins_Object_openRestApi"><code>openRestApi()</code></h5> 
+           <div class="paragraph"> 
+            <p>The <code>Object_openRestApi</code> mixin provides an action to navigate to the URL of the <a href="../ugvro/ugvro.html">Restful Objects resource</a> corresponding to the domain object. It has the following signature:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="predefined-type">URL</span> openRestApi() { ... }</code></pre> 
             </div> 
            </div> 
            <div class="sect5"> 
-            <h6 id="_related_services_3">Related Services</h6> 
+            <h6 id="_related_services_5">Related Services</h6> 
             <div class="paragraph"> 
-             <p>This mixin calls <a href="../rgsvc/rgsvc.html#_rgsvc_metadata-api_MetamodelService"><code>MetaModelService</code></a> and the <a href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridService"><code>GridService</code></a> to invalidate their caches.</p> 
+             <p>This mixin calls <a href="../rgsvc/rgsvc.html#_rgsvc_integration-api_BookmarkService"><code>BookmarkService</code></a> to build the URL.</p> 
             </div> 
            </div> 
           </div> 
@@ -6121,7 +6186,7 @@ table.CodeRay td.code>pre{padding:0}
            <p>If the domain object’s JAXB annotations reference only a single XSD schema then this will return that XML text as a <a href="../rgcms/rgcms.html#_rgcms_classes_value-types_Clob"><code>Clob</code></a> of that XSD. If there are multiple XSD schemas referenced then the action will return a zip of those schemas, wrapped up in a <a href="../rgcms/rgcms.html#_rgcms_classes_value-types_Blob"><code>Blob</code></a>. The <code>IsisSchemas</code> parameter to the action can be used to optionally ignore the common <a href="../rgcms/rgcms.html#_rgcms_schema">Apache Isis schemas</a> (useful if there is only one other XSD schema referenced by the DTO).</p> 
           </div> 
           <div class="sect4"> 
-           <h5 id="_related_services_4">Related Services</h5> 
+           <h5 id="_related_services_6">Related Services</h5> 
            <div class="paragraph"> 
             <p>The <code>Dto_downloadXml</code> and <code>Dto_downloadXsd</code> delegate to the <a href="../rgsvc/rgsvc.html#_rgsvc_integration-api_JaxbService"><code>JaxbService</code></a> to actually generate the XML/XSD.</p> 
            </div> 
@@ -6142,6 +6207,9 @@ table.CodeRay td.code>pre{padding:0}
           <div class="paragraph"> 
            <p>All domain entities automatically implement the DataNucleus <code>Persistable</code> role interface as a result of the enhancer process (the fully qualified class name is <code>org.datanucleus.enhancement.Persistable</code>). So as a developer you do not need to write any code to obtain the mixins that contribute to this interface.</p> 
           </div> 
+          <div class="paragraph"> 
+           <p>These mixin properties/actions are all associated with the "Metadata" fieldset. A number of other <a href="../rgcms/rgcms.html#_rgcms_classes_mixins_Object">mixins</a> also contribute properties or actions to the "Metadata" fieldset.</p> 
+          </div> 
           <div class="sect4"> 
            <h5 id="__rgcms_classes_mixins_Persistable_downloadJdoMetadata"><code>downloadJdoMetadata()</code></h5> 
            <div class="paragraph"> 
@@ -6167,16 +6235,7 @@ table.CodeRay td.code>pre{padding:0}
             </table> 
            </div> 
            <div class="sect5"> 
-            <h6 id="_appearance_in_the_ui_4">Appearance in the UI</h6> 
-            <div class="paragraph"> 
-             <p>This mixin action is associated with the "Metadata" fieldset, and will appear as a panel drop-down action.</p> 
-            </div> 
-            <div class="paragraph"> 
-             <p>These mixin properties are all associated with the "Metadata" fieldset. The <a href="../rgcms/rgcms.html#_rgcms_classes_mixins_Object">Object mixin</a> also contribute an action to the "Metadata" fieldset.</p> 
-            </div> 
-           </div> 
-           <div class="sect5"> 
-            <h6 id="_related_services_5">Related Services</h6> 
+            <h6 id="_related_services_7">Related Services</h6> 
             <div class="paragraph"> 
              <p>The mixin delegates to the <a href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_IsisJdoSupport"><code>IsisJdoSupport</code></a> service to obtain a reference to the JDO <code>PersistenceManagerFactory</code>.</p> 
             </div> 
@@ -6194,17 +6253,11 @@ table.CodeRay td.code>pre{padding:0}
              <li> <p><code>Persistable_datanucleusVersionLong</code> will expose the entity’s version, assuming that the version is or can be cast to <code>java.lang.Long</code>. Otherwise the property will be hidden.</p> </li> 
             </ul> 
            </div> 
-           <div class="sect5"> 
-            <h6 id="_appearance_in_the_ui_5">Appearance in the UI</h6> 
-            <div class="paragraph"> 
-             <p>These mixin properties are all associated with the "Metadata" fieldset. The <a href="../rgcms/rgcms.html#_rgcms_classes_mixins_Object">Object mixin</a> also contribute an action to the "Metadata" fieldset.</p> 
-            </div> 
-           </div> 
           </div> 
          </div> 
         </div> 
         <div class="sect2"> 
-         <h3 id="_rgcms_classes_layout">3.13. Layout</h3>
+         <h3 id="_rgcms_classes_layout">3.13. (Object) Layout</h3>
          <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
           <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_layout.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
           <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
@@ -6216,7 +6269,7 @@ table.CodeRay td.code>pre{padding:0}
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The <code>org.apache.isis.applib.layout</code> package defines a number of classes that allow the layout of domain objects (entities and view models) to be customized. These classes fall into two main categories:</p> 
+          <p>The <code>org.apache.isis.applib.layout.grid</code> and <code>org.apache.isis.applib.layout.component</code> packages together define a number of classes that allow the layout of domain objects (entities and view models) to be customized. These classes fall into two main categories:</p> 
          </div> 
          <div class="ulist"> 
           <ul> 
@@ -6231,7 +6284,10 @@ table.CodeRay td.code>pre{padding:0}
           <p>The component classes, meanwhile, are broadly equivalent to the "layout" annotations (<a href="../rgant/rgant.html#_rgant-PropertyLayout"><code>@PropertyLayout</code></a>, <a href="../rgant/rgant.html#_rgant-CollectionLayout"><code>@CollectionLayout</code></a>, <a href="../rgant/rgant.html#_rgant-ActionLayout"><code>@ActionLayout</code></a> and <a href="../rgant/rgant.html#_rgant-DomainObjectLayout"><code>@DomainObjectLayout</code></a></p> 
          </div> 
          <div class="paragraph"> 
-          <p>All of the classes in this package are JAXB-annotated, meaning that they can be serialized to/from XML (the <code>component</code> classes in the <code><a href="http://isis.apache.org/applib/layout/component" class="bare">http://isis.apache.org/applib/layout/component</a></code> XSD namespace, the bootstrap 3 grid classes in the <code><a href="http://isis.apache.org/applib/layout/grid/bootstrap3" class="bare">http://isis.apache.org/applib/layout/grid/bootstrap3</a></code> XSD namespace). This ability to serialize to/from XML is used by the <a href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridLoaderService"><code>GridLoaderService</code></a>, the default implementation of which reads the grid layout for a domain class from a <code>.layout.xml</code> file on the classpath.</p> 
+          <p>All of the classes in this package are JAXB-annotated, meaning that they can be serialized to/from XML (the <code>component</code> classes in the <code><a href="http://isis.apache.org/applib/layout/component" class="bare">http://isis.apache.org/applib/layout/component</a></code> XSD namespace, the bootstrap 3 grid classes in the <code><a href="http://isis.apache.org/applib/layout/grid/bootstrap3" class="bare">http://isis.apache.org/applib/layout/grid/bootstrap3</a></code> XSD namespace). This ability to serialize to/from XML is used by the <a href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridLoaderService"><code>GridLoaderService</code></a>, the default implementation of which reads the grid layout for a domain class from a <code>.layout.xml</code> file on the classpath. It also allows the grid to be exposed through the REST API provided by the <a href="../ugvro/ugvro.html">Restful Objects viewer</a>, as either XML or JSON.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The various components (properties, collections, actions and domain object) also allow a link to be associated with each. These links are populated by the framework automatically when exposing the object layout grid through the REST API, pointing back to the standard Restful Objects resources. This design greatly assists in the implementation of generic REST clients.</p> 
          </div> 
          <div class="sect3"> 
           <h4 id="__rgcms_classes_layout_component">3.13.1. Component</h4> 
@@ -6242,7 +6298,7 @@ table.CodeRay td.code>pre{padding:0}
            <ul> 
             <li> <p><code>FieldSet</code><br></p> 
              <div class="paragraph"> 
-              <p>A fieldset (previously also called a property group or member group) of a number of the domain object’s properties (along with any associationed actions of those properties).</p> 
+              <p>A fieldset (sometimes also called a property group or member group) of a number of the domain object’s properties (along with any associationed actions of those properties).</p> 
              </div> </li> 
             <li> <p>layout data classes, which correspond to the similarly named annotations:</p> 
              <div class="ulist"> 
@@ -6258,11 +6314,14 @@ table.CodeRay td.code>pre{padding:0}
           <div class="paragraph"> 
            <p>In addition, the component package includes <code>Grid</code>, representing the top level container for a custom layout for a domain object. <code>Grid</code> itself is merely an interface, but it also defines the visitor pattern to make it easy for validate and normalize the grid layouts. The <code>GridAbstract</code> convenience superclass provides a partial implementation of this visitor pattern.</p> 
           </div> 
+          <div class="paragraph"> 
+           <p>The XSD for these classes is available at <a href="http://isis.apache.org/applib/layout/component/component.xsd" class="bare">http://isis.apache.org/applib/layout/component/component.xsd</a>.</p> 
+          </div> 
          </div> 
          <div class="sect3"> 
           <h4 id="__rgcms_classes_layout_grid-bootstrap3">3.13.2. Bootstrap3 Grid</h4> 
           <div class="paragraph"> 
-           <p>As noted above, the default bootstrap3 grid classes are modelled closely on <a href="http://getbootstrap.com">Bootstrap 3</a>. Bootstrap’s <a href="http://getbootstrap.com/css/#grid">grid system</a> divides the page width equally into 12 columns, and so each column spans 1 or more of these widths. Thus, a column with a span of 12 is the full width, one with a span of 6 is half the width, one with a span of 4 is a third of the width, and so on.</p> 
+           <p>The bootstrap3 grid classes are modelled closely on <a href="http://getbootstrap.com">Bootstrap 3</a>. Bootstrap’s <a href="http://getbootstrap.com/css/#grid">grid system</a> divides the page width equally into 12 columns, and so each column spans 1 or more of these widths. Thus, a column with a span of 12 is the full width, one with a span of 6 is half the width, one with a span of 4 is a third of the width, and so on.</p> 
           </div> 
           <div class="paragraph"> 
            <p>When specifying the span of a column, Bootstrap also allows a size to be specified (<code>XS</code>, <code>SM</code>, <code>MD</code>, <code>LG</code>). The size determines the rules for responsive design. Apache Isis defaults to <code>MD</code> but this can be overridden. It is also possible to specify multiple size/spans for a given column.</p> 
@@ -6274,7 +6333,7 @@ table.CodeRay td.code>pre{padding:0}
            <ul> 
             <li> <p><code>BS3Grid</code><br></p> 
              <div class="paragraph"> 
-              <p>Consists of a number of <code>BS3Row</code>s. <br></p> 
+              <p>Consists of a number of <code>BS3Row</code>s.</p> 
              </div> 
              <div class="paragraph"> 
               <p>This class is the concrete implementation of <code>Grid</code> interface, discussed previously. As such, it extends the <code>Grid.Visitor</code> to iterate over all of the <code>Row</code>s of the grid.</p> 
@@ -6285,10 +6344,10 @@ table.CodeRay td.code>pre{padding:0}
              </div> </li> 
             <li> <p><code>BS3Col</code><br></p> 
              <div class="paragraph"> 
-              <p>A container of almost everything else. A column most commonly contains properties (grouped into <code>FieldSet</code>s, described above) or collections (specified by <code>CollectionLayoutData</code>, also above). However, a <code>Col</code> might instead contain a <code>BS3TabGroup</code> (described below) in order that the object members is arranged into tabs. <br></p> 
+              <p>A container of almost everything else. A column most commonly contains properties (grouped into <code>FieldSet</code>s, described above) or collections (specified by <code>CollectionLayoutData</code>, also above). However, a <code>Col</code> might instead contain a <code>BS3TabGroup</code> (described below) in order that the object members is arranged into tabs.</p> 
              </div> 
              <div class="paragraph"> 
-              <p>It is also possible for a <code>Col</code> to contain the object’s title/icon (using <code>DomainObjectLayoutData</code>) or indeed arbitrary actions (using <code>`ActionLayoutData</code>).<br></p> 
+              <p>It is also possible for a <code>Col</code> to contain the object’s title/icon (using <code>DomainObjectLayoutData</code>) or indeed arbitrary actions (using <code>`ActionLayoutData</code>).</p> 
              </div> 
              <div class="paragraph"> 
               <p>Finally, a <code>BS3Col</code> can also contain other <code>BS3Row</code>s, allowing arbitrarily deep hierarchies of containers as required.</p> 
@@ -6315,6 +6374,184 @@ table.CodeRay td.code>pre{padding:0}
           <div class="paragraph"> 
            <p>All of these classes also allow custom CSS to be specified; these are added to the CSS classes for the corresponding <code>&lt;div</code>&gt; in the rendered page. The <a href="../ugvw/ugvw.html#_ugvw_customisation_tweaking-css-classes"><code>application.css</code></a> file can then be used for application-specific CSS, allowing arbitrary fine-tuning of the layout of the page.</p> 
           </div> 
+          <div class="paragraph"> 
+           <p>The XSD for these classes is available at <a href="http://isis.apache.org/applib/layout/menus/menubars.xsd" class="bare">http://isis.apache.org/applib/layout/menus/menubars.xsd</a>.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__rgcms_classes_layout_link">3.13.3. Link</h4> 
+          <div class="paragraph"> 
+           <p>The link classes reside in the <code>org.apache.isis.applib.layout.links</code> package, and consist of just the <code>Link</code> class:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">Link</span>  {
+    <span class="directive">public</span> <span class="predefined-type">String</span> getRel() { ... }      <i class="conum" data-value="1"></i><b>(1)</b>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getMethod() { ... }   <i class="conum" data-value="2"></i><b>(2)</b>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getHref() { ... }     <i class="conum" data-value="3"></i><b>(3)</b>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getType() { ... }     <i class="conum" data-value="4"></i><b>(4)</b>
+    ...
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>a "rel" (as defined by section 2.7.1.2 of the RO spec v1.0), identifying the nature of the link.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>the HTTP method to access the link. This is always "GET".</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>The (absolute) URL to access the Restful Objects resource.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="4"></i><b>4</b></td> 
+              <td>The media type (<code>Accept</code> header) that will be returned by the URL.</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The XSD for these classes is available at <a href="http://isis.apache.org/applib/layout/links/links.xsd" class="bare">http://isis.apache.org/applib/layout/links/links.xsd</a>.</p> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgcms_classes_menubars">3.14. MenuBars Layout</h3>
+         <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+          <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+          <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+          <ul class="dropdown-menu">
+           <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i>&nbsp; Edit</a></li>
+           <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; History</a></li>
+           <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i>&nbsp; Raw</a></li>
+           <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+          </ul>
+         </div> 
+         <div class="paragraph"> 
+          <p>The <code>org.apache.isis.applib.layout.menubars</code> package and subpackages define a number of interfaces classes that allow the layout of domain service actions to be organised across menu bars, menus and menu sections.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The classes define a hierarchical structure of menu bars, menus and menu sections. Similar to the <a href="#_rgcms_classes_layout">object layout</a> classes, the concrete menu classes support bootstrap3; support for other layout systems is possible.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The component class <code>ServiceActionLayoutData</code> defines action metadata, being broadly equivalent to the "layout" annotations for actions, ie <a href="../rgant/rgant.html#_rgant-ActionLayout"><code>@ActionLayout</code></a>. This is similar to the <code>ActionLayoutData</code> component class used for object layouts, but also captures the identity of the "owning" domain service. Service actions are grouped into menu sections.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>All of the classes in this package are JAXB-annotated, meaning that they can be serialized to/from XML (in the <code><a href="http://isis.apache.org/applib/layout/menubars/bootstrap3" class="bare">http://isis.apache.org/applib/layout/menubars/bootstrap3</a></code> XSD namespace). This ability to serialize to/from XML is used by the <a href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_MenuBarsLoaderService"><code>MenuBarsLoaderService</code></a>, the default implementation of which reads the grid layout for a domain class from a <code>.layout.xml</code> file on the classpath. It also allows the menu bars to be exposed through the REST API provided by the <a href="../ugvro/ugvro.html">Restful Objects viewer</a>, as either XML or JSON.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The service action component also allows a link to be associated with it. Each such link is populated by the framework automatically when exposing the menu bars layout through the REST API, pointing back to the standard Restful Objects resources. This design greatly assists in the implementation of generic REST clients.</p> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_rgcms_classes_menubars_menus">3.14.1. Menus</h4>
+          <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+           <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_menus.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+           <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+           <ul class="dropdown-menu">
+            <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_menus.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i>&nbsp; Edit</a></li>
+            <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_menus.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; History</a></li>
+            <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_menus.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i>&nbsp; Raw</a></li>
+            <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_menus.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+           </ul>
+          </div> 
+          <div class="paragraph"> 
+           <p>The menu classes reside in the <code>org.apache.isis.applib.layout.menubars.bootstrap3</code> package, consisting of:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p><code>BS3MenuBars</code></p> 
+             <div class="paragraph"> 
+              <p>The top-level structure that define three fields: a primary <code>BS3MenuBar</code>, secondary <code>BS3MenuBar</code> and tertiary <code>BS3MenuBar</code>. The <a href="../ugvw/ugvw.html">Wicket viewer</a> places the primary bar to the left, the secondary bar aligned right, and the tertiary bar (expected to consist of just one <code>BS3Menu</code>) under the user names.</p> 
+             </div> </li> 
+            <li> <p><code>BS3MenuBar</code></p> 
+             <div class="paragraph"> 
+              <p>consisting of one or many <code>BS3Menu</code>s.</p> 
+             </div> </li> 
+            <li> <p><code>BS3Menu</code></p> 
+             <div class="paragraph"> 
+              <p>consisting of one or many <code>BS3MenuSection</code>s. The <a href="../ugvw/ugvw.html">Wicket viewer</a> renders a separator between each section.</p> 
+             </div> </li> 
+            <li> <p><code>BS3MenuSection</code></p> 
+             <div class="paragraph"> 
+              <p>consisting of one or many actions (<code>ServiceActionLayoutData</code>s)</p> 
+             </div> </li> 
+           </ul> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_rgcms_classes_menubars_components">3.14.2. Components</h4>
+          <div class="btn-group" style="float: right; font-size: small; padding: 6px; margin-top: -55px; ">
+           <button type="button" class="btn btn-xs btn-default" onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_components.adoc&quot;"><i class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+           <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+           <ul class="dropdown-menu">
+            <li><a href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_components.adoc" target="_blank"><i class="fa fa-pencil-square-o fa-fw" aria-hidden="true"></i>&nbsp; Edit</a></li>
+            <li><a href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_components.adoc" target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; History</a></li>
+            <li><a href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_components.adoc" target="_blank"><i class="fa fa-file-text-o fa-fw" aria-hidden="true"></i>&nbsp; Raw</a></li>
+            <li><a href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_menubars_components.adoc" target="_blank"><i class="fa fa-hand-o-right fa-fw" aria-hidden="true"></i>&nbsp; Blame</a></li>
+           </ul>
+          </div> 
+          <div class="paragraph"> 
+           <p>The service action class reside in the <code>org.apache.isis.applib.layout.component</code> package, consisting of just:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p><code>ServiceActionLayoutData</code> class</p> 
+             <div class="paragraph"> 
+              <p>which correspond to the <a href="../rgant/rgant.html#_rgant-ActionLayout"><code>@ActionLayout</code></a> annotation.</p> 
+             </div> </li> 
+           </ul> 
+          </div> 
+          <div class="paragraph"> 
+           <p>This is similar to <code>ActionLayoutData</code> (of the <a href="#_rgcms_classes_layout">object layout</a> classes), however it also identifies the domain service to which it belongs. (This isn’t required for the object layouts because the owner in that case is implicit).</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__rgcms_classes_layout_link">3.14.3. Link</h4> 
+          <div class="paragraph"> 
+           <p>The link classes reside in the <code>org.apache.isis.applib.layout.links</code> package, and consist of just the <code>Link</code> class:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">Link</span>  {
+    <span class="directive">public</span> <span class="predefined-type">String</span> getRel() { ... }      <i class="conum" data-value="1"></i><b>(1)</b>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getMethod() { ... }   <i class="conum" data-value="2"></i><b>(2)</b>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getHref() { ... }     <i class="conum" data-value="3"></i><b>(3)</b>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getType() { ... }     <i class="conum" data-value="4"></i><b>(4)</b>
+    ...
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>an "rel" (as defined by section 2.7.1.2 of the RO spec v1.0), identifying the nature of the link.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>the HTTP method to access the link. This is always "GET".</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>The (absolute) URL to access the Restful Objects resource.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="4"></i><b>4</b></td> 
+              <td>The media type (<code>Accept</code> header) that will be returned by the URL.</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The XSD for these classes is available at <a href="http://isis.apache.org/applib/layout/links/links.xsd" class="bare">http://isis.apache.org/applib/layout/links/links.xsd</a>.</p> 
+          </div> 
          </div> 
         </div> 
        </div> 
@@ -6444,7 +6681,7 @@ table.CodeRay td.code>pre{padding:0}
              </tr> 
              <tr> 
               <td><i class="conum" data-value="7"></i><b>7</b></td> 
-              <td>the target object (or objects) to be invoked. As of <code>1.13.0</code>, a bulk action will create multiple commands, each with only a single target, but a future version of the framework may also support a single bulk command against this multiple targets (ie all-or-nothing).</td> 
+              <td>the target object (or objects) to be invoked. A bulk action will create multiple commands, each with only a single target. (A future version of the framework may also support a single bulk command against this multiple targets, ie all-or-nothing).</td> 
              </tr> 
              <tr> 
               <td><i class="conum" data-value="8"></i><b>8</b></td> 
@@ -7038,174 +7275,22 @@ table.CodeRay td.code>pre{padding:0}
           </ul>
          </div> 
          <div class="paragraph"> 
-          <p>The "aim" schema defines the serialized form (or memento) of an action invocation.</p> 
-         </div> 
-         <div class="admonitionblock warning"> 
-          <table> 
-           <tbody>
-            <tr> 
-             <td class="icon"> <i class="fa icon-warning" title="Warning"></i> </td> 
-             <td class="content"> 
-              <div class="paragraph"> 
-               <p>This schema has been removed in <code>1.13.0</code>, replaced with <a href="../rgcms/rgcms.html#_rgcms_schema-ixn">ixn.xsd</a> (for action invocations/property edits) and with <a href="../rgcms/rgcms.html#_rgcms_schema-cmd">cmd.xsd</a> (commands, ie the <em>intention</em> to invoke an action/edit a property).</p> 
-              </div> 
-              <div class="paragraph"> 
-               <p>The remaining content on this page describes how <code>CommandContext</code> works up to v1.12.x. However, as of <code>1.13.0</code> the <code>CommandContext</code> uses its own <code>cmd.xsd</code> schema).</p> 
-              </div> </td> 
-            </tr> 
-           </tbody>
-          </table> 
+          <p>The "aim" schema previously defined the serialized form (or memento) of an action invocation.</p> 
          </div> 
          <div class="paragraph"> 
-          <p>Action invocations are captured (in memory rather than in serialized form) when the end-user invokes the action "through" the UI, by way of the <a href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext">CommandContext</a> service. Using the <code>ActionInvocationMementoDtoUtils</code> utility class, a service can instantiate <code>ActionInvocationMementoDto</code> which can then be serialized to/from using the same <code>ActionInvocationMementoDtoUtils</code> class.</p> 
-         </div> 
-         <div class="listingblock"> 
-          <div class="content"> 
-           <pre class="CodeRay highlight"><code data-lang="xml"><span class="preprocessor">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
-<span class="tag">&lt;xs:schema</span> <span class="attribute-name">targetNamespace</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/schema/aim</span><span class="delimiter">"</span></span>                              <i class="conum" data-value="1"></i><b>(1)</b>
-           <span class="attribute-name">elementFormDefault</span>=<span class="string"><span class="delimiter">"</span><span class="content">qualified</span><span class="delimiter">"</span></span>
-           <span class="attribute-name">xmlns:xs</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://www.w3.org/2001/XMLSchema</span><span class="delimiter">"</span></span>
-           <span class="attribute-name">xmlns</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/schema/aim</span><span class="delimiter">"</span></span>
-           <span class="attribute-name">xmlns:common</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/schema/common</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
-
-    <span class="tag">&lt;xs:import</span> <span class="attribute-name">namespace</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/schema/common</span><span class="delimiter">"</span></span>                             <i class="conum" data-value="2"></i><b>(2)</b>
-               <span class="attribute-name">schemaLocation</span>=<span class="string"><span class="delimiter">"</span><span class="content">http://isis.apache.org/schema/common/common-1.0.xsd</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>
-
-    <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">actionInvocationMementoDto</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>                                          <i class="conum" data-value="3"></i><b>(3)</b>
-        <span class="tag">&lt;xs:complexType&gt;</span>
-            <span class="tag">&lt;xs:sequence&gt;</span>
-                <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">metadata</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
-                    <span class="tag">&lt;xs:complexType&gt;</span>
-                        <span class="tag">&lt;xs:sequence&gt;</span>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">transactionId</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:string</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>             <i class="conum" data-value="4"></i><b>(4)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">sequence</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:int</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>                     <i class="conum" data-value="5"></i><b>(5)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">timestamp</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:dateTime</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>               <i class="conum" data-value="6"></i><b>(6)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">target</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">common:oidDto</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>                <i class="conum" data-value="7"></i><b>(7)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">targetClass</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:string</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>               <i class="conum" data-value="8"></i><b>(8)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">targetAction</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:string</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>              <i class="conum" data-value="9"></i><b>(9)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">actionIdentifier</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:string</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>          <i class="conum" data-value="10"></i><b>(10)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">user</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:string</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>                      <i class="conum" data-value="11"></i><b>(11)</b>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">title</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:string</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>                     <i class="conum" data-value="12"></i><b>(12)</b>
-                        <span class="tag">&lt;/xs:sequence&gt;</span>
-                    <span class="tag">&lt;/xs:complexType&gt;</span>
-                <span class="tag">&lt;/xs:element&gt;</span>
-                <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">payload</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
-                    <span class="tag">&lt;xs:complexType&gt;</span>
-                        <span class="tag">&lt;xs:sequence&gt;</span>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">parameters</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>                                  <i class="conum" data-value="13"></i><b>(13)</b>
-                                <span class="tag">&lt;xs:complexType&gt;</span>
-                                    <span class="tag">&lt;xs:sequence</span> <span class="attribute-name">maxOccurs</span>=<span class="string"><span class="delimiter">"</span><span class="content">unbounded</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>
-                                        <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">param</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">paramDto</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>
-                                    <span class="tag">&lt;/xs:sequence&gt;</span>
-                                    <span class="tag">&lt;xs:attribute</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">num</span><span class="delimiter">"</span></span> <span class="attribute-name">use</span>=<span class="string"><span class="delimiter">"</span><span class="content">required</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:int</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>
-                                <span class="tag">&lt;/xs:complexType&gt;</span>
-                            <span class="tag">&lt;/xs:element&gt;</span>
-                            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">return</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">common:valueDto</span><span class="delimiter">"</span></span>                <i class="conum" data-value="14"></i><b>(14)</b>
-                                        <span class="attribute-name">minOccurs</span>=<span class="string"><span class="delimiter">"</span><span class="content">0</span><span class="delimiter">"</span></span> <span class="attribute-name">maxOccurs</span>=<span class="string"><span class="delimiter">"</span><span class="content">1</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>
-                        <span class="tag">&lt;/xs:sequence&gt;</span>
-                    <span class="tag">&lt;/xs:complexType&gt;</span>
-                <span class="tag">&lt;/xs:element&gt;</span>
-            <span class="tag">&lt;/xs:sequence&gt;</span>
-        <span class="tag">&lt;/xs:complexType&gt;</span>
-    <span class="tag">&lt;/xs:element&gt;</span>
-
-    <span class="tag">&lt;xs:complexType</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">paramDto</span><span class="delimiter">"</span></span><span class="tag">&gt;</span>                                                        <i class="conum" data-value="15"></i><b>(15)</b>
-        <span class="tag">&lt;xs:sequence&gt;</span>
-            <span class="tag">&lt;xs:element</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">value</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">common:valueDto</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>                               <i class="conum" data-value="16"></i><b>(16)</b>
-        <span class="tag">&lt;/xs:sequence&gt;</span>
-        <span class="tag">&lt;xs:attribute</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">parameterName</span><span class="delimiter">"</span></span> <span class="attribute-name">use</span>=<span class="string"><span class="delimiter">"</span><span class="content">required</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:string</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>                <i class="conum" data-value="17"></i><b>(17)</b>
-        <span class="tag">&lt;xs:attribute</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">parameterType</span><span class="delimiter">"</span></span> <span class="attribute-name">use</span>=<span class="string"><span class="delimiter">"</span><span class="content">required</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">common:valueType</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>
-        <span class="tag">&lt;xs:attribute</span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">"</span><span class="content">null</span><span class="delimiter">"</span></span> <span class="attribute-name">use</span>=<span class="string"><span class="delimiter">"</span><span class="content">optional</span><span class="delimiter">"</span></span> <span class="attribute-name">type</span>=<span class="string"><span class="delimiter">"</span><span class="content">xs:boolean</span><span class="delimiter">"</span></span><span class="tag">/&gt;</span>
-    <span class="tag">&lt;/xs:complexType&gt;</span>
-<span class="tag">&lt;/xs:schema&gt;</span></code></pre> 
-          </div> 
-         </div> 
-         <div class="colist arabic"> 
-          <table> 
-           <tbody>
-            <tr> 
-             <td><i class="conum" data-value="1"></i><b>1</b></td> 
-             <td>the aim schema has a namespace URI of "http://isis.apache.org/schema/aim". Although URIs are not the same as URLs, you will find that the schemas are also downloadable from this location.</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="2"></i><b>2</b></td> 
-             <td>reuses the <a href="../rgcms/rgcms.html#_rgcms_schema-common">common</a> schema</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="3"></i><b>3</b></td> 
-             <td>definition of the <code>actionInvocationMementoDto</code> complex type. This consists of metadata (the transaction identifier, the target object, the initiating user) and the payload (the action parameter/arguments, the return value if known).</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="4"></i><b>4</b></td> 
-             <td>the unique transaction Id (a guid) allocated by the framework for each and every transaction</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="5"></i><b>5</b></td> 
-             <td>a sequence number within the transaction. It is possible for there to be more than one action invocation to be</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="6"></i><b>6</b></td> 
-             <td>when the action was invoked</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="7"></i><b>7</b></td> 
-             <td>target object, as an OID (using <code>oidDto</code> from the <a href="../rgcms/rgcms.html#_rgcms_schema-common">common</a> schema)</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="8"></i><b>8</b></td> 
-             <td>fully qualified class name of the target object, for information only</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="9"></i><b>9</b></td> 
-             <td>name of the action, for information only</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="10"></i><b>10</b></td> 
-             <td>Javadoc style unique identifier for the action.</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="11"></i><b>11</b></td> 
-             <td>User that invoked the action</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="12"></i><b>12</b></td> 
-             <td>title of the target object, for information only</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="13"></i><b>13</b></td> 
-             <td>Collection of parameter/arguments, defined in terms of the <code>paramDto</code> complex type (discussed just below)</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="14"></i><b>14</b></td> 
-             <td>The return value of the action, if known (and not void)</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="15"></i><b>15</b></td> 
-             <td>The <code>paramDto</code> defines both an action parameter and its corresponding argument values</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="16"></i><b>16</b></td> 
-             <td>The value of the parameter, in other words an argument value</td> 
-            </tr> 
-            <tr> 
-             <td><i class="conum" data-value="17"></i><b>17</b></td> 
-             <td>Metadata about the parameter itself: its name, type, optionality.</td> 
-            </tr> 
-           </tbody>
-          </table> 
+          <p>The schema was removed in <code>1.13.0</code>, and was replaced by:</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>As of <code>1.11.0</code> through <code>1.12.2</code> this schema is not used directly by the framework; in particular <code>Command#setMemento(…​)</code> sets a similar but less formal XML structure. This may change in the future.</p> 
-              </div> </td> 
-            </tr> 
-           </tbody>
-          </table> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><a href="../rgcms/rgcms.html#_rgcms_schema-ixn">ixn.xsd</a></p> 
+            <div class="paragraph"> 
+             <p>for action invocations/property edits, and</p> 
+            </div> </li> 
+           <li> <p><a href="../rgcms/rgcms.html#_rgcms_schema-cmd">cmd.xsd</a></p> 
+            <div class="paragraph"> 
+             <p>for commands, ie the <em>intention</em> to invoke an action/edit a property.</p> 
+            </div> </li> 
+          </ul> 
          </div> 
         </div> 
         <div class="sect2">