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/02/19 10:40:52 UTC

svn commit: r940700 - in /websites/staging/isis/trunk: cgi-bin/ content/ content/archetypes/release-notes/ content/components/security/shiro/ content/contributors/ content/contributors/resources/ content/how-tos/ content/intro/getting-started/ content/...

Author: buildbot
Date: Thu Feb 19 09:40:52 2015
New Revision: 940700

Log:
Staging update by buildbot for isis

Modified:
    websites/staging/isis/trunk/cgi-bin/   (props changed)
    websites/staging/isis/trunk/content/   (props changed)
    websites/staging/isis/trunk/content/archetypes/release-notes/about.html
    websites/staging/isis/trunk/content/components/security/shiro/configuring-shiro.html
    websites/staging/isis/trunk/content/contributors/recreating-an-archetype.html
    websites/staging/isis/trunk/content/contributors/release-checklist.html
    websites/staging/isis/trunk/content/contributors/release-process.html
    websites/staging/isis/trunk/content/contributors/resources/upd.sh
    websites/staging/isis/trunk/content/contributors/verifying-releases-script.html
    websites/staging/isis/trunk/content/download.html
    websites/staging/isis/trunk/content/how-tos/how-to-customize-styling-for-a-domain-object.html
    websites/staging/isis/trunk/content/index.html
    websites/staging/isis/trunk/content/intro/getting-started/simpleapp-archetype.html
    websites/staging/isis/trunk/content/intro/getting-started/todoapp-archetype.html
    websites/staging/isis/trunk/content/intro/tutorials/screencasts.html
    websites/staging/isis/trunk/content/more-advanced-topics/Fixture-Scripts.html
    websites/staging/isis/trunk/content/more-thanks.html
    websites/staging/isis/trunk/content/reference/services/user-profile-service.html

Propchange: websites/staging/isis/trunk/cgi-bin/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Thu Feb 19 09:40:52 2015
@@ -1 +1 @@
-1660685
+1660819

Propchange: websites/staging/isis/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Thu Feb 19 09:40:52 2015
@@ -1 +1 @@
-1660685
+1660819

Modified: websites/staging/isis/trunk/content/archetypes/release-notes/about.html
==============================================================================
--- websites/staging/isis/trunk/content/archetypes/release-notes/about.html (original)
+++ websites/staging/isis/trunk/content/archetypes/release-notes/about.html Thu Feb 19 09:40:52 2015
@@ -437,6 +437,7 @@
 <p>TodoApp archetype (previously called the Quickstart archetype):</p>
 
 <ul>
+<li>(not released in 1.8.0-SNAPSHOT; moved to <a href="https://github.com/isisaddons/isis-app-todoapp">Isis addons</a> (not ASF)</li>
 <li><a href="todoapp-archetype-1.7.0.html">todoapp-archetype-1.7.0</a></li>
 <li><a href="todoapp-archetype-1.6.0.html">todoapp-archetype-1.6.0</a></li>
 <li><a href="quickstart_wrj-archetype-1.5.0.html">quickstart_wrj-archetype-1.5.0</a></li>

Modified: websites/staging/isis/trunk/content/components/security/shiro/configuring-shiro.html
==============================================================================
--- websites/staging/isis/trunk/content/components/security/shiro/configuring-shiro.html (original)
+++ websites/staging/isis/trunk/content/components/security/shiro/configuring-shiro.html Thu Feb 19 09:40:52 2015
@@ -424,7 +424,7 @@
 
 <h3>Example Configuration</h3>
 
-<p>The <a href="../../../intro/getting-started/simpleapp-archetype.html">simpleapp archetype</a> and the <a href="../../../intro/getting-started/todoapp-archetype.html">todoapp archetype</a> are both configured with Shiro; you should see all the configuration explained below in these.</p>
+<p>The <a href="../../../intro/getting-started/simpleapp-archetype.html">simpleapp archetype</a> is configured with Shiro; you should see all the configuration explained below in these.</p>
 
 <h2>Bootstrapping Shiro</h2>
 

Modified: websites/staging/isis/trunk/content/contributors/recreating-an-archetype.html
==============================================================================
--- websites/staging/isis/trunk/content/contributors/recreating-an-archetype.html (original)
+++ websites/staging/isis/trunk/content/contributors/recreating-an-archetype.html Thu Feb 19 09:40:52 2015
@@ -426,7 +426,7 @@
 
 <h3>Setup environment variables</h3>
 
-<p>If recreating the <strong>simpleapp</strong> archetype:</p>
+<p>To recreate the <strong>simpleapp</strong> archetype:</p>
 
 <pre><code>cd example/application/simpleapp
 
@@ -443,23 +443,6 @@ export ISISCPN=$(echo $ISISART | cut -d-
 env | grep ISIS | sort
 </code></pre>
 
-<p>If recreating the <strong>todoapp</strong> archetype:</p>
-
-<pre><code>cd example/application/todoapp
-
-export ISISTMP=/c/tmp   # or as required
-export ISISART=todoapp-archetype
-export ISISDEV=1.8.0-SNAPSHOT
-export ISISREL=1.7.0
-export ISISPAR=1.7.0
-export ISISRC=RC1
-
-export ISISCPT=$(echo $ISISART | cut -d- -f2)
-export ISISCPN=$(echo $ISISART | cut -d- -f1)
-
-env | grep ISIS | sort
-</code></pre>
-
 <p>nb: <code>$ISISPAR</code> is the version of the Isis core that will act as the archetype's parent.  Usually this is the same as <code>$ISISREL</code>.</p>
 
 <h3>Check the example app</h3>
@@ -500,9 +483,7 @@ mvn antrun:run -P self-host
 mvn jetty:run     
 </code></pre>
 
-<p>If recreating the <strong>simpleapp</strong> archetype, browse to <a href="http://localhost:8080/simpleapp-webapp/">http://localhost:8080/simpleapp-webapp/</a>.</p>
-
-<p>If recreating the <strong>todoapp</strong> archetype, browse to <a href="http://localhost:8080/todoapp-webapp/">http://localhost:8080/todoapp-webapp/</a>.</p>
+<p>Browse to <a href="http://localhost:8080/simpleapp-webapp/">http://localhost:8080/simpleapp-webapp/</a>.</p>
 
 <p>Check the about page and confirm built against non-SNAPSHOT versions of the Isis jars.</p>
 
@@ -553,7 +534,7 @@ The archetype can be created either by h
 <p>where:</p>
 
 <ul>
-<li><code>$ISISCPN</code> is the component name set earlier (<code>simpleapp</code> or <code>todoapp</code>)</li>
+<li><code>$ISISCPN</code> is the component name set earlier (<code>simpleapp</code>)</li>
 <li><code>$ISISPAR</code> is the version of isis core that is to be the parent of the generated archetype, 
 <ul>
 <li>this will usually be the same as <code>$ISISREL</code> unless a patch/interim release of the archetype.</li>
@@ -573,20 +554,13 @@ cd ../../..
 
 <p>Set up environment variables:</p>
 
-<p>If testing the <strong>simpleapp</strong> archetype:</p>
+<p>To test the <strong>simpleapp</strong> archetype:</p>
 
 <pre><code>export ISISTMP=/c/tmp    # or as required
 export ISISCPN=simpleapp
 env | grep ISIS | sort
 </code></pre>
 
-<p>If testing the <strong>todoapp</strong> archetype:</p>
-
-<pre><code>export ISISTMP=/c/tmp    # or as required
-export ISISCPN=todoapp
-env | grep ISIS | sort
-</code></pre>
-
 <p>Then recreate:</p>
 
 <pre><code>rm -rf $ISISTMP/test-$ISISCPN
@@ -612,7 +586,7 @@ mvn jetty:run                  # runs as
 
 <h3>Check the archetype source code into git</h3>
 
-<p>Back in the <em>original session</em> (at <code>example/application/simpleapp</code> or <code>example/application/todoapp</code>), we are ready to check the archetype source code into git:</p>
+<p>Back in the <em>original session</em> (at <code>example/application/simpleapp</code>), we are ready to check the archetype source code into git:</p>
 
 <pre><code>git rm -rf ../../archetype/$ISISCPN
 rm -rf ../../archetype/$ISISCPN
@@ -653,19 +627,12 @@ Using the script does not generate an ap
 
 <p>Make sure you are in the correct directory and environment variables are correct.</p>
 
-<p>If recreating the <strong>simpleapp</strong> archetype:</p>
+<p>To recreate the <strong>simpleapp</strong> archetype:</p>
 
 <pre><code>cd example/application/simpleapp
 
 env | grep ISIS | sort
 </code></pre>
-
-<p>If recreating the <strong>todoapp</strong> archetype:</p>
-
-<pre><code>cd example/application/todoapp
-
-env | grep ISIS | sort
-</code></pre>
 
 <p>If the environment variables look wrong, use the commands at the top of this page to setup.
 The script will also double check that all required environment variables are set.</p>

Modified: websites/staging/isis/trunk/content/contributors/release-checklist.html
==============================================================================
--- websites/staging/isis/trunk/content/contributors/release-checklist.html (original)
+++ websites/staging/isis/trunk/content/contributors/release-checklist.html Thu Feb 19 09:40:52 2015
@@ -472,19 +472,6 @@
             <td>&nbsp;</td>
         </tr>
         <tr>
-            <th>todoapp-archetype</th>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>n/a</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-        </tr>
-        <tr>
             <th>simpleapp-archetype</th>
             <td>&nbsp;</td>
             <td>&nbsp;</td>
@@ -527,15 +514,6 @@
             <td>&nbsp;</td>
             <td>&nbsp;</td>
             <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-        </tr>
-        <tr>
-            <th>todoapp-archetype</th>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
             <td>&nbsp;</td>
             <td>&nbsp;</td>
             <td>&nbsp;</td>

Modified: websites/staging/isis/trunk/content/contributors/release-process.html
==============================================================================
--- websites/staging/isis/trunk/content/contributors/release-process.html (original)
+++ websites/staging/isis/trunk/content/contributors/release-process.html Thu Feb 19 09:40:52 2015
@@ -1038,22 +1038,18 @@ git fetch
 <p>And use the following body:</p>
 
 <pre>
-I've cut a release for Apache Isis Core and related components:
+I've cut a release for Apache Isis Core and the simpleapp archetype:
 * Core 1.8.0
-* Wicket Viewer 1.8.0
 * SimpleApp Archetype 1.8.0
-* TodoApp Archetype 1.8.0
 
 The source code artifacts have been uploaded to staging repositories on repository.apache.org:
 
 * http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/core/isis/1.8.0/isis-1.8.0-source-release.zip
-* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/viewer/isis-viewer-wicket/1.8.0/isis-viewer-wicket-1.8.0-source-release.zip
 * http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/archetype/simpleapp-archetype/1.8.0/simpleapp-archetype-1.8.0-source-release.zip
-* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/archetype/todoapp-archetype/1.8.0/todoapp-archetype-1.8.0-source-release.zip
 
 For each zip there is a corresponding signature file (append .asc to the zip's url).
 
-In the source code repo the code has been tagged as isis-1.8.0-RC1, isis-viewer-wicket-1.8.0-RC1, simpleapp-archetype-1.8.0-RC1 and todoapp-archetype-1.8.0-RC1.
+In the source code repo the code has been tagged as isis-1.8.0-RC1 and simpleapp-archetype-1.8.0-RC1.
 
 For instructions on how to verify the release (build from binaries and/or use in Maven directly), see http://isis.apache.org/contributors/verifying-releases.html
 
@@ -1303,24 +1299,22 @@ The Isis team is pleased to announce the
 New features in this release include:
 - ...
 
-Full release notes are available at [1,2,3,4] on the Isis website.
+Full release notes are available at [1,2] on the Isis website.
 
 Note that:
 * ...
 
-You can access this release directly from the Maven central repo [5], 
-or download the release and build it from source [6].
+You can access this release directly from the Maven central repo [3],
+or download the release and build it from source [4].
 
 Enjoy!
 
 --The Isis team
 
 [1] http://isis.apache.org/core/release-notes/isis-1.x.0.html
-[2] http://isis.apache.org/components/viewers/wicket/release-notes/isis-viewer-wicket-1.x.0.html
-[3] http://isis.apache.org/archetypes/release-notes/todoapp-archetype-1.x.0.html
-[4] http://isis.apache.org/archetypes/release-notes/simpleapp-archetype-1.x.0.html
-[5] http://search.maven.org
-[6] http://isis.apache.org/download.html
+[2] http://isis.apache.org/archetypes/release-notes/simpleapp-archetype-1.x.0.html
+[3] http://search.maven.org
+[4] http://isis.apache.org/download.html
 </pre>
 
 <h3>Blog post</h3>

Modified: websites/staging/isis/trunk/content/contributors/resources/upd.sh
==============================================================================
--- websites/staging/isis/trunk/content/contributors/resources/upd.sh (original)
+++ websites/staging/isis/trunk/content/contributors/resources/upd.sh Thu Feb 19 09:40:52 2015
@@ -12,10 +12,8 @@
 #
 #################################################################
 
-isis_core="1.5.0 1.6.0"
-viewer_wicket="1.5.0 1.6.0"
-archetype_todoapp="1.5.0 1.6.0"
-archetype_simpleapp="1.5.0 1.6.0"
+isis_core="1.7.0 1.8.0"
+archetype_simpleapp="1.7.0 1.8.0"
 
 
 
@@ -63,67 +61,6 @@ fi
 
 
 #################################################################
-#
-# viewer_wicket
-#
-#################################################################
-old_ver=`echo $viewer_wicket | awk '{print $1}'`
-new_ver=`echo $viewer_wicket | awk '{print $2}'`
-
-if [ "$old_ver" != "$new_ver" ]; then 
-
-	type="viewer"
-	localname="wicket"
-
-	fullname="isis-$type-$localname"
-	pushd component/$type/$localname
-
-	curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$asc
-	svn add $fullname-$new_ver-$asc
-	curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$md5
-	svn add $fullname-$new_ver-$md5
-	curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$zip
-	svn add $fullname-$new_ver-$zip
-
-	svn delete $fullname-$old_ver-$asc
-	svn delete $fullname-$old_ver-$md5
-	svn delete $fullname-$old_ver-$zip
-
-	popd
-fi
-
-
-
-#################################################################
-#
-# archetype_todoapp
-#
-#################################################################
-old_ver=`echo $archetype_todoapp | awk '{print $1}'`
-new_ver=`echo $archetype_todoapp | awk '{print $2}'`
-
-if [ "$old_ver" != "$new_ver" ]; then 
-
-	type="archetype"
-	fullname="todoapp-archetype"
-	pushd $type/$fullname
-
-	curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$md5
-	svn add $fullname-$new_ver-$md5
-	curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$asc
-	svn add $fullname-$new_ver-$asc
-	curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$zip
-	svn add $fullname-$new_ver-$zip
-
-	svn delete $fullname-$old_ver-$md5
-	svn delete $fullname-$old_ver-$asc
-	svn delete $fullname-$old_ver-$zip
-
-	popd
-fi
-
-
-#################################################################
 #
 # archetype_simpleapp
 #

Modified: websites/staging/isis/trunk/content/contributors/verifying-releases-script.html
==============================================================================
--- websites/staging/isis/trunk/content/contributors/verifying-releases-script.html (original)
+++ websites/staging/isis/trunk/content/contributors/verifying-releases-script.html Thu Feb 19 09:40:52 2015
@@ -520,7 +520,7 @@ https://repository.apache.org/content/re
 
 <p>…and get yourself a cup of coffee.</p>
 
-<h2>Test the archetypes</h2>
+<h2>Test the archetype</h2>
 
 <p>Assuming that everything builds ok, then test the archetypes (adjust version as necessary):</p>
 
@@ -532,36 +532,14 @@ https://repository.apache.org/content/re
     -D version=1.0-SNAPSHOT \
     -B \
     -o \
-    -D archetypeVersion=1.7.0   # adjust version as necessary
-
+    -D archetypeVersion=1.8.0   # adjust version as necessary
 
 cd myapp
 mvn clean install -o
 mvn -P self-host antrun:run
 </code></pre>
 
-<p>and (adjust version as necessary):</p>
-
-<pre><code>cd ..
-rm -rf myapp
-
-mvn archetype:generate  \
-    -D archetypeGroupId=org.apache.isis.archetype \
-    -D archetypeArtifactId=todoapp-archetype \
-    -D groupId=com.mycompany \
-    -D artifactId=myapp \
-    -D version=1.0-SNAPSHOT \
-    -B \
-    -o \
-    -D archetypeVersion=1.7.0   # adjust version as necessary
-
-cd myapp
-
-mvn clean install -o    
-mvn -P self-host antrun:run
-</code></pre>
-
-<p>If they run up ok, then it's time to <a href="verifying-releases.html">vote</a>!</p>
+<p>If it runs up ok, then it's time to <a href="verifying-releases.html">vote</a>!</p>
 
 
 

Modified: websites/staging/isis/trunk/content/download.html
==============================================================================
--- websites/staging/isis/trunk/content/download.html (original)
+++ websites/staging/isis/trunk/content/download.html Thu Feb 19 09:40:52 2015
@@ -465,7 +465,6 @@ mvn archetype:generate  \
 
 <ul>
 <li><a href="https://www.apache.org/dyn/closer.cgi/isis/archetype/simpleapp-archetype/simpleapp-archetype-1.7.0-source-release.zip">simpleapp-archetype-1.7.0</a> (<a href="http://www.apache.org/dist/isis/archetype/simpleapp-archetype/simpleapp-archetype-1.7.0-source-release.zip.asc">asc</a>, <a href="http://www.apache.org/dist/isis/archetype/simpleapp-archetype/simpleapp-archetype-1.7.0-source-release.zip.md5">md5</a>)</li>
-<li><a href="https://www.apache.org/dyn/closer.cgi/isis/archetype/todoapp-archetype/todoapp-archetype-1.7.0-source-release.zip">todoapp-archetype-1.7.0</a> (<a href="http://www.apache.org/dist/isis/archetype/todoapp-archetype/todoapp-archetype-1.7.0-source-release.zip.asc">asc</a>, <a href="http://www.apache.org/dist/isis/archetype/todoapp-archetype/todoapp-archetype-1.7.0-source-release.zip.md5">md5</a>)</li>
 </ul>
 
 <p>See the <a href="release-matrix.html">release matrix</a> for details on the dependencies between core, components and archetypes.</p>

Modified: websites/staging/isis/trunk/content/how-tos/how-to-customize-styling-for-a-domain-object.html
==============================================================================
--- websites/staging/isis/trunk/content/how-tos/how-to-customize-styling-for-a-domain-object.html (original)
+++ websites/staging/isis/trunk/content/how-tos/how-to-customize-styling-for-a-domain-object.html Thu Feb 19 09:40:52 2015
@@ -437,7 +437,7 @@ a CSS class on the containing &lt;tr&gt;
 
 <h2>Screenshots</h2>
 
-<p>The <a href="../intro/getting-started/todoapp-archetype.html">todoapp</a> uses this technique to render completed items with a strikethrough:</p>
+<p>The <a href="https://github.com/isisaddons/isis-app-todoapp">todoapp addon</a> (not ASF) uses this technique to render completed items with a strikethrough:</p>
 
 <p><img src="images/cssclass-todoapp-example.png" alt="" /></p>
 

Modified: websites/staging/isis/trunk/content/index.html
==============================================================================
--- websites/staging/isis/trunk/content/index.html (original)
+++ websites/staging/isis/trunk/content/index.html Thu Feb 19 09:40:52 2015
@@ -528,8 +528,7 @@
   <div class="row">
     <div class="col-md-8 col-md-offset-2">
       <div align="center">
-      <h4>Get started with your own Isis application using our <a href="intro/getting-started/simpleapp-archetype.html">simpleapp archetype</a> or
-      <a href="intro/getting-started/todoapp-archetype.html">todoapp archetype</a> (the above screenshots are from the latter).</h4>.
+      <h4>Get started with your own Isis application using our <a href="intro/getting-started/simpleapp-archetype.html">simpleapp archetype</a>.</h4>.
       </div>
     </div>
   </div>

Modified: websites/staging/isis/trunk/content/intro/getting-started/simpleapp-archetype.html
==============================================================================
--- websites/staging/isis/trunk/content/intro/getting-started/simpleapp-archetype.html (original)
+++ websites/staging/isis/trunk/content/intro/getting-started/simpleapp-archetype.html Thu Feb 19 09:40:52 2015
@@ -424,8 +424,6 @@
 
 <p>The quickest way to get started with Apache Isis is to run the simple archetype.  This will generate a very simple one-class domain model, called <code>SimpleObject</code>, with a single property <code>name</code>.  There is also a corresponding <code>SimpleObjectRepository</code> domain service.  From this you can easily rename these initial classes, and extend to build up your own Isis domain application.</p>
 
-<p>If you want to see a more functionally complete example, also check out the <a href="todoapp-archetype.html">TodoApp archetype</a>; this will give you a good idea of what makes up a not-too-complex Isis application.  In fact, we recommend that you run both archetypes: this archetype generates a very simple application for you to refactor and extend, while the ToDo app provides to guide your own development.</p>
-
 <h2>Generating the App (stable release)</h2>
 
 <p>Create a new directory, and <code>cd</code> into that directory.</p>

Modified: websites/staging/isis/trunk/content/intro/getting-started/todoapp-archetype.html
==============================================================================
--- websites/staging/isis/trunk/content/intro/getting-started/todoapp-archetype.html (original)
+++ websites/staging/isis/trunk/content/intro/getting-started/todoapp-archetype.html Thu Feb 19 09:40:52 2015
@@ -422,6 +422,12 @@
 </h1>
 </div>
 
+<blockquote>
+  <p>as of 1.8.0-SNAPSHOT the todoapp is no longer released; the example app has instead moved to <a href="https://github.com/isisaddons/isis-app-todoapp">Isis addons</a> (not ASF).  This allows us to provide a more fully-fledged example that integrates with other Isis addons modules.</p>
+</blockquote>
+
+<hr/>
+
 <p>The TodoApp archetype will generate a reasonably complete application for tracking to-do items, based around a single domain class <code>ToDoItem</code> and repository, <code>ToDoItems</code>.</p>
 
 <p>While not quite a "kitchen-sink" example (there is, after all, just a single domain class), the app nevertheless demonstrates a good number of Isis' capabilities.  In particular, the use of contributed actions etc is demonstrated by <code>ToDoItemContributions</code>; view models are demonstrated by <code>ToDoItemsByCategoryViewModel</code> and <code>ToDoItemsByDateRangeViewModel</code>; a dashboard is demonstrated by <code>ToDoAppDashboard</code>. </p>

Modified: websites/staging/isis/trunk/content/intro/tutorials/screencasts.html
==============================================================================
--- websites/staging/isis/trunk/content/intro/tutorials/screencasts.html (original)
+++ websites/staging/isis/trunk/content/intro/tutorials/screencasts.html Thu Feb 19 09:40:52 2015
@@ -446,6 +446,8 @@
     <br/><br/>
     Learn how to generate this app <a href="../getting-started/todoapp-archetype.html#screencast">here</a>
     <br/><br/>
+    <i>nb: the todoapp has (in 1.8.0-SNAPSHOT) moved to <a href="https://github.com/isisaddons/isis-app-todoapp">Isis addons</a> (not ASF).</i>
+    <br/><br/>
     <i>nb: the todoapp was previously called the 'quickstart' app</i>
     </td>
     <td>
@@ -457,6 +459,8 @@
     <br/><br/>
     Learn how to use the <a href="../getting-started/todoapp-archetype.html#screencast">quickstart archetype</a> here
     <br/><br/>
+    <i>nb: the todoapp has (in 1.8.0-SNAPSHOT) moved to <a href="https://github.com/isisaddons/isis-app-todoapp">Isis addons</a> (not ASF).</i>
+    <br/><br/>
     <i>nb: the todoapp was previously called the 'quickstart' app</i>
     </td>
     <td>

Modified: websites/staging/isis/trunk/content/more-advanced-topics/Fixture-Scripts.html
==============================================================================
--- websites/staging/isis/trunk/content/more-advanced-topics/Fixture-Scripts.html (original)
+++ websites/staging/isis/trunk/content/more-advanced-topics/Fixture-Scripts.html Thu Feb 19 09:40:52 2015
@@ -448,21 +448,20 @@ can practice using the features of the s
 
 <p>The "fixture script" service is an application-specific subclass of the abstract <code>FixtureScripts</code> service provided in
 Isis' applib.  An example of this can be found in the <a href="../intro/getting-started/simpleapp-archetype.html">simple app</a>
-archetype, which defines <code>SimpleObjectsFixtureService</code>.  The <a href="../intro/getting-started/todoapp-archetype.html">todo app</a>
-archetype also does something very similar, defining a <code>ToDoItemsFixtureService</code>.</p>
+archetype, which defines <code>SimpleObjectsFixtureService</code>.</p>
 
 <h2>Using Fixture Scripts in the UI</h2>
 
 <p>The normal convention is to for the (application's) fixture script service to be surfaced on a "Prototyping" menu.  Here's
-how the <a href="../intro/getting-started/todoapp-archetype.html">todo app</a> defines its fixture script service:</p>
+how the <a href="../intro/getting-started/simpleapp-archetype.html">simpleapp</a> defines its fixture script service:</p>
 
 <pre><code>@DomainService
 @DomainServiceLayout(
-    named = "Prototyping",
-    menuBar = DomainServiceLayout.MenuBar.SECONDARY,
-    menuOrder = "10"
+        named="Prototyping",
+        menuBar = DomainServiceLayout.MenuBar.SECONDARY,
+        menuOrder = "20"
 )
-public class ToDoItemsFixturesService extends FixtureScripts {
+public class SimpleObjectsFixturesService extends FixtureScripts {
     ...
 }
 </code></pre>
@@ -498,88 +497,39 @@ to any of the objects created/updated by
 
 <p>Fixture scripts can be invoked in integration tests by injecting the <code>FixtureScripts</code> service and then using the service to execute the required fixture script.</p>
 
-<p>For example, here's one of the <a href="../intro/getting-started/todoapp-archetype.html">todo app</a>'s integration tests:</p>
+<p>For example, here's one of the <a href="../intro/getting-started/simpleapp-archetype.html">todo app</a>'s integration tests:</p>
 
-<pre><code>public class ToDoItemIntegTest extends AbstractToDoIntegTest {
-
-    ToDoItemsRecreateAndCompleteSeveral fixtureScript;
-
-    @Before
-    public void setUpData() throws Exception {
-        fixtureScript = new ToDoItemsRecreateAndCompleteSeveral();
-        fixtureScripts.runFixtureScript(fixtureScript, null);
-    }
+<pre><code>public class SimpleObjectsIntegTest extends SimpleAppIntegTest {
 
     @Inject
     FixtureScripts fixtureScripts;
-
-    ...
-}
-</code></pre>
-
-<p>The integration test can then lookup the object of interest using the <code>FixtureScript#lookup(...)</code> method:</p>
-
-<pre><code>public class ToDoItemIntegTest extends AbstractToDoIntegTest {
     ...
-    TodoItem toDoItem;
 
     @Before
     public void setUp() throws Exception {
+        // given
+        fs = new RecreateSimpleObjects().setNumber(1);
+        fixtureScripts.runFixtureScript(fs, null);
 
-        toDoItem = fixtureScript.lookup(
-            "to-do-items-recreate-and-complete-several/to-do-item-complete-for-buy-stamps/item-1",
-            ToDoItem.class);
-        assertThat(toDoItem, is(not(nullValue())));
-
+        ...
     }
     ...
 }
 </code></pre>
 
-<p>The lookup key is the same as is rendered in the UI, and is also printed to the console.  (Although not done in the
-<a href="../intro/getting-started/todoapp-archetype.html">todo app</a>) it's probably good practice to encapsulate this string within the fixture script subclass, eg:</p>
-
-<pre><code>public class ToDoItemsRecreateAndCompleteSeveral extends FixtureScript {
-    ...
-    @Override
-    protected void execute(ExecutionContext executionContext) {
-        ...
-        toDoItemNotComplete = fixtureScript.lookup(
-            "to-do-items-recreate-and-complete-several/to-do-item-complete-for-buy-stamps/item-1",
-            ToDoItem.class);
-    }
-
-    public TodoItem toDoItemNotComplete;
-}
-</code></pre>
+<p>The integration test can then lookup the object of interest using the <code>FixtureScript#lookup(...)</code> method:</p>
 
-<p>allowing the test to be rewritten:</p>
+<pre><code>public class SimpleObjectsIntegTest extends SimpleAppIntegTest {
 
-<pre><code>public class ToDoItemIntegTest extends AbstractToDoIntegTest {
     ...
-    TodoItem toDoItem;
+    SimpleObject simpleObjectPojo;
 
     @Before
     public void setUp() throws Exception {
-        toDoItem = fixtureScript.toDoItemNotComplete;
-    }
-    ...
-}
-</code></pre>
-
-<p>Alternatively (and arguably a more 'purist' approach), the test could find data just by searching for it, eg:</p>
-
-<pre><code>public class ToDoItemIntegTest extends AbstractToDoIntegTest {
-    ...
-    TodoItem toDoItem;
+        ...
 
-    @Before
-    public void setUp() throws Exception {
-        toDoItem = toDoItems.notYetComplete().get(0);
+        simpleObjectPojo = fs.getSimpleObjects().get(0);
     }
-
-    @Inject
-    ToDoItems toDoItems;
     ...
 }
 </code></pre>
@@ -595,7 +545,7 @@ to any of the objects created/updated by
 }
 </code></pre>
 
-<p>The <code>ExecutionContext</code> provides two main capabilities to the fixture script:</p>
+<p>The <code>ExecutionContext</code> provides three main capabilities to the fixture script:</p>
 
 <ul>
 <li>the script can execute other child fixture scripts (1.8.0-SNAPSHOT)</li>
@@ -606,7 +556,8 @@ to any of the objects created/updated by
 </pre>
 
 <ul>
-<li>the script can add created or updated objects to the fixture's results, so that they can be rendered in the UI, or looked up by an integration test</li>
+<li>the script can get and set parameters from/to the context.  More on this topic below.</li>
+<li>the script can add created or updated objects to the fixture's results, so that they can be rendered in the UI.</li>
 </ul>
 
 <pre>
@@ -624,310 +575,199 @@ in those SQL statements will be out-of-d
 on the domain objects.  Then, if those actions change in the future, the scripts remain valid.  Put another way: have
 the fixture scripts replay the "cause" of the change (business actions) rather than the "effect" (data inserts).</p>
 
-<p>We therefore find it's helpful to distinguish:</p>
-
-<ul>
-<li>scenario fixture scripts - coarse-grained, accomplish a single business goal (or set up a bunch of related data)</li>
-<li>action fixture scripts - fine-grained, perform a single action on a domain object or service</li>
-</ul>
-
-<p>Thus, scenario scripts call action scripts, with the action scripts as the atomic building blocks.</p>
-
-<h3>Example Usage</h3>
-
-<p>The <a href="../intro/getting-started/todoapp-archetype.html">todo app</a>  uses fixture
-scripts to create a number of todo items, in different states (some complete, some not).  Its design is:</p>
-
-<ul>
-<li><code>ToDoItemAbstract</code> is an (abstract) action script that knows how to create a todo item</li>
-<li><code>ToDoItemXxx</code> are (concrete) action scripts (subclassing <code>ToDoItemAbstract</code>) that specify the "what" (action arguments) to be created</li>
-</ul>
+<h2>Using input and output Parameters</h2>
 
-<p>similarly:</p>
-
-<ul>
-<li><code>ToDoItemCompleteAbstract</code> is an (abstract) action script that knows how to complete a (not yet complete) todo item</li>
-<li><code>ToDoItemCompleteXxx</code> are (concrete) action scripts (subclassing <code>ToDoItemCompleteAbstract</code>) that specify which actual todo item to complete</li>
-</ul>
-
-<p>while:</p>
-
-<ul>
-<li><code>ToDoItemsRecreate</code> is a scenario script that creates about a dozen or so todo items</li>
-<li><code>ToDoItemsRecreateAndCompleteSeveral</code> is a scenario script that creates a dozen or so todo items and completes a handful of them</li>
-</ul>
-
-<p>The <code>ToDoItemsRecreateAndCompleteSeveral</code> script actually calls <code>ToDoItemsRecreate</code>, and so the nesting can be as deep as required.
-In practice though we recommend keeping the hierarchy relatively shallow.</p>
-
-<h3>Action script examples</h3>
-
-<p>The <a href="../intro/getting-started/todoapp-archetype.html">todo app</a>'s <code>ToDoItemForBuyStamps</code> fixture script creates a single, not yet complete todo item:</p>
-
-<pre><code>public class ToDoItemForBuyStamps extends ToDoItemAbstract {
-
-    public static final String DESCRIPTION = "Buy stamps";
+<p>As the screenshots above show, the <code>FixtureScripts#runFixtureScript</code> action allows optional parameters to be provided to the called fixture scripts:</p>
 
-    @Override
-    protected void execute(ExecutionContext executionContext) {
-        createToDoItem(
-                DESCRIPTION,
-                Category.Domestic, Subcategory.Shopping,
-                nowPlusDays(0),
-                BD("10.00"),
-                executionContext);
+<pre><code>public abstract class FixtureScripts {
+    ...
+    public List&lt;FixtureResult&gt; runFixtureScript(
+            final FixtureScript fixtureScript,
+            @ParameterLayout(
+                named="Parameters",
+                describedAs="Script-specific parameters (if any).  The format depends on the script implementation...",
+                multiLine = 10
+            )
+            @Optional
+            final String parameters) {
+        ...
     }
+    ...
 }
 </code></pre>
 
-<p>where in turn <code>ToDoItemAbstract</code> inherits from <code>FixtureScript</code> and provides the <code>createToDoItem(...)</code> method:</p>
-
-<pre><code>public abstract class ToDoItemAbstract extends FixtureScript {
+<p>These parameters are then made available in <code>ExecutionContext</code> to be consumed by the fixture script (and any child
+fixture scripts that might be called in turn):</p>
 
-    protected ToDoItem createToDoItem(
-            final String description,
-            final Category category, final Subcategory subcategory,
-            final LocalDate dueBy,
-            final BigDecimal cost,
-            final ExecutionContext executionContext) {
-
-        // validate parameters
-        final String ownedBy = executionContext.getParameter("ownedBy");
-        if(ownedBy == null) {
-            throw new IllegalArgumentException("'ownedBy' must be specified");
-        }
-
-        // execute
-        ToDoItem newToDo = toDoItems.newToDo(
-                description, category, subcategory, ownedBy, dueBy, cost);
-        return executionContext.addResult(this, newToDo);
-    }
+<pre><code>public class ExecutionContext {
+    ...
+    public String getParameters() { ... }
     ...
-
-    @javax.inject.Inject
-    private ToDoItems toDoItems;
 }
 </code></pre>
 
-<p>Similarly, the following fixture script looks up a todo item (assumed to have been created earlier on) and then complete it:</p>
-
-<pre><code>public class ToDoItemCompleteForBuyStamps extends ToDoItemCompleteAbstract {
+<p>The fixture script framework itself places no conditions on the format of these parameters, but it would quickly become
+tedious to have to parse that single parameter string.  The <code>ExecutionContext</code> therefore provides additional methods
+that parses that initial string into a set of parameters as key=value pairs:</p>
 
-    @Override
-    protected void execute(ExecutionContext executionContext) {
-        complete(ToDoItemForBuyStamps.DESCRIPTION, executionContext);
-    }
+<pre><code>public class ExecutionContext {
+    ...
+    public Map&lt;String,String&gt; getParameterMap() { ... }
+    ...
 }
 </code></pre>
 
-<p>where once more the superclass provides the "know-how":</p>
+<p>There are also various overloads to retrieve each parameter as a particular datatype:</p>
 
-<pre><code>public abstract class ToDoItemCompleteAbstract extends FixtureScript {
-
-    protected void complete(final String description, final ExecutionContext executionContext) {
-        String ownedBy = executionContext.getParameter("ownedBy");
-        final ToDoItem toDoItem = findToDoItem(description, ownedBy);
-        toDoItem.setComplete(true);
-        executionContext.addResult(this, toDoItem);
-    }
-
-    private ToDoItem findToDoItem(final String description, final String ownedBy) {
-        final Collection&lt;ToDoItem&gt; filtered = Collections2.filter(
-            getContainer().allInstances(ToDoItem.class),
-                new Predicate&lt;ToDoItem&gt;() {
-                    @Override
-                    public boolean apply(ToDoItem input) {
-                        return Objects.equal(description, input.getDescription()) &amp;&amp;
-                               Objects.equal(ownedBy, input.getOwnedBy());
-                    }
-                });
-        return filtered.isEmpty()? null: filtered.iterator().next();
-    }
+<pre><code>public class ExecutionContext {
+    ...
+    public String getParameter(String parameterName) { ... }
+    public String getParameterAsInteger(String parameterName) { ... }
+    public LocalDate getParameterAsLocalDate(String parameterName) { ... }
+    public Boolean getParameterAsBoolean(String parameterName) { ... }
+    ...
 }
 </code></pre>
 
-<h3>Scenario scripts examples</h3>
+<p>and so on.  For example:</p>
 
-<p>The <code>ToDoItemsRecreate</code> fixture script sets up a whole bunch of todo items:</p>
-
-<pre><code>public class ToDoItemsRecreate extends FixtureScript {
-
-    public ToDoItemsRecreate() {
-        withDiscoverability(Discoverability.DISCOVERABLE);
-    }
-    ...
-    @Override
-    protected void execute(ExecutionContext executionContext) {
-        ...
-
-        // prereqs
-        executionContext.executeChild(this, new ToDoItemsDelete());
-
-        // create items
-        executionContext.executeChild(this, new ToDoItemForBuyMilk());
-        executionContext.executeChild(this, new ToDoItemForBuyBread());
-        executionContext.executeChild(this, new ToDoItemForBuyStamps());
-        executionContext.executeChild(this, new ToDoItemForPickUpLaundry());
-        executionContext.executeChild(this, new ToDoItemForMowLawn());
-        executionContext.executeChild(this, new ToDoItemForVacuumHouse());
-        executionContext.executeChild(this, new ToDoItemForSharpenKnives());
-        executionContext.executeChild(this, new ToDoItemForWriteToPenPal());
-        executionContext.executeChild(this, new ToDoItemForWriteBlogPost());
-        executionContext.executeChild(this, new ToDoItemForOrganizeBrownBag());
-        executionContext.executeChild(this, new ToDoItemForSubmitConferenceSession());
-        executionContext.executeChild(this, new ToDoItemForStageIsisRelease());
-    }
-}
-</code></pre>
+<pre>
+    LocalDate dob = executionContext.getParameterAsLocalDate("dateOfBirth");
+</pre>
 
-<p>There's a couple of things worth pointing out here.  First, in the <code>execute(...)</code> method, note the call to the <code>ToDoItemsDelete</code> fixture script.  This is responsible for tearing down all relevant data first:</p>
+<p>Alternatively <code>getParameter(String, Class&lt;T&gt;)</code> can be used, specifying the desired datatype:</p>
 
-<pre><code>public class ToDoItemsDelete extends FixtureScript {
+<pre>
+    LocalDate dob = executionContext.getParameterAsT("dateOfBirth", LocalDate.class);
+</pre>
 
-    protected void execute(ExecutionContext executionContext) {
-        final String ownedBy = executionContext.getParameter("ownedBy");
-        isisJdoSupport.executeUpdate("delete from \"ToDoItem\" where \"ownedBy\" = '" + ownedBy + "'");
-    }
+<p>Parameter values can also be set on <code>ExecutionContext</code>:</p>
 
-    @javax.inject.Inject
-    private IsisJdoSupport isisJdoSupport;
+<pre><code>public class ExecutionContext {
+    ...
+    public void setParameter(String parameterName, String parameterValue) { ... }
+    public void setParameter(String parameterName, Integer parameterValue) { ... }
+    public void setParameter(String parameterName, LocalDate parameterValue) { ... }
+    public void setParameter(String parameterName, Boolean parameterValue) { ... }
+    ...
 }
 </code></pre>
 
-<p>Usually tear down fixture scripts will delete some logic partition of data that is under the exclusive control of the test; in the case the fact that every todo item has an owner is exploited.</p>
+<p>and so on.  For example:</p>
 
-<p>Second, the scenario script is made available in the UI through the call to <code>withDiscoverability(...)</code> in its constructor:</p>
+<p>and</p>
 
-<pre><code>public class ToDoItemsRecreate extends FixtureScript {
+<pre>
+    executionContext.setParameter("dateOfBirth", clockService.now().minus(new Years(18)));
+</pre>
 
-    public ToDoItemsRecreate() {
-        withDiscoverability(Discoverability.DISCOVERABLE);
-    }
-    ...
-}
-</code></pre>
+<p>This provides a useful mechanism for sharing data between fixture scripts that call child fixture scripts.  And on that topic...</p>
 
-<p>This tells the fixture script framework that the fixture script should be listed as a choice in the UI:</p>
+<h2>Scenario scripts and action scripts</h2>
 
-<p><img src="images/fixture-scenarios.png" width="400"></img></p>
+<p>We find it's helpful to distinguish:</p>
 
-<h2>Using Deeper Hierarchies</h2>
+<ul>
+<li>scenario fixture scripts - coarse-grained, to accomplish a particular business goal (or set up a bunch of related data)</li>
+<li>action fixture scripts - fine-grained, perform a single action on a domain object or service</li>
+</ul>
 
-<p>While we suggest that you organize fixture scripts in two levels - coarse-grained scenario scripts and fine-grained action scripts - you can if you wish create deeper hierarchies than this.  Put another way: fixture scripts form a hierarchy (composite pattern) and the nesting can be as deep as you require.</p>
+<p>Scenario scripts can be called from the UI, making it easy to demonstrate new features, or for manual exploratory testing.
+These scenario scripts then call action scripts, with the action scripts as the atomic building blocks that do the actual work.</p>
 
-<p>The <a href="../intro/getting-started/todoapp-archetype.html">todo app</a>'s fixture hierarchy as implemented is quite flat:</p>
+<p>We also recommend that fixture scripts define (as simple JavaBean properties) both <code>input</code> parameters and also <code>output</code> parameters.
+Input parameters/properties are used to adjust the behaviour of the fixture script, while the output properties provide the means for
+the fixture script to make the object(s) created/modified available to a calling integration test.</p>
+
+<p>So that they can be "just be executed" from the UI, scenario scripts should have defaults for all inputs.  A lot of
+the value for fixture scripts arises if they can perform their setup with a minimum of inputs, in other words using
+sensible defaults if none are specified.  Action scripts should also default as much as possible, on the other hand may
+have some mandatory inputs that must be set by the calling scenario.</p>
+
+<blockquote>
+  <p>Check out libraries that can generate random test data (a quick google search throws up
+  <a href="https://github.com/DiUS/java-faker">this ASLv2 licensed port</a> of the popular Ruby Faker library.</p>
+</blockquote>
 
-<p><img src="images/fixture-script-hierarchies-1.PNG" width="500"></img></p>
+<p>To assist with this all of this, the <code>FixtureScript</code> class provides two methods:</p>
 
-<p>where each dependency represents one fixture script using <code>ExecutionContext#executeChild(...)</code> to execute another.</p>
+<ul>
+<li><code>defaultParam(...)</code> will attempt to (reflectively) read a parameter the fixture script itself, otherwise from the
+execution context itself, otherwise will fall back on a default value:</li>
+</ul>
 
-<p>However, it would be possible to refactor it to use a deeper hierarchy, for example as:</p>
+<pre>
+    LocalDate dateOfBirth = defaultParam("dateOfBirth", executionContext ec, clockService.now().minus(new Years(18)));
+</pre>
 
-<p><img src="images/fixture-script-hierarchies-2.PNG" width="370"></img></p>
+<ul>
+<li><code>checkParam(...)</code> will attempt to (reflectively) read a parameter the fixture script itself, otherwise from the
+execution context itself, otherwise will throw an exception:</li>
+</ul>
 
-<p>With this design each fixture script takes responsibility for setting up its prerequisites, up to and including
-running the <code>ToDoItemsDelete</code> teardown script.</p>
+<pre>
+    LocalDate dateOfBirth = defaultParam("dateOfBirth", executionContext ec, LocalDate.class);
+</pre>
 
-<p>To support this design, by default the fixture script framework (specifically, <code>ExecutionContext</code>) will only ever run
-a fixture script once; or to be more precise, it will only ever run one instance of a given class of fixture script once.
-Thus, although in the refactored design each of <code>ToDoItemForXxx</code>, <code>ToDoItemForYyy</code>, <code>ToDoItemForZzz</code> etc all call
-<code>ToDoItemsDelete</code>, it will only be called once for the first of these, and thereafter the call will be skipped.</p>
+<p>As you can probably guess, scenario scripts should only call <code>defaultParam(...)</code>, whereas action scripts can also call
+<code>checkParam(...)</code> for any mandatory parameters.</p>
 
-<p>If you don't want this behaviour (ie you prefer that every script should always be called) then it can be overridden
-in the constructor:</p>
+<h3>Example Usage (1.8.0-SNAPSHOT)</h3>
 
-<pre><code>public class ToDoItemsFixturesService extends FixtureScripts {
+<p>The <a href="../intro/getting-started/simpleapp-archetype.html">simpleapp</a> has fixtures that follow this pattern:</p>
 
-    public ToDoItemsFixturesService() {
-        super("fixture.todo", MultipleExecutionStrategy.EXECUTE);
-    }
-</code></pre>
+<ul>
+<li><code>RecreateSimpleObjects</code> is a scenario that creates a number of simple objects</li>
+<li><code>SimpleObjectCreate</code> is an action script that creates a single simple object.</li>
+</ul>
 
-<h2>Parameters</h2>
+<p>Because the <code>RecreateSimpleObjects</code> is a scenario script, it can be run without any input parameters, and will by default
+cause 3 object to be created.  This can be influenced by the "number" input property, a simple JavaBean:</p>
 
-<p>A lot of the value for fixture scripts arises if they can perform their setup with a minimum of inputs, in other words
-using sensible defaults for action arguments if none are created.  Indeed, they may well make use of a library to
-generate random test data (a quick google search throws up <a href="https://github.com/DiUS/java-faker">this ASLv2 licensed port</a>
-of the popular Ruby Faker library.</p>
-
-<p>But, sometimes we want the ability to influence the behaviour of a fixture script by overriding these defaults.  In the
-context of an automated integration test, the overridden arguments help to highlight the data that is important to the
-test.  In the context of manual exploratory testing, these make it easier for the tester to play around with variations
-on different starting scenarios.</p>
+<pre><code>private Integer number;
 
-<p>As the screenshots above show, the <code>FixtureScripts#runFixtureScript</code> action allows optional parameters to be provided to the called fixture scripts:</p>
+/**
+ * The number of objects to create, up to 10; optional, defaults to 3.
+ */
+public Integer getNumber() { return number; }
 
-<pre><code>public abstract class FixtureScripts {
-    ...
-    public List&lt;FixtureResult&gt; runFixtureScript(
-            final FixtureScript fixtureScript,
-            @ParameterLayout(
-                named="Parameters",
-                describedAs="Script-specific parameters (if any).  The format depends on the script implementation...",
-                multiLine = 10
-            )
-            @Optional
-            final String parameters) {
-        ...
-    }
-    ...
+public RecreateSimpleObjects setNumber(final Integer number) {
+    this.number = number;
+    return this;
 }
 </code></pre>
 
-<p>These parameters are then made available in <code>ExecutionContext</code> to be consumed by the fixture script (and any child
-fixture scripts that might be called in turn):</p>
-
-<pre><code>public class ExecutionContext {
-    ...
-    public String getParameters() { ... }
-    ...
-}
-</code></pre>
+<p>(The setter returns 'this' to allow for chaining).</p>
 
-<p>The fixture script framework itself places no conditions on the format of these parameters, but it does provide API
-to support parameters specified in key=value pairs.  These can be read and also updated:</p>
+<p>In the body of the scenario, the script uses <code>defaultParam(...)</code> to default this value if not specified:</p>
 
-<pre><code>public class ExecutionContext {
-    ...
-    public String getParameter(String parameterName) { ... }
-    public Map&lt;String,String&gt; getParameterMap() { ... }
-    ...
-    public void setParameterIfNotPresent(String parameterName, String parameterValue) { ... }
-    ...
-}
+<pre><code>    final int number = defaultParam("number", ec, 3);
 </code></pre>
 
-<p>The last method <code>setParameterIfNotPresent(...)</code>, provides a useful way by which the fixture script can supply defaults
-if they haven't been specified in the calling script.</p>
-
-<p>For example, the <code>ToDoItemsRecreate</code> fixture script uses this API to default an "ownedBy" parameter (so that every
-todo item created is for a particular user):</p>
+<p>This scenario script also provides an output property, being a list of the objects created by the script:</p>
 
-<pre><code>public class ToDoItemsRecreate extends FixtureScript {
-    ...
+<pre><code>private final List&lt;SimpleObject&gt; simpleObjects = Lists.newArrayList();
 
-    private String ownedBy;
-    public String getOwnedBy() { return ownedBy; }
-    public void setOwnedBy(String ownedBy) { this.ownedBy = ownedBy; }
+/**
+ * The simpleobjects created by this fixture (output).
+ */
+public List&lt;SimpleObject&gt; getSimpleObjects() { return simpleObjects; }
+</code></pre>
 
-    @Override
-    protected void execute(ExecutionContext executionContext) {
+<p>Together these properties constitute a simple and convenient API for integration tests to use:</p>
 
-        // defaults
-        executionContext.setParameterIfNotPresent(
-                "ownedBy",
-                Util.coalesce(getOwnedBy(), getContainer().getUser().getName()));
+<pre><code>@Before
+public void setUp() throws Exception {
+    // given
+    fs = new RecreateSimpleObjects().setNumber(1);
+    fixtureScripts.runFixtureScript(fs, null);
 
-        ...
-    }
+    simpleObjectPojo = fs.getSimpleObjects().get(0);
 }
 </code></pre>
 
-<p>Thus, if in the UI the end-user specifies a parameter "ownedBy=fred" then this will be available to all fixture scripts
-as `executionContext.getParameter("ownedBy"), but if not set then it will default to the current user.</p>
-
-<p>Similarly, if an integration test programmatically calls <code>setOwnedBy(...)</code> on this script, then again the value will be
-set for the script and all child scripts.</p>
+<p>Or, if the end-user (using the UI) wants to specify a different number of objects to be created than the default, they
+can simply execute the script specifying a parameter such as "number=6" (or whatever).</p>
 
 <h2>Running a fixture script automatically on start up</h2>
 

Modified: websites/staging/isis/trunk/content/more-thanks.html
==============================================================================
--- websites/staging/isis/trunk/content/more-thanks.html (original)
+++ websites/staging/isis/trunk/content/more-thanks.html Thu Feb 19 09:40:52 2015
@@ -454,7 +454,7 @@
         <a href="http://icons8.com"><img src="images/icons8-logo.png"></a>
     </td>
     <td style="padding: 10px">
-        <a href="http://icons8.com/">Icons8</a>, for selected icons on this website and in the <a href="https://github.com/apache/isis/tree/master/example/application/todoapp/dom/src/main/resources/images">example todo app</a> used to generate the <a href="intro/getting-started/todoapp-archetype.html">todoapp archetype</a>
+        <a href="http://icons8.com/">Icons8</a>, for selected icons on this website and in the <a href="https://github.com/apache/isis/tree/master/example/application/simpleapp/dom/src/main/resources/images">simpleapp</a> used to generate the <a href="intro/getting-started/simple-archetype.html">simpleapp archetype</a>
     </td>
 </tr>
 </table>

Modified: websites/staging/isis/trunk/content/reference/services/user-profile-service.html
==============================================================================
--- websites/staging/isis/trunk/content/reference/services/user-profile-service.html (original)
+++ websites/staging/isis/trunk/content/reference/services/user-profile-service.html Thu Feb 19 09:40:52 2015
@@ -459,8 +459,8 @@ sort of "sudo"-like function, or perhaps
 
 <h2>Screenshot</h2>
 
-<p>The <a href="../../intro/getting-started/todoapp-archetype.html">todoapp</a> provides a custom implementation that demonstrates the
-use of this service:</p>
+<p>The <a href="https://github.com/isisaddons/isis-app-todoapp">todoapp</a> (not ASF) provides a custom implementation that
+demonstrates the use of this service:</p>
 
 <p><a href="images/user-profile-service.png"><img width="600px" src="images/user-profile-service.png"/></a></p>