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/05/22 06:20:51 UTC
(causeway) 01/01: CAUSEWAY-3998 : minor polishing for replay manager
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch 3998-v2
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 830d2a293a99e7808aa35268ef4f200d757b0456
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Thu May 21 19:28:48 2026 +0100
CAUSEWAY-3998 : minor polishing for replay manager
---
.../commandlog/applib/app/CommandLogMenu.java | 18 ++++---
.../dom/replay/ReplayableCommand_openTarget.java | 60 ++++++++++++++++++++++
2 files changed, 72 insertions(+), 6 deletions(-)
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java
index 1d973590406..507775f194b 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/app/CommandLogMenu.java
@@ -32,12 +32,15 @@
import org.apache.causeway.applib.annotation.DomainService;
import org.apache.causeway.applib.annotation.DomainServiceLayout;
import org.apache.causeway.applib.annotation.MemberSupport;
+import org.apache.causeway.applib.annotation.Parameter;
import org.apache.causeway.applib.annotation.ParameterLayout;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
import org.apache.causeway.applib.annotation.Publishing;
import org.apache.causeway.applib.annotation.RestrictTo;
import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.services.clock.ClockService;
+import org.apache.causeway.applib.services.factory.FactoryService;
+import org.apache.causeway.applib.value.Blob;
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.CommandLogEntryRepository;
@@ -189,15 +192,16 @@ public class replayManager {
public class DomainEvent extends ActionDomainEvent<replayManager> { }
@MemberSupport public CommandReplayManager act(
- @ParameterLayout(describedAs = "Limits the commands shown; only commands since this timestamp are available for replay. Set to a time immediately before the commands to be replayed.")
- final java.sql.Timestamp since
+ @Parameter(fileAccept = ".yml,.yaml")
+ final Blob commandsYaml
) {
- return new CommandReplayManager(since, replayContext);
+ final var now = clockService.getClock().nowAsJavaSqlTimestamp();
+ final var commandReplayManager = new CommandReplayManager(now, replayContext);
+ return importCommands(commandReplayManager).act(commandsYaml, true);
}
- @MemberSupport public java.sql.Timestamp defaultSince() {
- final var now = clockService.getClock().nowAsJavaSqlTimestamp();
- return truncatedTo(now, ChronoUnit.HOURS);
+ private CommandReplayManager.importCommands importCommands(CommandReplayManager commandReplayManager) {
+ return factoryService.mixin(CommandReplayManager.importCommands.class, commandReplayManager);
}
}
@@ -208,4 +212,6 @@ public class DomainEvent extends ActionDomainEvent<replayManager> { }
private LocalDate now() {
return clockService.getClock().nowAsLocalDate(ZoneId.systemDefault());
}
+
+ @Inject private FactoryService factoryService;
}
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_openTarget.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_openTarget.java
new file mode 100644
index 00000000000..c538a8cbaf4
--- /dev/null
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_openTarget.java
@@ -0,0 +1,60 @@
+/*
+ * 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.causeway.extensions.commandlog.applib.dom.replay;
+
+import lombok.RequiredArgsConstructor;
+
+import org.apache.causeway.applib.annotation.*;
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntry;
+
+@Action(
+ semantics = SemanticsOf.SAFE,
+ commandPublishing = Publishing.DISABLED,
+ domainEvent = ReplayableCommand_openTarget.DomainEvent.class,
+ executionPublishing = Publishing.DISABLED
+)
+@ActionLayout(
+ sequence = "0.3", associateWith = "target",
+ describedAs = "Opens the underlying Target"
+)
+@RequiredArgsConstructor
+public class ReplayableCommand_openTarget {
+
+ public static class DomainEvent extends ReplayableCommand.ActionDomainEvent<ReplayableCommand_openTarget> {
+ }
+
+ private final ReplayableCommand replayableCommand;
+
+ @MemberSupport
+ public Object act() {
+ return replayableCommand.commandLogEntry()
+ .map(CommandLogEntry::getTarget)
+ .flatMap(bookmark -> bookmarkService.lookup(bookmark))
+ .orElse(null);
+ }
+
+ @MemberSupport
+ public String disableAct() {
+ return replayableCommand.commandLogEntry().isEmpty() ? "No corresponding CommandLogEntry" : null;
+ }
+
+ private BookmarkService bookmarkService;
+}