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 2019/12/01 19:27:50 UTC

[isis] branch master updated (0d73d41 -> 3b3886b)

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 0d73d41  ISIS-2188 - adds debug to build-core.sh
     new ccae734  ISIS-2188: moves FixtureScriptsDefault into same package as FixtureScripts
     new 9b3c807  ISIS-2188: merges FixtureScriptsDefault up into FixtureScripts
     new 245c748  ISIS-2188: simplifies FixtureScripts constructor + init
     new ff9d6e7  ISIS-2188: uses original objectType for FixtureScripts to avoid unnecessary changes in menubars.layout.xml
     new 5e308bb  ISIS-2188: reverts debug in build-core.sh, since didn't help
     new 641774e  ISIS-2188: FixtureScripts are no longer view models.
     new 3b3886b  ISIS-2186: removes excel fixture and integtest for now...  to get to a clean build

The 7 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:
 .../specimpl/ObjectSpecificationAbstract.java      |  15 +-
 .../testdomain/bootstrapping/builtin-IsisBoot.list |   2 +-
 .../bootstrapping/builtin-domain-services.list     |   2 +-
 .../bootstrapping/builtin-singleton.list           |   2 +-
 extensions/pom.xml                                 |   2 +
 .../extensions/fixtures/IsisExtFixturesModule.java |   9 +-
 .../fixturescripts/DiscoverableFixtureScript.java  |  52 ----
 .../fixtures/fixturescripts/FixtureResultList.java |   1 -
 .../fixtures/fixturescripts/FixtureScript.java     | 233 ++---------------
 .../fixtures/fixturescripts/FixtureScripts.java    | 289 +++++++++++----------
 .../fixturescripts/SimpleFixtureScript.java        |  61 -----
 .../fixturespec/FixtureScriptsDefault.java         | 251 ------------------
 .../fixturespec/FixtureScriptsSpecification.java   |  43 +--
 .../FixtureScriptsSpecificationProvider.java       |   9 -
 .../fixtures/fixturespec/package-info.java         |   5 +-
 .../fixturescripts/ExecutionContextTest.java       |  13 -
 scripts/ci/build-core.sh                           |   9 +-
 ...mainAppFixtureScriptsSpecificationProvider.java |   1 -
 .../fixture/scenarios/DomainAppDemo.java           |   6 -
 .../modules/simple/dom/impl/SimpleObject.java      |   3 +
 20 files changed, 187 insertions(+), 821 deletions(-)
 delete mode 100644 extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/DiscoverableFixtureScript.java
 delete mode 100644 extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/SimpleFixtureScript.java
 delete mode 100644 extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsDefault.java


[isis] 01/07: ISIS-2188: moves FixtureScriptsDefault into same package as FixtureScripts

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 ccae7340a95da7a1aa28bf9d425f969b8ed1b8b3
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Dec 1 17:48:27 2019 +0000

    ISIS-2188: moves FixtureScriptsDefault into same package as FixtureScripts
---
 .../org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list | 2 +-
 .../isis/testdomain/bootstrapping/builtin-domain-services.list     | 2 +-
 .../apache/isis/testdomain/bootstrapping/builtin-singleton.list    | 2 +-
 .../org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java | 2 +-
 .../isis/extensions/fixtures/fixturescripts/FixtureScripts.java    | 1 -
 .../{fixturespec => fixturescripts}/FixtureScriptsDefault.java     | 7 +++----
 .../fixtures/fixturespec/FixtureScriptsSpecification.java          | 1 +
 .../fixtures/fixturespec/FixtureScriptsSpecificationProvider.java  | 1 +
 .../apache/isis/extensions/fixtures/fixturespec/package-info.java  | 2 +-
 9 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list
index d798be6..e55743a 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list
@@ -20,7 +20,7 @@ org.apache.isis.config.beans.WebAppConfigBean
 org.apache.isis.extensions.fixtures.FixturesEventService
 org.apache.isis.extensions.fixtures.FixturesLifecyleService
 org.apache.isis.extensions.fixtures.fixturescripts.ExecutionParametersService
-org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsDefault
+org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault
 org.apache.isis.extensions.fixtures.legacy.queryresultscache.QueryResultsCacheControlInternal
 org.apache.isis.jdo.jdosupport.IsisJdoSupportDN5
 org.apache.isis.jdo.metrics.MetricsServiceDefault
diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
index 0da24cee7..334c855 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
@@ -10,7 +10,7 @@ org.apache.isis.applib.services.scratchpad.Scratchpad
 org.apache.isis.applib.services.swagger.SwaggerServiceMenu
 org.apache.isis.applib.services.tablecol.TableColumnOrderService$Default
 org.apache.isis.applib.services.urlencoding.UrlEncodingServiceWithCompression
-org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsDefault
+org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault
 org.apache.isis.jdo.metrics.MetricsServiceDefault
 org.apache.isis.metamodel.services.registry.ServiceRegistryDefault
 org.apache.isis.metamodel.services.user.UserServiceDefault$SudoServiceSpi
diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
index 2d6ed00..625bf5e 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
@@ -22,7 +22,7 @@ org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring
 #org.apache.isis.config.beans.WebAppConfigBean
 org.apache.isis.extensions.fixtures.FixturesLifecyleService
 org.apache.isis.extensions.fixtures.fixturescripts.ExecutionParametersService
-org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsDefault
+org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault
 org.apache.isis.extensions.fixtures.legacy.queryresultscache.QueryResultsCacheControlInternal
 org.apache.isis.jdo.datanucleus.DataNucleusSettings
 org.apache.isis.jdo.datanucleus.service.JdoPersistenceLifecycleService
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java
index 75107da..10666b3 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java
@@ -22,7 +22,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.fixtures.fixturescripts.ExecutionParametersService;
-import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsDefault;
+import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault;
 import org.apache.isis.extensions.fixtures.legacy.queryresultscache.QueryResultsCacheControlInternal;
 import org.apache.isis.extensions.fixtures.modules.ModuleFixtureService;
 import org.apache.isis.extensions.fixtures.modules.ModuleService;
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
index 01bbb57..d877698 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
@@ -51,7 +51,6 @@ import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.extensions.fixtures.api.PersonaWithBuilderScript;
-import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsDefault;
 import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecification;
 
 import lombok.val;
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsDefault.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScriptsDefault.java
similarity index 97%
rename from extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsDefault.java
rename to extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScriptsDefault.java
index 7d38c1d..09877b1 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsDefault.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScriptsDefault.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.fixtures.fixturespec;
+package org.apache.isis.extensions.fixtures.fixturescripts;
 
 import java.util.List;
 
@@ -39,9 +39,8 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.extensions.fixtures.events.FixturesInstalledEvent;
 import org.apache.isis.extensions.fixtures.events.FixturesInstallingEvent;
-import org.apache.isis.extensions.fixtures.fixturescripts.FixtureResult;
-import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript;
-import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
+import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecification;
+import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider;
 
 import lombok.val;
 
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
index 85f3914..1a75ef8 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
@@ -23,6 +23,7 @@ import org.apache.isis.extensions.fixtures.api.FixtureScriptWithExecutionStrateg
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureResultList;
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript;
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
+import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault;
 
 /**
  * Pulls together the various state that influences the behaviour of {@link FixtureScripts} service.
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
index 98fb710..a55c287 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
@@ -20,6 +20,7 @@ package org.apache.isis.extensions.fixtures.fixturespec;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
+import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault;
 
 /**
  * Rather than subclassing {@link FixtureScripts} class, you can instead implement this interface as a service.
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java
index 536ca70..727a143 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java
@@ -21,7 +21,7 @@
  * The {@link org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider} SPI service is an
  * alternative to subclassing the {@link org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts} domain service.
  * The logic that would normally be in the subclass moves to the provider service instead, and the framework
- * instantiates a fallback default instance, {@link org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsDefault}.
+ * instantiates a fallback default instance, {@link org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault}.
  *
  * @see <a href="http://isis.apache.org/migration-notes/migration-notes.html#_migration-notes_1.8.0-to-1.9.0_fixture-scripts-specification-provider">Reference guide</a>
  */


[isis] 05/07: ISIS-2188: reverts debug in build-core.sh, since didn't help

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 5e308bb41601fc444a91ff5f27fafaee91aa21b8
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Dec 1 18:34:30 2019 +0000

    ISIS-2188: reverts debug in build-core.sh, since didn't help
---
 scripts/ci/build-core.sh | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/scripts/ci/build-core.sh b/scripts/ci/build-core.sh
index 154cd4e..af97a3a 100644
--- a/scripts/ci/build-core.sh
+++ b/scripts/ci/build-core.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-#set -e
+set -e
 
 SCRIPT_DIR=$( dirname "$0" )
 if [ -z "$PROJECT_ROOT_PATH" ]; then
@@ -40,13 +40,6 @@ mvn -s $SETTINGS_XML \
     $MVN_ADDITIONAL_OPTS \
     $*
 
-if [ $? -ne 0 ]; then
-  find . -name QExcelDemoToDoItem.java -print
-  cat $(find . -name QExcelDemoToDoItem.java -print)
-
-  exit 1
-fi
-
 if [ ! -z "$REVISION" ]; then
   cd $PROJECT_ROOT_PATH/core-parent
   echo "reverting version in isis-parent ..."


[isis] 06/07: ISIS-2188: FixtureScripts are no longer view models.

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 641774eaa3b96d0e5e62d05934760bc4a237f5da
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Dec 1 19:26:12 2019 +0000

    ISIS-2188: FixtureScripts are no longer view models.
    
    Removes the concept of a discoverable fixture scripts
    Removes "tracing" from fixture scripts
    removes the drop-down policy for FixtureScripts menu
---
 .../specimpl/ObjectSpecificationAbstract.java      |  15 +-
 .../fixturescripts/DiscoverableFixtureScript.java  |  52 -----
 .../fixtures/fixturescripts/FixtureResultList.java |   1 -
 .../fixtures/fixturescripts/FixtureScript.java     | 233 ++-------------------
 .../fixtures/fixturescripts/FixtureScripts.java    | 171 +++++----------
 .../fixturescripts/SimpleFixtureScript.java        |  61 ------
 .../fixturespec/FixtureScriptsSpecification.java   |  41 +---
 .../fixturescripts/ExecutionContextTest.java       |  13 --
 ...mainAppFixtureScriptsSpecificationProvider.java |   1 -
 .../fixture/scenarios/DomainAppDemo.java           |   6 -
 .../modules/simple/dom/impl/SimpleObject.java      |   3 +
 11 files changed, 77 insertions(+), 520 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 70ae86a..a60965d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -93,8 +93,6 @@ import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 import lombok.val;
 import static org.apache.isis.commons.internal.base._NullSafe.stream;
-import static org.apache.isis.commons.internal.reflection._Reflect.InterfacePolicy;
-import static org.apache.isis.commons.internal.reflection._Reflect.streamTypeHierarchy;
 
 @Log4j2 @EqualsAndHashCode(of = "correspondingClass", callSuper = false)
 public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implements ObjectSpecification {
@@ -183,7 +181,8 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     private final Identifier identifier;
     private final boolean isAbstract;
 
-    @Getter(onMethod=@__({@Override})) private final boolean excludedFromMetamodel;
+    @Getter(onMethod=@__({@Override})) private final boolean excludedFromMetamodel = false;
+
     // derived lazily, cached since immutable
     protected ObjectSpecId specId;
 
@@ -196,12 +195,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
 
     private IntrospectionState introspectionState = IntrospectionState.NOT_INTROSPECTED;
 
-    private final static Set<String> exclusionsFromMetamodel = _Sets.of( 
-            //TODO[2133] make this configurable, or find an alternative, 
-            // perhaps a specific type annotation? ... @Programmatic
-            "org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript"
-            );
-
 
     // -- Constructor
     public ObjectSpecificationAbstract(
@@ -215,8 +208,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         this.shortName = shortName;
 
         this.isAbstract = ClassExtensions.isAbstract(introspectedClass);
-        this.excludedFromMetamodel = streamTypeHierarchy(introspectedClass, InterfacePolicy.EXCLUDE)
-                .anyMatch(type->exclusionsFromMetamodel.contains(type.getName())); 
 
         this.identifier = Identifier.classIdentifier(introspectedClass);
 
@@ -550,7 +541,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
                     .map(superSpec->superSpec.getFacet(facetType));
     
             val facetsCombined = _Streams.concat(facets1, facets2, facets3);
-    
+
             val notANoopFacetFilter = new NotANoopFacetFilter<Q>();
     
             return facetsCombined
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/DiscoverableFixtureScript.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/DiscoverableFixtureScript.java
deleted file mode 100644
index bacd83b..0000000
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/DiscoverableFixtureScript.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.extensions.fixtures.fixturescripts;
-
-/**
- * A convenience subclass of {@link org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript} that is
- * {@link org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript.Discoverability#DISCOVERABLE discoverable}
- * by default.
- */
-public abstract class DiscoverableFixtureScript extends FixtureScript {
-
-    /**
-     * Initializes a {@link Discoverability#DISCOVERABLE} fixture, with
-     * {@link #getFriendlyName()} and {@link #getLocalName()} derived from the class name.
-     *
-     * <p>
-     * Use {@link #withDiscoverability(Discoverability)} to override.
-     */
-    public DiscoverableFixtureScript() {
-        this(null, null);
-    }
-
-    /**
-     * Initializes a {@link Discoverability#DISCOVERABLE} fixture.
-     *
-     * <p>
-     * Use {@link #withDiscoverability(Discoverability)} to override.
-     *
-     * @param friendlyName - if null, will be derived from class name
-     * @param localName - if null, will be derived from class name
-     */
-    public DiscoverableFixtureScript(final String friendlyName, final String localName) {
-        super(friendlyName, localName, Discoverability.DISCOVERABLE);
-    }
-
-}
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureResultList.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureResultList.java
index aa97823..c157ee0 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureResultList.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureResultList.java
@@ -91,7 +91,6 @@ public class FixtureResultList {
         if(fixtureResult != null) {
             list.add(fixtureResult);
             fixtureResultByKey.put(fixtureResult.getKey(), fixtureResult);
-            executionContext.trace(fixtureResult);
             if(firstTime) {
                 fixtureScriptList.add(fixtureScript);
             }
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java
index b5588ad..d3b81ba 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.extensions.fixtures.fixturescripts;
 
-import java.io.PrintStream;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
@@ -34,15 +33,8 @@ import javax.inject.Inject;
 
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.support.TransactionTemplate;
 
-import org.apache.isis.applib.AbstractViewModel;
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.annotation.Title;
-import org.apache.isis.applib.annotation.ViewModelLayout;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
@@ -59,11 +51,13 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.extensions.fixtures.api.FixtureScriptWithExecutionStrategy;
 import org.apache.isis.extensions.fixtures.api.PersonaWithBuilderScript;
 import org.apache.isis.extensions.fixtures.api.WithPrereqs;
-import org.apache.isis.runtime.system.context.IsisContext;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.support.TransactionTemplate;
 
-@ViewModelLayout(named="Script")
-public abstract class FixtureScript
-extends AbstractViewModel {
+import lombok.Getter;
+import lombok.Setter;
+
+public abstract class FixtureScript {
 
     public static final FixtureScript NOOP = new FixtureScript() {
         @Override
@@ -76,59 +70,23 @@ extends AbstractViewModel {
     // -- constructors
 
     /**
-     * Initializes a {@link Discoverability#NON_DISCOVERABLE} fixture, with
+     * Initializes a fixture, with
      * {@link #getFriendlyName()} and {@link #getLocalName()} derived from the class name.
-     *
-     * <p>
-     * Use {@link #withDiscoverability(Discoverability)} to override.
      */
     public FixtureScript() {
         this(null, null);
     }
 
     /**
-     * Initializes a {@link Discoverability#NON_DISCOVERABLE} fixture.
-     *
-     * <p>
-     * Use {@link #withDiscoverability(Discoverability)} to override.
+     * Initializes a fixture.
      *
      * @param friendlyName - if null, will be derived from class name
      * @param localName - if null, will be derived from class name
      */
     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
-     * @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.extensions.fixtures.fixturescripts.FixtureScripts#runFixtureScript(FixtureScript, String)}}.
-     */
-    public FixtureScript(
-            final String friendlyName,
-            final String localName,
-            final Discoverability discoverability) {
-        this(friendlyName, localName, discoverability, /* no tracing */ null);
-    }
-    /**
-     * @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.extensions.fixtures.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;
-
-        withTracing(printStream);
     }
 
     protected String localNameElseDerived(final String str) {
@@ -141,145 +99,36 @@ extends AbstractViewModel {
 
 
 
-    // -- tracing
-
-    private PrintStream tracePrintStream;
-
-    /**
-     * Enable tracing of the execution to the provided {@link java.io.PrintStream}.
-     */
-    @Programmatic
-    public FixtureScript withTracing(final PrintStream tracePrintStream) {
-        this.tracePrintStream = tracePrintStream;
-        return this;
-    }
-
-    /**
-     * Enable tracing of the execution to stdout.
-     */
-    @Programmatic
-    public FixtureScript withTracing() {
-        return withTracing(System.out);
-    }
-
-
-
-    // -- viewModel impl
-
-    @Programmatic
-    @Override
-    public String viewModelMemento() {
-        return fixtureScripts.mementoFor(this);
-    }
-
-    @Programmatic
-    @Override
-    public void viewModelInit(final String mementoStr) {
-        fixtureScripts.initOf(mementoStr, this);
-    }
-
-
-
     // -- qualifiedName
 
-    @Programmatic
     public String getQualifiedName() {
         return getParentPath() + getLocalName();
     }
 
 
 
-    // -- friendlyName (property)
-
+    @Getter @Setter
     private String friendlyName;
 
-    @Title
-    @PropertyLayout(hidden = Where.EVERYWHERE)
-    public String getFriendlyName() {
-        return friendlyName;
-    }
-    public void setFriendlyName(final String friendlyName) {
-        this.friendlyName = friendlyName;
-    }
-
 
 
-    // -- localName
-
-    private String localName;
     /**
      * Will always be populated, initially by the default name, but can be
      * {@link #setLocalName(String) overridden}.
      */
-    @Programmatic
-    public String getLocalName() {
-        return localName;
-    }
-    public void setLocalName(final String localName) {
-        this.localName = localName;
-    }
-
-
+    @Getter( onMethod = @__(@Programmatic)) @Setter
+    private String localName;
 
-    // -- parentPath
 
-    private String parentPath;
 
     /**
      * Path of the parent of this script (if any), with trailing {@value #PATH_SEPARATOR}.
      */
-    @Programmatic
-    public String getParentPath() {
-        return parentPath;
-    }
-    @Programmatic
-    public void setParentPath(final String parentPath) {
-        this.parentPath = parentPath;
-    }
+    @Getter( onMethod = @__(@Programmatic)) @Setter( onMethod = @__(@Programmatic))
+    private String parentPath;
 
 
 
-    // -- discoverability
-
-
-    /**
-     * Whether this fixture script should be automatically discoverable or not.
-     */
-    public enum Discoverability {
-        /**
-         * the fixture script is discoverable and so will be listed by the
-         * {@link FixtureScripts#runFixtureScript(FixtureScript,String) run fixture script} action
-         */
-        DISCOVERABLE,
-        /**
-         * The fixture script is non-discoverable and so will <i>not</i> be listed by the
-         * {@link FixtureScripts#runFixtureScript(FixtureScript,String) run fixture script} action
-         */
-        NON_DISCOVERABLE
-    }
-
-
-    private Discoverability discoverability;
-
-    /**
-     * Whether this fixture script is {@link Discoverability discoverable} (in other words
-     * whether it will be listed to be run in the {@link FixtureScripts#runFixtureScript(FixtureScript, String) run fixture script} action.
-     *
-     * <p>
-     * By default {@link DiscoverableFixtureScript}s are {@link Discoverability#DISCOVERABLE discoverable}, all other
-     * {@link FixtureScript}s are {@link Discoverability#NON_DISCOVERABLE not}.  This can be overridden in the
-     * constructor, however or by calling the {@link #withDiscoverability(org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript.Discoverability) setter}.
-     */
-    @Programmatic
-    public boolean isDiscoverable() {
-        return discoverability == Discoverability.DISCOVERABLE;
-    }
-
-    @Programmatic
-    public FixtureScript withDiscoverability(final Discoverability discoverability) {
-        this.discoverability = discoverability;
-        return this;
-    }
 
 
 
@@ -633,7 +482,6 @@ extends AbstractViewModel {
                 final T childFixtureScript) {
 
             childFixtureScript.setParentPath(callingFixtureScript.pathWith(""));
-            childFixtureScript.withTracing(callingFixtureScript.tracePrintStream); // cascade down
 
             if(localNameOverride != null) {
                 childFixtureScript.setLocalName(localNameOverride);
@@ -668,13 +516,11 @@ extends AbstractViewModel {
                 // the prereqs might now result in a match, so we check again.
                 previouslyExecutedScript = fixtureScriptByClass.get(childFixtureScript.getClass());
                 if (previouslyExecutedScript == null) {
-                    trace(childFixtureScript, As.EXEC);
                     childFixtureScript.execute(this);
                     this.previouslyExecuted.add(childFixtureScript);
                     fixtureScriptByClass.put(childFixtureScript.getClass(), childFixtureScript);
                     return childFixtureScript;
                 } else {
-                    trace(childFixtureScript, As.SKIP);
                     return _Casts.uncheckedCast(previouslyExecutedScript);
                 }
 
@@ -682,7 +528,6 @@ extends AbstractViewModel {
                 return executeChildIfNotAlreadyWithValueSemantics(childFixtureScript);
 
             case EXECUTE:
-                trace(childFixtureScript, As.EXEC);
                 childFixtureScript.execute(this);
                 this.previouslyExecuted.add(childFixtureScript);
                 return childFixtureScript;
@@ -716,13 +561,11 @@ extends AbstractViewModel {
             // the prereqs might now result in a match, so we check again.
             previouslyExecutedScript = fixtureScriptByValue.get(childFixtureScript);
             if (previouslyExecutedScript == null) {
-                trace(childFixtureScript, As.EXEC);
                 childFixtureScript.execute(this);
                 this.previouslyExecuted.add(childFixtureScript);
                 fixtureScriptByValue.put(childFixtureScript, childFixtureScript);
                 return childFixtureScript;
             } else {
-                trace(childFixtureScript, As.SKIP);
                 return _Casts.uncheckedCast(previouslyExecutedScript);
             }
         }
@@ -766,57 +609,14 @@ extends AbstractViewModel {
 
 
 
-        // -- tracing
-
-        private int traceHighwatermark = 40;
-        private PrintStream tracePrintStream;
-
-        @Programmatic
-        public ExecutionContext withTracing(final PrintStream tracePrintStream) {
-            this.tracePrintStream = tracePrintStream;
-            return this;
-        }
-
-        private void trace(final FixtureScript fixtureScript, final As as) {
-            if(tracePrintStream == null) {
-                return;
-            }
-            final String qualifiedName = fixtureScript.getQualifiedName();
-            final String trace = String.format("%1s: %2s %3s\n", pad(qualifiedName), as, fixtureScript.getClass().getName());
-            tracePrintStream.print(trace);
-            tracePrintStream.flush();
-        }
-
-        void trace(final FixtureResult fixtureResult) {
-            if(tracePrintStream == null) {
-                return;
-            }
-            final String key = fixtureResult.getKey();
-            final String trace = String.format("%1s: %2s\n", pad(key), fixtureScripts.titleOf(fixtureResult));
-            tracePrintStream.print(trace);
-            tracePrintStream.flush();
-        }
-
-        private String pad(final String key) {
-            traceHighwatermark = Math.max(key.length(), traceHighwatermark);
-            return _Strings.padEnd(key, roundup(traceHighwatermark, 20), ' ');
-        }
-
         static int roundup(final int n, final int roundTo) {
             return ((n / roundTo) + 1) * roundTo;
         }
 
 
+        @Getter @Setter
         private Map<Class<?>, Object> userData = _Maps.newHashMap();
         @Programmatic
-        public void setUserData(final Object object) {
-            userData.put(object.getClass(), object);
-        }
-        @Programmatic
-        public <T> T getUserData(final Class<T> cls) {
-            return _Casts.uncheckedCast(userData.get(cls));
-        }
-        @Programmatic
         public <T> T clearUserData(final Class<T> cls) {
             return _Casts.uncheckedCast(userData.remove(cls));
         }
@@ -915,7 +715,7 @@ extends AbstractViewModel {
      * </p>
      */
     final List<FixtureResult> run(final String parameters) {
-        executionContext = fixtureScripts.newExecutionContext(parameters).withTracing(this.tracePrintStream);
+        executionContext = fixtureScripts.newExecutionContext(parameters);
         executionContext.executeChildIfNotAlready(this);
         return executionContext.getResults();
     }
@@ -1017,9 +817,6 @@ extends AbstractViewModel {
         return wrapMixin(mixinClass, mixedIn);
     }
 
-    /**
-     * Convenience method, simply delegates to {@link IsisContext#createTransactionTemplate}.
-     */
     protected TransactionTemplate transactionTemplate() {
         return new TransactionTemplate(txMan);
     }
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
index c64916a..de29d02 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
@@ -18,11 +18,14 @@
  */
 package org.apache.isis.extensions.fixtures.fixturescripts;
 
-import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
-import java.util.function.Predicate;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
@@ -35,7 +38,6 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.MinLength;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
@@ -52,7 +54,6 @@ 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.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.extensions.fixtures.api.PersonaWithBuilderScript;
 import org.apache.isis.extensions.fixtures.events.FixturesInstalledEvent;
@@ -172,6 +173,7 @@ public class FixtureScripts extends AbstractService {
     // -- constructors
 
     // -- constructor, init
+
     /**
      * The package prefix to search for fixture scripts.  This default value will result in
      * no fixture scripts being found.  However, normally it will be overridden.
@@ -179,20 +181,34 @@ public class FixtureScripts extends AbstractService {
     public static final String PACKAGE_PREFIX = FixtureScripts.class.getPackage().getName();
 
 
-    public FixtureScripts(Optional<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider) {
+    @Getter
+    private final FixtureScriptsSpecification specification;
+
+    @Getter
+    private final SortedMap<String,FixtureScript> fixtureScriptByFriendlyName;
+
+    public FixtureScripts(
+            @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
+            final Optional<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider,
+            final ServiceRegistry serviceRegistry) {
+
         this.specification = fixtureScriptsSpecificationProvider.orElse(() -> FixtureScriptsSpecification.builder(PACKAGE_PREFIX).build()).getSpecification();
+        this.serviceRegistry = serviceRegistry;
+
+        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("Duplicate key for values %s and %s", v1, v2));},
+                        TreeMap::new));
     }
 
 
 
     // -- packagePrefix, nonPersistedObjectsStrategy, multipleExecutionStrategy
 
-    @Getter
-    private FixtureScriptsSpecification specification;
-
-    private String getPackagePrefix() {
-        return specification.getPackagePrefix();
-    }
     public NonPersistedObjectsStrategy getNonPersistedObjectsStrategy() {
         return specification.getNonPersistedObjectsStrategy();
     }
@@ -206,38 +222,6 @@ public class FixtureScripts extends AbstractService {
         return specification.getMultipleExecutionStrategy();
     }
 
-    // -- init
-
-//    @Inject List<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider;
-//
-//    @PostConstruct
-//    public void init() {
-//        fixtureScriptsSpecificationProvider.stream().findFirst().ifPresent(
-//                provider -> this.specification = provider.getSpecification()
-//        );
-//    }
-
-
-    // -- fixtureScriptList (lazily built)
-
-    private List<FixtureScript> fixtureScriptList;
-    private List<FixtureScript> getFixtureScriptList() {
-        if(fixtureScriptList == null) {
-            fixtureScriptList = findAndInstantiateFixtureScripts();
-        }
-        return fixtureScriptList;
-    }
-    private List<FixtureScript> findAndInstantiateFixtureScripts() {
-        val packagePrefix = getPackagePrefix();
-        return serviceRegistry.select(FixtureScript.class).stream()
-                .filter(Objects::nonNull)
-                .filter(fixtureScript -> fixtureScript.getClass().getPackage().getName().startsWith(packagePrefix))
-                .sorted(Comparator
-                        .comparing(FixtureScript::getFriendlyName)
-                        .thenComparing(FixtureScript::getQualifiedName)
-                        )
-                .collect(Collectors.toList());
-    }
 
 
 
@@ -252,7 +236,10 @@ public class FixtureScripts extends AbstractService {
     )
     @MemberOrder(sequence="10")
     public List<FixtureResult> runFixtureScript(
-            final FixtureScript fixtureScript,
+            @ParameterLayout(
+                    named = "Fixture script"
+            )
+            final String fixtureScriptName,
             @ParameterLayout(
                     named = "Parameters",
                     describedAs =
@@ -266,48 +253,40 @@ public class FixtureScripts extends AbstractService {
             // if this method is called programmatically, the caller may have simply new'd up the fixture script
             // (rather than use container.newTransientInstance(...).  To allow this use case, we need to ensure that
             // domain services are injected into the fixture script.
-            serviceInjector.injectServicesInto(fixtureScript);
+            serviceInjector.injectServicesInto(fixtureScriptName);
 
-            return fixtureScript.run(parameters);
+            return fixtureScriptByFriendlyName.get(fixtureScriptName).run(parameters);
         } finally {
             eventBusService.post(new FixturesInstalledEvent(this));
         }
     }
 
 
-    /**
-     * Hide the actions of this service if no configuring {@link FixtureScriptsSpecificationProvider} was provided or is available.
-     */
-    public boolean hideRunFixtureScript() {
-        return hideIfPolicyNot(FixtureScriptsSpecification.DropDownPolicy.CHOICES);
-    }
     public String disableRunFixtureScript() {
-        return getFixtureScriptList().isEmpty()? "No fixture scripts found under package '" + getPackagePrefix() + "'": null;
+        return getFixtureScriptByFriendlyName().isEmpty()? "No fixture scripts found under package '" + specification
+                .getPackagePrefix() + "'": null;
     }
 
 
-    public FixtureScript default0RunFixtureScript() {
+    public String default0RunFixtureScript() {
         Class<? extends FixtureScript> defaultScript = getSpecification().getRunScriptDefaultScriptClass();
         if(defaultScript == null) {
             return null;
         }
-        return findFixtureScriptFor(defaultScript);
+        return findFixtureScriptNameFor(defaultScript);
     }
 
-    public List<FixtureScript> choices0RunFixtureScript() {
-        return getFixtureScriptList();
+    public Set<String> choices0RunFixtureScript() {
+        return fixtureScriptByFriendlyName.keySet();
     }
 
-    protected List<FixtureScript> autoComplete0RunFixtureScript(final @MinLength(1) String arg) {
-
-        final Predicate<String> contains = str -> str != null && str.contains(arg);
-
-        return _NullSafe.stream(getFixtureScriptList())
-                .filter(script-> contains.test(script.getFriendlyName()) || contains.test(script.getLocalName()))
-                .collect(Collectors.toList());
+    public String validateRunFixtureScript(final String fixtureScriptName, final String parameters) {
+        return fixtureScriptByFriendlyName.get(fixtureScriptName).validateRun(parameters);
     }
-    public String validateRunFixtureScript(final FixtureScript fixtureScript, final String parameters) {
-        return fixtureScript.validateRun(parameters);
+
+    protected List<FixtureResult> runScript(final String fixtureScriptName, final String parameters) {
+        final FixtureScript fixtureScript = fixtureScriptByFriendlyName.get(fixtureScriptName);
+        return runScript(fixtureScript, parameters);
     }
 
     protected List<FixtureResult> runScript(final FixtureScript fixtureScript, final String parameters) {
@@ -317,46 +296,6 @@ public class FixtureScripts extends AbstractService {
 
 
 
-    // -- runFixtureScript (using autoComplete as drop-down policy)
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-    )
-    @ActionLayout(
-            named = "Run Fixture Script"
-    )
-    @MemberOrder(sequence="10")
-    public List<FixtureResult> runFixtureScriptWithAutoComplete(
-            final FixtureScript fixtureScript,
-            @ParameterLayout(
-                    named = "Parameters",
-                    describedAs =
-                            "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
-                    multiLine = 10)
-            @Parameter(optionality = Optionality.OPTIONAL)
-            final String parameters) {
-        return this.runFixtureScript(fixtureScript, parameters);
-    }
-
-    public boolean hideRunFixtureScriptWithAutoComplete() {
-        return hideIfPolicyNot(FixtureScriptsSpecification.DropDownPolicy.AUTO_COMPLETE);
-    }
-
-    public String disableRunFixtureScriptWithAutoComplete() {
-        return disableRunFixtureScript();
-    }
-
-    public FixtureScript default0RunFixtureScriptWithAutoComplete() {
-        return default0RunFixtureScript();
-    }
-
-    public List<FixtureScript> autoComplete0RunFixtureScriptWithAutoComplete(final @MinLength(1) String arg) {
-        return autoComplete0RunFixtureScript(arg);
-    }
-
-    public String validateRunFixtureScriptWithAutoComplete(final FixtureScript fixtureScript, final String parameters) {
-        return validateRunFixtureScript(fixtureScript, parameters);
-    }
-
 
     // -- recreateObjectsAndReturnFirst
 
@@ -369,7 +308,7 @@ public class FixtureScripts extends AbstractService {
     @MemberOrder(sequence="20")
     public Object recreateObjectsAndReturnFirst() {
         val recreateScriptClass =  getSpecification().getRecreateScriptClass();
-        val recreateScript = findFixtureScriptFor(recreateScriptClass);
+        val recreateScript = findFixtureScriptNameFor(recreateScriptClass);
         if(recreateScript == null) {
             return null;
         }
@@ -387,12 +326,6 @@ public class FixtureScripts extends AbstractService {
 
 
 
-    // -- HELPER
-
-    private boolean hideIfPolicyNot(final FixtureScriptsSpecification.DropDownPolicy requiredPolicy) {
-        return getSpecification().getRunScriptDropDownPolicy() != requiredPolicy;
-    }
-
     // -- programmatic API
 
     @Programmatic
@@ -402,7 +335,7 @@ public class FixtureScripts extends AbstractService {
     	String parameters = null;
     	
     	transactionService.executeWithinTransaction(()->{
-    		runFixtureScript(singleScript, parameters);	
+    		runScript(singleScript, parameters);
     	});
     }
 
@@ -455,11 +388,11 @@ public class FixtureScripts extends AbstractService {
     }
 
     @Programmatic
-    public FixtureScript findFixtureScriptFor(final Class<? extends FixtureScript> fixtureScriptClass) {
-        val fixtureScripts = getFixtureScriptList();
-        for (final FixtureScript fs : fixtureScripts) {
-            if(fixtureScriptClass.isAssignableFrom(fs.getClass())) {
-                return fs;
+    public String findFixtureScriptNameFor(final Class<? extends FixtureScript> fixtureScriptClass) {
+        val fixtureScripts = getFixtureScriptByFriendlyName().entrySet();
+        for (final Map.Entry<String,FixtureScript> fs : fixtureScripts) {
+            if(fixtureScriptClass.isAssignableFrom(fs.getValue().getClass())) {
+                return fs.getKey();
             }
         }
         return null;
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/SimpleFixtureScript.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/SimpleFixtureScript.java
deleted file mode 100644
index ed1f7aa..0000000
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/SimpleFixtureScript.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.extensions.fixtures.fixturescripts;
-
-import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.DomainObjectLayout;
-
-@DomainObject(
-        objectType = "org.apache.isis.applib.fixturescripts.SimpleFixtureScript"
-        )
-@DomainObjectLayout(
-        named="Simple Script"
-        )
-public abstract class SimpleFixtureScript extends FixtureScript {
-
-    private static Discoverability defaultDiscoverability() {
-        return Discoverability.NON_DISCOVERABLE;
-    }
-
-    /**
-     * Initializes a {@link Discoverability#NON_DISCOVERABLE} fixture, with
-     * {@link #getFriendlyName()} and {@link #getLocalName()} derived from the class name.
-     *
-     * <p>
-     * Use {@link #withDiscoverability(Discoverability)} to override.
-     */
-    public SimpleFixtureScript() {
-        this(null, null);
-    }
-
-    /**
-     * Initializes a {@link Discoverability#NON_DISCOVERABLE} fixture.
-     *
-     * <p>
-     * Use {@link #withDiscoverability(Discoverability)} to override.
-     *
-     * @param friendlyName - if null, will be derived from class name
-     * @param localName - if null, will be derived from class name
-     */
-    public SimpleFixtureScript(final String friendlyName, final String localName) {
-        super(friendlyName, localName, defaultDiscoverability());
-    }
-
-
-}
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
index 30c25cb..4efa2af 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
@@ -30,29 +30,12 @@ import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
 public class FixtureScriptsSpecification {
 
     /**
-     * In Whether to show available {@link FixtureScript}s using a choices or an autocomplete.
-     */
-    public enum DropDownPolicy {
-        AUTO_COMPLETE,
-        CHOICES;
-
-        public boolean isAutoComplete() {
-            return this == AUTO_COMPLETE;
-        }
-
-        public boolean isChoices() {
-            return this == CHOICES;
-        }
-    }
-
-    /**
      * Typically preferable to use the create using the {@link FixtureScriptsSpecification.Builder}
      * (obtained from {@link #builder(Class)}).
-     * @param packagePrefix  - to search for fixture script implementations, eg "com.mycompany".    Note that this is ignored if an {@link org.apache.isis.applib.AppManifest} is in use.
-     * @param nonPersistedObjectsStrategy - how to handle any non-persisted objects that are {@link FixtureScripts#newFixtureResult(FixtureScript, String, Object, boolean) added} to a {@link FixtureResultList}.
+     * @param packagePrefix  - to search for fixture script implementations, eg "com.mycompany".
+     * @param nonPersistedObjectsStrategy - how to handle any non-persisted objects that are added to a {@link FixtureResultList}.
      * @param multipleExecutionStrategy - whether more than one instance of the same fixture script class can be run multiple times
-     * @param runScriptDefaultScriptClass - the fixture script to provide as a default in {@link FixtureScripts#runFixtureScript(FixtureScript, String)} action.
-     * @param runScriptDropDownPolicy - whether the {@link FixtureScripts#runFixtureScript(FixtureScript, String)} should use a choices or an autoComplete.
+     * @param runScriptDefaultScriptClass - the fixture script to provide as a default in {@link FixtureScripts#runFixtureScript(String, String)} action.
      * @param recreateScriptClass - if specified, then make the {@link FixtureScripts#recreateObjectsAndReturnFirst()} action visible.
      */
     public FixtureScriptsSpecification(
@@ -60,14 +43,12 @@ public class FixtureScriptsSpecification {
             final FixtureScripts.NonPersistedObjectsStrategy nonPersistedObjectsStrategy,
             final FixtureScripts.MultipleExecutionStrategy multipleExecutionStrategy,
             final Class<? extends FixtureScript> runScriptDefaultScriptClass,
-            final DropDownPolicy runScriptDropDownPolicy,
             final Class<? extends FixtureScript> recreateScriptClass) {
         this.packagePrefix = packagePrefix;
         this.nonPersistedObjectsStrategy = nonPersistedObjectsStrategy;
         this.multipleExecutionStrategy = multipleExecutionStrategy;
         this.recreateScriptClass = recreateScriptClass;
         this.runScriptDefaultScriptClass = runScriptDefaultScriptClass;
-        this.dropDownPolicy = runScriptDropDownPolicy;
     }
 
     private final String packagePrefix;
@@ -76,11 +57,7 @@ public class FixtureScriptsSpecification {
 
     private final Class<? extends FixtureScript> recreateScriptClass;
     private final Class<? extends FixtureScript> runScriptDefaultScriptClass;
-    private final DropDownPolicy dropDownPolicy;
 
-    /**
-     * Note that this is ignored if an {@link org.apache.isis.applib.AppManifest} is in use.
-     */
     @Programmatic
     public String getPackagePrefix() {
         return packagePrefix;
@@ -106,11 +83,6 @@ public class FixtureScriptsSpecification {
     }
 
     @Programmatic
-    public DropDownPolicy getRunScriptDropDownPolicy() {
-        return dropDownPolicy;
-    }
-
-    @Programmatic
     public Class<? extends FixtureScript> getRecreateScriptClass() {
         return recreateScriptClass;
     }
@@ -121,7 +93,6 @@ public class FixtureScriptsSpecification {
         private FixtureScripts.MultipleExecutionStrategy multipleExecutionStrategy = FixtureScripts.MultipleExecutionStrategy.EXECUTE_ONCE_BY_CLASS;
         private Class<? extends FixtureScript> recreateScriptClass = null;
         private Class<? extends FixtureScript> defaultScriptClass = null;
-        private DropDownPolicy dropDownPolicy = DropDownPolicy.CHOICES;
 
         public Builder(final Class<?> contextClass) {
             this(contextClass.getPackage().getName());
@@ -151,16 +122,12 @@ public class FixtureScriptsSpecification {
             this.defaultScriptClass = defaultScriptClass;
             return this;
         }
-        public Builder withRunScriptDropDown(DropDownPolicy dropDownPolicy) {
-            this.dropDownPolicy = dropDownPolicy;
-            return this;
-        }
 
         public FixtureScriptsSpecification build() {
             return new FixtureScriptsSpecification(
                     packagePrefix,
                     nonPersistedObjectsStrategy, multipleExecutionStrategy,
-                    defaultScriptClass, dropDownPolicy, recreateScriptClass
+                    defaultScriptClass, recreateScriptClass
                     );
         }
     }
diff --git a/extensions/testing/fixtures/src/test/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionContextTest.java b/extensions/testing/fixtures/src/test/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionContextTest.java
index d273c32..5925ac1 100644
--- a/extensions/testing/fixtures/src/test/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionContextTest.java
+++ b/extensions/testing/fixtures/src/test/java/org/apache/isis/extensions/fixtures/fixturescripts/ExecutionContextTest.java
@@ -125,18 +125,5 @@ public class ExecutionContextTest {
 
     }
 
-    public static class RoundUp extends ExecutionContextTest {
-
-        @Test
-        public void happyCase() throws Exception {
-            Assert.assertThat(FixtureScript.ExecutionContext.roundup(5, 20), Matchers.is(20));
-            Assert.assertThat(FixtureScript.ExecutionContext.roundup(19, 20), Matchers.is(20));
-            Assert.assertThat(FixtureScript.ExecutionContext.roundup(20, 20), Matchers.is(40));
-            Assert.assertThat(FixtureScript.ExecutionContext.roundup(21, 20), Matchers.is(40));
-            Assert.assertThat(FixtureScript.ExecutionContext.roundup(39, 20), Matchers.is(40));
-            Assert.assertThat(FixtureScript.ExecutionContext.roundup(40, 20), Matchers.is(60));
-        }
-
-    }
 
 }
\ No newline at end of file
diff --git a/starters/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java b/starters/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
index 320ba6c..f51acff 100644
--- a/starters/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
+++ b/starters/simpleapp/application/src/main/java/domainapp/application/fixture/DomainAppFixtureScriptsSpecificationProvider.java
@@ -39,7 +39,6 @@ public class DomainAppFixtureScriptsSpecificationProvider implements FixtureScri
                 .builder(DomainAppFixtureScriptsSpecificationProvider.class)
                 .with(FixtureScripts.MultipleExecutionStrategy.EXECUTE)
                 .withRunScriptDefault(DomainAppDemo.class)
-                .withRunScriptDropDown(FixtureScriptsSpecification.DropDownPolicy.CHOICES)
                 .withRecreate(DomainAppDemo.class)
                 .build();
     }
diff --git a/starters/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java b/starters/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java
index 05335d4..3437e55 100644
--- a/starters/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java
+++ b/starters/simpleapp/application/src/main/java/domainapp/application/fixture/scenarios/DomainAppDemo.java
@@ -20,18 +20,12 @@ package domainapp.application.fixture.scenarios;
 
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript;
 import org.apache.isis.extensions.fixtures.legacy.teardown.TeardownFixtureAbstract2;
-import org.springframework.stereotype.Component;
 
 import domainapp.modules.simple.dom.impl.SimpleObject;
 import domainapp.modules.simple.fixture.SimpleObject_persona;
 
-@Component
 public class DomainAppDemo extends FixtureScript {
 
-    public DomainAppDemo() {
-        withDiscoverability(Discoverability.DISCOVERABLE);
-    }
-
     @Override
     protected void execute(final ExecutionContext ec) {
         ec.executeChild(this, new TeardownFixtureAbstract2() {
diff --git a/starters/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java b/starters/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
index b5e7cba..58254b9 100644
--- a/starters/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
+++ b/starters/simpleapp/module-simple/src/main/java/domainapp/modules/simple/dom/impl/SimpleObject.java
@@ -31,11 +31,14 @@ import org.apache.isis.applib.annotation.Auditing;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
 import org.apache.isis.schema.utils.jaxbadapters.PersistentEntityAdapter;
 
+import lombok.Getter;
+import lombok.Setter;
 import static org.apache.isis.applib.annotation.CommandReification.ENABLED;
 import static org.apache.isis.applib.annotation.SemanticsOf.IDEMPOTENT;
 import static org.apache.isis.applib.annotation.SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE;


[isis] 03/07: ISIS-2188: simplifies FixtureScripts constructor + init

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 245c7480ece9fca6ce3e737f7ba16fb4d7a259b6
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Dec 1 18:24:28 2019 +0000

    ISIS-2188: simplifies FixtureScripts constructor + init
---
 .../fixtures/fixturescripts/FixtureScripts.java    | 84 ++++++----------------
 .../FixtureScriptsSpecificationProvider.java       |  1 -
 2 files changed, 20 insertions(+), 65 deletions(-)

diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
index cd2ea85..e56c823 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
@@ -18,14 +18,13 @@
  */
 package org.apache.isis.extensions.fixtures.fixturescripts;
 
-import java.io.PrintStream;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import javax.xml.bind.annotation.XmlRootElement;
 
@@ -52,7 +51,6 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
 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.collections.Can;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -63,6 +61,7 @@ import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificati
 import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider;
 
 import lombok.Getter;
+import lombok.Setter;
 import lombok.val;
 
 
@@ -179,25 +178,19 @@ public class FixtureScripts extends AbstractService {
      */
     public static final String PACKAGE_PREFIX = FixtureScripts.class.getPackage().getName();
 
-    /**
-     * @param specification - specifies how the service will find instances and execute them.
-     */
-    public FixtureScripts(final FixtureScriptsSpecification specification) {
-        this.specification = specification;
-    }
 
-    public FixtureScripts() {
-        this(FixtureScriptsSpecification.builder(PACKAGE_PREFIX)
-                .build());
+    public FixtureScripts(Optional<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider) {
+        this.specification = fixtureScriptsSpecificationProvider.orElse(() -> FixtureScriptsSpecification.builder(PACKAGE_PREFIX).build()).getSpecification();
     }
 
 
+
     // -- packagePrefix, nonPersistedObjectsStrategy, multipleExecutionStrategy
 
     @Getter
     private FixtureScriptsSpecification specification;
 
-    public String getPackagePrefix() {
+    private String getPackagePrefix() {
         return specification.getPackagePrefix();
     }
     public NonPersistedObjectsStrategy getNonPersistedObjectsStrategy() {
@@ -215,32 +208,25 @@ public class FixtureScripts extends AbstractService {
 
     // -- init
 
-    Can<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider;
-
-    @PostConstruct
-    public void init() {
-        if(fixtureScriptsSpecificationProvider == null) {
-            fixtureScriptsSpecificationProvider =
-                    serviceRegistry.select(FixtureScriptsSpecificationProvider.class);
-        }
-        fixtureScriptsSpecificationProvider.getFirst().ifPresent(
-                provider -> this.specification = provider.getSpecification()
-        );
-    }
+//    @Inject List<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider;
+//
+//    @PostConstruct
+//    public void init() {
+//        fixtureScriptsSpecificationProvider.stream().findFirst().ifPresent(
+//                provider -> this.specification = provider.getSpecification()
+//        );
+//    }
 
 
     // -- fixtureScriptList (lazily built)
 
     private List<FixtureScript> fixtureScriptList;
-    
-    @Programmatic
-    public List<FixtureScript> getFixtureScriptList() {
+    private List<FixtureScript> getFixtureScriptList() {
         if(fixtureScriptList == null) {
             fixtureScriptList = findAndInstantiateFixtureScripts();
         }
         return fixtureScriptList;
     }
-
     private List<FixtureScript> findAndInstantiateFixtureScripts() {
         val packagePrefix = getPackagePrefix();
         return serviceRegistry.select(FixtureScript.class).stream()
@@ -255,21 +241,6 @@ public class FixtureScripts extends AbstractService {
 
 
 
-    // -- fixtureTracing (thread-local)
-
-    private final ThreadLocal<PrintStream> fixtureTracing = new ThreadLocal<PrintStream>(){{
-        set(System.out);
-    }};
-
-    @Programmatic
-    public PrintStream getFixtureTracing() {
-        return fixtureTracing.get();
-    }
-
-    @Programmatic
-    public void setFixtureTracing(PrintStream fixtureTracing) {
-        this.fixtureTracing.set(fixtureTracing);
-    }
 
     // -- runFixtureScript (using choices as the drop-down policy)
 
@@ -297,7 +268,7 @@ public class FixtureScripts extends AbstractService {
             // domain services are injected into the fixture script.
             serviceInjector.injectServicesInto(fixtureScript);
 
-            return fixtureScript.withTracing(fixtureTracing.get()).run(parameters);
+            return fixtureScript.run(parameters);
         } finally {
             eventBusService.post(new FixturesInstalledEvent(this));
         }
@@ -419,7 +390,7 @@ public class FixtureScripts extends AbstractService {
     // -- HELPER
 
     private boolean hideIfPolicyNot(final FixtureScriptsSpecification.DropDownPolicy requiredPolicy) {
-        return fixtureScriptsSpecificationProvider.isEmpty() || getSpecification().getRunScriptDropDownPolicy() != requiredPolicy;
+        return getSpecification().getRunScriptDropDownPolicy() != requiredPolicy;
     }
 
     // -- programmatic API
@@ -428,7 +399,7 @@ public class FixtureScripts extends AbstractService {
     public void run(final FixtureScript... fixtureScriptList) {
     	
     	val singleScript = toSingleScript(fixtureScriptList);
-    	val parameters = (String)null;
+    	String parameters = null;
     	
     	transactionService.executeWithinTransaction(()->{
     		runFixtureScript(singleScript, parameters);	
@@ -503,29 +474,14 @@ public class FixtureScripts extends AbstractService {
                 return FixtureScript.ExecutionContext.create(executionParameters, this);
     }
 
-    // -- hooks
-
-    /**
-     * Optional hook.
-     */
-    protected FixtureScript findFixtureScriptFor(final String qualifiedName) {
-        final List<FixtureScript> fixtureScripts = getFixtureScriptList();
-        for (final FixtureScript fs : fixtureScripts) {
-            if(fs.getQualifiedName().contains(qualifiedName)) {
-                return fs;
-            }
-        }
-        return null;
-    }
 
 
     // -- memento support for FixtureScript
 
-    @XmlRootElement(name = "fixtureScript")
+    @XmlRootElement(name = "fixtureScriptMemento")
     public static class FixtureScriptMemento {
+        @Getter @Setter
         private String path;
-        public String getPath() { return path; }
-        public void setPath(String path) { this.path = path; }
     }
 
     String mementoFor(final FixtureScript fs) {
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
index bb8fd18..39e9b64 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
@@ -19,7 +19,6 @@
 package org.apache.isis.extensions.fixtures.fixturespec;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
 
 public interface FixtureScriptsSpecificationProvider {
 


[isis] 07/07: ISIS-2186: removes excel fixture and integtest for now... to get to a clean build

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 3b3886b75b30f8e4c4998ef65769dec0ae660310
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Dec 1 19:27:33 2019 +0000

    ISIS-2186: removes excel fixture and integtest for now...  to get to a clean build
    
    ... need to fix the DN issue still
---
 extensions/pom.xml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/extensions/pom.xml b/extensions/pom.xml
index facb8a0..b780fef 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -198,8 +198,10 @@
 		<module>vw/sse</module>
 
 		<module>lib/base/impl</module>
+<!--
 		<module>lib/excel/fixture</module>
 		<module>lib/excel/integtests</module>
+-->
 		<module>lib/excel/impl</module>
 		<module>lib/fakedata/impl</module>
 		<module>lib/fakedata/fixture</module>


[isis] 04/07: ISIS-2188: uses original objectType for FixtureScripts to avoid unnecessary changes in menubars.layout.xml

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 ff9d6e71203e9b756e73599547e5389da4ff22a5
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Dec 1 18:25:54 2019 +0000

    ISIS-2188: uses original objectType for FixtureScripts to avoid unnecessary changes in menubars.layout.xml
---
 .../apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
index e56c823..c64916a 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
@@ -67,7 +67,7 @@ import lombok.val;
 
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = "isisApplib.FixtureScripts"
+        objectType = "isisApplib.FixtureScriptsDefault"
 )
 @DomainServiceLayout(
         named="Prototyping",


[isis] 02/07: ISIS-2188: merges FixtureScriptsDefault up into FixtureScripts

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 9b3c807a97c9c92892d2be3b2b03429246e87539
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Dec 1 18:23:54 2019 +0000

    ISIS-2188: merges FixtureScriptsDefault up into FixtureScripts
---
 .../testdomain/bootstrapping/builtin-IsisBoot.list |   2 +-
 .../bootstrapping/builtin-domain-services.list     |   2 +-
 .../bootstrapping/builtin-singleton.list           |   2 +-
 .../extensions/fixtures/IsisExtFixturesModule.java |   9 +-
 .../fixtures/fixturescripts/FixtureScripts.java    | 221 ++++++++++++++----
 .../fixturescripts/FixtureScriptsDefault.java      | 250 ---------------------
 .../fixturespec/FixtureScriptsSpecification.java   |   3 +-
 .../FixtureScriptsSpecificationProvider.java       |   9 -
 .../fixtures/fixturespec/package-info.java         |   5 +-
 9 files changed, 181 insertions(+), 322 deletions(-)

diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list
index e55743a..57ca13b 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-IsisBoot.list
@@ -20,7 +20,7 @@ org.apache.isis.config.beans.WebAppConfigBean
 org.apache.isis.extensions.fixtures.FixturesEventService
 org.apache.isis.extensions.fixtures.FixturesLifecyleService
 org.apache.isis.extensions.fixtures.fixturescripts.ExecutionParametersService
-org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault
+org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts
 org.apache.isis.extensions.fixtures.legacy.queryresultscache.QueryResultsCacheControlInternal
 org.apache.isis.jdo.jdosupport.IsisJdoSupportDN5
 org.apache.isis.jdo.metrics.MetricsServiceDefault
diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
index 334c855..7c922c1 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-domain-services.list
@@ -10,7 +10,7 @@ org.apache.isis.applib.services.scratchpad.Scratchpad
 org.apache.isis.applib.services.swagger.SwaggerServiceMenu
 org.apache.isis.applib.services.tablecol.TableColumnOrderService$Default
 org.apache.isis.applib.services.urlencoding.UrlEncodingServiceWithCompression
-org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault
+org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts
 org.apache.isis.jdo.metrics.MetricsServiceDefault
 org.apache.isis.metamodel.services.registry.ServiceRegistryDefault
 org.apache.isis.metamodel.services.user.UserServiceDefault$SudoServiceSpi
diff --git a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
index 625bf5e..a8ce24a 100644
--- a/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
+++ b/examples/smoketests/src/test/resources/org/apache/isis/testdomain/bootstrapping/builtin-singleton.list
@@ -22,7 +22,7 @@ org.apache.isis.config.beans.IsisBeanFactoryPostProcessorForSpring
 #org.apache.isis.config.beans.WebAppConfigBean
 org.apache.isis.extensions.fixtures.FixturesLifecyleService
 org.apache.isis.extensions.fixtures.fixturescripts.ExecutionParametersService
-org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault
+org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts
 org.apache.isis.extensions.fixtures.legacy.queryresultscache.QueryResultsCacheControlInternal
 org.apache.isis.jdo.datanucleus.DataNucleusSettings
 org.apache.isis.jdo.datanucleus.service.JdoPersistenceLifecycleService
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java
index 10666b3..eb08800 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/IsisExtFixturesModule.java
@@ -18,21 +18,20 @@
  */
 package org.apache.isis.extensions.fixtures;
 
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
 import org.apache.isis.extensions.fixtures.fixturescripts.ExecutionParametersService;
-import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault;
+import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
 import org.apache.isis.extensions.fixtures.legacy.queryresultscache.QueryResultsCacheControlInternal;
 import org.apache.isis.extensions.fixtures.modules.ModuleFixtureService;
 import org.apache.isis.extensions.fixtures.modules.ModuleService;
 import org.apache.isis.extensions.spring.ExtSpringModule;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
 
 @Configuration
 @Import({
     ExtSpringModule.class,
     FixturesLifecycleService.class,
-    FixtureScriptsDefault.class,
+    FixtureScripts.class,
     ExecutionParametersService.class,
     QueryResultsCacheControlInternal.class,
     ModuleService.class,
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
index d877698..cd2ea85 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScripts.java
@@ -32,14 +32,19 @@ import javax.xml.bind.annotation.XmlRootElement;
 import org.apache.isis.applib.AbstractService;
 import org.apache.isis.applib.ViewModel;
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.MinLength;
+import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.jaxb.JaxbService;
@@ -47,22 +52,30 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
 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.collections.Can;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.extensions.fixtures.api.PersonaWithBuilderScript;
+import org.apache.isis.extensions.fixtures.events.FixturesInstalledEvent;
+import org.apache.isis.extensions.fixtures.events.FixturesInstallingEvent;
 import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecification;
+import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider;
 
+import lombok.Getter;
 import lombok.val;
 
 
-/**
- * Rather than sub-classing, instead implement
- * {@link org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider}.  
- * The framework will
- * automatically provide a default implementation configured using that provider service.
- */
-public abstract class FixtureScripts extends AbstractService {
+@DomainService(
+        nature = NatureOfService.VIEW,
+        objectType = "isisApplib.FixtureScripts"
+)
+@DomainServiceLayout(
+        named="Prototyping",
+        menuBar = DomainServiceLayout.MenuBar.SECONDARY
+)
+public class FixtureScripts extends AbstractService {
+
 
     // -- Specification, nonPersistedObjectsStrategy, multipleExecutionStrategy enums
 
@@ -159,6 +172,13 @@ public abstract class FixtureScripts extends AbstractService {
 
     // -- constructors
 
+    // -- constructor, init
+    /**
+     * The package prefix to search for fixture scripts.  This default value will result in
+     * no fixture scripts being found.  However, normally it will be overridden.
+     */
+    public static final String PACKAGE_PREFIX = FixtureScripts.class.getPackage().getName();
+
     /**
      * @param specification - specifies how the service will find instances and execute them.
      */
@@ -166,33 +186,20 @@ public abstract class FixtureScripts extends AbstractService {
         this.specification = specification;
     }
 
-    // -- packagePrefix, nonPersistedObjectsStrategy, multipleExecutionStrategy
+    public FixtureScripts() {
+        this(FixtureScriptsSpecification.builder(PACKAGE_PREFIX)
+                .build());
+    }
 
-    private FixtureScriptsSpecification specification;
 
-    @Programmatic
-    public FixtureScriptsSpecification getSpecification() {
-        return specification;
-    }
+    // -- packagePrefix, nonPersistedObjectsStrategy, multipleExecutionStrategy
 
-    /**
-     * Allows the specification to be overridden if required.
-     *
-     * <p>
-     *     This is used by {@link FixtureScriptsDefault}.
-     * </p>
-     *
-     * @param specification
-     */
-    protected void setSpecification(final FixtureScriptsSpecification specification) {
-        this.specification = specification;
-    }
+    @Getter
+    private FixtureScriptsSpecification specification;
 
-    @Programmatic
     public String getPackagePrefix() {
         return specification.getPackagePrefix();
     }
-    @Programmatic
     public NonPersistedObjectsStrategy getNonPersistedObjectsStrategy() {
         return specification.getNonPersistedObjectsStrategy();
     }
@@ -208,11 +215,20 @@ public abstract class FixtureScripts extends AbstractService {
 
     // -- init
 
-    @Programmatic
+    Can<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider;
+
     @PostConstruct
     public void init() {
+        if(fixtureScriptsSpecificationProvider == null) {
+            fixtureScriptsSpecificationProvider =
+                    serviceRegistry.select(FixtureScriptsSpecificationProvider.class);
+        }
+        fixtureScriptsSpecificationProvider.getFirst().ifPresent(
+                provider -> this.specification = provider.getSpecification()
+        );
     }
 
+
     // -- fixtureScriptList (lazily built)
 
     private List<FixtureScript> fixtureScriptList;
@@ -255,37 +271,62 @@ public abstract class FixtureScripts extends AbstractService {
         this.fixtureTracing.set(fixtureTracing);
     }
 
-    // -- runFixtureScript (prototype action)
+    // -- runFixtureScript (using choices as the drop-down policy)
 
-    /**
-     * To make this action usable in the UI, override either {@link #choices0RunFixtureScript()} or
-     * {@link #autoComplete0RunFixtureScript(String)} with <tt>public</tt> visibility</tt>.
-     */
-    @Action(restrictTo = RestrictTo.PROTOTYPING)
+    @Action(
+            restrictTo = RestrictTo.PROTOTYPING
+    )
+    @ActionLayout(
+            cssClassFa="fa fa-chevron-right"
+    )
     @MemberOrder(sequence="10")
     public List<FixtureResult> runFixtureScript(
             final FixtureScript fixtureScript,
             @ParameterLayout(
-                    named="Parameters",
-                    describedAs="Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
-                    multiLine = 10
-                    )
+                    named = "Parameters",
+                    describedAs =
+                            "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
+                    multiLine = 10)
             @Parameter(optionality = Optionality.OPTIONAL)
             final String parameters) {
+        try {
+            eventBusService.post(new FixturesInstallingEvent(this));
 
-        // if this method is called programmatically, the caller may have simply new'd up the fixture script
-        // (rather than use container.newTransientInstance(...).  To allow this use case, we need to ensure that
-        // domain services are injected into the fixture script.
-        serviceInjector.injectServicesInto(fixtureScript);
+            // if this method is called programmatically, the caller may have simply new'd up the fixture script
+            // (rather than use container.newTransientInstance(...).  To allow this use case, we need to ensure that
+            // domain services are injected into the fixture script.
+            serviceInjector.injectServicesInto(fixtureScript);
 
-        return fixtureScript.withTracing(fixtureTracing.get()).run(parameters);
+            return fixtureScript.withTracing(fixtureTracing.get()).run(parameters);
+        } finally {
+            eventBusService.post(new FixturesInstalledEvent(this));
+        }
+    }
+
+
+    /**
+     * Hide the actions of this service if no configuring {@link FixtureScriptsSpecificationProvider} was provided or is available.
+     */
+    public boolean hideRunFixtureScript() {
+        return hideIfPolicyNot(FixtureScriptsSpecification.DropDownPolicy.CHOICES);
     }
+    public String disableRunFixtureScript() {
+        return getFixtureScriptList().isEmpty()? "No fixture scripts found under package '" + getPackagePrefix() + "'": null;
+    }
+
+
     public FixtureScript default0RunFixtureScript() {
-        return getFixtureScriptList().isEmpty() ? null: getFixtureScriptList().get(0);
+        Class<? extends FixtureScript> defaultScript = getSpecification().getRunScriptDefaultScriptClass();
+        if(defaultScript == null) {
+            return null;
+        }
+        return findFixtureScriptFor(defaultScript);
     }
-    protected List<FixtureScript> choices0RunFixtureScript() {
+
+    public List<FixtureScript> choices0RunFixtureScript() {
         return getFixtureScriptList();
     }
+
     protected List<FixtureScript> autoComplete0RunFixtureScript(final @MinLength(1) String arg) {
 
         final Predicate<String> contains = str -> str != null && str.contains(arg);
@@ -294,9 +335,6 @@ public abstract class FixtureScripts extends AbstractService {
                 .filter(script-> contains.test(script.getFriendlyName()) || contains.test(script.getLocalName()))
                 .collect(Collectors.toList());
     }
-    public String disableRunFixtureScript() {
-        return getFixtureScriptList().isEmpty()? "No fixture scripts found under package '" + getPackagePrefix() + "'": null;
-    }
     public String validateRunFixtureScript(final FixtureScript fixtureScript, final String parameters) {
         return fixtureScript.validateRun(parameters);
     }
@@ -305,6 +343,85 @@ public abstract class FixtureScripts extends AbstractService {
         return fixtureScript.run(parameters);
     }
 
+
+
+
+    // -- runFixtureScript (using autoComplete as drop-down policy)
+    @Action(
+            restrictTo = RestrictTo.PROTOTYPING
+    )
+    @ActionLayout(
+            named = "Run Fixture Script"
+    )
+    @MemberOrder(sequence="10")
+    public List<FixtureResult> runFixtureScriptWithAutoComplete(
+            final FixtureScript fixtureScript,
+            @ParameterLayout(
+                    named = "Parameters",
+                    describedAs =
+                            "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
+                    multiLine = 10)
+            @Parameter(optionality = Optionality.OPTIONAL)
+            final String parameters) {
+        return this.runFixtureScript(fixtureScript, parameters);
+    }
+
+    public boolean hideRunFixtureScriptWithAutoComplete() {
+        return hideIfPolicyNot(FixtureScriptsSpecification.DropDownPolicy.AUTO_COMPLETE);
+    }
+
+    public String disableRunFixtureScriptWithAutoComplete() {
+        return disableRunFixtureScript();
+    }
+
+    public FixtureScript default0RunFixtureScriptWithAutoComplete() {
+        return default0RunFixtureScript();
+    }
+
+    public List<FixtureScript> autoComplete0RunFixtureScriptWithAutoComplete(final @MinLength(1) String arg) {
+        return autoComplete0RunFixtureScript(arg);
+    }
+
+    public String validateRunFixtureScriptWithAutoComplete(final FixtureScript fixtureScript, final String parameters) {
+        return validateRunFixtureScript(fixtureScript, parameters);
+    }
+
+
+    // -- recreateObjectsAndReturnFirst
+
+    @Action(
+            restrictTo = RestrictTo.PROTOTYPING
+    )
+    @ActionLayout(
+            cssClassFa="fa fa-refresh"
+    )
+    @MemberOrder(sequence="20")
+    public Object recreateObjectsAndReturnFirst() {
+        val recreateScriptClass =  getSpecification().getRecreateScriptClass();
+        val recreateScript = findFixtureScriptFor(recreateScriptClass);
+        if(recreateScript == null) {
+            return null;
+        }
+        final List<FixtureResult> results = runScript(recreateScript, null);
+        if(results.isEmpty()) {
+            return null;
+        }
+        return results.get(0).getObject();
+    }
+
+    public boolean hideRecreateObjectsAndReturnFirst() {
+        return getSpecification().getRecreateScriptClass() == null;
+    }
+
+
+
+
+    // -- HELPER
+
+    private boolean hideIfPolicyNot(final FixtureScriptsSpecification.DropDownPolicy requiredPolicy) {
+        return fixtureScriptsSpecificationProvider.isEmpty() || getSpecification().getRunScriptDropDownPolicy() != requiredPolicy;
+    }
+
     // -- programmatic API
 
     @Programmatic
@@ -487,7 +604,10 @@ public abstract class FixtureScripts extends AbstractService {
     @Inject RepositoryService repositoryService;
     @Inject TransactionService transactionService;
     @Inject ExecutionParametersService executionParametersService;
-    
+
+    @Inject EventBusService eventBusService;
+
+
     // -- DEPRECATIONS
  
     /**
@@ -514,4 +634,7 @@ public abstract class FixtureScripts extends AbstractService {
         return runBuilder(builderScript);
     }
 
+
+
+
 }
\ No newline at end of file
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScriptsDefault.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScriptsDefault.java
deleted file mode 100644
index 09877b1..0000000
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScriptsDefault.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.extensions.fixtures.fixturescripts;
-
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.DomainServiceLayout;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.MinLength;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Optionality;
-import org.apache.isis.applib.annotation.Parameter;
-import org.apache.isis.applib.annotation.ParameterLayout;
-import org.apache.isis.applib.annotation.RestrictTo;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.extensions.fixtures.events.FixturesInstalledEvent;
-import org.apache.isis.extensions.fixtures.events.FixturesInstallingEvent;
-import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecification;
-import org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider;
-
-import lombok.val;
-
-/**
- * Default instance of {@link FixtureScripts}, instantiated automatically by the framework if no custom user-defined instance was
- * registered.
- *
- * <p>
- *     The original design (pre 1.9.0) was to subclass {@link FixtureScripts} and specify the package prefix (and optionally other
- *     settings) to search for {@link FixtureScript} subtypes.  The inherited functionality from the superclass then knew how to
- *     find and execute fixture scripts.
- * </p>
- * <p>
- *     The new (1.9.0+) design separates these responsibilities.  Rather than subclassing {@link FixtureScripts}, you can instead
- *     rely on the framework to instantiate <i>this</i> default, fallback, implementation of {@link FixtureScripts}.  You can then
- *     optionally (though typically) specify the package prefix and other settings by implementing the new {@link FixtureScriptsSpecificationProvider}
- *     service.
- * </p>
- *
- * <p>
- *     Note that this class is deliberately <i>not</i> annotated with {@link org.apache.isis.applib.annotation.DomainService}; rather it is
- *     automatically registered programmatically if no other instance of {@link FixtureScripts} is found.
- * </p>
- */
-@DomainService(
-        nature = NatureOfService.VIEW,
-        objectType = "isisApplib.FixtureScriptsDefault"
-        )
-@DomainServiceLayout(
-        named="Prototyping",
-        menuBar = DomainServiceLayout.MenuBar.SECONDARY
-        )
-public class FixtureScriptsDefault extends FixtureScripts {
-
-    // -- constructor, init
-    /**
-     * The package prefix to search for fixture scripts.  This default value will result in
-     * no fixture scripts being found.  However, normally it will be overridden.
-     */
-    public static final String PACKAGE_PREFIX = FixtureScriptsDefault.class.getPackage().getName();
-
-    public FixtureScriptsDefault() {
-        super(FixtureScriptsSpecification.builder(PACKAGE_PREFIX)
-                .build());
-    }
-
-
-    @Override
-    @PostConstruct
-    public void init() {
-        if(fixtureScriptsSpecificationProvider == null) {
-            fixtureScriptsSpecificationProvider = 
-                    serviceRegistry.select(FixtureScriptsSpecificationProvider.class);
-        }
-        if(fixtureScriptsSpecificationProvider.isEmpty()) {
-            return;
-        }
-        setSpecification(fixtureScriptsSpecificationProvider
-                .getFirst().get().getSpecification());
-    }
-
-
-
-    // -- runFixtureScript (using choices as the drop-down policy)
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-            )
-    @ActionLayout(
-            cssClassFa="fa fa-chevron-right"
-            )
-    @MemberOrder(sequence="10")
-    @Override
-    public List<FixtureResult> runFixtureScript(
-            final FixtureScript fixtureScript,
-            @ParameterLayout(
-                    named = "Parameters",
-                    describedAs =
-                    "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
-                    multiLine = 10)
-            @Parameter(optionality = Optionality.OPTIONAL)
-            final String parameters) {
-        try {
-            eventBusService.post(new FixturesInstallingEvent(this));
-            return super.runFixtureScript(fixtureScript, parameters);
-        } finally {
-            eventBusService.post(new FixturesInstalledEvent(this));
-        }
-    }
-
-    /**
-     * Hide the actions of this service if no configuring {@link FixtureScriptsSpecificationProvider} was provided or is available.
-     */
-    public boolean hideRunFixtureScript() {
-        return hideIfPolicyNot(FixtureScriptsSpecification.DropDownPolicy.CHOICES);
-    }
-
-    @Override
-    public String disableRunFixtureScript() {
-        return super.disableRunFixtureScript();
-    }
-
-    @Override
-    public FixtureScript default0RunFixtureScript() {
-        Class<? extends FixtureScript> defaultScript = getSpecification().getRunScriptDefaultScriptClass();
-        if(defaultScript == null) {
-            return null;
-        }
-        return findFixtureScriptFor(defaultScript);
-    }
-
-    /**
-     * Promote to public visibility.
-     */
-    @Override
-    public List<FixtureScript> choices0RunFixtureScript() {
-        return super.choices0RunFixtureScript();
-    }
-
-    @Override
-    public String validateRunFixtureScript(final FixtureScript fixtureScript, final String parameters) {
-        return super.validateRunFixtureScript(fixtureScript, parameters);
-    }
-
-
-
-    // -- runFixtureScript (using autoComplete as drop-down policy)
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-            )
-    @ActionLayout(
-            named = "Run Fixture Script"
-            )
-    @MemberOrder(sequence="10")
-    public List<FixtureResult> runFixtureScriptWithAutoComplete(
-            final FixtureScript fixtureScript,
-            @ParameterLayout(
-                    named = "Parameters",
-                    describedAs =
-                    "Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
-                    multiLine = 10)
-            @Parameter(optionality = Optionality.OPTIONAL)
-            final String parameters) {
-        return this.runFixtureScript(fixtureScript, parameters);
-    }
-
-    public boolean hideRunFixtureScriptWithAutoComplete() {
-        return hideIfPolicyNot(FixtureScriptsSpecification.DropDownPolicy.AUTO_COMPLETE);
-    }
-
-    public String disableRunFixtureScriptWithAutoComplete() {
-        return disableRunFixtureScript();
-    }
-
-    public FixtureScript default0RunFixtureScriptWithAutoComplete() {
-        return default0RunFixtureScript();
-    }
-
-    public List<FixtureScript> autoComplete0RunFixtureScriptWithAutoComplete(final @MinLength(1) String arg) {
-        return autoComplete0RunFixtureScript(arg);
-    }
-
-    public String validateRunFixtureScriptWithAutoComplete(final FixtureScript fixtureScript, final String parameters) {
-        return super.validateRunFixtureScript(fixtureScript, parameters);
-    }
-
-
-    // -- recreateObjectsAndReturnFirst
-
-    @Action(
-            restrictTo = RestrictTo.PROTOTYPING
-            )
-    @ActionLayout(
-            cssClassFa="fa fa-refresh"
-            )
-    @MemberOrder(sequence="20")
-    public Object recreateObjectsAndReturnFirst() {
-        val recreateScriptClass =  getSpecification().getRecreateScriptClass();
-        val recreateScript = findFixtureScriptFor(recreateScriptClass);
-        if(recreateScript == null) {
-            return null;
-        }
-        final List<FixtureResult> results = runScript(recreateScript, null);
-        if(results.isEmpty()) {
-            return null;
-        }
-        return results.get(0).getObject();
-    }
-
-    public boolean hideRecreateObjectsAndReturnFirst() {
-        return getSpecification().getRecreateScriptClass() == null;
-    }
-
-    // -- HELPER
-
-    private boolean hideIfPolicyNot(final FixtureScriptsSpecification.DropDownPolicy requiredPolicy) {
-        return fixtureScriptsSpecificationProvider.isEmpty() || getSpecification().getRunScriptDropDownPolicy() != requiredPolicy;
-    }
-
-    private Can<FixtureScriptsSpecificationProvider> fixtureScriptsSpecificationProvider;
-
-    // -- DEPS
-
-    @Inject ServiceRegistry serviceRegistry;
-    @Inject EventBusService eventBusService;
-
-
-}
\ No newline at end of file
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
index 1a75ef8..30c25cb 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecification.java
@@ -23,7 +23,6 @@ import org.apache.isis.extensions.fixtures.api.FixtureScriptWithExecutionStrateg
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureResultList;
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScript;
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
-import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault;
 
 /**
  * Pulls together the various state that influences the behaviour of {@link FixtureScripts} service.
@@ -54,7 +53,7 @@ public class FixtureScriptsSpecification {
      * @param multipleExecutionStrategy - whether more than one instance of the same fixture script class can be run multiple times
      * @param runScriptDefaultScriptClass - the fixture script to provide as a default in {@link FixtureScripts#runFixtureScript(FixtureScript, String)} action.
      * @param runScriptDropDownPolicy - whether the {@link FixtureScripts#runFixtureScript(FixtureScript, String)} should use a choices or an autoComplete.
-     * @param recreateScriptClass - if specified, then make the {@link FixtureScriptsDefault#recreateObjectsAndReturnFirst()} action visible.
+     * @param recreateScriptClass - if specified, then make the {@link FixtureScripts#recreateObjectsAndReturnFirst()} action visible.
      */
     public FixtureScriptsSpecification(
             final String packagePrefix,
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
index a55c287..bb8fd18 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/FixtureScriptsSpecificationProvider.java
@@ -20,16 +20,7 @@ package org.apache.isis.extensions.fixtures.fixturespec;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts;
-import org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault;
 
-/**
- * Rather than subclassing {@link FixtureScripts} class, you can instead implement this interface as a service.
- *
- * <p>
- *     The framework will automatically instantiate {@link FixtureScriptsDefault} as a fallback, and use the
- *     {@link FixtureScriptsSpecification} obtained from <i>this</i> service to configure itself.
- * </p>
- */
 public interface FixtureScriptsSpecificationProvider {
 
     @Programmatic
diff --git a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java
index 727a143..5334d2b 100644
--- a/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java
+++ b/extensions/testing/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturespec/package-info.java
@@ -18,10 +18,7 @@
  */
 
 /**
- * The {@link org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider} SPI service is an
- * alternative to subclassing the {@link org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts} domain service.
- * The logic that would normally be in the subclass moves to the provider service instead, and the framework
- * instantiates a fallback default instance, {@link org.apache.isis.extensions.fixtures.fixturescripts.FixtureScriptsDefault}.
+ * The {@link org.apache.isis.extensions.fixtures.fixturespec.FixtureScriptsSpecificationProvider} SPI service configures the {@link org.apache.isis.extensions.fixtures.fixturescripts.FixtureScripts} domain service.
  *
  * @see <a href="http://isis.apache.org/migration-notes/migration-notes.html#_migration-notes_1.8.0-to-1.9.0_fixture-scripts-specification-provider">Reference guide</a>
  */