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>