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:21 UTC

[isis] branch master updated (eaa08b6 -> 8198009)

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

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


    from eaa08b6  ISIS-1784: adds ValueFixtureScript marker interface to allow fixtures to override the globally-defined multiple execution strategy, and improves executeChildT
     new 7775b04  ISIS-1784: generalises, instead FixtureScriptWithMultipleExecutionStrategy
     new 8198009  ISIS-1784: adds BuilderFixtureScript, and ability to fine-tune logging (tracing) of fixture scripts

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../fixturescripts/BuilderScriptAbstract.java      | 67 ++++++++++++++++++++++
 .../isis/applib/fixturescripts/FixtureScript.java  | 39 ++++++++++---
 ...ava => FixtureScriptWithExecutionStrategy.java} | 10 +++-
 .../fixturespec/FixtureScriptsSpecification.java   |  6 +-
 4 files changed, 109 insertions(+), 13 deletions(-)
 create mode 100644 core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
 rename core/applib/src/main/java/org/apache/isis/applib/fixturescripts/{ValueFixtureScript.java => FixtureScriptWithExecutionStrategy.java} (79%)

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

[isis] 01/02: ISIS-1784: generalises, instead FixtureScriptWithMultipleExecutionStrategy

Posted by da...@apache.org.
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 7775b04a5d6b04e1504d632ccd943551573c634b
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Nov 27 13:36:42 2017 +0000

    ISIS-1784: generalises, instead FixtureScriptWithMultipleExecutionStrategy
---
 .../isis/applib/fixturescripts/FixtureScript.java     | 19 ++++++++++++++-----
 ...t.java => FixtureScriptWithExecutionStrategy.java} | 10 +++++++---
 .../fixturespec/FixtureScriptsSpecification.java      |  6 +++---
 3 files changed, 24 insertions(+), 11 deletions(-)

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 80b6e66..7e25720 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
@@ -599,12 +599,8 @@ public abstract class FixtureScript
 
         private <T extends FixtureScript> T executeChildIfNotAlready(final T childFixtureScript) {
 
-            if(childFixtureScript instanceof ValueFixtureScript) {
-                return executeChildIfNotAlreadyWithValueSemantics(childFixtureScript);
-            }
-
             final FixtureScripts.MultipleExecutionStrategy executionStrategy =
-                    fixtureScripts.getMultipleExecutionStrategy();
+                    determineExecutionStrategy(childFixtureScript);
 
             final FixtureScript previouslyExecutedScript;
             switch (executionStrategy) {
@@ -637,6 +633,19 @@ public abstract class FixtureScript
             }
         }
 
+        private <T extends FixtureScript> FixtureScripts.MultipleExecutionStrategy determineExecutionStrategy(final T childFixtureScript) {
+            final FixtureScripts.MultipleExecutionStrategy executionStrategy;
+
+            if(childFixtureScript instanceof FixtureScriptWithExecutionStrategy) {
+                final FixtureScriptWithExecutionStrategy fixtureScriptWithExecutionStrategy =
+                        (FixtureScriptWithExecutionStrategy) childFixtureScript;
+                executionStrategy = fixtureScriptWithExecutionStrategy.getMultipleExecutionStrategy();
+            } else {
+                executionStrategy = fixtureScripts.getMultipleExecutionStrategy();
+            }
+            return executionStrategy;
+        }
+
         private <T extends FixtureScript> T executeChildIfNotAlreadyWithValueSemantics(final T childFixtureScript) {
             final FixtureScript previouslyExecutedScript;
             previouslyExecutedScript = fixtureScriptByValue.get(childFixtureScript);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ValueFixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java
similarity index 79%
rename from core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ValueFixtureScript.java
rename to core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java
index db81ca0..7f58757 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ValueFixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java
@@ -18,11 +18,15 @@
  */
 package org.apache.isis.applib.fixturescripts;
 
+import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecification;
 
 /**
  * Overrides the {@link FixtureScriptsSpecification#getMultipleExecutionStrategy() globally-defined}
- * {@link FixtureScripts.MultipleExecutionStrategy} strategy, allowing individual fixtures to indicate that they have
- * value semantics (ie be executed as per {@link FixtureScripts.MultipleExecutionStrategy#EXECUTE_ONCE_BY_VALUE}.
+ * {@link FixtureScripts.MultipleExecutionStrategy} strategy, allowing individual fixtures to indicate that they have their own execution strategy.
  */
-public interface ValueFixtureScript {}
+public interface FixtureScriptWithExecutionStrategy {
+
+    @Programmatic
+    FixtureScripts.MultipleExecutionStrategy getMultipleExecutionStrategy();
+}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java
index b30047e..9ddbbde 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java
@@ -20,7 +20,7 @@ import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.fixturescripts.FixtureResultList;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.applib.fixturescripts.ValueFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScriptWithExecutionStrategy;
 
 /**
  * Pulls together the various state that influences the behaviour of {@link FixtureScripts} service.
@@ -91,7 +91,7 @@ public class FixtureScriptsSpecification {
 
     /**
      * Note that this can be overridden on a fixture-by-fixture basis if the fixture implements
-     * {@link ValueFixtureScript}.
+     * {@link FixtureScriptWithExecutionStrategy}.
      */
     @Programmatic
     public FixtureScripts.MultipleExecutionStrategy getMultipleExecutionStrategy() {
@@ -135,7 +135,7 @@ public class FixtureScriptsSpecification {
 
         /**
          * Note that this can be overridden on a fixture-by-fixture basis if the fixture implements
-         * {@link ValueFixtureScript}.
+         * {@link FixtureScriptWithExecutionStrategy}.
          */
         public Builder with(FixtureScripts.MultipleExecutionStrategy multipleExecutionStrategy) {
             this.multipleExecutionStrategy = multipleExecutionStrategy;

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

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

Posted by da...@apache.org.
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>.