You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by bu...@apache.org on 2015/04/15 23:40:09 UTC

svn commit: r947786 [26/30] - in /websites/staging/isis/trunk: cgi-bin/ content/ content/docs/ content/docs/css/asciidoctor/ content/docs/css/font-awesome/4.3.0/css/ content/docs/css/font-awesome/4.3.0/fonts/ content/docs/css/font-awesome/4.3.0/less/ c...

Added: websites/staging/isis/trunk/content/docs/user-guide/user-guide-how-tos.html
==============================================================================
--- websites/staging/isis/trunk/content/docs/user-guide/user-guide-how-tos.html (added)
+++ websites/staging/isis/trunk/content/docs/user-guide/user-guide-how-tos.html Wed Apr 15 21:40:06 2015
@@ -0,0 +1,1721 @@
+<!doctype html>
+
+<html class="no-js" lang="en">
+
+<head>
+
+    <meta charset="utf-8"/>
+
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+
+
+
+    <title>User Guide: How-tos</title>
+
+
+
+    <!--
+
+        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.
+
+    -->
+
+
+
+    <!-- No caching headers -->
+
+    <meta http-equiv="cache-control" content="no-cache" />
+
+    <meta http-equiv="pragma" content="no-cache" />
+
+    <meta http-equiv="expires" content="-1" />
+
+
+
+
+
+    <link rel="stylesheet" href="../css/foundation/5.5.1/foundation.css"/>
+
+    <script src="../js/foundation/5.5.1/vendor/modernizr.js"></script>
+
+
+
+    <link href="../css/asciidoctor/stylesheets/foundation-potion.css" rel="stylesheet">
+
+
+
+    <link href="../css/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
+
+
+
+    <style type="text/css">
+
+        #forkongithub a{
+
+            display: none;
+
+            background:#090;
+
+            color:#fff;
+
+            text-decoration:none;
+
+            font-family:arial, sans-serif;
+
+            text-align:center;
+
+            font-weight:bold;
+
+            padding:5px 40px;
+
+            font-size:1rem;
+
+            line-height:2rem;
+
+            position:relative;
+
+            transition:0.5s;
+
+        }
+
+        #forkongithub a:hover{
+
+            background:#0D0;
+
+            color:#fff;
+
+        }
+
+        #forkongithub a::before,
+
+        #forkongithub a::after{
+
+            content:"";width:100%;
+
+            display:block;
+
+            position:fixed;
+
+            top:1px;
+
+            left:0;
+
+            height:1px;
+
+            background:#fff;
+
+            z-index: 9999;
+
+        }
+
+        #forkongithub a::after{
+
+            bottom:1px;
+
+            top:auto;
+
+        }
+
+        @media screen and (min-width:768px){
+
+            #forkongithub{
+
+                position:fixed;
+
+                display:block;
+
+                top:0;
+
+                right:0;
+
+                width:250px;
+
+                overflow:hidden;
+
+                height:250px;
+
+                z-index: 9999;
+
+            }
+
+            #forkongithub a{
+
+                display:inherit;
+
+                width:250px;
+
+                position:fixed;
+
+                font-size:small;
+
+                top:40px;
+
+                right:-60px;
+
+                transform:rotate(45deg);
+
+                -webkit-transform:rotate(45deg);
+
+                -ms-transform:rotate(45deg);
+
+                box-shadow:4px 4px 10px rgba(0,0,0,0.8);
+
+            }
+
+        }
+
+    </style>
+
+
+
+    <style>
+
+        body {
+
+          position: relative;
+
+        }
+
+
+
+        body div#toc li,
+
+        body div#toc2 li {
+
+            list-style-type: none;
+
+        }
+
+
+
+        div#doc-content {
+
+            margin-top: 30px;
+
+        }
+
+
+
+        body div#toc li.active-region:before,
+
+        body div#toc2 li.active-region:before {
+
+            content: "\00BB \0020";
+
+            margin-left: -12px;
+
+        }
+
+
+
+        body div#toc li a.active,
+
+        body div#toc2 li a.active {
+
+            color: red;
+
+        }
+
+
+
+        body div#toc.toc,
+
+        body div#toc.toc2 {
+
+            position: fixed;
+
+            left: auto;
+
+            padding-top: 120px;
+
+            z-index: auto;
+
+            background-color: white;
+
+            border-left-color: #eee;
+
+            border-left-style: solid;
+
+            border-right: none;
+
+        }
+
+    </style>
+
+
+
+</head>
+
+<body>
+
+
+
+    <span id="forkongithub">
+
+        <a href="https://github.com/apache/isis">Fork me on GitHub</a>
+
+    </span>
+
+
+
+<div class="row">
+
+
+
+    <div class="fixed contain-to-grid">
+
+        <nav class="top-bar" data-topbar role="navigation">
+
+            <ul class="title-area">
+
+                <li class="name">
+
+                    <h1>
+
+                        <a href="/index.html">Apache Isis&trade;</a>
+
+                    </h1>
+
+                </li>
+
+                <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
+
+                <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
+
+            </ul>
+
+
+
+            <section class="top-bar-section">
+
+                <ul class="right">
+
+
+
+                    <li class="has-form">
+
+                       <FORM class="searchbox navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
+
+                        <div class="row collapse">
+
+                            <input type="hidden" name="cx" value="012614087480249044419:dn-q5gtwxya">
+
+                            <INPUT type="hidden" name="cof" value="FORID:0">
+
+                            <INPUT class="form-control" name="q" type="text" placeholder="Search">
+
+                        </div>
+
+                    </FORM>
+
+                     </li>
+
+
+
+                </ul>
+
+
+
+                <!-- Left Nav Section -->
+
+                <ul class="left">
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#" >Demos</b></a>
+
+                      <ul class="dropdown">
+
+                        <li><a href="/intro/elevator-pitch/isis-in-pictures.html">Screenshots</a></li>
+
+                        <li><a href="/intro/tutorials/screencasts.html">Screencasts&nbsp;<img src="/images/tv_show-25.png"></a></li>
+
+                        <li><a href="/intro/powered-by/powered-by.html">Powered by</a></li>
+
+                        <li><a href="http://isisdemo.mmyco.co.uk/" target="_blank">Online Demo</a></li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                    <li><a href="/documentation">Documentation</a></li>
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#">Downloads</a>
+
+                      <ul class="dropdown">
+
+                        <li><a href="/intro/getting-started/simpleapp-archetype.html">Isis (Maven archetype)</a></li>
+
+                        <li><a href="/download.html">Isis (downloads)</a></li>
+
+                        <li><a href="http://www.isisaddons.org" target="_blank">Isis Add-ons (not ASF)</a></li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#">Help</a>
+
+                      <ul class="dropdown">
+
+                        <li><a href="/support.html">Mailing Lists</a></li>
+
+                        <li><a href="http://isis.markmail.org/search/?q=" target="_blank">Mailing List Archives</a></li>
+
+                        <li><a href="https://issues.apache.org/jira/browse/ISIS" target="_blank">JIRA</a></li>
+
+                        <li><a href="http://github.com/apache/isis" target="_blank">Github mirror</a></li>
+
+                        <li><a href="http://stackoverflow.com/questions/tagged/isis" target="_blank">Stack Overflow</a></li>
+
+                        <li><a href="/contributors/contributing.html">How to contribute</a></li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#" >@ASF</a>
+
+                      <ul class="dropdown">
+
+                        <li>
+
+                          <a href="http://www.apache.org/" target="_blank">Apache Homepage <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/licenses/" target="_blank">Licenses <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/security/" target="_blank">Security <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/foundation/thanks.html">Thanks <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="{{base}}more-thanks.html">More thanks <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                </ul>
+
+
+
+            </section>
+
+        </nav>
+
+    </div>
+
+</div>
+
+
+
+<div class="row">
+
+    <div class="large-8 medium-8 columns">
+
+
+
+        <div id="doc-content">
+
+          <div id="preamble">
+<div class="sectionbody">
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_class_structure">Class Structure</h2>
+<div class="sectionbody">
+
+</div>
+</div>
+<div class="sect1">
+<h2 id="_user_guide_how_tos_class_members">User Guide: How-tos: Class Members</h2>
+<div class="sectionbody">
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="_class_definition">Class Definition</h3>
+<div class="paragraph">
+<p>Classes are defined both to Isis and (if any entity) also to JDO/DataNucleus.</p>
+</div>
+<div class="paragraph">
+<p>We use Java packages as a way to group related domain objects together; the package name forms a namespace. We can then reason about all the classes in that package/namespace as a single unit.</p>
+</div>
+<div class="paragraph">
+<p>In the same way that Java packages act as a namespace for domain objects, it&#8217;s good practice to map domain entities to their own (database) schemas.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>As of 1.9.0-SNAPSHOT, all the IsisAddons modules (not ASF) define their own (database) schemas.</p>
+</div>
+<div class="paragraph">
+<p>For example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@javax</span>.jdo.annotations.PersistenceCapable( ...
+        schema = <span class="string"><span class="delimiter">&quot;</span><span class="content">isissecurity</span><span class="delimiter">&quot;</span></span>,
+        table = <span class="string"><span class="delimiter">&quot;</span><span class="content">ApplicationUser</span><span class="delimiter">&quot;</span></span>)
+<span class="directive">public</span> <span class="type">class</span> <span class="class">ApplicationUser</span> ... { ... }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>and</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@javax</span>.jdo.annotations.PersistenceCapable( ...
+        schema = <span class="string"><span class="delimiter">&quot;</span><span class="content">isisaudit</span><span class="delimiter">&quot;</span></span>,
+        table=<span class="string"><span class="delimiter">&quot;</span><span class="content">AuditEntry</span><span class="delimiter">&quot;</span></span>)
+<span class="directive">public</span> <span class="type">class</span> <span class="class">AuditEntry</span> ... { ... }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This results in CREATE TABLE statements such as:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="sql"><span class="class">CREATE</span> <span class="type">TABLE</span> isissecurity.<span class="string"><span class="delimiter">&quot;</span><span class="content">ApplicationUser</span><span class="delimiter">&quot;</span></span> (
+    ...
+)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>and</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="sql"><span class="class">CREATE</span> <span class="type">TABLE</span> isisaudit.<span class="string"><span class="delimiter">&quot;</span><span class="content">AuditEntry</span><span class="delimiter">&quot;</span></span> (
+    ...
+)</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If you don&#8217;t want to use schemas, then note that you can override the <code>@PersistenceCapable</code> annotation by providing XML annotations (<code>mappings.jdo</code> files).</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_property">Property</h3>
+<div class="sect3">
+<h4 id="_value_vs_reference_types">Value vs Reference Types</h4>
+<div class="paragraph">
+<p>The annotations for mapping value types tend to be different for properties vs action parameters, because JDO annotations are only valid on properties.  The table in <a href="#Mapping Value Types">[Mapping Value Types]</a> provides a handy reference for the each.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_optional_properties">Optional Properties</h4>
+
+</div>
+<div class="sect3">
+<h4 id="_mapping_string_length">Mapping String (Length)</h4>
+
+</div>
+<div class="sect3">
+<h4 id="_mapping_joda_dates">Mapping JODA Dates</h4>
+
+</div>
+<div class="sect3">
+<h4 id="_mapping_bigdecimals">Mapping BigDecimals</h4>
+
+</div>
+<div class="sect3">
+<h4 id="_mapping_blobs">Mapping Blobs</h4>
+
+</div>
+<div class="sect3">
+<h4 id="_mapping_passwords">Mapping Passwords</h4>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="title">Lazy Loading</div>
+
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_collection">Collection</h3>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>While Isis support collections of references, the framework (currently) does not support collections of values. That is, it isn&#8217;t possible to define a collection of type <code>Set&lt;String&gt;</code>.</p>
+</div>
+<div class="paragraph">
+<p>Or, actually, you can, because that is a valid mapping supported by JDO/DataNucleus .  However, Isis has no default visualization.</p>
+</div>
+<div class="paragraph">
+<p>The workaround is to mark the collection as <code>@Programmatic</code>, as described in <a href="#Ignoring Methods">[Ignoring Methods]</a>.  This ensures that the collection is ignored by Isis.
+===</p>
+</div>
+<div class="paragraph">
+<p>## Actions</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>While Isis support actions whose parameters' types are scalar (values such as <code>String</code>, <code>int</code>, or references such as <code>Customer</code>), the framework (currently) does not support parameter types that are collections or maps.</p>
+</div>
+<div class="paragraph">
+<p>The workaround is to mark the collection as <code>@Programmatic</code>, as described in <a href="#Ignoring Methods">[Ignoring Methods]</a>.  This ensures that the collection is ignored by Isis.</p>
+</div>
+<div class="exampleblock">
+<div class="content">
+<div class="paragraph">
+<p><mark>#</mark> Optional Action Argument</p>
+</div>
+<div class="paragraph">
+<p>## String Length Of Action Parameter</p>
+</div>
+<div class="paragraph">
+<p>## BigDecimal Precision Of Action Parameter</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Mapping String (Length)</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Mapping JODA Dates</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Mapping BigDecimals</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Mapping Blobs</p>
+</div>
+<div class="paragraph">
+<p>## Mapping Value Types</p>
+</div>
+<div class="paragraph">
+<p>table of:
+.
+|value type
+|property
+|action parameter</p>
+</div>
+<div class="paragraph">
+<p>|string (length)
+|
+|</p>
+</div>
+<div class="paragraph">
+<p>|big decimal (precision)
+|
+|</p>
+</div>
+<div class="paragraph">
+<p>|Isis blob
+|
+|</p>
+</div>
+<div class="paragraph">
+<p>|optional
+|<code>@Column(allowsNull="true")</code>
+|<code>ParameterLayout(optionality=Optionality.OPTIONAL</code>) or <code>@Optional</code></p>
+</div>
+<div class="paragraph">
+<p>## Ignoring Methods</p>
+</div>
+<div class="paragraph">
+<p>Sometimes you want to define a <code>public</code> method on a domain object that is not intended to be rendered in Isis' UI.</p>
+</div>
+<div class="paragraph">
+<p>To exclude such methods, use the <code>@Programmatic</code> annotation.</p>
+</div>
+<div class="paragraph">
+<p>## Entity Relationships</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Entity Relationships
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Mapping Mandatory and Optional Properties</p>
+</div>
+<div class="paragraph">
+<p>## Managed 1:m bidirectional relationships</p>
+</div>
+<div class="paragraph">
+<p>## Contributed Members</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Contributed Members
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Contributed Action</p>
+</div>
+<div class="paragraph">
+<p>## Contributed Property</p>
+</div>
+<div class="paragraph">
+<p>## Contributed Collection</p>
+</div>
+<div class="paragraph">
+<p>## Derived Members</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Derived Members
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Derived Property</p>
+</div>
+<div class="paragraph">
+<p>## Derived Collection</p>
+</div>
+<div class="sidebarblock">
+<div class="content">
+<div class="title">Inlining query-only repository action</div>
+<div class="paragraph">
+<p>While derived properties and derived collections typically "walk the graph" to associated objects, there is nothing to prevent the returned value being the result of invoking a repository (domain service) action.</p>
+</div>
+<div class="paragraph">
+<p>For example:</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">Customer</span> {
+    ...
+    public <span class="predefined-type">List</span>&lt;Order&gt; getMostRecentOrders() {
+        <span class="keyword">return</span> orderRepo.findMostRecentOrders(<span class="local-variable">this</span>, <span class="integer">5</span>);
+    }
+}</code></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="paragraph">
+<p>## Trigger on property change</p>
+</div>
+<div class="paragraph">
+<p>## Trigger on collection change</p>
+</div>
+<div class="paragraph">
+<p>## Object Management (CRUD)</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Object Management (CRUD)
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Injecting Services</p>
+</div>
+<div class="paragraph">
+<p>## Instantiating and Persisting Objects</p>
+</div>
+<div class="paragraph">
+<p>## Finding Objects</p>
+</div>
+<div class="paragraph">
+<p>## Deleting Objects</p>
+</div>
+<div class="paragraph">
+<p>## UI Hints</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: UI Hints
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Icons and Titles</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Object Title</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark># Titles in Tables</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark># Hide part of a title</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Object Icon</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Object CSS Styling</p>
+</div>
+<div class="paragraph">
+<p>## Names and Descriptions</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+see also i18n (TODO: convert to link)
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Name/descr. of an object</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Name/descr. of a property</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Name/descr. of a collection</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Name/descr. of an action</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Action Parameters</p>
+</div>
+<div class="paragraph">
+<p>## Layout</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Layout using annotations</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Dynamic layouts</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Application menu layout</p>
+</div>
+<div class="paragraph">
+<p>## Standardized font-awesome icons and CSS</p>
+</div>
+<div class="paragraph">
+<p>Use the following settings in isis.properties to apply CSS and font-awesome icons to object members (properties, collections and actions) based on their names.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>isis.reflector.facet.cssClassFa.patterns=\
+isis.reflector.facet.cssClass.patterns=\</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>## Business Rules</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Business Rules
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Visibility ("see it")</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Hide a Property</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Hide a Collection</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Hide an Action</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Hide a Contributed Property, Collection or Action</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> All Members Hidden</p>
+</div>
+<div class="paragraph">
+<p>## Usability ("use it")</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Disable a Property</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Disable a Collection</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Disable an Action</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Disable a Contributed Property, Collection or Action</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> All Members Unmodifiable (Disabling the Edit Button)</p>
+</div>
+<div class="paragraph">
+<p>Sometimes an object is unmodifiable.</p>
+</div>
+<div class="paragraph">
+<p>In the Wicket viewer this means disabling the edit button.</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark># Declarative</p>
+</div>
+<div class="paragraph">
+<p><code>@DomainObject(editing=&#8230;&#8203;)</code></p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark># Imperative</p>
+</div>
+<div class="paragraph">
+<p>## Validity ("do it")</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Validate (change to) a Property</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Validate (adding or removing from) a Collection</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Validate (arguments to invoke) an Action</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Validating a Contributed Property, Collection or Action</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Declarative validation using <code>@MustSatisfy</code></p>
+</div>
+<div class="paragraph">
+<p>## Drop downs and Defaults</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Business Rules
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## For Properties</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Choices for Property</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Auto-complete for property</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Default for property</p>
+</div>
+<div class="paragraph">
+<p>## For Action Parameters</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Choices for action parameter</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Dependent choices for action params</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Auto-complete for action param</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Default for action param</p>
+</div>
+<div class="paragraph">
+<p>## For both Properties and Action Parameters</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Drop-down for limited number of instances</p>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> Auto-complete (repository-based)</p>
+</div>
+<div class="paragraph">
+<p>## Triggering Events</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Triggering Events
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Publishing and Subscribing to Events (Pulling Changes)</p>
+</div>
+<div class="paragraph">
+<p>## Pushing Changes</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+this technique is much less powerful than the event bus described in <a href="#Publishing and Subscribing to Events (Pulling Changes)">[Publishing and Subscribing to Events (Pulling Changes)]</a>).  We present it mostly for completeness.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> When a property is changed</p>
+</div>
+<div class="paragraph">
+<p>If you want to invoke functionality whenever a property is changed by the user, then you should create a supporting <code>modifyXxx()</code> method and include the functionality within that. The syntax 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">void</span> modifyPropertyName(PropertyType param) { ... }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Why not just put this functionality in the setter? Well, the setter is used by the object store to recreate the state of an already persisted object. Putting additional behaviour in the setter would cause it to be triggered incorrectly.</p>
+</div>
+<div class="paragraph">
+<p>For example:</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">Order</span>() {
+    <span class="directive">public</span> <span class="predefined-type">Integer</span> getAmount() { ... }
+    <span class="directive">public</span> <span class="type">void</span> setAmount(<span class="predefined-type">Integer</span> amount) { ... }
+    <span class="directive">public</span> <span class="type">void</span> modifyAmount(<span class="predefined-type">Integer</span> amount) { <i class="conum" data-value="1"></i><b>(1)</b>
+        setAmount(amount);  <i class="conum" data-value="3"></i><b>(3)</b>
+        addToTotal(amount); <i class="conum" data-value="2"></i><b>(2)</b>
+    }
+    ...
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The <code>modifyAmount()</code> method calls &#8230;&#8203;</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>&#8230;&#8203; the <code>addToTotal()</code> (not shown) to maintain some running total.</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>We don&#8217;t want this <code>addToCall()</code> method to be called when pulling the object back from the object store, so we put it into the modify, not the setter.</p>
+</div>
+<div class="paragraph">
+<p>You may optionally also specify a <code>clearXxx()</code> which works the same way as modify <code>modify Xxx()</code> but is called when the property is cleared by the user (i.e. the current value replaced by nothing). The syntax 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">void</span> clearPropertyName() { ... }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To extend the above example:</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">Order</span>() {
+    <span class="directive">public</span> <span class="predefined-type">Integer</span> getAmount() { ... }
+    <span class="directive">public</span> <span class="type">void</span> setAmount(<span class="predefined-type">Integer</span> amount) { ... }
+    <span class="directive">public</span> <span class="type">void</span> modifyAmount(<span class="predefined-type">Integer</span> amount) { ... }
+    <span class="directive">public</span> <span class="type">void</span> clearAmount() {
+        removeFromTotal(<span class="local-variable">this</span>.amount);
+        setAmount(<span class="predefined-constant">null</span>);
+    }
+    ...
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><mark>#</mark> When a collection is added to or removed from</p>
+</div>
+<div class="paragraph">
+<p>A collection may have a corresponding <code>addToXxx()</code> and/or
+<code>removeFromXxx()</code> method. If present, and direct manipulation of the
+contents of the connection has not been disabled (see ?), then they will
+be called (instead of adding/removing an object directly to the
+collection returned by the accessor).</p>
+</div>
+<div class="paragraph">
+<p>The reason for this behaviour is to allow other behaviour to be
+triggered when the contents of the collection is altered. That is, it is
+directly equivalent to the supporting <code>modifyXxx()</code> and <code>clearXxx()</code>
+methods for properties (see ?).</p>
+</div>
+<div class="paragraph">
+<p>The syntax 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">void</span> addTo&lt;CollectionName&gt;(EntityType param) { ... }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>and</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">void</span> removeFromCollectionName(EntityType param) { ... }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where <code>EntityType</code> is the same type as the generic collection type.</p>
+</div>
+<div class="paragraph">
+<p>For example:</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">Employee</span> { ... }
+
+<span class="directive">public</span> <span class="type">class</span> <span class="class">Department</span> {
+
+    <span class="directive">private</span> <span class="type">int</span> numMaleEmployees;  <i class="conum" data-value="1"></i><b>(1)</b>
+    <span class="directive">private</span> <span class="type">int</span> numFemaleEmployees; <i class="conum" data-value="1"></i><b>(1)</b>
+
+    <span class="directive">private</span> <span class="predefined-type">Set</span>&lt;Employee&gt; employees = <span class="keyword">new</span> <span class="predefined-type">TreeSet</span>&lt;Employee&gt;();
+    <span class="directive">public</span> <span class="predefined-type">Set</span>&lt;Employee&gt; getEmployees() {
+        <span class="keyword">return</span> employees;
+    }
+    <span class="directive">private</span> <span class="type">void</span> setEmployees(<span class="predefined-type">Set</span>&lt;Employee&gt; employees) {
+        <span class="local-variable">this</span>.employees = employees;
+    }
+    <span class="directive">public</span> <span class="type">void</span> addToEmployees(Employee employee) {
+        numMaleEmployees += countOneMale(employee);     <i class="conum" data-value="2"></i><b>(2)</b>
+        numFemaleEmployees += countOneFemale(employee); <i class="conum" data-value="2"></i><b>(2)</b>
+        employees.add(employee);
+    }
+    <span class="directive">public</span> <span class="type">void</span> removeFromEmployees(Employee employee) {
+        numMaleEmployees -= countOneMale(employee);     <i class="conum" data-value="3"></i><b>(3)</b>
+        numFemaleEmployees -= countOneFemale(employee); <i class="conum" data-value="3"></i><b>(3)</b>
+        employees.remove(employee);
+    }
+    <span class="directive">private</span> <span class="type">int</span> countOneMale(Employee employee) { <span class="keyword">return</span> employee.isMale()?<span class="integer">1</span>:<span class="integer">0</span>; }
+    <span class="directive">private</span> <span class="type">int</span> countOneFemale(Employee employee) { <span class="keyword">return</span> employee.isFemale()?<span class="integer">1</span>:<span class="integer">0</span>; }
+
+    ...
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>maintain a count of the number of male and female employees (getters and setters omitted)</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>the <code>addTo&#8230;&#8203;()</code> method increments the derived properties</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>the <code>removeTo&#8230;&#8203;()</code> method similarly decrements the derived properties</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Idioms and Patterns</p>
+</div>
+<div class="paragraph">
+<p>Unresolved directive in user-guide-how-tos.adoc - include::user-guide-how-tos-patterns.adoc[leveloffset=+1]</p>
+</div>
+<div class="paragraph">
+<p>## Error Handling</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Error Handling
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Raise message/errors to users</p>
+</div>
+<div class="paragraph">
+<p>## Exception Recognizers</p>
+</div>
+<div class="paragraph">
+<p>## i18n</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: i18n
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Multi-tenancy</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Multi-tenancy
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Persistence Lifecycle</p>
+</div>
+<div class="paragraph">
+<p>= User Guide: How-tos: Persistence Lifecycle
+:Notice: 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. <a href="http://www.apache.org/licenses/LICENSE-2.0" class="bare">http://www.apache.org/licenses/LICENSE-2.0</a> . 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.
+:_basedir: ../
+:_imagesdir: images/</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>## Programming Model</p>
+</div>
+<div class="paragraph">
+<p>Unresolved directive in user-guide-how-tos.adoc - include::user-guide-how-tos-programming-model.adoc[leveloffset=+1]</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+        </div>
+
+
+
+        <hr>
+
+        <footer>
+
+          <p class="small">
+
+          Copyright &copy; 2010~2015 The Apache&nbsp;Software&nbsp;Foundation, licensed under the Apache&nbsp;License,&nbsp;v2.0.
+
+          <br/>
+
+          Apache, the Apache feather logo, Apache&nbsp;Isis, and the Apache&nbsp;Isis project logo are all trademarks of The&nbsp;Apache&nbsp;Software&nbsp;Foundation.
+
+          </p>
+
+        </footer>
+
+
+
+    </div>
+
+
+
+    <div class="large-4 medium-4 columns">
+
+        <!-- the 'hide' class is removed by Javascript -->
+
+        <div id="toc" class="toc2 hide">
+
+          <ul class="sectlevel1">
+<li><a href="#_class_structure">Class Structure</a></li>
+<li><a href="#_user_guide_how_tos_class_members">User Guide: How-tos: Class Members</a>
+<ul class="sectlevel2">
+<li><a href="#_class_definition">Class Definition</a></li>
+<li><a href="#_property">Property</a>
+<ul class="sectlevel3">
+<li><a href="#_value_vs_reference_types">Value vs Reference Types</a></li>
+<li><a href="#_optional_properties">Optional Properties</a></li>
+<li><a href="#_mapping_string_length">Mapping String (Length)</a></li>
+<li><a href="#_mapping_joda_dates">Mapping JODA Dates</a></li>
+<li><a href="#_mapping_bigdecimals">Mapping BigDecimals</a></li>
+<li><a href="#_mapping_blobs">Mapping Blobs</a></li>
+<li><a href="#_mapping_passwords">Mapping Passwords</a></li>
+</ul>
+</li>
+<li><a href="#_collection">Collection</a></li>
+</ul>
+</li>
+</ul>
+
+        </div>
+
+    </div>
+
+</div>
+
+
+
+
+
+    <script src="../js/foundation/5.5.1/vendor/jquery.js"></script>
+
+    <script src="../js/foundation/5.5.1/foundation.min.js"></script>
+
+
+
+
+
+<script type="text/javascript">
+
+      $(document).foundation();
+
+
+
+      $(document).ready(function(){
+
+        // Cache selectors
+
+        var lastId,
+
+            topMenu = $("div#toc ul"),
+
+            topMenuHeight = 70,
+
+
+
+            menuItems = topMenu.find("a"),
+
+            menuItemsHrefs = menuItems.map(function(){
+
+              var item = $($(this).attr("href"));
+
+              if (item.length) { return item; }
+
+            });
+
+
+
+        // Bind click handler to menu items to scroll animation
+
+        menuItems.click(function(e){
+
+          var href = $(this).attr("href"),
+
+              offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1;
+
+          $('html, body').stop().animate({
+
+              scrollTop: offsetTop
+
+          }, 300);
+
+
+
+          e.preventDefault();
+
+        });
+
+
+
+        // Bind to scroll of window
+
+        $(  window ).scroll(function(){
+
+
+
+           // Get container scroll position
+
+           var fromTop = $(this).scrollTop()+topMenuHeight;
+
+
+
+           var cur = menuItemsHrefs.map(function(){
+
+             if ($(this).offset().top < fromTop)
+
+               return this;
+
+           });
+
+
+
+           // Get the id of the current element
+
+           cur = cur[cur.length-1];
+
+
+
+           var id = cur && cur.length ? cur[0].id : "";
+
+
+
+           //console.log("id = " + id + ", lastId = "  + lastId);
+
+
+
+           if (lastId !== id && id) {
+
+               scrollTo(id);
+
+           }
+
+        });
+
+
+
+        scrollTo = function(id) {
+
+              lastId = id;
+
+
+
+              menuItems
+
+                .removeClass("active");
+
+
+
+              menuItems
+
+                .parents()
+
+                .removeClass("active-region");
+
+
+
+              menuItems
+
+                .parents("ul").hide();
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .addClass("active");
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .parents("ul").show();
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .parent().children("ul").show();
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .parents("li").addClass("active-region");
+
+
+
+        }
+
+      menuItems
+
+        .removeClass("active");
+
+
+
+      menuItems
+
+        .parents()
+
+        .removeClass("active-region");
+
+
+
+        var syncMenuItem;
+
+        if(window.location.hash!=="") {
+
+            var menuItemFor = $.grep(menuItems, function(e) {
+
+                return e.hash === window.location.hash;
+
+            });
+
+            console.log(menuItemFor);
+
+            if(menuItemFor.length === 1) {
+
+                syncMenuItem = menuItemFor[0];
+
+            }
+
+        }
+
+
+
+        if(!syncMenuItem){
+
+            syncMenuItem = menuItems[0];
+
+        }
+
+
+
+        $("#toc").removeClass("hide");
+
+
+
+        $(syncMenuItem).click();
+
+
+
+      });
+
+
+
+
+
+</script>
+
+
+
+
+
+</body>
+
+</html>
\ No newline at end of file

Added: websites/staging/isis/trunk/content/docs/user-guide/user-guide-integrating-with-other-systems.html
==============================================================================
--- websites/staging/isis/trunk/content/docs/user-guide/user-guide-integrating-with-other-systems.html (added)
+++ websites/staging/isis/trunk/content/docs/user-guide/user-guide-integrating-with-other-systems.html Wed Apr 15 21:40:06 2015
@@ -0,0 +1,794 @@
+<!doctype html>
+
+<html class="no-js" lang="en">
+
+<head>
+
+    <meta charset="utf-8"/>
+
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+
+
+
+    <title>User Guide: Integrating with Other Systems</title>
+
+
+
+    <!--
+
+        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.
+
+    -->
+
+
+
+    <!-- No caching headers -->
+
+    <meta http-equiv="cache-control" content="no-cache" />
+
+    <meta http-equiv="pragma" content="no-cache" />
+
+    <meta http-equiv="expires" content="-1" />
+
+
+
+
+
+    <link rel="stylesheet" href="../css/foundation/5.5.1/foundation.css"/>
+
+    <script src="../js/foundation/5.5.1/vendor/modernizr.js"></script>
+
+
+
+    <link href="../css/asciidoctor/stylesheets/foundation-potion.css" rel="stylesheet">
+
+
+
+    <link href="../css/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
+
+
+
+    <style type="text/css">
+
+        #forkongithub a{
+
+            display: none;
+
+            background:#090;
+
+            color:#fff;
+
+            text-decoration:none;
+
+            font-family:arial, sans-serif;
+
+            text-align:center;
+
+            font-weight:bold;
+
+            padding:5px 40px;
+
+            font-size:1rem;
+
+            line-height:2rem;
+
+            position:relative;
+
+            transition:0.5s;
+
+        }
+
+        #forkongithub a:hover{
+
+            background:#0D0;
+
+            color:#fff;
+
+        }
+
+        #forkongithub a::before,
+
+        #forkongithub a::after{
+
+            content:"";width:100%;
+
+            display:block;
+
+            position:fixed;
+
+            top:1px;
+
+            left:0;
+
+            height:1px;
+
+            background:#fff;
+
+            z-index: 9999;
+
+        }
+
+        #forkongithub a::after{
+
+            bottom:1px;
+
+            top:auto;
+
+        }
+
+        @media screen and (min-width:768px){
+
+            #forkongithub{
+
+                position:fixed;
+
+                display:block;
+
+                top:0;
+
+                right:0;
+
+                width:250px;
+
+                overflow:hidden;
+
+                height:250px;
+
+                z-index: 9999;
+
+            }
+
+            #forkongithub a{
+
+                display:inherit;
+
+                width:250px;
+
+                position:fixed;
+
+                font-size:small;
+
+                top:40px;
+
+                right:-60px;
+
+                transform:rotate(45deg);
+
+                -webkit-transform:rotate(45deg);
+
+                -ms-transform:rotate(45deg);
+
+                box-shadow:4px 4px 10px rgba(0,0,0,0.8);
+
+            }
+
+        }
+
+    </style>
+
+
+
+    <style>
+
+        body {
+
+          position: relative;
+
+        }
+
+
+
+        body div#toc li,
+
+        body div#toc2 li {
+
+            list-style-type: none;
+
+        }
+
+
+
+        div#doc-content {
+
+            margin-top: 30px;
+
+        }
+
+
+
+        body div#toc li.active-region:before,
+
+        body div#toc2 li.active-region:before {
+
+            content: "\00BB \0020";
+
+            margin-left: -12px;
+
+        }
+
+
+
+        body div#toc li a.active,
+
+        body div#toc2 li a.active {
+
+            color: red;
+
+        }
+
+
+
+        body div#toc.toc,
+
+        body div#toc.toc2 {
+
+            position: fixed;
+
+            left: auto;
+
+            padding-top: 120px;
+
+            z-index: auto;
+
+            background-color: white;
+
+            border-left-color: #eee;
+
+            border-left-style: solid;
+
+            border-right: none;
+
+        }
+
+    </style>
+
+
+
+</head>
+
+<body>
+
+
+
+    <span id="forkongithub">
+
+        <a href="https://github.com/apache/isis">Fork me on GitHub</a>
+
+    </span>
+
+
+
+<div class="row">
+
+
+
+    <div class="fixed contain-to-grid">
+
+        <nav class="top-bar" data-topbar role="navigation">
+
+            <ul class="title-area">
+
+                <li class="name">
+
+                    <h1>
+
+                        <a href="/index.html">Apache Isis&trade;</a>
+
+                    </h1>
+
+                </li>
+
+                <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
+
+                <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
+
+            </ul>
+
+
+
+            <section class="top-bar-section">
+
+                <ul class="right">
+
+
+
+                    <li class="has-form">
+
+                       <FORM class="searchbox navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
+
+                        <div class="row collapse">
+
+                            <input type="hidden" name="cx" value="012614087480249044419:dn-q5gtwxya">
+
+                            <INPUT type="hidden" name="cof" value="FORID:0">
+
+                            <INPUT class="form-control" name="q" type="text" placeholder="Search">
+
+                        </div>
+
+                    </FORM>
+
+                     </li>
+
+
+
+                </ul>
+
+
+
+                <!-- Left Nav Section -->
+
+                <ul class="left">
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#" >Demos</b></a>
+
+                      <ul class="dropdown">
+
+                        <li><a href="/intro/elevator-pitch/isis-in-pictures.html">Screenshots</a></li>
+
+                        <li><a href="/intro/tutorials/screencasts.html">Screencasts&nbsp;<img src="/images/tv_show-25.png"></a></li>
+
+                        <li><a href="/intro/powered-by/powered-by.html">Powered by</a></li>
+
+                        <li><a href="http://isisdemo.mmyco.co.uk/" target="_blank">Online Demo</a></li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                    <li><a href="/documentation">Documentation</a></li>
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#">Downloads</a>
+
+                      <ul class="dropdown">
+
+                        <li><a href="/intro/getting-started/simpleapp-archetype.html">Isis (Maven archetype)</a></li>
+
+                        <li><a href="/download.html">Isis (downloads)</a></li>
+
+                        <li><a href="http://www.isisaddons.org" target="_blank">Isis Add-ons (not ASF)</a></li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#">Help</a>
+
+                      <ul class="dropdown">
+
+                        <li><a href="/support.html">Mailing Lists</a></li>
+
+                        <li><a href="http://isis.markmail.org/search/?q=" target="_blank">Mailing List Archives</a></li>
+
+                        <li><a href="https://issues.apache.org/jira/browse/ISIS" target="_blank">JIRA</a></li>
+
+                        <li><a href="http://github.com/apache/isis" target="_blank">Github mirror</a></li>
+
+                        <li><a href="http://stackoverflow.com/questions/tagged/isis" target="_blank">Stack Overflow</a></li>
+
+                        <li><a href="/contributors/contributing.html">How to contribute</a></li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                    <li class="has-dropdown">
+
+                      <a href="#" >@ASF</a>
+
+                      <ul class="dropdown">
+
+                        <li>
+
+                          <a href="http://www.apache.org/" target="_blank">Apache Homepage <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/licenses/" target="_blank">Licenses <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/security/" target="_blank">Security <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="http://www.apache.org/foundation/thanks.html">Thanks <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                        <li>
+
+                          <a href="{{base}}more-thanks.html">More thanks <i class="icon-share-alt"></i></a>
+
+                        </li>
+
+                      </ul>
+
+                    </li>
+
+
+
+                </ul>
+
+
+
+            </section>
+
+        </nav>
+
+    </div>
+
+</div>
+
+
+
+<div class="row">
+
+    <div class="large-8 medium-8 columns">
+
+
+
+        <div id="doc-content">
+
+          <div id="preamble">
+<div class="sectionbody">
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_non_ui_execution">Non UI Execution</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Using <code>IsisSessionTemplate</code></p>
+</div>
+</div>
+</div>
+
+        </div>
+
+
+
+        <hr>
+
+        <footer>
+
+          <p class="small">
+
+          Copyright &copy; 2010~2015 The Apache&nbsp;Software&nbsp;Foundation, licensed under the Apache&nbsp;License,&nbsp;v2.0.
+
+          <br/>
+
+          Apache, the Apache feather logo, Apache&nbsp;Isis, and the Apache&nbsp;Isis project logo are all trademarks of The&nbsp;Apache&nbsp;Software&nbsp;Foundation.
+
+          </p>
+
+        </footer>
+
+
+
+    </div>
+
+
+
+    <div class="large-4 medium-4 columns">
+
+        <!-- the 'hide' class is removed by Javascript -->
+
+        <div id="toc" class="toc2 hide">
+
+          <ul class="sectlevel1">
+<li><a href="#_non_ui_execution">Non UI Execution</a></li>
+</ul>
+
+        </div>
+
+    </div>
+
+</div>
+
+
+
+
+
+    <script src="../js/foundation/5.5.1/vendor/jquery.js"></script>
+
+    <script src="../js/foundation/5.5.1/foundation.min.js"></script>
+
+
+
+
+
+<script type="text/javascript">
+
+      $(document).foundation();
+
+
+
+      $(document).ready(function(){
+
+        // Cache selectors
+
+        var lastId,
+
+            topMenu = $("div#toc ul"),
+
+            topMenuHeight = 70,
+
+
+
+            menuItems = topMenu.find("a"),
+
+            menuItemsHrefs = menuItems.map(function(){
+
+              var item = $($(this).attr("href"));
+
+              if (item.length) { return item; }
+
+            });
+
+
+
+        // Bind click handler to menu items to scroll animation
+
+        menuItems.click(function(e){
+
+          var href = $(this).attr("href"),
+
+              offsetTop = href === "#" ? 0 : $(href).offset().top-topMenuHeight+1;
+
+          $('html, body').stop().animate({
+
+              scrollTop: offsetTop
+
+          }, 300);
+
+
+
+          e.preventDefault();
+
+        });
+
+
+
+        // Bind to scroll of window
+
+        $(  window ).scroll(function(){
+
+
+
+           // Get container scroll position
+
+           var fromTop = $(this).scrollTop()+topMenuHeight;
+
+
+
+           var cur = menuItemsHrefs.map(function(){
+
+             if ($(this).offset().top < fromTop)
+
+               return this;
+
+           });
+
+
+
+           // Get the id of the current element
+
+           cur = cur[cur.length-1];
+
+
+
+           var id = cur && cur.length ? cur[0].id : "";
+
+
+
+           //console.log("id = " + id + ", lastId = "  + lastId);
+
+
+
+           if (lastId !== id && id) {
+
+               scrollTo(id);
+
+           }
+
+        });
+
+
+
+        scrollTo = function(id) {
+
+              lastId = id;
+
+
+
+              menuItems
+
+                .removeClass("active");
+
+
+
+              menuItems
+
+                .parents()
+
+                .removeClass("active-region");
+
+
+
+              menuItems
+
+                .parents("ul").hide();
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .addClass("active");
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .parents("ul").show();
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .parent().children("ul").show();
+
+
+
+              menuItems
+
+                .filter("[href=#"+id+"]")
+
+                .parents("li").addClass("active-region");
+
+
+
+        }
+
+      menuItems
+
+        .removeClass("active");
+
+
+
+      menuItems
+
+        .parents()
+
+        .removeClass("active-region");
+
+
+
+        var syncMenuItem;
+
+        if(window.location.hash!=="") {
+
+            var menuItemFor = $.grep(menuItems, function(e) {
+
+                return e.hash === window.location.hash;
+
+            });
+
+            console.log(menuItemFor);
+
+            if(menuItemFor.length === 1) {
+
+                syncMenuItem = menuItemFor[0];
+
+            }
+
+        }
+
+
+
+        if(!syncMenuItem){
+
+            syncMenuItem = menuItems[0];
+
+        }
+
+
+
+        $("#toc").removeClass("hide");
+
+
+
+        $(syncMenuItem).click();
+
+
+
+      });
+
+
+
+
+
+</script>
+
+
+
+
+
+</body>
+
+</html>
\ No newline at end of file