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 2021/06/07 18:12:23 UTC

[isis] branch ISIS-2717 updated (24f5127 -> 048f251)

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

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


    from 24f5127  ISIS-2717: improves fixture scripts docs; moves classes around
     new 547f272  ISIS-2717: fixes compile issue
     new 048f251  ISIS-2717: allows for FixtureScriptsSpecificationProvider to be null.

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:
 .../secondary/clock/TickingClockService.java       |   4 +-
 .../resources/application-config-test.properties   |   1 -
 .../applib/fixturescripts/FixtureScripts.java      | 111 +++++++++++++++------
 3 files changed, 83 insertions(+), 33 deletions(-)

[isis] 01/02: ISIS-2717: fixes compile issue

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 547f2726fcf318dd55e54c1b6eb88bdaec5102a1
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 7 18:55:02 2021 +0100

    ISIS-2717: fixes compile issue
---
 .../extensions/commandreplay/secondary/clock/TickingClockService.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java
index 1b1c327..7bf5542 100644
--- a/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java
+++ b/extensions/core/command-replay/secondary/src/main/java/org/apache/isis/extensions/commandreplay/secondary/clock/TickingClockService.java
@@ -29,8 +29,8 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.testing.fixtures.applib.clock.Clock;
-import org.apache.isis.testing.fixtures.applib.clock.TickingFixtureClock;
+import org.apache.isis.testing.fixtures.applib.clock.clock.Clock;
+import org.apache.isis.testing.fixtures.applib.clock.clock.TickingFixtureClock;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;

[isis] 02/02: ISIS-2717: allows for FixtureScriptsSpecificationProvider to be null.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 048f251a456ce6ec7079b28fd70d209f42790c21
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Jun 7 19:10:41 2021 +0100

    ISIS-2717: allows for FixtureScriptsSpecificationProvider to be null.
    
    If so, then the UI for FixtureScripts is hidden, but it can still be used programmatically
---
 .../resources/application-config-test.properties   |   1 -
 .../applib/fixturescripts/FixtureScripts.java      | 111 +++++++++++++++------
 2 files changed, 81 insertions(+), 31 deletions(-)

diff --git a/regressiontests/stable-persistence-jpa/src/test/resources/application-config-test.properties b/regressiontests/stable-persistence-jpa/src/test/resources/application-config-test.properties
index a272767..3eabbbe 100644
--- a/regressiontests/stable-persistence-jpa/src/test/resources/application-config-test.properties
+++ b/regressiontests/stable-persistence-jpa/src/test/resources/application-config-test.properties
@@ -22,4 +22,3 @@
 #
 
 isis.core.meta-model.annotation.action.explicit=true
-
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
index a49a50c..40ce680 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
@@ -30,6 +30,8 @@ import java.util.stream.Collectors;
 import javax.inject.Inject;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.springframework.lang.Nullable;
+
 import org.apache.isis.applib.ViewModel;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -49,6 +51,7 @@ import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.interaction.session.InteractionFactory;
 import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
@@ -200,43 +203,87 @@ public class FixtureScripts {
     public static final String PACKAGE_PREFIX = FixtureScripts.class.getPackage().getName();
 
 
+    /**
+     * Used to configure the UI menu actions, namely {@link #runFixtureScript(String, String)} and
+     * {@link #recreateObjectsAndReturnFirst()}.
+     *
+     * <p>
+     *     May be <code>null</code> if no {@link FixtureScriptsSpecificationProvider} was provided either explicitly
+     *     or implicitly by way of configuring the <code>isis.testing.fixtures.fixture-scripts-specification</code>
+     *     configuration properties.
+     * </p>
+     *
+     * @see #getFixtureScriptByFriendlyName()
+     * @see #getMultipleExecutionStrategy()
+     * @see #getNonPersistedObjectsStrategy()
+     */
     @Getter
     private final FixtureScriptsSpecification specification;
 
+    /**
+     * Global setting as to how to handle returned entities from fixture scripts that
+     * are still transient (not yet persisted).
+     *
+     * <p>
+     *     Will be <code>null</code> if there is no {@link #getSpecification()}.
+     * </p>
+     *
+     * @see #getSpecification()
+     */
+    @Getter(onMethod_ = {@Programmatic})
+    private final NonPersistedObjectsStrategy nonPersistedObjectsStrategy;
+
+    /**
+     * Global setting as to how to handle fixture scripts that are executed more than once.  See
+     * {@link MultipleExecutionStrategy} for more details.
+     *
+     * <p>
+     *     Will be <code>null</code> if there is no {@link #getSpecification()}.
+     * </p>
+     *
+     * @see #getSpecification()
+     */
+    @Getter(onMethod_ = {@Programmatic})
+    private final MultipleExecutionStrategy multipleExecutionStrategy;
+
+    /**
+     * Maps all discovered {@link FixtureScript}s to a friendly name for display in the UI (that is, for the
+     * {@link #runFixtureScript(String, String)} menu action parameters).
+     *
+     * <p>
+     *     Will be <code>null</code> if there is no {@link #getSpecification()}.
+     * </p>
+     *
+     * @see #getSpecification()
+     */
     @Getter
     private final SortedMap<String,FixtureScript> fixtureScriptByFriendlyName;
 
+
     public FixtureScripts(
-            final FixtureScriptsSpecificationProvider fixtureScriptsSpecificationProvider,
+            @Nullable final FixtureScriptsSpecificationProvider fixtureScriptsSpecificationProvider,
             final ServiceRegistry serviceRegistry) {
 
-        this.specification = fixtureScriptsSpecificationProvider.getSpecification();
-
-        val packagePrefix = specification.getPackagePrefix();
-        fixtureScriptByFriendlyName =
-                serviceRegistry.select(FixtureScript.class).stream()
-                .filter(Objects::nonNull)
-                .filter(fixtureScript -> fixtureScript.getClass().getPackage().getName().startsWith(packagePrefix))
-                .collect(Collectors.toMap(FixtureScript::getFriendlyName, Function.identity(),
-                        (v1,v2) ->{ throw new RuntimeException(String.format("Two FixtureScript's have the same friendly name '%s", v1));},
-                        TreeMap::new));
-    }
-
-
+        if(fixtureScriptsSpecificationProvider != null) {
+            this.specification = fixtureScriptsSpecificationProvider.getSpecification();
+            this.nonPersistedObjectsStrategy = specification.getNonPersistedObjectsStrategy();
+            this.multipleExecutionStrategy = specification.getMultipleExecutionStrategy();
 
-    // -- packagePrefix, nonPersistedObjectsStrategy, multipleExecutionStrategy
+            val packagePrefix = specification.getPackagePrefix();
+            this.fixtureScriptByFriendlyName =
+                    serviceRegistry.select(FixtureScript.class).stream()
+                    .filter(Objects::nonNull)
+                    .filter(fixtureScript -> fixtureScript.getClass().getPackage().getName().startsWith(packagePrefix))
+                    .collect(Collectors.toMap(FixtureScript::getFriendlyName, Function.identity(),
+                            (v1,v2) ->{ throw new RuntimeException(String.format("Two FixtureScript's have the same friendly name '%s", v1));},
+                            TreeMap::new));
 
-    public NonPersistedObjectsStrategy getNonPersistedObjectsStrategy() {
-        return specification.getNonPersistedObjectsStrategy();
-    }
-
-    /**
-     * Global setting as to how to handle fixture scripts that are executed more than once.  See
-     * {@link MultipleExecutionStrategy} for more details.
-     */
-    @Programmatic
-    public MultipleExecutionStrategy getMultipleExecutionStrategy() {
-        return specification.getMultipleExecutionStrategy();
+        } else {
+            this.specification = null;
+            this.nonPersistedObjectsStrategy = null;
+            this.multipleExecutionStrategy = null;
+            fixtureScriptByFriendlyName = _Maps.newTreeMap();
+        }
     }
 
 
@@ -293,10 +340,14 @@ public class FixtureScripts {
         }
     }
 
+    public boolean hideRunFixtureScript() {
+        return specification == null;
+    }
 
     public String disableRunFixtureScript() {
-        return getFixtureScriptByFriendlyName().isEmpty()? "No fixture scripts found under package '" + specification
-                .getPackagePrefix() + "'": null;
+        return getFixtureScriptByFriendlyName().isEmpty()
+                ? String.format("No fixture scripts found under package '%s'", specification.getPackagePrefix())
+                : null;
     }
 
     public String default0RunFixtureScript() {
@@ -311,7 +362,7 @@ public class FixtureScripts {
     }
 
     private String defaultFromFixtureScriptsSpecification() {
-        Class<? extends FixtureScript> defaultScript = getSpecification().getRunScriptDefaultScriptClass();
+        Class<? extends FixtureScript> defaultScript = specification.getRunScriptDefaultScriptClass();
         return defaultScript != null
                 ? findFixtureScriptNameFor(defaultScript)
                 : null;
@@ -368,7 +419,7 @@ public class FixtureScripts {
     }
 
     public boolean hideRecreateObjectsAndReturnFirst() {
-        return getSpecification().getRecreateScriptClass() == null;
+        return specification == null || specification.getRecreateScriptClass() == null;
     }