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/04/24 07:49:25 UTC

(causeway) 15/28: CAUSEWAY-3989: [v2] uses 'since' in CommandReplayManager. Resurrects (?) openCommandLogEntry

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

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

commit a915f993d5d9e211304303a91bd0d1fd014a8917
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Apr 22 11:15:27 2026 +0100

    CAUSEWAY-3989: [v2] uses 'since' in CommandReplayManager.  Resurrects (?) openCommandLogEntry
---
 .../applib/dom/CommandLogEntryRepository.java      | 20 +++++----
 .../dom/CommandLogEntryRepositoryAbstract.java     | 51 ++++++++++------------
 .../commandlog/applib/dom/ReplayState.java         |  4 ++
 .../applib/dom/replay/CommandExportManager.java    |  4 +-
 .../applib/dom/replay/CommandReplayManager.java    | 12 ++---
 .../applib/dom/replay/ReplayableCommand.java       |  8 ++--
 .../replay/ReplayableCommand.layout.fallback.xml   |  9 ++--
 7 files changed, 59 insertions(+), 49 deletions(-)

diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java
index acb41a03bd7..3b7dfe55e0b 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java
@@ -126,6 +126,18 @@ List<CommandLogEntry> findByTargetAndFromAndTo(
 
     List<CommandLogEntry> findSinceAndHasBeenExported(final Timestamp since);
 
+    /**
+     * Command Replay feature: Can replay or retry.
+     */
+    List<CommandLogEntry> findSinceAndWithReplayPendingOrFailed(Timestamp since);
+
+    /**
+     * Command Replay feature: Cannot replay or retry.
+     */
+    List<CommandLogEntry> findSinceAndWithReplayOkOrExcluded(Timestamp since);
+
+
+
     /**
      * Returns any persisted commands that have not yet started.
      *
@@ -165,14 +177,6 @@ List<CommandLogEntry> findByTargetAndFromAndTo(
      */
     Optional<CommandLogEntry> findMostRecentCompleted();
 
-    /**
-     * Command Replay feature: Can replay or retry.
-     */
-    List<CommandLogEntry> findReplayPendingOrFailed();
-    /**
-     * Command Replay feature: Cannot replay or retry.
-     */
-    List<CommandLogEntry> findReplaySucceededOrExcluded();
 
     CommandLogEntry saveForReplay(final CommandDto dto);
 
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepositoryAbstract.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepositoryAbstract.java
index d46265d9c29..9de561a3bd7 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepositoryAbstract.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepositoryAbstract.java
@@ -334,27 +334,6 @@ public Optional<CommandLogEntry> findMostRecentCompleted() {
                     Query.named(commandLogEntryClass, CommandLogEntry.Nq.FIND_MOST_RECENT_COMPLETED))
         );
     }
-    @Override
-    public List<CommandLogEntry> findReplayPendingOrFailed() {
-        return _Casts.uncheckedCast(
-                repositoryService().allMatches(
-                    Query.named(commandLogEntryClass, CommandLogEntry.Nq.FIND_BY_REPLAY_STATE)
-                        .withParameter("replayState1", ReplayState.PENDING)
-                        .withParameter("replayState2", ReplayState.FAILED))
-        );
-    }
-    /**
-     * Command Replay feature: Cannot replay or retry.
-     */
-    @Override
-    public List<CommandLogEntry> findReplaySucceededOrExcluded() {
-        return _Casts.uncheckedCast(
-                repositoryService().allMatches(
-                    Query.named(commandLogEntryClass, CommandLogEntry.Nq.FIND_BY_REPLAY_STATE)
-                        .withParameter("replayState1", ReplayState.OK)
-                        .withParameter("replayState2", ReplayState.EXCLUDED))
-        );
-    }
 
     @Override
     public C saveForReplay(final CommandDto commandToReplay) {
@@ -428,23 +407,41 @@ private List<CommandLogEntry> findSince(
                 : commandJdos;
     }
 
-    public List<CommandLogEntry> findSinceAndCanBeExported(
-            final Timestamp timestamp) {
+    @Override
+    public List<CommandLogEntry> findSinceAndCanBeExported(final Timestamp since) {
 
-        return findSince(timestamp, Integer.MAX_VALUE).stream()
+        return findSince(since, Integer.MAX_VALUE).stream()
                 .filter(x -> x.getExecuteIn() == ExecuteIn.FOREGROUND)
                 .filter(x -> ReplayState.isExportable(x.getReplayState()))
                 .collect(Collectors.toList());
     }
 
-    public List<CommandLogEntry> findSinceAndHasBeenExported(
-            final Timestamp timestamp) {
+    @Override
+    public List<CommandLogEntry> findSinceAndHasBeenExported(final Timestamp since) {
 
-        return findSince(timestamp, Integer.MAX_VALUE).stream()
+        return findSince(since, Integer.MAX_VALUE).stream()
                 .filter(x -> ReplayState.isExported(x.getReplayState()))
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public List<CommandLogEntry> findSinceAndWithReplayPendingOrFailed(final Timestamp since) {
+
+        return findSince(since, Integer.MAX_VALUE).stream()
+                .filter(x -> ReplayState.isPendingOrFailed(x.getReplayState()))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * Command Replay feature: Cannot replay or retry.
+     */
+    @Override
+    public List<CommandLogEntry> findSinceAndWithReplayOkOrExcluded(final Timestamp since) {
+        return findSince(since, Integer.MAX_VALUE).stream()
+                .filter(x -> ReplayState.isOkOrExcluded(x.getReplayState()))
+                .collect(Collectors.toList());
+    }
+
     private RepositoryService repositoryService() {
         return repositoryServiceProvider.get();
     }
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/ReplayState.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/ReplayState.java
index 4ea8c715fb6..c00c25c0464 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/ReplayState.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/ReplayState.java
@@ -73,6 +73,10 @@ public static boolean isPendingOrFailed(final @Nullable ReplayState replayState)
         return replayState != null && replayState.isPendingOrFailed();
     }
 
+    public static boolean isOkOrExcluded(ReplayState replayState) {
+        return replayState == ReplayState.OK || replayState == ReplayState.FAILED;
+    }
+
     public static boolean isExported(final ReplayState replayState) {
         return replayState != null && replayState.isExported();
     }
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandExportManager.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandExportManager.java
index 1cf201eb3cb..168b0473e2b 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandExportManager.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandExportManager.java
@@ -162,7 +162,9 @@ private static Timestamp addSeconds(Timestamp since, int secondsToAdd) {
     // -- NOT YET EXPORTED
 
     @Collection
-    @CollectionLayout(describedAs = "Commands that can be exported")
+    @CollectionLayout(
+            describedAs = "Commands that can be exported"
+    )
     public List<ReplayableCommand> getNotYetExported() {
         return commandLogEntryRepository().findSinceAndCanBeExported(since).stream()
             .map(entry->new ReplayableCommand(
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandReplayManager.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandReplayManager.java
index 1086722dc2e..dfc74e02735 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandReplayManager.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/CommandReplayManager.java
@@ -48,7 +48,9 @@
 import org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntryRepository;
 import org.apache.causeway.schema.cmd.v2.CommandDto;
 
-import lombok.Getter;import static org.apache.causeway.extensions.commandlog.applib.dom.replay.TimestampMarshallUtil.fromString;
+import lombok.Getter;
+
+import static org.apache.causeway.extensions.commandlog.applib.dom.replay.TimestampMarshallUtil.fromString;
 
 @DomainObject(introspection = Introspection.ANNOTATION_REQUIRED)
 @DomainObjectLayout(cssClassFa = "solid circle-play")
@@ -187,7 +189,7 @@ public CommandReplayManager act(
             describedAs = "Imported Commands that can be either replayed (replayState=PENDING) or retried (when replayState=FAILED)"
     )
     public List<ReplayableCommand> getPendingOrFailed() {
-        return commandLogEntryRepository().findReplayPendingOrFailed().stream()
+        return commandLogEntryRepository().findSinceAndWithReplayPendingOrFailed(since).stream()
             .map(entry->new ReplayableCommand(
                     entry.getInteractionId(),
                     replayContext))
@@ -269,7 +271,7 @@ public class deleteSelectedPendingOrFailed {
         public class DomainEvent extends ActionDomainEvent<deleteSelectedPendingOrFailed> { }
         public CommandReplayManager act(final List<ReplayableCommand> selected) {
             selected.stream()
-                .forEach(ReplayableCommand::delete); // filtered on its own responsibility
+                .forEach(ReplayableCommand::deleteObj); // filtered on its own responsibility
             return CommandReplayManager.this;
         }
 
@@ -295,7 +297,7 @@ public String validateSelected(final List<ReplayableCommand> selected) {
                     + "or marked to be excluded from replay (replayState=EXCLUDE)"
     )
     public List<ReplayableCommand> getSucceededOrExcluded() {
-        return commandLogEntryRepository().findReplaySucceededOrExcluded().stream()
+        return commandLogEntryRepository().findSinceAndWithReplayOkOrExcluded(since).stream()
             .map(entry->new ReplayableCommand(
                     entry.getInteractionId(),
                     replayContext))
@@ -319,7 +321,7 @@ public class deleteSelectedSucceededOrExcluded {
         public class DomainEvent extends ActionDomainEvent<deleteSelectedSucceededOrExcluded> { }
         public CommandReplayManager act(final List<ReplayableCommand> selected) {
             selected.stream()
-                .forEach(ReplayableCommand::delete); // filtered on its own responsibility
+                .forEach(ReplayableCommand::deleteObj); // filtered on its own responsibility
             return CommandReplayManager.this;
         }
 
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java
index 7469af9060a..6c793a3b861 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.java
@@ -55,7 +55,6 @@
 import org.apache.causeway.commons.io.YamlUtils;
 import org.apache.causeway.extensions.commandlog.applib.CausewayModuleExtCommandLogApplib;
 import org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntry;
-import org.apache.causeway.extensions.commandlog.applib.dom.ExecuteIn;
 import org.apache.causeway.extensions.commandlog.applib.dom.ReplayState;
 import org.apache.causeway.schema.cmd.v2.CommandDto;
 import org.apache.causeway.schema.cmd.v2.MemberDto;
@@ -273,7 +272,7 @@ public AsciiDoc getDto() {
     )
     @ActionLayout(
             sequence = "0.2",
-            describedAs = "Opens the associated Command Log Entry"
+            describedAs = "Opens the underlying Command Log Entry"
     )
     public class openCommandLogEntry {
         public class DomainEvent extends ActionDomainEvent<openCommandLogEntry> { }
@@ -423,10 +422,11 @@ private String disableExcludeFromReplay() {
     public class delete {
         public class DomainEvent extends ActionDomainEvent<delete> { }
         @MemberSupport public void act() {
-            delete();
+            deleteObj();
         }
     }
-    void delete() {
+    @Programmatic
+    void deleteObj() {
         commandLogEntry()
                 .ifPresent(commandLogEntry->{
                     replayContext.repositoryService().remove(commandLogEntry);
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.layout.fallback.xml b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.layout.fallback.xml
index 4191657298a..331644bba1a 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.layout.fallback.xml
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand.layout.fallback.xml
@@ -12,9 +12,7 @@
                         <bs:col span="12">
                             <cpt:fieldSet name="Id" id="id">
                                 <cpt:action id="delete" position="PANEL"/>
-                                <cpt:property id="interactionId">
-                                    <cpt:action id="openCommandLogEntry"/>
-                                </cpt:property>
+                                <cpt:property id="interactionId"/>
                                 <cpt:property id="timestamp"/>
                             </cpt:fieldSet>
                         </bs:col>
@@ -49,7 +47,10 @@
             </cpt:fieldSet>
         </bs:col>
         <bs:col span="6">
-            <cpt:fieldSet name="Command Dto" id="dto"/>
+            <cpt:fieldSet name="Command Dto" id="dto">
+                <cpt:action id="openCommandLogEntry" position="PANEL"/>
+                <cpt:property id="dto"/>
+            </cpt:fieldSet>
         </bs:col>
     </bs:row>
     <bs:row>