You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/05/16 13:47:19 UTC

git commit: ISIS-776: CompositeFixtureScript hierarchy evaluated lazily.

Repository: isis
Updated Branches:
  refs/heads/master f67aa096f -> def282f29


ISIS-776: CompositeFixtureScript hierarchy evaluated lazily.

Previously CompositeFixtureScript#addChildren was called prior to the execution, meaning that the hierarchy of scripts (at least so far as any given CompositeFixtureScript was concerned) was specified before execution.

This has now been refactored so that the hierarchy is defined dynamically within the execute() method itself...
- the old doRun(String parameters) is renamed execute(parameters)
- the old add(FixtureScript fs) is replaced by execute(FixtureScript fs, parameters).

This also allows parameters to be specified dynamically if required.  All together a more flexible design.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/def282f2
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/def282f2
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/def282f2

Branch: refs/heads/master
Commit: def282f29fec57c845141e2dbb250e2c96fb9e35
Parents: f67aa09
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri May 16 12:47:09 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri May 16 12:47:09 2014 +0100

----------------------------------------------------------------------
 .../fixturescripts/CompositeFixtureScript.java  | 33 ++-----
 .../fixturescripts/FixtureResultList.java       | 26 +-----
 .../applib/fixturescripts/FixtureScript.java    | 62 +++++++++++--
 .../applib/fixturescripts/FixtureScripts.java   |  8 +-
 .../fixturescripts/SimpleFixtureScript.java     |  6 --
 .../config/IsisConfigurationDefault.java        | 94 ++++++++++++++++++--
 .../integtests/ToDoItemsIntegTestFixture.java   |  9 +-
 .../todo/scenarios/DeleteToDoItemsFor.java      | 10 +--
 .../todo/scenarios/DeleteToDoItemsForSven.java  |  5 +-
 ...teToDoItemsAndCompleteSeveralForCurrent.java |  8 +-
 .../todo/scenarios/RecreateToDoItemsFor.java    | 12 +--
 .../scenarios/RecreateToDoItemsForDick.java     |  6 +-
 .../todo/scenarios/RecreateToDoItemsForJoe.java |  7 +-
 .../scenarios/RecreateToDoItemsForSven.java     |  7 +-
 .../fixture/todo/simple/ToDoItemsComplete.java  | 17 ++--
 .../fixture/todo/simple/ToDoItemsCreate.java    | 41 +++++----
 .../fixture/todo/simple/ToDoItemsDelete.java    |  7 +-
 17 files changed, 221 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/CompositeFixtureScript.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/CompositeFixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/CompositeFixtureScript.java
index 9750b4b..2c672e5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/CompositeFixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/CompositeFixtureScript.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.applib.fixturescripts;
 
-import java.util.List;
-import com.google.common.collect.Lists;
 import org.apache.isis.applib.annotation.Named;
 
 @Named("Composite Script")
@@ -40,7 +38,6 @@ public abstract class CompositeFixtureScript extends FixtureScript {
         this(null, null);
     }
     
-
     /**
      * Initializes a {@link Discoverability#DISCOVERABLE} fixture.
      * 
@@ -56,43 +53,23 @@ public abstract class CompositeFixtureScript extends FixtureScript {
     
     // //////////////////////////////////////
 
-    private final List<FixtureScript> children = Lists.newArrayList();
-    /**
-     * Adds a child {@link FixtureScript fixture script} (simply using its default name).
-     */
-    protected final void add(final FixtureScript fixtureScript) {
-        add(null, fixtureScript);
-    }
     /**
      * Adds a child {@link FixtureScript fixture script}, overriding its default name with one more
      * meaningful in the context of this fixture.
      */
-    protected final void add(final String localNameOverride, final FixtureScript fixtureScript) {
+    protected final void execute(final String localNameOverride, final FixtureScript fixtureScript, ExecutionContext executionContext) {
         fixtureScript.setParentPath(pathWith(""));
         if(localNameOverride != null) {
             fixtureScript.setLocalName(localNameOverride);
         }
         getContainer().injectServicesInto(fixtureScript);
-        children.add(fixtureScript);
+        fixtureScript.execute(executionContext);
     }
-
-    // //////////////////////////////////////
-
     /**
-     * Mandatory hook method.
-     *
-     * <p>
-     *     Subclasses should instantiate each child and then call {@link #add(FixtureScript)} (or the overloaded
-     *      {@link #add(String, FixtureScript)})
-     * </p>.
+     * Executes a child {@link FixtureScript fixture script} (simply using its default name).
      */
-    protected abstract void addChildren();
-
-    protected void doRun(final String parameters, final FixtureResultList fixtureResults) {
-        addChildren();
-        for (final FixtureScript child : children) {
-            child.doRun(parameters, fixtureResults);
-        }
+    protected final void execute(final FixtureScript fixtureScript, ExecutionContext executionContext) {
+        execute(null, fixtureScript, executionContext);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java
index 2a52ad3..ed0237d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java
@@ -30,30 +30,10 @@ import com.google.common.collect.Maps;
  * Collecting parameter.
  *
  * <p>
- * Instantiate using {@link FixtureScripts#newFixtureResultList()}
+ * Instantiate using {@link FixtureScripts#newExecutionContext(String)}
  */
 public class FixtureResultList {
 
-    /**
-     * Null implementation, to assist with unit testing of {@link org.apache.isis.applib.fixturescripts.FixtureScript}s.
-     */
-    public static final FixtureResultList NOOP = new FixtureResultList(null) {
-        @Override
-        public <T> T add(FixtureScript script, T object) {
-            return object;
-        }
-
-        @Override
-        public <T> T add(FixtureScript script, String key, T object) {
-            return object;
-        }
-
-        @Override
-        public List<FixtureResult> getResults() {
-            return Collections.emptyList();
-        }
-    };
-
     private final FixtureScripts fixtureScripts;
 
     FixtureResultList(FixtureScripts fixtureScripts) {
@@ -62,7 +42,6 @@ public class FixtureResultList {
 
     // //////////////////////////////////////
 
-    
     private final List<FixtureResult> list = Lists.newArrayList();
 
     public <T> T add(final FixtureScript script, final T object) {
@@ -86,6 +65,8 @@ public class FixtureResultList {
         return object;
     }
 
+
+
     public List<FixtureResult> getResults() {
         return list;
     }
@@ -103,5 +84,4 @@ public class FixtureResultList {
         return "item-"+atomicInteger.incrementAndGet();
     }
 
-
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index 4d65b28..ec89201 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.applib.fixturescripts;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.AbstractViewModel;
@@ -127,7 +128,8 @@ public abstract class FixtureScript
     private String localName;
     /**
      * Will always be populated, initially by the default name, but can be
-     * {@link #setLocalName(String) overridden} if {@link CompositeFixtureScript#add(String, FixtureScript) reused} within a {@link CompositeFixtureScript composite fixture script}.
+     * {@link #setLocalName(String) overridden} if
+     * {@link CompositeFixtureScript#execute(FixtureScript, org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext)} reused} within a {@link CompositeFixtureScript composite fixture script}.
      */
     @Hidden
     public String getLocalName() {
@@ -175,15 +177,63 @@ public abstract class FixtureScript
     
     // //////////////////////////////////////
 
+    public static class ExecutionContext {
+
+        /**
+         * Null implementation, to assist with unit testing of {@link org.apache.isis.applib.fixturescripts.FixtureScript}s.
+         */
+        public static final ExecutionContext NOOP = new ExecutionContext(null, null) {
+            @Override
+            public <T> T add(FixtureScript script, T object) {
+                return object;
+            }
+
+            @Override
+            public <T> T add(FixtureScript script, String key, T object) {
+                return object;
+            }
+
+            @Override
+            public List<FixtureResult> getResults() {
+                return Collections.emptyList();
+            }
+        };
+
+
+        private final String parameters;
+        private final FixtureResultList fixtureResults;
+
+        public ExecutionContext(String parameters, FixtureScripts fixtureScripts) {
+            fixtureResults = new FixtureResultList(fixtureScripts);
+            this.parameters = parameters;
+        }
+
+        public String getParameters() {
+            return parameters;
+        }
+        public List<FixtureResult> getResults() {
+            return fixtureResults.getResults();
+        }
+
+        public <T> T add(final FixtureScript script, final T object) {
+            return fixtureResults.add(script, object);
+        }
+
+        public <T> T add(final FixtureScript script, final String key, final T object) {
+            return fixtureResults.add(script, key, object);
+        }
+
+    }
+
     @Programmatic
     public final List<FixtureResult> run(final String parameters) {
-        FixtureResultList fixtureResults = new FixtureResultList(fixtureScripts);
-        doRun(parameters, fixtureResults);
-        return fixtureResults.getResults();
+        final ExecutionContext executionContext = new ExecutionContext(parameters, fixtureScripts);
+        execute(executionContext);
+        return executionContext.getResults();
     }
 
     @Programmatic
-    protected abstract void doRun(final String parameters, final FixtureResultList fixtureResults);
+    protected abstract void execute(final ExecutionContext executionContext);
 
     /**
      * Optional hook to validate parameters.
@@ -193,6 +243,8 @@ public abstract class FixtureScript
         return null;
     }
 
+
+
     // //////////////////////////////////////
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index 9e8ad42..fd00004 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -131,9 +131,10 @@ public abstract class FixtureScripts extends AbstractService {
 
     /**
      * For subclasses to instantiate .
+     * @param parameters
      */
-    protected FixtureResultList newFixtureResultList() {
-        return new FixtureResultList(this);
+    protected FixtureScript.ExecutionContext newExecutionContext(String parameters) {
+        return new FixtureScript.ExecutionContext(parameters, this);
     }
 
     // //////////////////////////////////////
@@ -180,7 +181,8 @@ public abstract class FixtureScripts extends AbstractService {
     public String validateRunFixtureScript(final FixtureScript fixtureScript, final String parameters) {
         return fixtureScript.validateRun(parameters);
     }
-    
+
+
     // //////////////////////////////////////
 
     String mementoFor(final FixtureScript fs) {

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/SimpleFixtureScript.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/SimpleFixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/SimpleFixtureScript.java
index ff28d92..1e2b35a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/SimpleFixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/SimpleFixtureScript.java
@@ -19,8 +19,6 @@
 package org.apache.isis.applib.fixturescripts;
 
 import org.apache.isis.applib.annotation.Named;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.fixturescripts.FixtureScript.Discoverability;
 
 @Named("Simple Script")
 public abstract class SimpleFixtureScript extends FixtureScript {
@@ -53,9 +51,5 @@ public abstract class SimpleFixtureScript extends FixtureScript {
         super(friendlyName, localName, defaultDiscoverability());
     }
     
-    // //////////////////////////////////////
-
-    @Programmatic
-    protected abstract void doRun(String parameters, FixtureResultList fixtureResults);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
index 7ae36d5..a6bd278 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
@@ -73,19 +73,87 @@ public class IsisConfigurationDefault implements IsisConfiguration {
     // ////////////////////////////////////////////////
 
     /**
-     * Add the properties from an existing Properties object.
+     * How to handle the case when the configuration already contains the key being added.
+     */
+    public enum ContainsPolicy {
+        /**
+         * If the configuration already contains the key, then ignore the new value.
+         */
+        IGNORE,
+        /**
+         * If the configuration already contains the key, then overwrite with the new.
+         */
+        OVERWRITE,
+        /**
+         * If the configuration already contains the key, then throw an exception.
+         */
+        EXCEPTION
+    }
+    
+    /**
+     * Add the properties from an existing Properties object; if the key exists in the configuration then will be ignored.
+     * 
+     * @see #add(Properties, ContainsPolicy)
+     * @see #put(Properties)
      */
     public void add(final Properties properties) {
+        add(properties, ContainsPolicy.IGNORE);
+    }
+    
+    /**
+     * Add the properties from an existing Properties object; if the key exists in the configuration then will be overwritten.
+     * 
+     * @see #add(Properties)
+     * @see #add(Properties, ContainsPolicy)
+     */
+    public void put(final Properties properties) {
+        add(properties, ContainsPolicy.OVERWRITE);
+    }
+    
+    /**
+     * Add the properties from an existing Properties object; if the key exists in the configuration then the
+     * {@link ContainsPolicy} will be applied.
+     * 
+     * @see #add(Properties)
+     * @see #put(Properties)
+     */
+    public void add(final Properties properties, final ContainsPolicy policy) {
         for(Object key: properties.keySet()) {
-        	Object value = properties.get(key);
-        	add((String)key, (String)value);
+            Object value = properties.get(key);
+            add((String)key, (String)value);
         }
     }
     
     /**
-     * Adds a key-value pair to this set of properties
+     * Adds a key-value pair to this set of properties; if the key exists in the configuration then will be ignored.
+     * 
+     * <p>
+     * @see #add(String, String, ContainsPolicy)
+     * @see #put(String, String)
      */
     public void add(final String key, final String value) {
+        add(key, value, ContainsPolicy.IGNORE);
+    }
+
+    /**
+     * Adds a key-value pair to this set of properties; if the key exists in the configuration then will be replaced.
+     * 
+     * <p>
+     * @see #add(String, String)
+     * @see #add(String, String, ContainsPolicy)
+     */
+    public void put(final String key, final String value) {
+        add(key, value, ContainsPolicy.OVERWRITE);
+    }
+
+    /**
+     * Adds a key-value pair to this set of properties; if the key exists in the configuration then the
+     * {@link ContainsPolicy} will be applied.
+     * 
+     * @see #add(String, String)
+     * @see #put(String, String)
+     */
+    public void add(final String key, final String value, final ContainsPolicy policy) {
         if (value == null) {
             LOG.debug("ignoring " + key + " as value is null");
             return;
@@ -93,12 +161,22 @@ public class IsisConfigurationDefault implements IsisConfiguration {
         if (key == null) {
             return;
         }
-    	if (properties.containsKey(key)) {
-    		LOG.info("skipping " + key + "=" + value + " as value already set (with " + properties.get(key) + ")" );
-    	} else {
+        if (properties.containsKey(key)) {
+            switch (policy) {
+            case IGNORE:
+                LOG.info("ignoring " + key + "=" + value + " as value already set (with " + properties.get(key) + ")" );
+                break;
+            case OVERWRITE:
+                LOG.info("overwriting " + key + "=" + value + " (previous value was " + properties.get(key) + ")" );
+                properties.put(key, value);
+                break;
+            case EXCEPTION:
+                throw new IllegalStateException("Configuration already has a key " + key + ", value of " + properties.get(key) );
+            }
+        } else {
             LOG.info("adding " + key + "=" + value);
             properties.put(key, value);
-    	}
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/integtests/ToDoItemsIntegTestFixture.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/integtests/ToDoItemsIntegTestFixture.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/integtests/ToDoItemsIntegTestFixture.java
index 7ff63ad..40b1cae 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/integtests/ToDoItemsIntegTestFixture.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/integtests/ToDoItemsIntegTestFixture.java
@@ -25,6 +25,7 @@ import fixture.todo.simple.ToDoItemsDelete;
 
 import org.apache.isis.applib.fixturescripts.CompositeFixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 /**
  * Refactored to reuse the newer {@link FixtureScript} API.
@@ -37,10 +38,10 @@ public class ToDoItemsIntegTestFixture extends CompositeFixtureScript {
     }
 
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forCurrent());
-        add("create", ToDoItemsCreate.forCurrent());
-        add("complete", ToDoItemsComplete.forCurrent());
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forCurrent(), executionContext);
+        execute("create", ToDoItemsCreate.forCurrent(), executionContext);
+        execute("complete", ToDoItemsComplete.forCurrent(), executionContext);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsFor.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsFor.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsFor.java
index 41cddce..6526fd9 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsFor.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsFor.java
@@ -24,6 +24,7 @@ import fixture.todo.simple.ToDoItemsDelete;
 
 import org.apache.isis.applib.fixturescripts.CompositeFixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureResultList;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 public final class DeleteToDoItemsFor extends CompositeFixtureScript {
     public DeleteToDoItemsFor() {
@@ -31,17 +32,12 @@ public final class DeleteToDoItemsFor extends CompositeFixtureScript {
     }
     
     @Override
-    protected void doRun(final String parameters, final FixtureResultList fixtureResults) {
-        super.doRun(parameters, fixtureResults);
-    }
-
-    @Override
     public String validateRun(final String parameters) {
         return Strings.isNullOrEmpty(parameters) ? "Specify the owner of the ToDoItems to be deleted" : null;
     }
     
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forUser(null));
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forUser(null), executionContext);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsForSven.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsForSven.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsForSven.java
index ee1013c..c7fee53 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsForSven.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/DeleteToDoItemsForSven.java
@@ -21,6 +21,7 @@ package fixture.todo.scenarios;
 import fixture.todo.simple.ToDoItemsDelete;
 
 import org.apache.isis.applib.fixturescripts.CompositeFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 public final class DeleteToDoItemsForSven extends CompositeFixtureScript {
     public DeleteToDoItemsForSven() {
@@ -28,7 +29,7 @@ public final class DeleteToDoItemsForSven extends CompositeFixtureScript {
     }
     
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forUser("sven"));
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forUser("sven"), executionContext);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsAndCompleteSeveralForCurrent.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsAndCompleteSeveralForCurrent.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsAndCompleteSeveralForCurrent.java
index b955464..b4845bf 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsAndCompleteSeveralForCurrent.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsAndCompleteSeveralForCurrent.java
@@ -31,10 +31,10 @@ public class RecreateToDoItemsAndCompleteSeveralForCurrent extends CompositeFixt
     }
     
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forCurrent());
-        add("create", ToDoItemsCreate.forCurrent());
-        add("complete", ToDoItemsComplete.forCurrent());
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forCurrent(), executionContext);
+        execute("create", ToDoItemsCreate.forCurrent(), executionContext);
+        execute("complete", ToDoItemsComplete.forCurrent(), executionContext);
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsFor.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsFor.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsFor.java
index 4e84146..5c0b9ed 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsFor.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsFor.java
@@ -25,6 +25,7 @@ import fixture.todo.simple.ToDoItemsDelete;
 
 import org.apache.isis.applib.fixturescripts.CompositeFixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureResultList;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 public final class RecreateToDoItemsFor extends CompositeFixtureScript {
     public RecreateToDoItemsFor() {
@@ -32,18 +33,13 @@ public final class RecreateToDoItemsFor extends CompositeFixtureScript {
     }
     
     @Override
-    protected void doRun(String parameters, FixtureResultList fixtureResults) {
-        super.doRun(parameters, fixtureResults);
-    }
-
-    @Override
     public String validateRun(String parameters) {
         return Strings.isNullOrEmpty(parameters) ? "Specify the owner of the ToDoItems to be recreated" : null;
     }
     
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forUser(null));
-        add("create", ToDoItemsCreate.forUser(null));
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forUser(null), executionContext);
+        execute("create", ToDoItemsCreate.forUser(null), executionContext);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForDick.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForDick.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForDick.java
index 21d34cb..c7b30cd 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForDick.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForDick.java
@@ -29,8 +29,8 @@ public final class RecreateToDoItemsForDick extends CompositeFixtureScript {
     }
     
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forUser("dick"));
-        add("create", ToDoItemsCreate.forUser("dick"));
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forUser("dick"), executionContext);
+        execute("create", ToDoItemsCreate.forUser("dick"), executionContext);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForJoe.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForJoe.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForJoe.java
index dfbe21c..9178d97 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForJoe.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForJoe.java
@@ -22,6 +22,7 @@ import fixture.todo.simple.ToDoItemsCreate;
 import fixture.todo.simple.ToDoItemsDelete;
 
 import org.apache.isis.applib.fixturescripts.CompositeFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 public final class RecreateToDoItemsForJoe extends CompositeFixtureScript {
     public RecreateToDoItemsForJoe() {
@@ -29,8 +30,8 @@ public final class RecreateToDoItemsForJoe extends CompositeFixtureScript {
     }
     
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forUser("joe"));
-        add("create", ToDoItemsCreate.forUser("joe"));
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forUser("joe"), executionContext);
+        execute("create", ToDoItemsCreate.forUser("joe"), executionContext);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForSven.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForSven.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForSven.java
index 15ad9c9..018f336 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForSven.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/scenarios/RecreateToDoItemsForSven.java
@@ -22,6 +22,7 @@ import fixture.todo.simple.ToDoItemsCreate;
 import fixture.todo.simple.ToDoItemsDelete;
 
 import org.apache.isis.applib.fixturescripts.CompositeFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 public final class RecreateToDoItemsForSven extends CompositeFixtureScript {
     public RecreateToDoItemsForSven() {
@@ -29,9 +30,9 @@ public final class RecreateToDoItemsForSven extends CompositeFixtureScript {
     }
     
     @Override
-    protected void addChildren() {
-        add("delete", ToDoItemsDelete.forUser("sven"));
-        add("create", ToDoItemsCreate.forUser("sven"));
+    protected void execute(ExecutionContext executionContext) {
+        execute("delete", ToDoItemsDelete.forUser("sven"), executionContext);
+        execute("create", ToDoItemsCreate.forUser("sven"), executionContext);
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsComplete.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsComplete.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsComplete.java
index 62c3efe..a02e00e 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsComplete.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsComplete.java
@@ -28,6 +28,7 @@ import dom.todo.ToDoItem;
 
 import org.apache.isis.applib.fixturescripts.FixtureResultList;
 import org.apache.isis.applib.fixturescripts.SimpleFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 public class ToDoItemsComplete extends SimpleFixtureScript {
 
@@ -49,23 +50,23 @@ public class ToDoItemsComplete extends SimpleFixtureScript {
 
     //region > doRun
     @Override
-    protected void doRun(String parameters, final FixtureResultList resultList) {
-        final String ownedBy = Util.coalesce(user, parameters, getContainer().getUser().getName());
-        installFor(ownedBy, resultList);
+    protected void execute(ExecutionContext executionContext) {
+        final String ownedBy = Util.coalesce(user, executionContext.getParameters(), getContainer().getUser().getName());
+        installFor(ownedBy, executionContext);
         getContainer().flush();
     }
 
-    private void installFor(final String user, final FixtureResultList resultList) {
-        complete(user, "Buy stamps", resultList);
-        complete(user, "Write blog post", resultList);
+    private void installFor(final String user, final ExecutionContext executionContext) {
+        complete(user, "Buy stamps", executionContext);
+        complete(user, "Write blog post", executionContext);
 
         getContainer().flush();
     }
 
-    private void complete(final String user, final String description, final FixtureResultList resultList) {
+    private void complete(final String user, final String description, final ExecutionContext executionContext) {
         final ToDoItem toDoItem = findToDoItem(description, user);
         toDoItem.setComplete(true);
-        resultList.add(this, toDoItem);
+        executionContext.add(this, toDoItem);
     }
 
     private ToDoItem findToDoItem(final String description, final String user) {

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
index 0046c6b..e6461a8 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsCreate.java
@@ -29,6 +29,7 @@ import org.joda.time.LocalDate;
 
 import org.apache.isis.applib.fixturescripts.FixtureResultList;
 import org.apache.isis.applib.fixturescripts.SimpleFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 
 public class ToDoItemsCreate extends SimpleFixtureScript {
 
@@ -49,30 +50,30 @@ public class ToDoItemsCreate extends SimpleFixtureScript {
     }
     //endregion
 
-    //region > doRun
+    //region > execute
     @Override
-    protected void doRun(final String parameters, final FixtureResultList resultList) {
-        final String ownedBy = Util.coalesce(user, parameters, getContainer().getUser().getName());
-        installFor(ownedBy, resultList);
+    protected void execute(ExecutionContext executionContext) {
+        final String ownedBy = Util.coalesce(user, executionContext.getParameters(), getContainer().getUser().getName());
+        installFor(ownedBy, executionContext);
         getContainer().flush();
     }
 
-    private void installFor(final String user, final FixtureResultList resultList) {
+    private void installFor(final String user, final ExecutionContext executionContext) {
 
-        createToDoItemForUser("Buy milk", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("0.75"), resultList);
-        createToDoItemForUser("Buy bread", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("1.75"), resultList);
-        createToDoItemForUser("Buy stamps", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("10.00"), resultList);
-        createToDoItemForUser("Pick up laundry", Category.Domestic, Subcategory.Chores, user, Util.daysFromToday(6), new BigDecimal("7.50"), resultList);
-        createToDoItemForUser("Mow lawn", Category.Domestic, Subcategory.Garden, user, Util.daysFromToday(6), null, resultList);
-        createToDoItemForUser("Vacuum house", Category.Domestic, Subcategory.Housework, user, Util.daysFromToday(3), null, resultList);
-        createToDoItemForUser("Sharpen knives", Category.Domestic, Subcategory.Chores, user, Util.daysFromToday(14), null, resultList);
+        createToDoItemForUser("Buy milk", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("0.75"), executionContext);
+        createToDoItemForUser("Buy bread", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("1.75"), executionContext);
+        createToDoItemForUser("Buy stamps", Category.Domestic, Subcategory.Shopping, user, Util.daysFromToday(0), new BigDecimal("10.00"), executionContext);
+        createToDoItemForUser("Pick up laundry", Category.Domestic, Subcategory.Chores, user, Util.daysFromToday(6), new BigDecimal("7.50"), executionContext);
+        createToDoItemForUser("Mow lawn", Category.Domestic, Subcategory.Garden, user, Util.daysFromToday(6), null, executionContext);
+        createToDoItemForUser("Vacuum house", Category.Domestic, Subcategory.Housework, user, Util.daysFromToday(3), null, executionContext);
+        createToDoItemForUser("Sharpen knives", Category.Domestic, Subcategory.Chores, user, Util.daysFromToday(14), null, executionContext);
 
-        createToDoItemForUser("Write to penpal", Category.Other, Subcategory.Other, user, null, null, resultList);
+        createToDoItemForUser("Write to penpal", Category.Other, Subcategory.Other, user, null, null, executionContext);
 
-        createToDoItemForUser("Write blog post", Category.Professional, Subcategory.Marketing, user, Util.daysFromToday(7), null, resultList);
-        createToDoItemForUser("Organize brown bag", Category.Professional, Subcategory.Consulting, user, Util.daysFromToday(14), null, resultList);
-        createToDoItemForUser("Submit conference session", Category.Professional, Subcategory.Education, user, Util.daysFromToday(21), null, resultList);
-        createToDoItemForUser("Stage Isis release", Category.Professional, Subcategory.OpenSource, user, null, null, resultList);
+        createToDoItemForUser("Write blog post", Category.Professional, Subcategory.Marketing, user, Util.daysFromToday(7), null, executionContext);
+        createToDoItemForUser("Organize brown bag", Category.Professional, Subcategory.Consulting, user, Util.daysFromToday(14), null, executionContext);
+        createToDoItemForUser("Submit conference session", Category.Professional, Subcategory.Education, user, Util.daysFromToday(21), null, executionContext);
+        createToDoItemForUser("Stage Isis release", Category.Professional, Subcategory.OpenSource, user, null, null, executionContext);
 
         getContainer().flush();
     }
@@ -81,9 +82,11 @@ public class ToDoItemsCreate extends SimpleFixtureScript {
             final String description, 
             final Category category, Subcategory subcategory, 
             final String user, 
-            final LocalDate dueBy, final BigDecimal cost, FixtureResultList resultList) {
+            final LocalDate dueBy, 
+            final BigDecimal cost, 
+            final ExecutionContext executionContext) {
         ToDoItem newToDo = toDoItems.newToDo(description, category, subcategory, user, dueBy, cost);
-        return resultList.add(this, newToDo);
+        return executionContext.add(this, newToDo);
     }
     //endregion
 

http://git-wip-us.apache.org/repos/asf/isis/blob/def282f2/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsDelete.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsDelete.java b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsDelete.java
index d4ea1d1..ac38dea 100644
--- a/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsDelete.java
+++ b/example/application/quickstart_wicket_restful_jdo/fixture/src/main/java/fixture/todo/simple/ToDoItemsDelete.java
@@ -20,6 +20,7 @@ package fixture.todo.simple;
 
 import org.apache.isis.applib.fixturescripts.FixtureResultList;
 import org.apache.isis.applib.fixturescripts.SimpleFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript.ExecutionContext;
 import org.apache.isis.objectstore.jdo.applib.service.support.IsisJdoSupport;
 
 public class ToDoItemsDelete extends SimpleFixtureScript {
@@ -41,10 +42,10 @@ public class ToDoItemsDelete extends SimpleFixtureScript {
     }
     //endregion
 
-    //region > doRun
+    //region > execute
     @Override
-    protected void doRun(final String parameters, final FixtureResultList resultList) {
-        final String ownedBy = Util.coalesce(user, parameters, getContainer().getUser().getName());
+    protected void execute(ExecutionContext executionContext) {
+        final String ownedBy = Util.coalesce(user, executionContext.getParameters(), getContainer().getUser().getName());
         installFor(ownedBy);
         getContainer().flush();
     }