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> </td>
</tr>
<tr>
- <th>todoapp-archetype</th>
- <td> </td>
- <td> </td>
- <td>n/a</td>
- <td> </td>
- <td> </td>
- <td> </td>
- <td> </td>
- <td> </td>
- <td> </td>
- <td> </td>
- </tr>
- <tr>
<th>simpleapp-archetype</th>
<td> </td>
<td> </td>
@@ -527,15 +514,6 @@
<td> </td>
<td> </td>
<td> </td>
- <td> </td>
- <td> </td>
- <td> </td>
- </tr>
- <tr>
- <th>todoapp-archetype</th>
- <td> </td>
- <td> </td>
- <td> </td>
<td> </td>
<td> </td>
<td> </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 <tr>
<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<FixtureResult> 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<String,String> 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<ToDoItem> filtered = Collections2.filter(
- getContainer().allInstances(ToDoItem.class),
- new Predicate<ToDoItem>() {
- @Override
- public boolean apply(ToDoItem input) {
- return Objects.equal(description, input.getDescription()) &&
- 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<T>)</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<FixtureResult> 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<String,String> 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<SimpleObject> 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<SimpleObject> 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>