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 2014/11/18 23:20:04 UTC

svn commit: r929696 - in /websites/staging/isis/trunk: cgi-bin/ content/ content/reference/recognized-annotations/DomainService.html content/reference/recognized-annotations/about.html content/tutorials/apacheconeu-2014.html

Author: buildbot
Date: Tue Nov 18 22:20:04 2014
New Revision: 929696

Log:
Staging update by buildbot for isis

Added:
    websites/staging/isis/trunk/content/reference/recognized-annotations/DomainService.html
Modified:
    websites/staging/isis/trunk/cgi-bin/   (props changed)
    websites/staging/isis/trunk/content/   (props changed)
    websites/staging/isis/trunk/content/reference/recognized-annotations/about.html
    websites/staging/isis/trunk/content/tutorials/apacheconeu-2014.html

Propchange: websites/staging/isis/trunk/cgi-bin/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Tue Nov 18 22:20:04 2014
@@ -1 +1 @@
-1640429
+1640436

Propchange: websites/staging/isis/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Tue Nov 18 22:20:04 2014
@@ -1 +1 @@
-1640429
+1640436

Added: websites/staging/isis/trunk/content/reference/recognized-annotations/DomainService.html
==============================================================================
--- websites/staging/isis/trunk/content/reference/recognized-annotations/DomainService.html (added)
+++ websites/staging/isis/trunk/content/reference/recognized-annotations/DomainService.html Tue Nov 18 22:20:04 2014
@@ -0,0 +1,466 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+
+    <meta charset="utf-8">
+      <title>@DomainService
</title>
+    <meta name="description" content="">
+    <meta name="author" content="">
+
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    
+    <!-- Le styles -->
+    <link href="./../../bootstrap-3.0.0/css/bootstrap.css" rel="stylesheet">
+    <link href="./../../prettify.css" rel="stylesheet">
+
+    <style type="text/css">
+        body {
+          padding-top: 60px;
+        }
+        .sprite {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../images/sprites.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .edit-page {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../images/edit.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .fb-share {
+            background-position: 0px -40px;
+        }
+        .gp-share {
+            background-position: 0px 0px;
+        }
+        .tw-share {
+            background-position: 0px -80px;
+        }
+        .markdown-content {
+            min-height: 500px;
+        }
+        .book-image img {
+          border: 1px;
+          border-style: solid;
+        }
+        .release-matrix .heading {
+            background-color: #eeeeee;
+        }
+        .release-matrix .new {
+            color: #dd0000;
+            font-weight: bolder;
+        }
+        .stub,.note {
+            position: relative;
+            padding: 7px 15px;
+            margin-bottom: 18px;
+            color: #404040;
+            background-color: #eedc94;
+            background-repeat: repeat-x;
+            background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
+            background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
+            background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -o-linear-gradient(top, #fceec1, #eedc94);
+            background-image: linear-gradient(top, #fceec1, #eedc94);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);
+            text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+            border-color: #eedc94 #eedc94 #e4c652;
+            border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+            text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+            border-width: 1px;
+            border-style: solid;
+            -webkit-border-radius: 4px;
+            -moz-border-radius: 4px;
+            border-radius: 4px;
+            -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+        }
+        
+        div.XXXisis-tweak form {
+            margin-top: 6px;
+            margin-bottom: -2px;
+        }
+        
+        div.row div.col-md-12 {
+          border-top: 1px solid #eeeeee;
+       }
+        
+        
+        /* Isis specific stuff */
+
+        div.row div.col-md-12 {
+          margin-top: 20px;
+        }
+
+        .container {
+          width: 940px;
+        }
+
+        .markdown-content .documentation .span-one-third p {
+          margin-bottom: 0px;
+        }
+
+        .container .markdown-content .group,
+        .markdown-content .documentation .group {
+          margin-top: 9px;
+        }
+
+        .container .group h2,
+        .documentation .group h2 {
+          border-bottom: 1px solid #DDD
+        }
+
+        .container h2 a[name],
+        .documentation h2 a[name] {
+            padding-top: 50px;
+            margin-top: -50px;
+        }
+        
+        .container h2 a[name],
+        .container h3 a[name],
+        .container h4 a[name],
+        .documentation h2 a[name],
+        .documentation h3 a[name],
+        .documentation h4 a[name] {
+            color: black;
+            display: inline-block; 
+        }
+        .container h2 a[name]:hover,
+        .container h3 a[name]:hover,
+        .container h4 a[name]:hover,
+        .documentation h2 a[name]:hover,
+        .documentation h3 a[name]:hover,
+        .documentation h4 a[name]:hover {
+            text-decoration: none;
+        }
+
+        .documentation h2 a:not([name]),
+        .documentation h3 a:not([name]),
+        .documentation h4 a:not([name]) {
+          /* same as code style */
+          padding: 0 3px 2px;
+          font-family: Monaco, Andale Mono, Courier New, monospace;
+          font-size: 12px;
+          -webkit-border-radius: 3px;
+          -moz-border-radius: 3px;
+          border-radius: 3px;
+          padding: 1px 3px;
+        }
+        
+        .carousel-indicators li {
+          border: 1px solid rgb(192,70,1);
+        }
+
+        .carousel-indicators li.active {
+          background-color: rgb(192,70,1);
+        }
+        
+        .carousel-control .icon-prev,
+        .carousel-control .icon-next {
+          color: rgb(192,70,1);
+          font-size: 60px;
+        }
+        
+        .page-header {
+          margin-top: 0px;
+        }
+
+        .container blockquote p {
+            font-size: small;
+        }
+
+        .container blockquote p:not([author]) {
+            font-style: italic;
+        }
+
+        .container blockquote p {
+            font-size: small;
+            font-style: italic;
+            font-weight: bold;
+        }
+        
+        footer hr {
+            margin-top: 100px;
+        }
+
+        .markdown-content img {
+            margin-top: 10px;
+            margin-bottom: 20px;
+        }
+
+        .markdown-content a img {
+            margin-top: 0px;
+            margin-bottom: 0px;
+        }
+
+        
+        #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>
+
+    <!-- courtesy of http://codepo8.github.io/css-fork-on-github-ribbon/ -->
+    <span id="forkongithub">
+        <a href="https://github.com/apache/isis">Fork me on GitHub</a>
+    </span>
+
+    <script type="text/javascript">
+      function fbshare () {
+          window.open(
+                  "http://www.facebook.com/sharer/sharer.php?u="+document.URL,
+                  'Share on Facebook',
+                  'width=640,height=426');
+      };
+      function gpshare () {
+          window.open(
+                  "https://plus.google.com/share?url="+document.URL,
+                  'Share on Google+',
+                  'width=584,height=385');
+      };
+      function twshare () {
+          window.open(
+                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=@DomainService
",
+                  'Share on Twitter',
+                  'width=800,height=526');
+      };
+    </script>
+
+    <!-- Le fav and touch icons -->
+    <link rel="shortcut icon" href="./../../images/favicon.ico">
+
+    <script src="./../../javascript/prettify.js" type="text/javascript"></script>
+    
+    <script src="//code.jquery.com/jquery.js"></script>
+    <script src="./../../javascript/prettyprint.js"></script>
+    <script src="./../../bootstrap-3.0.0/js/bootstrap.js"></script>
+
+
+    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
+    <!--
+    <DISABLEDscript src="./../../javascript/common.js"></DISABLEDscript>
+    -->
+
+    
+    
+    
+
+    <script>
+    $(function () { prettyPrint() })
+    $().dropdown()
+    </script>
+
+    
+  </head>
+
+  <body>
+
+    <nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
+      <div class="container">
+        <a class="navbar-brand" href="./../../index.html">Apache Isis&trade;</a>
+        <ul class="nav navbar-nav">
+
+          <li class="dropdown">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Demos<b class="caret"></b></a>
+            <ul class="dropdown-menu">
+              <li><a href="./../../intro/elevator-pitch/isis-in-pictures.html">Screenshots</a></li>
+              <li><a href="./../../intro/tutorials/screencasts.html">Screencasts<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.html">Docs</a></li>
+          <li><a href="http://www.isisaddons.org" target="_blank">Add-ons</a></li>
+
+          <li class="dropdown">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Downloads<b class="caret"></b></a>
+            <ul class="dropdown-menu">
+              <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</a></li>
+            </ul>
+          </li>
+
+          <li class="dropdown">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Help<b class="caret"></b></a>
+            <ul class="dropdown-menu">
+              <li><a href="./../../support.html">Mailing Lists</a></li>
+              <li><a href="http://isis.markmail.org/search/?q=" target="_blank">ML Archives</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/ISIS" target="_blank">JIRA</a></li>
+              <li><a href="http://stackoverflow.com/questions/tagged/isis" target="_blank">Stack Overflow</a></li>
+              <li><a href="http://github.com/apache/isis" target="_blank">Github mirror</a></li>
+            </ul>
+          </li>
+
+          <li class="dropdown navbar-right">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">@ASF<b class="caret"></b></a>
+            <ul class="dropdown-menu">
+              <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="./../../more-thanks.html">More thanks <i class="icon-share-alt"></i></a>
+              </li>
+            </ul>
+          </li>
+      </ul>
+
+        <FORM class="navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
+        <div class="form-group">
+          <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>
+
+
+      </div>
+
+
+  </nav>
+
+    <div class="container">
+      <div class="markdown-content">
+      
+
+<div class="page-header">
+<p><a href="./../../documentation.html">Docs</a>&nbsp;&raquo&nbsp;<a href="./../../reference/about.html">Reference</a>&nbsp;&raquo&nbsp;<a href="./../../reference/recognized-annotations/about.html">Recognized Annotations</a></p>
+<h1>@DomainService
+
+</h1>
+</div>
+
+<blockquote>
+  <p>this is a stub</p>
+</blockquote>
+
+
+
+      </div>
+
+        <div id="edit" class="modal hide fade in" style="xxxdisplay: none; ">
+            <div class="modal-header">
+                <a class="close" data-dismiss="modal">x</a>
+
+                <h3>Thank you for contributing to the documention!</h3>
+            </div>
+            <div class="modal-body">
+                <h4>Any help with the documentation is greatly appreciated.</h4>
+                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
+                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
+                <!--[if gt IE 6]>
+                <h4>Internet Explorer Users</h4>
+                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
+                <![endif]-->
+
+            </div>
+            <div class="modal-footer">
+                Do you have an Apache ID?
+                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
+                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
+            </div>
+        </div>
+        <!--
+        <script src="./../../javascript/bootstrap-modal.js"></script>
+        -->
+
+      <footer>
+        <hr/>
+        <p>
+        Copyright &copy; 2010~2014 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
+        <br/>
+        Apache Isis, Isis, Apache, the Apache feather logo, and the Apache Isis project logo are trademarks of The Apache Software Foundation.
+        </p>
+      </footer>
+
+    </div> <!-- /container -->
+
+  </body>
+</html>

Modified: websites/staging/isis/trunk/content/reference/recognized-annotations/about.html
==============================================================================
--- websites/staging/isis/trunk/content/reference/recognized-annotations/about.html (original)
+++ websites/staging/isis/trunk/content/reference/recognized-annotations/about.html Tue Nov 18 22:20:04 2014
@@ -565,6 +565,7 @@
         </td>
         <td></td>
         <td></td>
+    </tr>
     <tr>
         <td><a href="./Disabled.html">@Disabled</a></td>
         <td>UI, Domain</td>
@@ -575,6 +576,13 @@
         <td></td>
     </tr>
     <tr>
+        <td><a href="./DomainService.html">@DomainService</a></td>
+        <td>Domain</td>
+        <td>Class is a domain service (rather than an entity or view model)</td>
+        <td></td>
+        <td></td>
+    </tr>
+    <tr>
         <td><a href="./Encodable.html">@Encodable</a></td>
         <td>Persistence</td>
         <td>Indicates that a (value) class can be serialized/encoded.
@@ -600,7 +608,7 @@
     </tr>
     <tr>
         <td><a href="./Facets.html">@Facets</a></td>
-        <th>(any)</th>
+        <td>(any)</td>
         <td>Install arbitrary facets within the Isis metamodel.
         </td>
         <td></td>
@@ -666,7 +674,7 @@
     </tr>
     <tr>
         <td><a href="./Mask.html">@Mask</a></td>
-        <th>UI/domain</th>
+        <td>UI/domain</td>
         <td>How to parse/render values (not properly supported)
         </td>
         <td></td>
@@ -807,7 +815,7 @@
     </tr>
     <tr>
         <td><a href="./Parseable.html">@Parseable</a></td>
-        <th>UI/domain</th>
+        <td>UI/domain</td>
         <td>Indicates that a (value) class can be reconstructed from a string.
         </td>
         <td></td>
@@ -963,7 +971,7 @@
     <tr>
         <td><a href="./ViewModel.html">@ViewModel</a></td>
         <td>Domain, Persistence</td>
-        <td>Specify that a class is a view model (rather than a persisted entity).
+        <td>Specify that a class is a view model (as opposed to an entity or domain service).
         </td>
         <td></td>
         <td></td>

Modified: websites/staging/isis/trunk/content/tutorials/apacheconeu-2014.html
==============================================================================
--- websites/staging/isis/trunk/content/tutorials/apacheconeu-2014.html (original)
+++ websites/staging/isis/trunk/content/tutorials/apacheconeu-2014.html Tue Nov 18 22:20:04 2014
@@ -578,6 +578,10 @@ mvn clean install
 <li>rename the <code>SimpleObject</code> class' <code>name</code> property</li>
 <li>specify a <a href="http://isis.apache.org/how-tos/how-to-01-040-How-to-specify-a-title-for-a-domain-entity.html">title</a></li>
 <li>specify an <a href="http://isis.apache.org/how-tos/how-to-01-070-How-to-specify-the-icon-for-a-domain-entity.html">icon</a></li>
+<li>add the <a href="http://isis.apache.org/reference/recognized-annotations/Bookmarkable.html">@Bookmarkable</a> annotation
+<ul>
+<li>confirm is available from bookmark panel (top-left of Wicket UI)</li>
+</ul></li>
 </ul>
 
 <h2>Domain service</h2>
@@ -593,6 +597,7 @@ mvn clean install
 <li>as per our <a href="http://isis.apache.org/how-tos/how-to-09-040-How-to-write-a-custom-repository.html">docs</a></li>
 <li>note the annotations on the corresponding domain class (<code>SimpleObject</code> above, probably renamed by now)</li>
 </ul></li>
+<li>note the <code>@DomainService</code> annotation</li>
 </ul>
 
 <h2>Fixture scripts</h2>
@@ -708,7 +713,23 @@ mvn clean install
 <h2>Actions (ctd)</h2>
 
 <ul>
-<li>Add domain actions to add/remove from the collection</li>
+<li>Add domain actions to add/remove from the collection
+<ul>
+<li>to create objects, <a href="http://isis.apache.org/how-tos/how-to-01-150-How-to-inject-services-into-a-domain-entity-or-other-service.html">inject</a> associated domain service</li>
+<li>generally we recommend using the <code>@Inject</code> annotation with either private or default visibility</li>
+<li>the service itself use <a href="">DomainObjectContainer</a></li>
+</ul></li>
+<li>optional: add an action to clone an object  </li>
+</ul>
+
+<h2>Clock Service</h2>
+
+<ul>
+<li>To ensure testability, remove any dependencies on system time (eg defaults for date/time action parameters)
+<ul>
+<li>ie calls <code>LocalDate.now()</code></li>
+<li>instead, inject <a href="http://isis.apache.org/reference/services/ClockService.html">ClockService</a> and delegate to it</li>
+</ul></li>
 </ul>
 
 <h2>Layout</h2>
@@ -748,61 +769,125 @@ mvn clean install
 <li>use the <a href="http://isis.apache.org/reference/recognized-annotations/RegEx.html">@Regex</a> annotation to specify a pattern</li>
 <li>use the <a href="http://isis.apache.org/reference/recognized-annotations/MinLength.html">@MinLength</a> annotation to indicate a minimum number of characters</li>
 </ul></li>
-<li>For any data type:
+<li>Use the <code>validateXxx()</code> supporting method on <a href="http://isis.staging.apache.org/how-tos/how-to-02-100-How-to-validate-user-input-for-a-property.html">properties</a> or <a href="http://isis.staging.apache.org/how-tos/how-to-02-120-How-to-validate-an-action-parameter-argument.html">action parameter</a></li>
+<li>optional: for any data type:
 <ul>
 <li>use the <a href="http://isis.apache.org/reference/recognized-annotations/MustSatisfy.html">@MustSatisfy</a> annotation to specify an arbitrary constraint</li>
 </ul></li>
 </ul>
 
-<p>Use the <code>validateXxx()</code> supporting method on [properties](</p>
+<h2>Dashboard (home page)</h2>
+
+<ul>
+<li>Add the <a href="http://isis.apache.org/reference/recognized-annotations/HomePage.html">@HomePage</a> annotation to one (no more) of the domain services' no-arg actions</li>
+</ul>
+
+<h2>Decoupling using Contributions</h2>
 
+<h3>Contributed Actions</h3>
+
+<ul>
+<li>Write a new domain service
+<ul>
+<li>by convention, called "XxxContributions"</li>
+<li>annotate with <code>@DomainService</code></li>
+</ul></li>
+<li>Write an action accepting >1 args:
+<ul>
+<li>one being a domain entity</li>
+<li>other being a primitive or String</li>
+</ul></li>
+<li>For this action, add the <a href="http://isis.apache.org/reference/recognized-annotations/NotInServiceMenu.html">@NotInServiceMenu</a> annotation
 <ul>
-<li>disable</li>
-<li>hide</li>
-<li>vaidate</li>
+<li>indicates service's actions should <em>not</em> be included in the main application menu bar</li>
+</ul></li>
+<li>should be rendered "as if" an action of the entity</li>
 </ul>
 
-<p>Bookmarkable  </p>
+<h3>Contributed Collections</h3>
+
+<ul>
+<li>Write a new domain service (or update the one previously)</li>
+<li>Write a query-only action accepting exactly 1 arg (a domain entity)
+<ul>
+<li>returning a collection, list or set</li>
+</ul></li>
+<li>For this action:
+<ul>
+<li>add the <a href="http://isis.apache.org/reference/recognized-annotations/NotInServiceMenu.html">@NotInServiceMenu</a> annotation</li>
+<li>add the <a href="http://isis.apache.org/reference/recognized-annotations/NotContributed.html">@NotContributed(As.ACTION)</a> annotation</li>
+</ul></li>
+<li>should be rendered in the UI "as if" a collection of the entity</li>
+<li>use <code>.layout.json</code> to position as required</li>
+</ul>
+
+<h3>Contributed Properties</h3>
+
+<ul>
+<li>As for contributed collections, write a new domain service with a query-only action accepting exactly 1 arg (a domain entity); except:
+<ul>
+<li>returning a scalar value rather than a collection</li>
+</ul></li>
+<li>For this action, annotate as <a href="http://isis.apache.org/reference/recognized-annotations/NotInServiceMenu.html">@NotInServiceMenu</a> and <a href="http://isis.apache.org/reference/recognized-annotations/NotContributed.html">@NotContributed(As.ACTION)</a></li>
+<li>should be rendered in the UI "as if" a property of the entity</li>
+<li>use <code>.layout.json</code> to position as required</li>
+</ul>
+
+<h2>Decoupling using the Event Bus</h2>
+
+<p>TODO</p>
+
+<h2>Extending the Wicket UI</h2>
+
+<h3>Excel download</h3>
+
+<p>TODO</p>
+
+<h3>Fullcalendar2</h3>
+
+<p>TODO</p>
+
+<h3>gmap3</h3>
+
+<p>TODO</p>
+
+<h2>Add-ons</h2>
+
+<h3>Security</h3>
+
+<p>TODO</p>
 
-<p>dashboards (home page)</p>
+<h3>Command</h3>
 
-<p>contributed properties/collections</p>
+<p>TODO</p>
 
-<p>contributed actions</p>
+<h3>Auditing</h3>
 
-<p>creating objects:
-- domainobjectcontainer</p>
+<p>TODO</p>
 
-<p>clockservice</p>
+<h3>Publishing</h3>
 
-<p>.layout.json</p>
+<p>TODO</p>
 
-<p>CSS</p>
+<h2>CSS</h2>
 
-<p>@HomePage</p>
+<p>TODO</p>
 
-<p>view models</p>
+<h2>View models</h2>
 
-<p>Customising the REST API</p>
+<p>TODO</p>
 
-<p>wicket extensions
-- excel download
-- fullcalendar
-- gmap3</p>
+<h2>Integration tests</h2>
 
-<p>add-ons
-- security
-- command
-- auditing
-- publishing</p>
+<p>TODO</p>
 
-<p>event bus</p>
+<h2>Composite fixture scripts (a la Estatio)</h2>
 
-<p>RESTful API</p>
+<p>TODO</p>
 
-<p>composite fixture scripts (a la Estatio)</p>
+<h2>Customising the REST API</h2>
 
-<p>integration tests</p>
+<p>TODO</p>