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 2017/11/27 15:21:23 UTC

[isis] 02/02: ISIS-1784: adds BuilderFixtureScript, and ability to fine-tune logging (tracing) of fixture scripts

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 819800933e318e01403f5f285880a3ba45ed5d45
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Nov 27 15:21:12 2017 +0000

    ISIS-1784: adds BuilderFixtureScript, and ability to fine-tune logging (tracing) of fixture scripts
---
 .../fixturescripts/BuilderScriptAbstract.java      | 67 ++++++++++++++++++++++
 .../isis/applib/fixturescripts/FixtureScript.java  | 20 ++++++-
 2 files changed, 85 insertions(+), 2 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
new file mode 100644
index 0000000..cfa281e
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
@@ -0,0 +1,67 @@
+/*
+ *
+ *  Copyright 2012-2014 Eurocommercial Properties NV
+ *
+ *
+ *  Licensed under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.applib.fixturescripts;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+public abstract class BuilderScriptAbstract<T extends BuilderScriptAbstract>
+        extends FixtureScript implements FixtureScriptWithExecutionStrategy {
+
+    private final FixtureScripts.MultipleExecutionStrategy executionStrategy;
+
+    /**
+     * Typically we expect builders to have value semantics, so this is provided as a convenience.
+     */
+    protected BuilderScriptAbstract() {
+        this(FixtureScripts.MultipleExecutionStrategy.EXECUTE_ONCE_BY_VALUE);
+    }
+
+    protected BuilderScriptAbstract(final FixtureScripts.MultipleExecutionStrategy executionStrategy) {
+        this.executionStrategy = executionStrategy;
+    }
+
+    @Override
+    public FixtureScripts.MultipleExecutionStrategy getMultipleExecutionStrategy() {
+        return executionStrategy;
+    }
+
+    @Programmatic
+    public T build(
+            final FixtureScript parentFixtureScript,
+            ExecutionContext executionContext) {
+
+        // returns the fixture script that is run
+        // (either this one, or possibly one previously executed).
+        return (T)executionContext.executeChildT(parentFixtureScript, this);
+    }
+
+    @Programmatic
+    public T build(ExecutionContext executionContext) {
+
+        final FixtureScript anonymousParent = new FixtureScript() {
+            @Override
+            protected void execute(ExecutionContext executionContext) { }
+        };
+
+        return build(anonymousParent, executionContext);
+    }
+
+
+}
+
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 7e25720..729ffcc 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
@@ -83,6 +83,9 @@ public abstract class FixtureScript
     public FixtureScript(final String friendlyName, final String localName) {
         this(friendlyName, localName, Discoverability.NON_DISCOVERABLE);
     }
+    public FixtureScript(final String friendlyName, final String localName, final PrintStream printStream) {
+        this(friendlyName, localName, Discoverability.NON_DISCOVERABLE, printStream);
+    }
 
     /**
      * @param friendlyName - if null, will be derived from class name
@@ -93,13 +96,26 @@ public abstract class FixtureScript
             final String friendlyName, 
             final String localName, 
             final Discoverability discoverability) {
+        this(friendlyName, localName, discoverability,
+                // enable tracing by default, to stdout
+                System.out);
+    }
+    /**
+     * @param friendlyName - if null, will be derived from class name
+     * @param localName - if null, will be derived from class name
+     * @param discoverability - whether this fixture script can be rendered as a choice to execute through {@link org.apache.isis.applib.fixturescripts.FixtureScripts#runFixtureScript(FixtureScript, String)}}.
+     */
+    public FixtureScript(
+            final String friendlyName,
+            final String localName,
+            final Discoverability discoverability,
+            final PrintStream printStream) {
         this.localName = localNameElseDerived(localName);
         this.friendlyName = friendlyNameElseDerived(friendlyName);
         this.parentPath = "";
         this.discoverability = discoverability;
 
-        // enable tracing by default, to stdout
-        withTracing();
+        withTracing(printStream);
     }
     protected String localNameElseDerived(final String str) {
         return str != null ? str : StringUtil.asLowerDashed(friendlyNameElseDerived(str));

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.