Repository: isis-site
Updated Branches:
  refs/heads/asf-site 87081dfeb -> 7116ebf29


http://git-wip-us.apache.org/repos/asf/isis-site/blob/97af7e5f/content/versions/SNAPSHOT/guides/rgfis/rgfis.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgfis/rgfis.html 
b/content/versions/SNAPSHOT/guides/rgfis/rgfis.html
new file mode 100644
index 0000000..6ae968a
--- /dev/null
+++ b/content/versions/SNAPSHOT/guides/rgfis/rgfis.html
@@ -0,0 +1,1568 @@
+<!doctype html>
+<html>
+ <head> 
+  <!--
+        Licensed to the Apache Software Foundation (ASF) under one
+        or more contributor license agreements.  See the NOTICE file
+        distributed with this work for additional information
+        regarding copyright ownership.  The ASF licenses this file
+        to you under the Apache License, Version 2.0 (the
+        "License"); you may not use this file except in compliance
+        with the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing,
+        software distributed under the License is distributed on an
+        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+        KIND, either express or implied.  See the License for the
+        specific language governing permissions and limitations
+        under the License.
+    --> 
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
+  <meta charset="utf-8"> 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
+  <!-- No caching headers --> 
+  <meta http-equiv="cache-control" content="no-cache"> 
+  <meta http-equiv="pragma" content="no-cache"> 
+  <meta http-equiv="expires" content="-1"> 
+  <title>Framework Internal Services</title> 
+  <link rel="icon" type="image/png" href="../../images/isis-favicon.png"> 
+  <!--
+        Based on DataNucleus' template,
+        that was in turn based on an earlier version of Apache Isis' template,
+        that was in turn based on Apache Deltaspike's template.
+
+        This template uses
+        * Bootstrap v3.3.7 (https://getbootstrap.com/) for navbar.
+        * Bootstrap TOC plugin v0.4.1 (https://afeld.github.io/bootstrap-toc/)
+          for the table of contents.
+        * jQuery (necessary for Bootstrap's JavaScript plugins)
+        * Font-Awesome for some icons used by Asciidoctor
+
+        Also:
+        * Bootswatch "flatly" theme for Bootstrap 
(https://bootswatch.com/flatly).
+        * slick.js (carousel)
+        * add a link to all headers (home-grown, adapted from blog posts)
+        * integration of elasticlunr.js (home-grown, adapted from blog posts)
+    --> 
+  <link 
href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/flatly/bootstrap.min.css";
 rel="stylesheet"> 
+  <link href="../../css/bootstrap-toc/0.4.1/bootstrap-toc.min.css" 
rel="stylesheet"> 
+  <link href="../../css/asciidoctor/foundation.css" rel="stylesheet"> 
+  <link 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css";
 rel="stylesheet"> 
+  <link href="../../css/slick/1.5.0/slick.css" rel="stylesheet"> 
+  <link href="../../css/slick/1.5.0/slick-theme.css" rel="stylesheet"> 
+  <link href="../../css/search-panel/search-panel.css" rel="stylesheet"> 
+  <link href="../../css/header-links/header-links.css" rel="stylesheet"> 
+  <link href="../../css/sticky-header/sticky-header.css" rel="stylesheet"> 
+  <link href="../../css/customisations.css" rel="stylesheet"> 
+  <!-- Coderay syntax formatter --> 
+  <style type="text/css">
+        /* Stylesheet for CodeRay to match GitHub theme | MIT License | 
http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay 
span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#000}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+    </style> 
+ </head> 
+ <body data-spy="scroll" data-target="#toc"> 
+  <div id="basedir" style="display:none;">
+   ../../
+  </div> 
+  <div id="docname" style="display:none;">
+   rgfis
+  </div> 
+  <div id="filetype" style="display:none;">
+   html
+  </div> 
+  <!-- Navbar --> 
+  <nav class="navbar navbar-default navbar-static-top header"> 
+   <div class="container"> 
+    <div class="navbar-header"> 
+     <!-- Three line menu button for use on mobile screens --> 
+     <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span 
class="icon-bar"></span> <span class="icon-bar"></span> <span 
class="icon-bar"></span> </button> 
+     <a class="navbar-brand" href="../../index.html"> <img alt="Brand" 
src="../../images/isis-logo-48x48.png"> </a> 
+     <a class="navbar-brand" href="../../index.html">Apache Isis</a> 
+    </div> 
+    <!-- Navbar that will collapse on mobile screens --> 
+    <div id="navbar" class="navbar-collapse collapse"> 
+     <ul class="nav navbar-nav"> 
+      <li class="dropdown"> <a href="#" class="dropdown-toggle" 
data-toggle="dropdown" role="button" aria-haspopup="true" 
aria-expanded="false">Documentation<span class="caret"></span></a> 
+       <ul class="dropdown-menu"> 
+        <li><a href="../../documentation.html">Table of Contents</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">User Guides</li> 
+        <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> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Reference Guides</li> 
+        <li><a href="../../guides/rgant/rgant.html">Annotations</a></li> 
+        <li><a href="../../guides/rgsvc/rgsvc.html">Domain Services</a></li> 
+        <li><a href="../../guides/rgcfg/rgcfg.html">Core Config' 
Properties</a></li> 
+        <li><a href="../../guides/rgcms/rgcms.html">Classes, Methods and 
Schema</a></li> 
+        <li><a href="../../guides/rgmvn/rgmvn.html">Maven plugin</a></li> 
+        <li><a href="../../guides/rgfis/rgfis.html">Framework Internal 
Services</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Javadoc</li> 
+        <li><a 
href="http://javadoc.io/doc/org.apache.isis.core/isis-core-applib";>Applib</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">Downloads<span 
class="caret"></span></a> 
+       <ul class="dropdown-menu"> 
+        <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="../../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 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?us...@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="../../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"> 
+        <li><a href="http://www.apache.org/";>Apache Homepage</a></li> 
+        <li><a href="http://www.apache.org/licenses/";>Licenses</a></li> 
+        <li><a href="http://www.apache.org/security/";>Security</a></li> 
+        <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li> 
+        <li><a 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li><a href="https://whimsy.apache.org/board/minutes/Isis.html";>PMC 
board minutes</a></li> 
+       </ul> </li> 
+     </ul> 
+     <div class="nav navbar-nav navbar-right"> 
+      <!-- 'style' added to fix height of input box. FIX THIS --> 
+      <form class="navbar-form" role="search" id="search-form" style="padding: 
1px 15px;"> 
+       <div class="form-group"> 
+        <input class="form-control" id="search-field" type="text" size="30" 
placeholder="Search"> 
+       </div> 
+      </form> 
+     </div> 
+     <p class="nav navbar-text navbar-right small">v2.0.0-M1-SNAPSHOT</p> 
+    </div> 
+   </div> 
+  </nav> 
+  <div class="container"> 
+   <div class="row-fluid"> 
+    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-9"> 
+     <div id="search-panel"> 
+      <div id="search-results"></div> 
+      <div> 
+       <br> 
+       <a href="#" id="search-results-clear">clear</a> 
+      </div> 
+     </div> 
+     <span class="pdf-link"><a href="rgfis.pdf"><img 
src="../../images/PDF-50.png"></a></span> 
+     <div class="page-title"> 
+      <h1>Framework Internal Services</h1> 
+     </div> 
+     <div id="doc-content">
+      <div class="btn-group" style="float: right; font-size: small; padding: 
6px;  ">
+       <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/rgfis/rgfis.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/rgfis/rgfis.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/rgfis/rgfis.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/rgfis/rgfis.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/rgfis/rgfis.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+       </ul>
+      </div> 
+      <div class="sect1"> 
+       <h2 id="__rgfis">1. Framework Internal Services</h2> 
+       <div class="sectionbody"> 
+        <div class="paragraph"> 
+         <p>This guide documents a number of domain services that are not part 
of the framework’s formal API, they use classes that are outside of the 
applib. They should be thought of as part of the internal design of the 
framework, and are liable to change from release to release.</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>We do not guarantee that <a href="http://semver.org";>semantic 
versioning</a> will be honoured for these services.</p> 
+             </div> </td> 
+           </tr> 
+          </tbody>
+         </table> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_other_guides">1.1. Other Guides</h3> 
+         <div class="paragraph"> 
+          <p>Apache Isis documentation is broken out into a number of user, 
reference and "supporting procedures" guides.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The user guides available are:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><a href="../ugfun/ugfun.html">Fundamentals</a></p> </li> 
+           <li> <p><a href="../ugvw/ugvw.html">Wicket viewer</a></p> </li> 
+           <li> <p><a href="../ugvro/ugvro.html">Restful Objects 
viewer</a></p> </li> 
+           <li> <p><a href="../ugodn/ugodn.html">DataNucleus object 
store</a></p> </li> 
+           <li> <p><a href="../ugsec/ugsec.html">Security</a></p> </li> 
+           <li> <p><a href="../ugtst/ugtst.html">Testing</a></p> </li> 
+           <li> <p><a href="../ugbtb/ugbtb.html">Beyond the Basics</a></p> 
</li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The reference guides are:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><a href="../rgant/rgant.html">Annotations</a></p> </li> 
+           <li> <p><a href="../rgsvc/rgsvc.html">Domain Services</a></p> </li> 
+           <li> <p><a href="../rgcfg/rgcfg.html">Configuration 
Properties</a></p> </li> 
+           <li> <p><a href="../rgcms/rgcms.html">Classes, Methods and 
Schema</a></p> </li> 
+           <li> <p><a href="../rgmvn/rgmvn.html">Apache Isis Maven 
plugin</a></p> </li> 
+           <li> <p><a href="../rgfis/rgfis.html">Framework Internal 
Services</a> (this guide)</p> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The remaining guides are:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><a href="../dg/dg.html">Developers' Guide</a> (how to set 
up a development environment for Apache Isis and contribute back to the 
project)</p> </li> 
+           <li> <p><a href="../cgcom/cgcom.html">Committers' Guide</a> 
(release procedures and related practices)</p> </li> 
+          </ul> 
+         </div> 
+        </div> 
+       </div> 
+      </div> 
+      <div class="sect1"> 
+       <h2 id="_rgfis_presentation-layer">2. Presentation Layer</h2>
+       <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/rgfis/_rgfis_presentation-layer.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/rgfis/_rgfis_presentation-layer.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/rgfis/_rgfis_presentation-layer.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/rgfis/_rgfis_presentation-layer.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/rgfis/_rgfis_presentation-layer.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+        </ul>
+       </div> 
+       <div class="sectionbody"> 
+        <div class="paragraph"> 
+         <p>These domain services are internal to the framework, controlling 
various aspects of the presentation layer.</p> 
+        </div> 
+        <div class="paragraph"> 
+         <p>The table below summarizes the presentation layer internal SPIs 
defined by Apache Isis. It also lists their corresponding implementation, 
either a default implementation provided by Apache Isis itself, or provided by 
one of the (non-ASF) <a href="http://platform.incode.org"; 
target="_blank">Incode Platform</a> modules.</p> 
+        </div> 
+        <table class="tableblock frame-all grid-all spread"> 
+         <caption class="title">
+          Table 1. Internal Services
+         </caption> 
+         <colgroup> 
+          <col style="width: 30%;"> 
+          <col style="width: 30%;"> 
+          <col style="width: 20%;"> 
+          <col style="width: 20%;"> 
+         </colgroup> 
+         <thead> 
+          <tr> 
+           <th class="tableblock halign-left valign-top">SPI</th> 
+           <th class="tableblock halign-left valign-top">Maven Module<br> 
Impl’n (g: a:)</th> 
+           <th class="tableblock halign-left valign-top">Implementation</th> 
+           <th class="tableblock halign-left valign-top">Notes</th> 
+          </tr> 
+         </thead> 
+         <tbody> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_ContentNegotiationService"><code>o.a.i.v.ro.</code><br>
 <code>rendering.service.conneg.</code><br> 
<code>ContentNegotiationService</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Encodes the algorithm that delegates to any registered <a 
href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService"><code>ContentMappingService</code></a>s.</p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>ContentNegotiationService-</code><br> 
<code>XRoDomainType</code><br> <code>o.a.i.core</code><br> 
<code>isis-core-viewer-restfulobjects-rendering</code></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_RepresentationService"><code>o.a.i.v.ro.</code><br>
 <code>rendering.service.</code><br> 
<code>RepresentationService</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Generates the representations, delegating to any registered 
<a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_ContentNegotiationService"><code>ContentNegotiationService</code></a>s.</p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>RepresentationService-</code><br> 
<code>ForRestfulObjects</code><br> <code>o.a.i.core</code><br> 
<code>isis-core-viewer-restfulobjects-rendering</code></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+         </tbody> 
+        </table> 
+        <div class="paragraph"> 
+         <p>Key:</p> 
+        </div> 
+        <div class="ulist"> 
+         <ul> 
+          <li> <p><code>o.a.i</code> is an abbreviation for 
<code>org.apache.isis</code></p> </li> 
+          <li> <p><code>o.ia.m</code> is an abbreviation for 
<code>org.isisaddons.module</code></p> </li> 
+          <li> <p><code>o.a.i.c.m.s</code> is an abbreviation for 
<code>org.apache.isis.core.metamodel.services</code></p> </li> 
+          <li> <p><code>o.a.i.c.r.s</code> is an abbreviation for 
<code>org.apache.isis.core.runtime.services</code></p> </li> 
+          <li> <p><code>o.a.i.v.ro</code> is an abbreviation for 
<code>org.apache.isis.viewer.restfulobjects</code></p> </li> 
+         </ul> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgfis_presentation-layer_ContentNegotiationService">2.1. 
<code>ContentNegotiationService</code></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/rgfis/_rgfis_presentation-layer_ContentNegotiationService.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/rgfis/_rgfis_presentation-layer_ContentNegotiationService.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/rgfis/_rgfis_presentation-layer_ContentNegotiationService.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/rgfis/_rgfis_presentation-layer_ContentNegotiationService.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/rgfis/_rgfis_presentation-layer_ContentNegotiationService.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>ContentNegotiationService</code> is a plug-in point for 
the <a href="../ugvro/ugvro.html">RestfulObjects viewer</a> so that it can 
generate representations according to HTTP <code>Accept</code> header of the 
request. This idea is discussed in section 34.1 of the <a 
href="http://restfulobjects.org";>Restful Objects spec</a> v1.0.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The principal motivation is to allow more flexible 
representations to be generated for REST clients that (perhaps through their 
use of a certain Javascript library, say) expect, or at least works best with, 
a certain style of representation.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Another use case is to support "third party" REST clients over 
which you have no control. In this scenario you <em>must not</em> naively 
expose entities through the RO viewer, because over time those entities will 
inevitably evolve and change their structure. If the entities were exposed 
directly then those REST clients will break.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Instead you need to create some sort of stable facade over your 
domain entities, one which you will preserve even if the domain entities 
change. There are three ways in which you can do this:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>first is to solve the problem at the domain layer by 
defining a regular Apache Isis <a 
href="../ugfun/ugfun.html#_ugfun_building-blocks_types-of-domain-objects_view-models">view
 model</a>. This is then surfaced over the RO viewer. <br></p> 
+            <div class="paragraph"> 
+             <p>If the underlying entities change, then care must be taken to 
ensure that structure of the view model nevertheless is unchanged.</p> 
+            </div> </li> 
+           <li> <p>a second option is to solve the problem at the persistence 
layer, but defining a (SQL) view in the database and then <a 
href="../ugodn/ugodn.html#_ugodn_jdo-mappings_mapping-to-a-view">mapping 
this</a> to a (read-only) entity. Again this is surfaced by the RO viewer. 
<br></p> 
+            <div class="paragraph"> 
+             <p>If the underlying tables change (as the result of a change in 
their corresponding domain entities) then once more the view must be refactored 
so that it still presents the same structure.</p> 
+            </div> </li> 
+           <li> <p>our third option is to solve the problem at the 
presentation layer, using the <code>ContentNegotiationService</code> described 
in this section.<br></p> 
+            <div class="paragraph"> 
+             <p>The <code>ContentNegotiationService</code> is responsible for 
inspecting the HTTP <code>Accept</code> header, and use this to select the 
correct representation to render. <br></p> 
+            </div> 
+            <div class="paragraph"> 
+             <p>The Apache Isis framework provides three implementations of 
<code>ContentNegotiationService</code> which inspects different elements of the 
HTTP <code>Accept</code> header. One of these implementations, 
<code>ContentNegotiationServiceXRoDomainType</code> will further delegate down 
to the companion <a 
href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService"><code>ContentMappingService</code></a>
 service (if configured/available), based on the value of the 
"x-ro-domain-type" parameter of the header.<br></p> 
+            </div> 
+            <div class="paragraph"> 
+             <p>A typical implementation of <code>ContentMappingService</code> 
will convert the domain object into some sort of DTO (data transfer object) as 
specified by the "x-ro-domaintype". If this DTO is annotated with JAXB or 
Jackson mappings, then the RO viewer (courtesy of the underlying <a 
href="http://resteasy.jboss.org/";>RestEasy</a> framework) can serialize these 
directly.<br></p> 
+            </div> 
+            <div class="paragraph"> 
+             <p>What all that means is that, if the underlying entities 
change, we are required to update the mappings in the 
<code>ContentMappingService</code> to map to the same DTOs.</p> 
+            </div> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>This diagram illustrates the three options available:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" 
href="images/ContentNegotiationService/facade-choices.png"><img 
src="images/ContentNegotiationService/facade-choices.png" alt="facade choices" 
width="700px"></a> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_spi">2.1.1. SPI</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">ContentNegotiationService</span> {
+    Response.ResponseBuilder buildResponse(                     <i 
class="conum" data-value="1"></i><b>(1)</b>
+            RepresentationService.Context2 renderContext2,
+            ObjectAdapter objectAdapter);
+    Response.ResponseBuilder buildResponse(                     <i 
class="conum" data-value="2"></i><b>(2)</b>
+            RepresentationService.Context2 renderContext2,
+            ObjectAndProperty objectAndProperty);
+    Response.ResponseBuilder buildResponse(                     <i 
class="conum" data-value="3"></i><b>(3)</b>
+            RepresentationService.Context2 renderContext2,
+            ObjectAndCollection objectAndCollection);
+    Response.ResponseBuilder buildResponse(                     <i 
class="conum" data-value="4"></i><b>(4)</b>
+            RepresentationService.Context2 renderContext2,
+            ObjectAndAction objectAndAction);
+    Response.ResponseBuilder buildResponse(                     <i 
class="conum" data-value="5"></i><b>(5)</b>
+            RepresentationService.Context2 renderContext2,
+            ObjectAndActionInvocation objectAndActionInvocation);
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>representation of a single object, as per section 14.4 of 
the RO spec, v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>representation of a single property of an object, as per 
section 16.4 of the RO spec v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>representation of a single collection of an object, as per 
section 17.5 of the RO spec v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="4"></i><b>4</b></td> 
+              <td>representation of a single action (prompt) of an object, as 
per section 18.2 of the RO spec v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="5"></i><b>5</b></td> 
+              <td>representation of the results of a single action invocation, 
as per section 19.5 of the RO spec v1.0</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>These methods provide:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p>a <code>RepresentationService.Context2</code> which 
provides access to request-specific context (eg HTTP headers), session-specific 
context (eg authentication) and global context (eg configuration settings)</p> 
</li> 
+            <li> <p>an object representing the information to be 
rendered<br></p> 
+             <div class="paragraph"> 
+              <p>eg <code>ObjectAdapter</code>, 
<code>ObjectAndProperty</code>, <code>ObjectAndCollection</code> etc</p> 
+             </div> </li> 
+           </ul> 
+          </div> 
+          <div class="paragraph"> 
+           <p>In all cases, returning <code>null</code> will result in the 
regular RO spec representation being returned.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_implementation">2.1.2. Implementation</h4> 
+          <div class="paragraph"> 
+           <p><code>ContentNegotiationServiceAbstract</code> (in 
<code>o.a.i.v.ro.rendering.service.conneg</code>) provides a no-op 
implementation of the SPI, along with supporting methods:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code data-lang="java"><span 
class="directive">public</span> <span class="directive">abstract</span> <span 
class="type">class</span> <span 
class="class">ContentNegotiationServiceAbstract</span> <span 
class="directive">implements</span> ContentNegotiationService {
+    ...
+    protected <span class="predefined-type">Object</span> objectOf(<span 
class="directive">final</span> ObjectAdapter objectAdapter) { ... }
+    <span class="directive">protected</span> <span 
class="predefined-type">Object</span> 
returnedObjectOf(ObjectAndActionInvocation objectAndActionInvocation) { ... }
+
+    <span class="directive">protected</span> <span 
class="predefined-type">Class</span>&lt;?&gt; loadClass(<span 
class="predefined-type">String</span> cls) { ... }
+
+    <span class="directive">protected</span> <span class="type">void</span> 
ensureJaxbAnnotated(<span class="predefined-type">Class</span>&lt;?&gt; 
domainType) { ... }
+    <span class="directive">protected</span> <span class="type">void</span> 
ensureDomainObjectAssignable(
+        <span class="predefined-type">String</span> xRoDomainType, <span 
class="predefined-type">Class</span>&lt;?&gt; domainType, <span 
class="predefined-type">Object</span> domainObject) { ... }
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>As discussed in the introduction, the framework also provides 
three implementation of this service, one of which is 
<code>o.a.i.v.ro.rendering.service.conneg.ContentNegotiationServiceXRoDomainType</code>.
 This implementation handles content negotiation for two of the possible 
representations, object representations and for action result 
representations:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p>For object representations it will handle requests with 
HTTP <code>Accept</code> headers of the form:</p> 
+             <div class="ulist"> 
+              <ul> 
+               <li> 
<p><code>application/json;profile=urn:org.restfulobjects:repr-types/object;x-ro-domain-type=…​</code></p>
 </li> 
+               <li> 
<p><code>application/xml;profile=urn:org.restfulobjects:repr-types/object;x-ro-domain-type=…​</code></p>
 </li> 
+              </ul> 
+             </div> </li> 
+            <li> <p>for action result representations it will similarly handle 
requests with HTTP <code>Accept</code> headers of the form:</p> 
+             <div class="ulist"> 
+              <ul> 
+               <li> 
<p><code>application/json;profile=urn:org.restfulobjects:repr-types/action-result;x-ro-domain-type=…​</code><br></p>
 </li> 
+               <li> 
<p><code>application/xml;profile=urn:org.restfulobjects:repr-types/action-result;x-ro-domain-type=…​</code></p>
 </li> 
+              </ul> 
+             </div> </li> 
+           </ul> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The value of the <code>x-ro-domain-type</code> parameter 
corresponds to the DTO to be mapped into by the <a 
href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService"><code>ContentMappingService</code></a>.</p>
 
+          </div> 
+          <div class="paragraph"> 
+           <p>If the DTO is annotated with JAXB, then also note that the 
runtime type must be annotated with the JAXB 
<code>javax.xml.bind.annotation.XmlRootElement</code> so that RestEasy is able 
to unambiguously serialize it.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The other two implementations of 
<code>ContentNegotiationService</code> are:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> 
<p><code>ContentNegotiationServiceForRestfulObjectsV1_0</code><br></p> 
+             <div class="paragraph"> 
+              <p>which returns representations according to the <a 
href="http://restfulobjects.org";>Restful Objects</a> spec</p> 
+             </div> </li> 
+            <li> 
<p><code>ContentNegotiationServiceOrgApacheIsisV1</code><br></p> 
+             <div class="paragraph"> 
+              <p>which returns <a 
href="../ugvro/ugvro.html#_ugvro_simplified-representations">simplified 
representations</a></p> 
+             </div> </li> 
+           </ul> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_usage">2.1.3. Usage</h4> 
+          <div class="paragraph"> 
+           <p>You can find an example of all these services in the (non-ASF) 
<a href="http://github.com/isisaddons/isis-app-todoapp";>Isis addons' 
todoapp</a>. This defines a <code>ToDoItemDto</code> class that is JAXB 
annotated (it is in fact generated from an XSD).</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The example app also includes an implementation of 
<code>ContentMappingService</code> that maps 
<code>todoapp.dom.module.todoitem.ToDoItem</code> entities to 
<code>todoapp.dto.module.todoitem.ToDoItemDto</code> classes.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>A REST client can therefore request a DTO representation of an 
entity by invoking</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay 
highlight"><code>http://localhost:8080/restful/objects/TODO/0</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>with an <code>Accept</code> header of:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay 
highlight"><code>application/xml;profile=urn:org.restfulobjects:repr-types/object;x-ro-domain-type=todoapp.dto.module.todoitem.ToDoItemDto</code></pre>
 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>will result in an XML serialization of that class:</p> 
+          </div> 
+          <div class="imageblock"> 
+           <div class="content"> 
+            <a class="image" 
href="images/ContentNegotiationService/accept-xml.png"><img 
src="images/ContentNegotiationService/accept-xml.png" alt="accept xml" 
width="700px"></a> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>while similarly hitting the same URL with an <code>Accept</code> 
header of:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay 
highlight"><code>application/json;profile=urn:org.restfulobjects:repr-types/object;x-ro-domain-type=todoapp.dto.module.todoitem.ToDoItemDto</code></pre>
 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>will result in the JSON serialization of that class:</p> 
+          </div> 
+          <div class="imageblock"> 
+           <div class="content"> 
+            <a class="image" 
href="images/ContentNegotiationService/accept-json.png"><img 
src="images/ContentNegotiationService/accept-json.png" alt="accept json" 
width="700px"></a> 
+           </div> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_configuration">2.1.4. Configuration</h4> 
+          <div class="paragraph"> 
+           <p>The default <code>ContentNegotiationServiceXRoDomainType</code> 
implementation provides a <a 
href="../rgcfg/rgcfg.html#_rgcfg_configuring-core">configuration property</a> 
which controls whether a mapped domain object is pretty-printed (formatted, 
indented) or not:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code 
data-lang="ini">isis.services.ContentNegotiationServiceXRoDomainType.prettyPrint=true</code></pre>
 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>If the property is not set, then the default depends on the <a 
href="../rgcfg/rgcfg.html#_rgcfg_deployment-types">deployment type</a>; 
production mode will disable pretty printing, while prototyping mode will 
enable it.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_registering_the_services">2.1.5. Registering the 
Services</h4> 
+          <div class="paragraph"> 
+           <p>Assuming that the <code>configuration-and-annotation</code> 
services installer is configured (implicit if using the 
<code>AppManifest</code> to <a 
href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap 
the app</a>) then Apache Isis' default implementations of 
<code>ContentNegotiationService</code> service are automatically registered and 
injected (it is annotated with <code>@DomainService</code>) so no further 
configuration is required.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>To use an alternative implementation, use <a 
href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>
 (as explained in the <a 
href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a>
 to this guide).</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_related_services">2.1.6. Related Services</h4> 
+          <div class="paragraph"> 
+           <p>The default implementation of 
<code>ContentNegotiationService</code> delegates to <a 
href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService"><code>ContentMappingService</code></a>
 (if present) to convert domain entities into a stable form (eg DTO).</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The <code>ContentNegotiationService</code> is itself called by 
the (default implementation of) <a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_RepresentationService"><code>RepresentationService</code></a>.</p>
 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgfis_presentation-layer_RepresentationService">2.2. 
<code>RepresentationService</code></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/rgfis/_rgfis_presentation-layer_RepresentationService.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/rgfis/_rgfis_presentation-layer_RepresentationService.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/rgfis/_rgfis_presentation-layer_RepresentationService.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/rgfis/_rgfis_presentation-layer_RepresentationService.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/rgfis/_rgfis_presentation-layer_RepresentationService.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>RepresentationService</code> is the main plug-in point 
for the <a href="../ugvro/ugvro.html">RestfulObjects viewer</a> to generate 
representations.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The default implementation generates representations according to 
the <a href="http://restfulobjects.org";>Restful Objects spec</a> v1.0. However, 
it also delegates to the <a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_ContentNegotiationService"><code>ContentNegotiationService</code></a>
 which provides a mechanism for altering representations according to the HTTP 
<code>Accept</code> header.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The principal motivation is to allow more flexible 
representations to be generated for REST clients that (perhaps through their 
use of a certain Javascript library, say) expect, or at least works best with, 
a certain style of representation.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>In all there are three domain services that can influence the 
representations generated: this service, <a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_ContentNegotiationService"><code>ContentNegotiationService</code></a>and
 the <a 
href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService"><code>ContentMappingService</code></a>.
 The diagram below shows how these collaborate:</p> 
+         </div> 
+         <div class="imageblock"> 
+          <div class="content"> 
+           <a class="image" 
href="images/RepresentationService/service-collaborations.png"><img 
src="images/RepresentationService/service-collaborations.png" alt="service 
collaborations" width="700px"></a> 
+          </div> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The <code>RepresentationServiceForRestfulObjects</code> is the 
default implementation of this service; likewise 
<code>ContentNegotiationServiceXRoDomainType</code> is the default 
implementation of the <code>ContentNegotiationService</code>. If you inspect 
the source code you’ll see that the default implementation of this 
service’s primary responsibility is to generate the default Restful Objects 
representations. Therefore, if you what you want to do is to generate a 
<em>different _representation then in many cases replacing either this service 
_or</em> the <code>ContentNegotiationService</code> will be equivalent 
(you’ll notice that their SPIs are very similar).</p> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_spi_2">2.2.1. SPI</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">RepresentationService</span> {
+    Response objectRepresentation(                  <i class="conum" 
data-value="1"></i><b>(1)</b>
+            <span class="predefined-type">Context</span> rendererContext,
+            ObjectAdapter objectAdapter);
+    Response propertyDetails(                       <i class="conum" 
data-value="2"></i><b>(2)</b>
+            <span class="predefined-type">Context</span> rendererContext,
+            ObjectAndProperty objectAndProperty,
+            MemberReprMode memberReprMode);
+    Response collectionDetails(                     <i class="conum" 
data-value="3"></i><b>(3)</b>
+            <span class="predefined-type">Context</span> rendererContext,
+            ObjectAndCollection objectAndCollection,
+            MemberReprMode memberReprMode);
+    Response actionPrompt(                          <i class="conum" 
data-value="4"></i><b>(4)</b>
+            <span class="predefined-type">Context</span> rendererContext,
+            ObjectAndAction objectAndAction);
+    Response actionResult(                          <i class="conum" 
data-value="5"></i><b>(5)</b>
+            <span class="predefined-type">Context</span> rendererContext,
+            ObjectAndActionInvocation objectAndActionInvocation,
+            ActionResultReprRenderer.SelfLink selfLink);
+    <span class="directive">public</span> <span 
class="directive">static</span> <span class="type">interface</span> <span 
class="class">Context</span> <span class="directive">extends</span> 
RendererContext {
+        ObjectAdapterLinkTo getAdapterLinkTo();
+    }
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>representation of a single object, as per section 14.4 of 
the RO spec, v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>representation of a single property of an object, as per 
section 16.4 of the RO spec v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>representation of a single collection of an object, as per 
section 17.5 of the RO spec v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="4"></i><b>4</b></td> 
+              <td>representation of a single action (prompt) of an object, as 
per section 18.2 of the RO spec v1.0</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="5"></i><b>5</b></td> 
+              <td>representation of the results of a single action invocation, 
as per section 19.5 of the RO spec v1.0</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>These methods provide:</p> 
+          </div> 
+          <div class="ulist"> 
+           <ul> 
+            <li> <p>a <code>RendererContext</code> which provides access to 
request-specific context (eg HTTP headers), session-specific context (eg 
authentication) and global context (eg configuration settings)</p> </li> 
+            <li> <p>an object representing the information to be 
rendered<br></p> 
+             <div class="paragraph"> 
+              <p>eg <code>ObjectAdapter</code>, 
<code>ObjectAndProperty</code>, <code>ObjectAndCollection</code> etc</p> 
+             </div> </li> 
+            <li> <p>for members, whether the representation is in read/write 
mode<br></p> 
+             <div class="paragraph"> 
+              <p>ie <code>MemberReprMode</code></p> 
+             </div> </li> 
+           </ul> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_implementation_2">2.2.2. Implementation</h4> 
+          <div class="paragraph"> 
+           <p>As discussed in the introduction, the framework provides a 
default implementation, 
<code>o.a.i.v.ro.rendering.service.RepresentationServiceContentNegotiator</code>.
 This delegates to <a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_ContentNegotiationService"><code>ContentNegotiationService</code></a>
 to generate an alternative representation; but if none is provided then it 
falls back on generating the representations as defined in the <a 
href="http://restfulobjects.org";>Restful Objects spec</a> v1.0.</p> 
+          </div> 
+          <div class="paragraph"> 
+           <p>To use an alternative implementation, use <a 
href="../rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder"><code>@DomainServiceLayout#menuOrder()</code></a>
 (as explained in the <a 
href="../rgsvc/rgsvc.html#__rgsvc_intro_overriding-the-services">introduction</a>
 to this guide).</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_registering_the_services_2">2.2.3. Registering the 
Services</h4> 
+          <div class="paragraph"> 
+           <p>Assuming that the <code>configuration-and-annotation</code> 
services installer is configured (implicit if using the 
<code>AppManifest</code> to <a 
href="../rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping">bootstrap 
the app</a>) then Apache Isis' default implementation of 
<code>RepresentationService</code> service is automatically registered and 
injected (it is annotated with <code>@DomainService</code>) so no further 
configuration is required.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_related_services_2">2.2.4. Related Services</h4> 
+          <div class="paragraph"> 
+           <p>The default implementation delegates to <a 
href="../rgfis/rgfis.html#_rgfis_presentation-layer_ContentNegotiationService"><code>ContentNegotiationService</code></a>,
 whose default implementation may delegate in turn to <a 
href="../rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService"><code>ContentMappingService</code></a>
 (if present).</p> 
+          </div> 
+         </div> 
+        </div> 
+       </div> 
+      </div> 
+      <div class="sect1"> 
+       <h2 id="_rgfis_application-layer">3. Application Layer</h2>
+       <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/rgfis/_rgfis_application-layer.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/rgfis/_rgfis_application-layer.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/rgfis/_rgfis_application-layer.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/rgfis/_rgfis_application-layer.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/rgfis/_rgfis_application-layer.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+        </ul>
+       </div> 
+       <div class="sectionbody"> 
+        <div class="paragraph"> 
+         <p>These domain services are internal to the framework, controlling 
various aspects of the application layer.</p> 
+        </div> 
+        <div class="paragraph"> 
+         <p>The table below summarizes the application layer internal SPIs 
defined by Apache Isis. It also lists their corresponding implementation, 
either a default implementation provided by Apache Isis itself, or provided by 
one of the (non-ASF) <a href="http://platform.incode.org"; 
target="_blank">Incode Platform</a> modules.</p> 
+        </div> 
+        <table class="tableblock frame-all grid-all spread"> 
+         <caption class="title">
+          Table 2. Internal Services
+         </caption> 
+         <colgroup> 
+          <col style="width: 30%;"> 
+          <col style="width: 30%;"> 
+          <col style="width: 20%;"> 
+          <col style="width: 20%;"> 
+         </colgroup> 
+         <thead> 
+          <tr> 
+           <th class="tableblock halign-left valign-top">SPI</th> 
+           <th class="tableblock halign-left valign-top">Maven Module<br> 
Impl’n (g: a:)</th> 
+           <th class="tableblock halign-left valign-top">Implementation</th> 
+           <th class="tableblock halign-left valign-top">Notes</th> 
+          </tr> 
+         </thead> 
+         <tbody> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_application-layer_AuthenticationSessionProvider"><code>o.a.i.core.commons.</code><br>
 <code>authentication.</code><br> 
<code>AuthenticationSessionProvider</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Simply responsible for obtaining the current 
<code>AuthenticationSession</code> (the framework’s internal representation 
of the currently logged-in user).</p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>AuthenticationSession-</code><br> 
<code>ProviderDefault</code><br> <code>isis-core-runtime</code></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div>
+             <div class="paragraph"> 
+              <p>Default implementation looks up from 
<code>IsisSessionFactory</code> singleton’s thread-local</p> 
+             </div>
+            </div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_application-layer_CommandDtoServiceInternal"><code>o.a.i.c.m.s.command</code><br>
 <code>CommandDtoServiceInternal</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Creates memento of current action invocation, for use as a 
serializable XML reified command. The most notable usage of this is to allow 
the execution of the <code>Command</code> to be deferred to run in the 
background (via <a 
href="../rgant/rgant.html#_rgant-Action_command"><code>@Action#commandExecuteIn()</code></a>
 or <a 
href="../rgant/rgant.html#_rgant-Property_command"><code>@Property#commandExecuteIn()</code></a>.</p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>CommandDtoService-</code><br> 
<code>InternalServiceDefault</code><br> <code>isis-core-runtime</code></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_application-layer_InteractionDtoServiceInternal"><code>o.a.i.c.m.s.ixn</code><br>
 <code>InteractionDtoServiceInternal</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Creates DTO for the current execution of an action 
invocation or property edit, for use either as a reified command or for 
implementations of the <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a>.</p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>CommandDtoService-</code><br> 
<code>InternalServiceDefault</code><br> 
<code>isis-core-metamodel</code></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+         </tbody> 
+        </table> 
+        <div class="paragraph"> 
+         <p>Key:</p> 
+        </div> 
+        <div class="ulist"> 
+         <ul> 
+          <li> <p><code>o.a.i</code> is an abbreviation for 
<code>org.apache.isis</code></p> </li> 
+          <li> <p><code>o.ia.m</code> is an abbreviation for 
<code>org.isisaddons.module</code></p> </li> 
+          <li> <p><code>o.a.i.c.m.s</code> is an abbreviation for 
<code>org.apache.isis.core.metamodel.services</code></p> </li> 
+          <li> <p><code>o.a.i.c.r.s</code> is an abbreviation for 
<code>org.apache.isis.core.runtime.services</code></p> </li> 
+         </ul> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgfis_application-layer_AuthenticationSessionProvider">3.1. 
<code>AuthenticationSessionProvider</code></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/rgfis/_rgfis_application-layer_AuthenticationSessionProvider.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/rgfis/_rgfis_application-layer_AuthenticationSessionProvider.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/rgfis/_rgfis_application-layer_AuthenticationSessionProvider.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/rgfis/_rgfis_application-layer_AuthenticationSessionProvider.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/rgfis/_rgfis_application-layer_AuthenticationSessionProvider.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 (internal) <code>AuthenticationSessionProvider</code> domain 
service is simply responsible for obtaining the 
<code>AuthenticationSession</code> (being the framework’s internal 
representation of the currently logged in user).</p> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_spi_and_implementation">3.1.1. SPI and Implementation</h4> 
+          <div class="paragraph"> 
+           <p>The SPI of the 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">AuthenticationSessionProvider</span> {
+    AuthenticationSession getAuthenticationSession();
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The framework provides a default implementation of the service, 
<code>AuthenticationSessionProviderDefault</code>, which looks up the current 
<code>AuthenticationSession</code> from <code>IsisSessionFactory</code> 
singleton service:</p> 
+          </div> 
+          <div class="listingblock"> 
+           <div class="content"> 
+            <pre class="CodeRay highlight"><code 
data-lang="java">isisSessionFactory.getCurrentSession().getAuthenticationSession();</code></pre>
 
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>If <a 
href="../rgsvc/rgsvc.html#_rgsvc_testing_SudoService"><code>SudoService</code></a>
 has been used to temporarily override the user and/or roles, then this service 
will report the overridden values.</p> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgfis_application-layer_CommandDtoServiceInternal">3.2. 
<code>CommandDtoServiceInternal</code></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/rgfis/_rgfis_application-layer_CommandDtoServiceInternal.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/rgfis/_rgfis_application-layer_CommandDtoServiceInternal.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/rgfis/_rgfis_application-layer_CommandDtoServiceInternal.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/rgfis/_rgfis_application-layer_CommandDtoServiceInternal.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/rgfis/_rgfis_application-layer_CommandDtoServiceInternal.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>CommandDtoServiceInternal</code> is responsible for 
creating an memento of the current action invocation or property edit, to store 
in the <code>Command</code> object (from <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext"><code>CommandContext</code></a>).
 This memento is a JAXB DTO being an instance of the <a 
href="../rgcms/rgcms.html#_rgcms_schema-cmd">"cmd" schema</a>, so can be 
reified so that its execution can be deferred until later, as a <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-spi_BackgroundCommandService">background
 command</a>.</p> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_spi_implementation">3.2.1. SPI &amp; Implementation</h4> 
+          <div class="paragraph"> 
+           <p>The SPI of the 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">CommandDtoServiceInternal</span> {
+    <span class="annotation">@Deprecated</span>
+    ActionInvocationMemento asActionInvocationMemento(      <i class="conum" 
data-value="1"></i><b>(1)</b>
+            <span class="predefined-type">Method</span> m,
+            <span class="predefined-type">Object</span> domainObject, <span 
class="predefined-type">Object</span><span class="type">[]</span> args);
+    CommandDto asCommandDto(                                <i class="conum" 
data-value="2"></i><b>(2)</b>
+            <span class="predefined-type">List</span>&lt;ObjectAdapter&gt; 
targetAdapters,
+            ObjectAction objectAction,
+            ObjectAdapter<span class="type">[]</span> argAdapters);
+    CommandDto asCommandDto(                                <i class="conum" 
data-value="3"></i><b>(3)</b>
+            <span class="directive">final</span> <span 
class="predefined-type">List</span>&lt;ObjectAdapter&gt; targetAdapters,
+            <span class="directive">final</span> OneToOneAssociation 
association,
+            <span class="directive">final</span> ObjectAdapter 
valueAdapterOrNull);
+    <span class="type">void</span> addActionArgs(                              
       <i class="conum" data-value="4"></i><b>(4)</b>
+            <span class="directive">final</span> ObjectAction objectAction,
+            <span class="directive">final</span> ActionDto actionDto,
+            <span class="directive">final</span> ObjectAdapter<span 
class="type">[]</span> argAdapters);
+    <span class="type">void</span> addPropertyValue(                           
       <i class="conum" data-value="5"></i><b>(5)</b>
+            <span class="directive">final</span> OneToOneAssociation property,
+            <span class="directive">final</span> PropertyDto propertyDto,
+            <span class="directive">final</span> ObjectAdapter valueAdapter);
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>Note that this method (more precisely, 
<code>ActionInvocationMemento</code>) does <em>not</em> support mixins.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>Returns a JAXB DTO being an instance of the <a 
href="../rgcms/rgcms.html#_rgcms_schema-cmd">"cmd" schema</a> (hence 
convertible to XML) that represents the <em>intention</em> to invoke an action 
on a target object (or possibly many targets, for bulk actions). If an action, 
it can also be either mixin action or a contributed action.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>Returns a JAXB DTO that represents the intention to edit 
(set or clear) a property on a target (or possibly many targets, for symmetry 
with actions).</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="4"></i><b>4</b></td> 
+              <td>add the arguments of an action to an <code>ActionDto</code>. 
This is used when the command is actually executed (per <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext"><code>InteractionContext</code></a>)
 to populate the parameters of the equivalent 
<code>ActionInvocationDto</code>.</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="5"></i><b>5</b></td> 
+              <td>add the new value argument of a property to a 
<code>PropertyDto</code>. This is used when the command is actually executed 
(per <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext"><code>InteractionContext</code></a>)
 to set the the new value of the equivalent <code>PropertyEditDto</code>.</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The SPI is implemented by 
<code>o.a.i.c.r.s.command.CommandDtoServiceInternalServiceDefault</code>.</p> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_related_services_3">3.2.2. Related Services</h4> 
+          <div class="paragraph"> 
+           <p>The design of this service is similar to that of <a 
href="../rgfis/rgfis.html#_rgfis_application-layer_InteractionDtoServiceInternal"><code>InteractionDtoServiceInternal</code></a>,
 used to create the <code>MemberExecutionDto</code> (from the <a 
href="../rgcms/rgcms.html#_rgcms_schema-ixn">"ixn" schema</a>).</p> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgfis_application-layer_InteractionDtoServiceInternal">3.3. 
<code>InteractionDtoServiceInternal</code></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/rgfis/_rgfis_application-layer_InteractionDtoServiceInternal.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/rgfis/_rgfis_application-layer_InteractionDtoServiceInternal.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/rgfis/_rgfis_application-layer_InteractionDtoServiceInternal.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/rgfis/_rgfis_application-layer_InteractionDtoServiceInternal.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/rgfis/_rgfis_application-layer_InteractionDtoServiceInternal.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>InteractionDtoServiceInternal</code> internal domain 
service is used by the framework to create and update DTOs representing member 
executions, ie the invocation of an action or the editing of a property. The 
DTO is in all cases a subclass of <code>MemberExecutionDto</code>, from the <a 
href="../rgcms/rgcms.html#_rgcms_schema-ixn">"ixn" schema</a>, and subsequently 
accessible from the <code>Interaction</code> object (per the <a 
href="../rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext"><code>InteractionContext</code></a>
 service).</p> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_spi_implementation_2">3.3.1. SPI &amp; Implementation</h4> 
+          <div class="paragraph"> 
+           <p>The SPI of the 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">InteractionDtoServiceInternal</span> {
+    ActionInvocationDto asActionInvocationDto(          <i class="conum" 
data-value="1"></i><b>(1)</b>
+            ObjectAction objectAction,
+            ObjectAdapter targetAdapter,
+            <span class="predefined-type">List</span>&lt;ObjectAdapter&gt; 
argumentAdapters);
+    PropertyEditDto asPropertyEditDto(                  <i class="conum" 
data-value="2"></i><b>(2)</b>
+            OneToOneAssociation property,
+            ObjectAdapter targetAdapter,
+            ObjectAdapter newValueAdapterIfAny);
+    ActionInvocationDto updateResult(                   <i class="conum" 
data-value="3"></i><b>(3)</b>
+            ActionInvocationDto actionInvocationDto,
+            ObjectAction objectAction,
+            <span class="predefined-type">Object</span> resultPojo);
+}</code></pre> 
+           </div> 
+          </div> 
+          <div class="colist arabic"> 
+           <table> 
+            <tbody>
+             <tr> 
+              <td><i class="conum" data-value="1"></i><b>1</b></td> 
+              <td>called by the framework when invoking an action, to create a 
DTO capturing the details of the action invocation (target, arguments 
etc).</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="2"></i><b>2</b></td> 
+              <td>called by the framework when editing a property, to create a 
DTO (for the <a href="../rgcms/rgcms.html#_rgcms_schema-ixn">"ixn" schema</a>) 
capturing the details of the property edit (target, new value etc).</td> 
+             </tr> 
+             <tr> 
+              <td><i class="conum" data-value="3"></i><b>3</b></td> 
+              <td>called by the framework to attach the result of an action 
invocation to the aforementioned DTO.</td> 
+             </tr> 
+            </tbody>
+           </table> 
+          </div> 
+          <div class="paragraph"> 
+           <p>The service is implemented by 
<code>o.a.i.core.runtime.services.ixn.InteractionDtoServiceInternalDefault</code>.</p>
 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="_related_services_4">3.3.2. Related Services</h4> 
+          <div class="paragraph"> 
+           <p>The design of this service is similar to that of <a 
href="../rgfis/rgfis.html#_rgfis_application-layer_CommandDtoServiceInternal"><code>CommandDtoServiceInternal</code></a>,
 used to create the <code>CommandDto</code> (from the <a 
href="../rgcms/rgcms.html#_rgcms_schema-cmd">"cmd" schema</a>).</p> 
+          </div> 
+         </div> 
+        </div> 
+       </div> 
+      </div> 
+      <div class="sect1"> 
+       <h2 id="_rgfis_persistence-layer">4. Persistence Layer internal SPI</h2>
+       <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/rgfis/_rgfis_persistence-layer.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/rgfis/_rgfis_persistence-layer.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/rgfis/_rgfis_persistence-layer.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/rgfis/_rgfis_persistence-layer.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/rgfis/_rgfis_persistence-layer.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+        </ul>
+       </div> 
+       <div class="sectionbody"> 
+        <div class="paragraph"> 
+         <p>These domain services are internal to the framework, controlling 
various aspects of the persistence layer.</p> 
+        </div> 
+        <div class="paragraph"> 
+         <p>The table below summarizes the persistence layer internal SPIs 
defined by Apache Isis. It also lists their corresponding implementation, 
either a default implementation provided by Apache Isis itself, or provided by 
one of the (non-ASF) <a href="http://platform.incode.org"; 
target="_blank">Incode Platform</a> modules.</p> 
+        </div> 
+        <table class="tableblock frame-all grid-all spread"> 
+         <caption class="title">
+          Table 3. Internal Services
+         </caption> 
+         <colgroup> 
+          <col style="width: 30%;"> 
+          <col style="width: 30%;"> 
+          <col style="width: 20%;"> 
+          <col style="width: 20%;"> 
+         </colgroup> 
+         <thead> 
+          <tr> 
+           <th class="tableblock halign-left valign-top">SPI</th> 
+           <th class="tableblock halign-left valign-top">Maven Module<br> 
Impl’n (g: a:)</th> 
+           <th class="tableblock halign-left valign-top">Implementation</th> 
+           <th class="tableblock halign-left valign-top">Notes</th> 
+          </tr> 
+         </thead> 
+         <tbody> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_persistence-layer_AuditingServiceInternal"><code>o.a.i.c.r.s.auditing.</code><br>
 <code>AuditingServiceInternal</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Co-ordinates between <a 
href="../rgfis/rgfis.html#_rgfis_persistence-layer_ChangedObjectsServiceInternal"><code>ChangedObjectsServiceInternal</code></a>
 and <a 
href="../rgfis/rgfis.html#_rgfis_spi_AuditerService"><code>AuditerService</code></a>.</p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">concrete class.</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_persistence-layer_ChangedObjectsServiceInternal"><code>o.a.i.c.r.s.changes.</code><br>
 <code>ChangedObjectsServiceInternal</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Request-scoped service holding objects enlisted into current 
transaction.</p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">concrete class.</p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_persistence-layer_PersistenceSessionServiceInternal"><code>o.a.i.c.m.s.</code><br>
 <code>persistsession.</code><br> 
<code>PersistenceSessionServiceInternal</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Acts as a facade to the underlying JDO persistence session / 
database connection. As such it provides methods for querying and for 
persisting objects.</p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>PersistenceSessionService-</code><br> 
<code>InternalDefault</code><br> <code>isis-core-runtime</code></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+          <tr> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><a 
href="../rgfis/rgfis.html#_rgfis_persistence-layer_PublishingServiceInternal"><code>o.a.i.c.m.s.publishing.</code><br>
 <code>PublishingServiceInternal</code></a></p></td> 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock">Co-ordinates between <a 
href="../rgfis/rgfis.html#_rgfis_persistence-layer_ChangedObjectsServiceInternal"><code>ChangedObjectsServiceInternal</code></a>
 and <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_MetricsService"><code>MetricsService</code></a>
 and the SPI services, <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService"><code>PublisherService</code></a>
 and (deprecated) <a 
href="../rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService"><code>PublishingService</code></a>.</p></td>
 
+           <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>PublishingService-</code><br> 
<code>InternalDefault</code><br> <code>isis-core-runtime</code></p></td> 
+           <td class="tableblock halign-left valign-top">
+            <div></div></td> 
+          </tr> 
+         </tbody> 
+        </table> 
+        <div class="paragraph"> 
+         <p>Key:</p> 
+        </div> 
+        <div class="ulist"> 
+         <ul> 
+          <li> <p><code>o.a.i</code> is an abbreviation for 
<code>org.apache.isis</code></p> </li> 
+          <li> <p><code>o.ia.m</code> is an abbreviation for 
<code>org.isisaddons.module</code></p> </li> 
+          <li> <p><code>o.a.i.c.m.s</code> is an abbreviation for 
<code>org.apache.isis.core.metamodel.services</code></p> </li> 
+          <li> <p><code>o.a.i.c.r.s</code> is an abbreviation for 
<code>org.apache.isis.core.runtime.services</code></p> </li> 
+         </ul> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_rgfis_persistence-layer_AuditingServiceInternal">4.1. 
<code>AuditingServiceInternal</code></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/rgfis/_rgfis_persistence-layer_AuditingServiceInternal.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/rgfis/_rgfis_persistence-layer_AuditingServiceInternal.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/rgfis/_rgfis_persistence-layer_AuditingServiceInternal.adoc";
 target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; 
History</a></li>
+           

<TRUNCATED>

Reply via email to