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; + +}
