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

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

commit d4792183740535c51d5fc61057352cb3b5bc72f4
Author: Dan Haywood <[email protected]>
AuthorDate: Thu Jul 2 14:01:18 2026 +0100

    CAUSEWAY-4042 : minor polishing
---
 .../applib/CausewayModuleExtCommandLogApplib.java  |  9 ++-
 .../applib/dom/replay/ReplayableCommand.java       | 28 +--------
 .../dom/replay/ReplayableCommand_exportTR.java     | 73 ++++++++++++++++++++++
 .../dom/replay/ReplayableCommand_openTarget.java   | 45 +++++++++++++
 .../dom/replay/ReplayableCommand_openTargetTR.java | 54 ++++++++++++++++
 5 files changed, 180 insertions(+), 29 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 471df5183c3..dd53a320485 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
@@ -30,7 +30,6 @@
 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;
 import 
org.apache.causeway.extensions.commandlog.applib.contributions.HasInteractionId_commandLogEntry;
@@ -59,10 +58,12 @@
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.CommandManager_importCommands;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.CommandManager_replayOrRetryMultiple;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayContext;
-import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_delete;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_exclude;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_export;
+import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_exportTR;
+import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_openTarget;
+import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_openTargetTR;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_unexclude;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_next;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommand_openCommandLogEntry;
@@ -99,7 +100,8 @@
         CommandLogEntry_openResultObject.class,
         CommandLogEntry_siblingCommands.class,
         CommandReplayResultMapping_delete.class,
-        ReplayableCommand.openTarget.class,
+        ReplayableCommand_openTarget.class,
+        ReplayableCommand_openTargetTR.class,
         ReplayableCommand_unexclude.class,
         ReplayableCommand_openCommandLogEntry.class,
         ReplayableCommand_replayOrRetry.class,
@@ -107,6 +109,7 @@
         ReplayableCommand_next.class,
         ReplayableCommand_exclude.class,
         ReplayableCommand_export.class,
+        ReplayableCommand_exportTR.class,
         ReplayableCommand_delete.class,
         HasBaseline_changeBaseline.class,
         HasBaseline_previousHour.class,
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 3584bbcbd56..41ecdb30a08 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
@@ -53,7 +53,7 @@
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import 
org.apache.causeway.applib.services.command.CommandExecutorService.InteractionContextPolicy;
 import org.apache.causeway.applib.services.command.CommandRecordingSuppressed;
-import 
org.apache.causeway.applib.services.queryresultscache.QueryResultsCacheControl;
+import org.apache.causeway.applib.services.message.MessageService;
 import org.apache.causeway.applib.services.wrapper.DisabledException;
 import org.apache.causeway.applib.services.wrapper.HiddenException;
 import org.apache.causeway.applib.services.wrapper.InvalidException;
@@ -72,7 +72,6 @@
 import org.apache.causeway.schema.cmd.v2.ActionDto;
 import org.apache.causeway.schema.cmd.v2.CommandDto;
 import org.apache.causeway.schema.cmd.v2.MemberDto;
-import org.apache.causeway.schema.common.v2.OidsDto;
 import org.apache.causeway.schema.common.v2.ValueType;
 import 
org.apache.causeway.extensions.commandlog.applib.dom.replay.ReplayableCommandParticipant.Role;
 import org.apache.causeway.valuetypes.asciidoc.applib.value.AsciiDoc;
@@ -269,29 +268,6 @@ public String getTargetAbbreviated() {
                 .orElse(null);
     }
 
-    @Action(semantics = SemanticsOf.SAFE)
-    @ActionLayout(
-            associateWith = "target",
-            position = ActionLayout.Position.PANEL
-    )
-    public class openTarget {
-
-        @MemberSupport public Object act() {
-            return targetIfAny().orElse(null);
-        }
-
-        @MemberSupport public String disableAct() {
-            return targetIfAny().isEmpty() ? null : "Cannot access target";
-        }
-
-        private @NonNull Optional<Object> targetIfAny() {
-            return targetBookmarkIfAny()
-                    .flatMap(Bookmark::parse)
-                    .flatMap(bookmark -> bookmarkService.lookup(bookmark));
-        }
-        @Inject BookmarkService bookmarkService;
-    }
-
     @Property
     @PropertyLayout(
             sequence = "2.3",
@@ -368,7 +344,7 @@ public String getReplayStateFailureReason() {
         return x.length() > abbreviateIfLongerThan ? x.substring(0, 
abbreviateIfLongerThan) + "..." : x;
     }
 
-    private @NonNull Optional<String> targetBookmarkIfAny() {
+    @NonNull Optional<String> targetBookmarkIfAny() {
         return commandRecord()
                 .map(CommandRecord::target)
                 .map(Bookmark::stringify);
diff --git 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_exportTR.java
 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_exportTR.java
new file mode 100644
index 00000000000..c4b883df2d5
--- /dev/null
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_exportTR.java
@@ -0,0 +1,73 @@
+package org.apache.causeway.extensions.commandlog.applib.dom.replay;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.MemberSupport;
+import org.apache.causeway.applib.annotation.ParameterLayout;
+import org.apache.causeway.applib.annotation.Publishing;
+import org.apache.causeway.applib.annotation.SemanticsOf;
+import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.services.factory.FactoryService;
+import org.apache.causeway.applib.value.Clob;
+
+import lombok.RequiredArgsConstructor;
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        commandPublishing = Publishing.DISABLED,
+        domainEvent = ReplayableCommand_export.DomainEvent.class,
+        executionPublishing = Publishing.DISABLED
+)
+@ActionLayout(
+        named = "Export",
+        cssClassFa = "solid share-from-square",
+        cssClass = "btn-primary",
+        describedAs = "Exports the commands, optionally applying result 
remappings.",
+        hidden = Where.OBJECT_FORMS
+)
+@RequiredArgsConstructor
+public class ReplayableCommand_exportTR {
+
+    public static class DomainEvent extends 
ReplayableCommand.ActionDomainEvent<ReplayableCommand_export> {
+    }
+
+    private final ReplayableCommand replayableCommand;
+
+    @MemberSupport
+    public Clob act(
+            @ParameterLayout(describedAs = "File name for the exported file.") 
final String filenamePrefix,
+            @ParameterLayout(describedAs = "Whether to add a timestamp suffix 
to the exported file's name.") final boolean filenameTimestamp,
+            @ParameterLayout(describedAs = "Whether to remap recording results 
with actuals.") final boolean remapResults) {
+
+        return mixin().act(filenamePrefix, filenameTimestamp, remapResults);
+    }
+
+    @MemberSupport
+    public String disableAct() {
+        return mixin().disableAct();
+    }
+
+    @MemberSupport
+    public String defaultFilenamePrefix() {
+        return mixin().defaultFilenamePrefix();
+    }
+
+    @MemberSupport
+    public boolean defaultFilenameTimestamp() {
+        return mixin().defaultFilenameTimestamp();
+    }
+
+    @MemberSupport
+    public boolean defaultRemapResults() {
+        return mixin().defaultRemapResults();
+    }
+
+    private ReplayableCommand_export mixin() {
+        return factoryService.mixin(ReplayableCommand_export.class, 
replayableCommand);
+    }
+
+    @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..6ce5831385b
--- /dev/null
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_openTarget.java
@@ -0,0 +1,45 @@
+package org.apache.causeway.extensions.commandlog.applib.dom.replay;
+
+import lombok.RequiredArgsConstructor;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.MemberSupport;
+import org.apache.causeway.applib.annotation.SemanticsOf;
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.applib.services.message.MessageService;
+
+@Action(semantics = SemanticsOf.SAFE)
+@ActionLayout(
+        associateWith = "target",
+        position = ActionLayout.Position.PANEL
+)
+@RequiredArgsConstructor
+public class ReplayableCommand_openTarget {
+
+    private final ReplayableCommand replayableCommand;
+
+    @MemberSupport
+    public Object act() {
+        final var bookmarkIfAny = 
replayableCommand.targetBookmarkIfAny().flatMap(Bookmark::parse);
+        if (bookmarkIfAny.isPresent()) {
+            final var targetIfAny = 
bookmarkService.lookup(bookmarkIfAny.get());
+            if (targetIfAny.isPresent()) {
+                return targetIfAny.get();
+            }
+        }
+        messageService.informUser(String.format("Unable to open target '%s'", 
replayableCommand.targetBookmarkIfAny().orElse(null)));
+        return null;
+    }
+
+    @MemberSupport
+    public String disableAct() {
+        return replayableCommand.targetBookmarkIfAny().isEmpty() ? null : "No 
target bookmark";
+    }
+
+    @Inject BookmarkService bookmarkService;
+    @Inject MessageService messageService;
+}
diff --git 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_openTargetTR.java
 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_openTargetTR.java
new file mode 100644
index 00000000000..0682cd63486
--- /dev/null
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/replay/ReplayableCommand_openTargetTR.java
@@ -0,0 +1,54 @@
+package org.apache.causeway.extensions.commandlog.applib.dom.replay;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.MemberSupport;
+import org.apache.causeway.applib.annotation.Publishing;
+import org.apache.causeway.applib.annotation.SemanticsOf;
+import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.services.factory.FactoryService;
+
+import lombok.RequiredArgsConstructor;
+
+@Action(
+        semantics = SemanticsOf.IDEMPOTENT,
+        commandPublishing = Publishing.DISABLED,
+        domainEvent = ReplayableCommand_export.DomainEvent.class,
+        executionPublishing = Publishing.DISABLED
+)
+@ActionLayout(
+        named = "Open Target",
+        hidden = Where.OBJECT_FORMS
+)
+@RequiredArgsConstructor
+public class ReplayableCommand_openTargetTR {
+
+    public static class DomainEvent extends 
ReplayableCommand.ActionDomainEvent<ReplayableCommand_export> {
+    }
+
+    private final ReplayableCommand replayableCommand;
+
+    @MemberSupport
+    public Object act(boolean areYouSure) {
+        return mixin().act();
+    }
+
+    @MemberSupport
+    public boolean defaultAreYouSure() {
+        return true;
+    }
+
+    @MemberSupport
+    public String disableAct() {
+        return mixin().disableAct();
+    }
+
+    private ReplayableCommand_openTarget mixin() {
+        return factoryService.mixin(ReplayableCommand_openTarget.class, 
replayableCommand);
+    }
+
+    @Inject private FactoryService factoryService;
+
+}

Reply via email to