You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/08 06:34:28 UTC

[isis] branch ISIS-2717 updated: ISIS-2717: fixes issue with autoconfig for ExecutionParametersService not being picked up

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

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


The following commit(s) were added to refs/heads/ISIS-2717 by this push:
     new 9144954  ISIS-2717: fixes issue with autoconfig for ExecutionParametersService not being picked up
9144954 is described below

commit 91449546a6e430fbbab981e054da8532476a8c87
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jun 8 07:34:11 2021 +0100

    ISIS-2717: fixes issue with autoconfig for ExecutionParametersService not being picked up
---
 .../snapshots/demo2_0_0/RESTFUL_DOMAIN_TYPES.kt    |  2 +-
 .../applib/IsisModuleTestingFixturesApplib.java    |  1 -
 ...xecutionParametersServiceAutoConfiguration.java | 17 +++------
 .../FixtureScriptWithExecutionStrategy.java        |  2 --
 .../applib/fixturescripts/FixtureScripts.java      | 42 ++++++++++------------
 .../FixtureScriptsSpecification.java               | 10 +++---
 .../FixtureScriptsSpecificationProvider.java       |  9 +++--
 ...iptsSpecificationProviderAutoConfiguration.java | 39 ++++++++++----------
 .../applib/modules/ModuleWithFixturesService.java  |  2 +-
 .../QueryResultsCacheControlDefault.java           |  2 +-
 .../applib/services/FixturesLifecycleService.java  |  2 +-
 .../src/main/resources/META-INF/spring.factories   |  4 +--
 12 files changed, 59 insertions(+), 73 deletions(-)

diff --git a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/RESTFUL_DOMAIN_TYPES.kt b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/RESTFUL_DOMAIN_TYPES.kt
index e606e91..25781d8 100644
--- a/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/RESTFUL_DOMAIN_TYPES.kt
+++ b/incubator/clients/kroviz/src/test/kotlin/org/apache/isis/client/kroviz/snapshots/demo2_0_0/RESTFUL_DOMAIN_TYPES.kt
@@ -677,7 +677,7 @@ object RESTFUL_DOMAIN_TYPES : Response() {
         },
         {
             "rel": "urn:org.restfulobjects:rels/domain-type",
-            "href": "http://localhost:8080/restful/domain-types/org.apache.isis.testing.fixtures.applib.fixturespec.FixtureScriptsSpecification",
+            "href": "http://localhost:8080/restful/domain-types/org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScriptsSpecification",
             "method": "GET",
             "type": "application/json;profile=\"urn:org.restfulobjects:repr-types/domain-type\""
         },
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
index 7fec8a1..6d0d52b 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/IsisModuleTestingFixturesApplib.java
@@ -35,7 +35,6 @@ import org.apache.isis.testing.fixtures.applib.services.FixturesLifecycleService
 
         // @Service's
         FixturesLifecycleService.class,
-        ExecutionParametersService.class,
         ModuleWithFixturesService.class,
         QueryResultsCacheControlDefault.class,
 
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/ExecutionParametersServiceAutoConfiguration.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/ExecutionParametersServiceAutoConfiguration.java
index 657b242..3a6952e 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/ExecutionParametersServiceAutoConfiguration.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/ExecutionParametersServiceAutoConfiguration.java
@@ -18,31 +18,25 @@
  */
 package org.apache.isis.testing.fixtures.applib.fixturescripts;
 
-import javax.inject.Named;
-
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.AutoConfigureOrder;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.core.config.IsisConfiguration;
 
 
 /**
  * Provides a fallback implementation of {@link ExecutionParametersService} if
  * none has been provided explicitly by the application itself.
  *
- * @since 2.0 {@index}
  */
 @AutoConfigureOrder(OrderPrecedence.LATE)
 @Configuration
 public class ExecutionParametersServiceAutoConfiguration {
 
-
     /**
      * Returns an implementation of {@link ExecutionParametersService} that
      * simply instantiates {@link ExecutionParameters} with the provided
@@ -51,13 +45,10 @@ public class ExecutionParametersServiceAutoConfiguration {
      *
      * @return
      */
-    @Bean
-    @Named("isis.testing.fixtures.ExecutionParametersServiceDefault")
-    @Order(OrderPrecedence.LATE)
-    @Primary
-    @Qualifier("Default")
+    @Bean("isis.testing.fixtures.ExecutionParametersServiceDefault")
     @ConditionalOnMissingBean(ExecutionParametersService.class)
-    public ExecutionParametersService executionParametersService() {
+    @Qualifier("Default")
+    ExecutionParametersService executionParametersService() {
         return ExecutionParametersDefault::new;
     }
 
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java
index cbfc3cb..cec3faf 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptWithExecutionStrategy.java
@@ -19,8 +19,6 @@
 package org.apache.isis.testing.fixtures.applib.fixturescripts;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
-import org.apache.isis.testing.fixtures.applib.fixturespec.FixtureScriptsSpecification;
 
 /**
  * Interface for {@link org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript}s to optionally implement,
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
index 40ce680..a5465c9 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScripts.java
@@ -59,8 +59,6 @@ import org.apache.isis.testing.fixtures.applib.personas.BuilderScriptAbstract;
 import org.apache.isis.testing.fixtures.applib.personas.PersonaWithBuilderScript;
 import org.apache.isis.testing.fixtures.applib.events.FixturesInstalledEvent;
 import org.apache.isis.testing.fixtures.applib.events.FixturesInstallingEvent;
-import org.apache.isis.testing.fixtures.applib.fixturespec.FixtureScriptsSpecification;
-import org.apache.isis.testing.fixtures.applib.fixturespec.FixtureScriptsSpecificationProvider;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -260,36 +258,32 @@ public class FixtureScripts {
     private final SortedMap<String,FixtureScript> fixtureScriptByFriendlyName;
 
 
+    @Inject
     public FixtureScripts(
-            @Nullable final FixtureScriptsSpecificationProvider fixtureScriptsSpecificationProvider,
+            final FixtureScriptsSpecificationProvider fixtureScriptsSpecificationProvider,
             final ServiceRegistry serviceRegistry) {
 
-        if(fixtureScriptsSpecificationProvider != null) {
-            this.specification = fixtureScriptsSpecificationProvider.getSpecification();
-            this.nonPersistedObjectsStrategy = specification.getNonPersistedObjectsStrategy();
-            this.multipleExecutionStrategy = specification.getMultipleExecutionStrategy();
-
-            val packagePrefix = specification.getPackagePrefix();
-            this.fixtureScriptByFriendlyName =
-                    serviceRegistry.select(FixtureScript.class).stream()
-                    .filter(Objects::nonNull)
-                    .filter(fixtureScript -> fixtureScript.getClass().getPackage().getName().startsWith(packagePrefix))
-                    .collect(Collectors.toMap(FixtureScript::getFriendlyName, Function.identity(),
-                            (v1,v2) ->{ throw new RuntimeException(String.format("Two FixtureScript's have the same friendly name '%s", v1));},
-                            TreeMap::new));
-
-        } else {
-            this.specification = null;
-            this.nonPersistedObjectsStrategy = null;
-            this.multipleExecutionStrategy = null;
-            fixtureScriptByFriendlyName = _Maps.newTreeMap();
-        }
+        this.specification = fixtureScriptsSpecificationProvider.getSpecification();
+        this.nonPersistedObjectsStrategy = specification.getNonPersistedObjectsStrategy();
+        this.multipleExecutionStrategy = specification.getMultipleExecutionStrategy();
+
+        val packagePrefix = specification.getPackagePrefix();
+        this.fixtureScriptByFriendlyName =
+                packagePrefix != null
+                    ? serviceRegistry.select(FixtureScript.class).stream()
+                        .filter(Objects::nonNull)
+                        .filter(fixtureScript -> fixtureScript.getClass().getPackage().getName().startsWith(packagePrefix))
+                        .collect(Collectors.toMap(FixtureScript::getFriendlyName, Function.identity(),
+                                (v1, v2) -> {
+                                    throw new RuntimeException(String.format("Two FixtureScript's have the same friendly name '%s", v1));
+                                },
+                                TreeMap::new))
+                    : _Maps.newTreeMap();
     }
 
 
 
 
-
     // -- runFixtureScript (using choices as the drop-down policy)
 
     /**
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecification.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecification.java
similarity index 93%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecification.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecification.java
index 9688bfe..9f90d42 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecification.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecification.java
@@ -16,13 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.fixturespec;
+package org.apache.isis.testing.fixtures.applib.fixturescripts;
+
+import javax.annotation.Nullable;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScriptWithExecutionStrategy;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResultList;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
 
 /**
  * Specifies the behaviour of the
@@ -102,7 +100,7 @@ public class FixtureScriptsSpecification {
         public Builder(final Class<?> contextClass) {
             this(contextClass.getPackage().getName());
         }
-        public Builder(final String packagePrefix) {
+        public Builder(@Nullable final String packagePrefix) {
             this.packagePrefix = packagePrefix;
         }
 
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecificationProvider.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecificationProvider.java
similarity index 77%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecificationProvider.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecificationProvider.java
index b919b59..b107c4a 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecificationProvider.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecificationProvider.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.fixturespec;
+package org.apache.isis.testing.fixtures.applib.fixturescripts;
 
 import org.apache.isis.applib.annotation.Programmatic;
 
@@ -24,10 +24,13 @@ import org.apache.isis.applib.annotation.Programmatic;
  * SPI to provide an implementation of
  * {@link org.apache.isis.core.config.IsisConfiguration.Testing.Fixtures.FixtureScriptsSpecification}.
  *
- * @deprecated - use <code>isis.testing.fixture.fixture-scripts-specification</code> configuration properties instead.
+ * <p>
+ *     Generally it is easy to just use the <code>isis.testing.fixture.fixture-scripts-specification</code>
+ *     configuration properties rather than providing an implementation of this bean; the framework will
+ *     then auto-configure an appropriate bean instance.
+ * </p>
  */
 @FunctionalInterface
-@Deprecated
 public interface FixtureScriptsSpecificationProvider {
 
     @Programmatic
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecificationProviderAutoConfiguration.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecificationProviderAutoConfiguration.java
similarity index 69%
rename from testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecificationProviderAutoConfiguration.java
rename to testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecificationProviderAutoConfiguration.java
index cbd48e2..bcb6d20 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturespec/FixtureScriptsSpecificationProviderAutoConfiguration.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/fixturescripts/FixtureScriptsSpecificationProviderAutoConfiguration.java
@@ -16,55 +16,58 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testing.fixtures.applib.fixturespec;
+package org.apache.isis.testing.fixtures.applib.fixturescripts;
 
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.AutoConfigureOrder;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.security.authentication.Authenticator;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
 
 import lombok.val;
 
+/**
+ * Provides a fallback implementation of {@link FixtureScriptsSpecificationProvider} if none has been provided explicitly by the application itself.
+ *
+ * @since 2.0 {@index}
+ */
 @AutoConfigureOrder(OrderPrecedence.LATE)
 @Configuration
 public class FixtureScriptsSpecificationProviderAutoConfiguration  {
 
+    /**
+     * Returns an implementation of {@link FixtureScriptsSpecificationProvider} that
+     * uses configuration properties under <code>isis.testing.fixtures.fixture-scripts-specification</code>.
+     *
+     * @return
+     */
     @Bean("isis.testing.fixtures.FixtureScriptsSpecificationProviderDefault")
     @ConditionalOnMissingBean(FixtureScriptsSpecificationProvider.class)
     @Qualifier("Default")
-    @Nullable FixtureScriptsSpecificationProvider fixtureScriptsSpecificationProvider(final IsisConfiguration isisConfiguration) {
+    FixtureScriptsSpecificationProvider fixtureScriptsSpecificationProvider(final IsisConfiguration isisConfiguration) {
+
         val fixturesConfig = isisConfiguration.getTesting().getFixtures().getFixtureScriptsSpecification();
-        val builder = builder(fixturesConfig);
-        if(builder == null) {
-            return null;
-        }
+        val builder = builderFrom(fixturesConfig);
+
         builder.with(FixtureScripts.NonPersistedObjectsStrategy.valueOf(fixturesConfig.getNonPersistedObjectsStrategy().name()));
         builder.with(FixtureScripts.MultipleExecutionStrategy.valueOf(fixturesConfig.getMultipleExecutionStrategy().name()));
         builder.withRecreate((Class) fixturesConfig.getRecreate());
         builder.withRunScriptDefault((Class) fixturesConfig.getRunScriptDefault());
 
-        return () -> builder.build();
+        return builder::build;
     }
 
-    private FixtureScriptsSpecification.Builder builder(IsisConfiguration.Testing.Fixtures.FixtureScriptsSpecification fixturesConfig) {
+    private static FixtureScriptsSpecification.Builder builderFrom(IsisConfiguration.Testing.Fixtures.FixtureScriptsSpecification fixturesConfig) {
         val contextClass = fixturesConfig.getContextClass();
         if(contextClass != null) {
             return FixtureScriptsSpecification.builder(contextClass);
         }
-        val packagePrefix = fixturesConfig.getPackagePrefix();
-        if(packagePrefix != null) {
-            return FixtureScriptsSpecification.builder(packagePrefix);
-        }
-        return null;
+        val packagePrefix = fixturesConfig.getPackagePrefix(); // could be null; this is legitimate
+        return FixtureScriptsSpecification.builder(packagePrefix);
     }
 
+
 }
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixturesService.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixturesService.java
index 7a2485a..f430b24 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixturesService.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/modules/ModuleWithFixturesService.java
@@ -54,7 +54,7 @@ import lombok.extern.log4j.Log4j2;
  * @since 2.x {@index}
  */
 @Service
-@Named("isis.test.ModuleWithFixturesService")
+@Named("isis.testing.fixtures.ModuleWithFixturesService")
 @Order(OrderPrecedence.MIDPOINT)
 @Primary
 @Qualifier("Default")
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/queryresultscache/QueryResultsCacheControlDefault.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/queryresultscache/QueryResultsCacheControlDefault.java
index 1e20f7d..57cac8d 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/queryresultscache/QueryResultsCacheControlDefault.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/queryresultscache/QueryResultsCacheControlDefault.java
@@ -37,7 +37,7 @@ import org.apache.isis.testing.fixtures.applib.events.FixturesInstallingEvent;
  * In separate class because {@link QueryResultsCache} itself is request-scoped
  */
 @Service
-@Named("isis.test.FixtureQueryResultsCacheControlDefault")
+@Named("isis.testing.fixtures.FixtureQueryResultsCacheControlDefault")
 @Order(OrderPrecedence.MIDPOINT)
 @Primary
 @Qualifier("Default")
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
index f7397ba..ccd947f 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
@@ -46,7 +46,7 @@ import lombok.extern.log4j.Log4j2;
  * @since 2.0 {@index}
  */
 @Service
-@Named("isis.test.FixturesLifecycleService")
+@Named("isis.testing.fixtures.FixturesLifecycleService")
 @Order(OrderPrecedence.MIDPOINT)
 @Primary
 @Qualifier("Default")
diff --git a/testing/fixtures/applib/src/main/resources/META-INF/spring.factories b/testing/fixtures/applib/src/main/resources/META-INF/spring.factories
index 76874b2..57b6313 100644
--- a/testing/fixtures/applib/src/main/resources/META-INF/spring.factories
+++ b/testing/fixtures/applib/src/main/resources/META-INF/spring.factories
@@ -1,3 +1,3 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-  org.apache.isis.testing.fixtures.applib.fixturespec.FixtureScriptsSpecificationProviderAutoConfiguration,\
-  org.apache.isis.testing.fixtures.applib.fixturescripts.ExecutionParametersServiceAutoConfiguration
+  org.apache.isis.testing.fixtures.applib.fixturescripts.ExecutionParametersServiceAutoConfiguration,\
+  org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScriptsSpecificationProviderAutoConfiguration