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:52 UTC
[isis] 02/07: ISIS-2188: merges FixtureScriptsDefault up into
FixtureScripts
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>
*/