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

(causeway) 03/11: CAUSEWAY-4039: moves injected services into ReplayContext

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

danhaywood pushed a commit to branch CAUSEWAY-4039
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit f6828f1b9b831c1fadc6311b198061ab8553f5f9
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jun 18 19:00:44 2026 +0100

    CAUSEWAY-4039: moves injected services into ReplayContext
---
 .../applib/CausewayModuleExtCommandLogApplib.java  | 17 ++++++++++-
 .../applib/dom/replay/CommandManagerAbstract.java  |  3 +-
 .../applib/dom/replay/CommandManagerExport.java    | 22 ++++++--------
 .../CommandManagerExport_exportSelected.java       |  8 -----
 .../applib/dom/replay/CommandManagerReplay.java    |  1 -
 .../applib/dom/replay/ReplayContext.java           | 34 ++++++++++++++++++++--
 6 files changed, 58 insertions(+), 27 deletions(-)

diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java
index f7a08bac1ef..dee0fde0360 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/CausewayModuleExtCommandLogApplib.java
@@ -18,11 +18,16 @@
  */
 package org.apache.causeway.extensions.commandlog.applib;
 
+import java.util.List;
+
 import org.apache.causeway.applib.services.clock.ClockService;
 import org.apache.causeway.applib.services.command.CommandExecutorService;
 import org.apache.causeway.applib.services.iactnlayer.InteractionService;
+import org.apache.causeway.applib.services.metamodel.MetaModelService;
 import org.apache.causeway.applib.services.repository.RepositoryService;
+import org.apache.causeway.applib.services.scratchpad.Scratchpad;
 import org.apache.causeway.applib.services.xactn.TransactionService;
+import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.core.config.util.SpringProfileUtil;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 import org.apache.causeway.extensions.commandlog.applib.app.CommandLogMenu;
@@ -69,6 +74,7 @@
 import org.apache.causeway.extensions.commandlog.applib.job.RunBackgroundCommandsJob;
 import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayMappingListener;
 import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayMappingListenerInMemory;
+import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayReferenceDataService;
 import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayReferenceDataServiceForRefData;
 import org.apache.causeway.extensions.commandlog.applib.spi.RunBackgroundCommandsJobListener;
 import org.apache.causeway.extensions.commandlog.applib.subscriber.CommandLogPauseState;
@@ -191,11 +197,20 @@ public static void honorSystemEnvironment() {
             final CommandExecutorService commandExecutorService,
             final ClockService clockService,
             final java.util.List<CommandReplayMappingListener> commandReplayMappingListeners,
+            final Scratchpad scratchpad,
+            final MetaModelService metaModelService,
+            final CausewayConfiguration causewayConfiguration,
+            final List<CommandReplayReferenceDataService> commandReplayReferenceDataServices,
             final SpecificationLoader specificationLoader) {
         return new ReplayContext(
                 repositoryService, interactionService, transactionService,
                 commandLogEntryRepository, commandExecutorService, clockService,
-                commandReplayMappingListeners, specificationLoader);
+                commandReplayMappingListeners,
+                scratchpad,
+                metaModelService,
+                causewayConfiguration,
+                commandReplayReferenceDataServices,
+                specificationLoader);
     }
 
 }
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java
index a11fc7dcbeb..a32d81d8439 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerAbstract.java
@@ -18,10 +18,11 @@
  */
 package org.apache.causeway.extensions.commandlog.applib.dom.replay;
 
+import java.sql.Timestamp;
+
 import org.apache.causeway.applib.ViewModel;
 import org.apache.causeway.applib.services.command.CommandRecordingSuppressed;
 
 public abstract class CommandManagerAbstract implements HasBaseline, CommandRecordingSuppressed {
 
-
 }
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java
index 48b6c718a07..f9877ea502a 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport.java
@@ -69,10 +69,6 @@ public static abstract class ActionDomainEvent<T>
 
     ReplayContext replayContext;
 
-    @Inject Scratchpad scratchpad;
-    @Inject MetaModelService metaModelService;
-    @Inject CausewayConfiguration causewayConfiguration;
-    @Inject List<CommandReplayReferenceDataService> commandReplayReferenceDataServices;
 
     @Inject
     public CommandManagerExport(
@@ -208,8 +204,8 @@ private static boolean sameInteractionId(
     }
 
     private boolean isRecordingSupportEnabled() {
-        return causewayConfiguration != null
-                && causewayConfiguration.getExtensions().getCommandLog().getRecordingSupport().isEnabled();
+        return replayContext.causewayConfiguration() != null
+                && replayContext.causewayConfiguration().getExtensions().getCommandLog().getRecordingSupport().isEnabled();
     }
 
     private CommandExportKnownTargetValidator validator() {
@@ -218,12 +214,12 @@ private CommandExportKnownTargetValidator validator() {
 
     private boolean isExportRootOrReferenceData(final Bookmark bookmark) {
         return isExportRoot(bookmark)
-                || CommandReplayReferenceDataService.isReferenceData(commandReplayReferenceDataServices, bookmark);
+                || CommandReplayReferenceDataService.isReferenceData(replayContext.commandReplayReferenceDataServices(), bookmark);
     }
 
     private boolean isExportRoot(final Bookmark bookmark) {
-        return metaModelService != null
-                && metaModelService.lookupLogicalTypeByName(bookmark.getLogicalTypeName())
+        return replayContext.metaModelService() != null
+                && replayContext.metaModelService().lookupLogicalTypeByName(bookmark.getLogicalTypeName())
                 .map(logicalType -> logicalType.correspondingClass().isAnnotationPresent(org.apache.causeway.applib.annotation.DomainService.class))
                 .orElse(false);
     }
@@ -241,11 +237,11 @@ private boolean isReplayable(final CommandLogEntry entry) {
     }
 
     private ReplayableCommand replayableCommandInExportManagerContext(final CommandLogEntry entry) {
-        return scratchpad != null
+        return replayContext.scratchpad() != null
                 ? new ReplayableCommand(
                         entry.getInteractionId(),
                         replayContext,
-                        scratchpad)
+                        replayContext.scratchpad())
                 : new ReplayableCommand(
                         entry.getInteractionId(),
                         replayContext,
@@ -264,8 +260,8 @@ private static boolean isExcludedCommand(final CommandLogEntry entry) {
     }
 
     private void putCurrentExportManagerOnScratchpad() {
-        if (scratchpad != null) {
-            scratchpad.put(SCRATCHPAD_KEY, this);
+        if (replayContext.scratchpad() != null) {
+            replayContext.scratchpad().put(SCRATCHPAD_KEY, this);
         }
     }
 
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java
index f39b7393a92..fbbbaecba81 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerExport_exportSelected.java
@@ -106,7 +106,6 @@ public boolean defaultFilenameTimestamp() {
 
     @MemberSupport
     public List<ReplayableCommand> defaultSelected() {
-        syncInjectedServicesToManager();
         return commandExportManager.getCommands().stream()
                 .filter(command -> Boolean.TRUE.equals(command.getExportable()))
                 .collect(Collectors.toList());
@@ -136,16 +135,9 @@ private List<CommandLogEntry> selectedCommandLogEntries(final List<ReplayableCom
 
     private Optional<CommandExportKnownTargetValidator.Failure> validateKnownTargets(
             final List<CommandLogEntry> selectedCommandLogEntries) {
-        syncInjectedServicesToManager();
         return commandExportManager.validateKnownTargets(selectedCommandLogEntries);
     }
 
-    private void syncInjectedServicesToManager() {
-        commandExportManager.metaModelService = metaModelService;
-        commandExportManager.causewayConfiguration = causewayConfiguration;
-        commandExportManager.commandReplayReferenceDataServices = commandReplayReferenceDataServices;
-    }
-
     // TODO: shouldn't be required because of 'choicesFrom', but in v2 there seems to be a MM validation error due to a missing choicesFacet
     @MemberSupport
     public List<ReplayableCommand> choicesSelected() {
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java
index 0554d6ca72d..c1a40bc713d 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandManagerReplay.java
@@ -58,7 +58,6 @@ public static abstract class ActionDomainEvent<T>
             extends CausewayModuleExtCommandLogApplib.ActionDomainEvent<T> { }
 
     ReplayContext replayContext;
-
     ReplayContext replayContext() {
         return replayContext;
     }
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java
index e06a5021557..8c10b0adcbe 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayContext.java
@@ -25,17 +25,24 @@
 import org.apache.causeway.applib.services.clock.ClockService;
 import org.apache.causeway.applib.services.command.CommandExecutorService;
 import org.apache.causeway.applib.services.iactnlayer.InteractionService;
+import org.apache.causeway.applib.services.metamodel.MetaModelService;
 import org.apache.causeway.applib.services.repository.RepositoryService;
+import org.apache.causeway.applib.services.scratchpad.Scratchpad;
 import org.apache.causeway.applib.services.xactn.TransactionService;
+import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntry;
 import org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntryRepository;
 import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayMappingListener;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+import org.apache.causeway.extensions.commandlog.applib.spi.CommandReplayReferenceDataService;
+
 import org.springframework.lang.Nullable;
 
 import lombok.Value;
 import lombok.experimental.Accessors;
 
+import javax.inject.Inject;
+
 /**
  * Bundles dependencies for the replay logic.
  */
@@ -48,7 +55,12 @@ public final class ReplayContext {
         CommandExecutorService commandExecutorService;
         ClockService clockService;
         List<CommandReplayMappingListener> commandReplayMappingListeners;
-        SpecificationLoader specificationLoader;
+        Scratchpad scratchpad;
+        MetaModelService metaModelService;
+        CausewayConfiguration causewayConfiguration;
+        List<CommandReplayReferenceDataService> commandReplayReferenceDataServices;
+
+    SpecificationLoader specificationLoader;
 
     public ReplayContext(
             final RepositoryService repositoryService,
@@ -57,7 +69,11 @@ public ReplayContext(
             final CommandLogEntryRepository commandLogEntryRepository,
             final CommandExecutorService commandExecutorService,
             final ClockService clockService,
-            final List<CommandReplayMappingListener> commandReplayMappingListeners) {
+            final List<CommandReplayMappingListener> commandReplayMappingListeners,
+            final Scratchpad scratchpad,
+            final MetaModelService metaModelService,
+            final CausewayConfiguration causewayConfiguration,
+            final List<CommandReplayReferenceDataService> commandReplayReferenceDataServices) {
         this(
                 repositoryService,
                 interactionService,
@@ -66,6 +82,10 @@ public ReplayContext(
                 commandExecutorService,
                 clockService,
                 commandReplayMappingListeners,
+                scratchpad,
+                metaModelService,
+                causewayConfiguration,
+                commandReplayReferenceDataServices,
                 null);
     }
 
@@ -77,6 +97,10 @@ public ReplayContext(
             final CommandExecutorService commandExecutorService,
             final ClockService clockService,
             final List<CommandReplayMappingListener> commandReplayMappingListeners,
+            final Scratchpad scratchpad,
+            final MetaModelService metaModelService,
+            final CausewayConfiguration causewayConfiguration,
+            final List<CommandReplayReferenceDataService> commandReplayReferenceDataServices,
             final SpecificationLoader specificationLoader) {
         this.repositoryService = repositoryService;
         this.interactionService = interactionService;
@@ -85,6 +109,10 @@ public ReplayContext(
         this.commandExecutorService = commandExecutorService;
         this.clockService = clockService;
         this.commandReplayMappingListeners = commandReplayMappingListeners;
+        this.scratchpad = scratchpad;
+        this.metaModelService = metaModelService;
+        this.causewayConfiguration = causewayConfiguration;
+        this.commandReplayReferenceDataServices = commandReplayReferenceDataServices;
         this.specificationLoader = specificationLoader;
     }
 
@@ -93,5 +121,5 @@ public Optional<CommandLogEntry> lookupCommandLogEntry(final @Nullable UUID inte
 			? commandLogEntryRepository().findByInteractionId(interactionId)
 			: Optional.empty();
     }
-        
+
 }