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

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 49e5f5bffe ISIS-3267: adds T_recenBackgroundCommands (abstract) 
contributed collection
49e5f5bffe is described below

commit 49e5f5bffea2f207576d58a18039ffda2f681178
Author: Dan Haywood <[email protected]>
AuthorDate: Sun Nov 6 16:35:46 2022 +0000

    ISIS-3267: adds T_recenBackgroundCommands (abstract) contributed collection
---
 .../contributions/Object_recentCommands.java       |  1 -
 ...mmands.java => T_recentBackgroundCommands.java} | 61 ++++++++--------------
 .../commandlog/applib/dom/CommandLogEntry.java     | 43 +++++++--------
 .../applib/dom/CommandLogEntryRepository.java      |  9 ++++
 .../commandlog/jdo/dom/CommandLogEntry.java        |  7 +++
 .../commandlog/jpa/dom/CommandLogEntry.java        |  7 +++
 6 files changed, 68 insertions(+), 60 deletions(-)

diff --git 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/Object_recentCommands.java
 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/Object_recentCommands.java
index ea2049c68d..f58e4d6eda 100644
--- 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/Object_recentCommands.java
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/Object_recentCommands.java
@@ -79,5 +79,4 @@ public class Object_recentCommands {
 
     @Inject CommandLogEntryRepository<? extends CommandLogEntry> 
commandLogEntryRepository;
     @Inject BookmarkService bookmarkService;
-
 }
diff --git 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/Object_recentCommands.java
 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/T_recentBackgroundCommands.java
similarity index 53%
copy from 
extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/Object_recentCommands.java
copy to 
extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/T_recentBackgroundCommands.java
index ea2049c68d..1c196fc494 100644
--- 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/Object_recentCommands.java
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/contributions/T_recentBackgroundCommands.java
@@ -18,66 +18,51 @@
  */
 package org.apache.causeway.extensions.commandlog.applib.contributions;
 
+import lombok.RequiredArgsConstructor;
+
 import java.util.Collections;
 import java.util.List;
 
 import javax.inject.Inject;
 
 import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.Collection;
 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.layout.LayoutConstants;
-import org.apache.causeway.applib.mixins.system.HasInteractionId;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.applib.services.queryresultscache.QueryResultsCache;
 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;
 
-import lombok.RequiredArgsConstructor;
-
 /**
- * This mixin contributes a <tt>recentCommands</tt> action to any domain object
- * (unless also {@link HasInteractionId} - commands don't themselves have 
commands).
+ * This (abstract) mixin contributes a <tt>recentBackgroundCommands</tt> 
collection to any domain object.
+ *
+ * <p>
+ *     To surface this collection, create a trivial subclass for the target 
domain class.
+ * </p>
  *
  * @since 2.0 {@index}
  */
-@Action(
-        domainEvent = Object_recentCommands.ActionDomainEvent.class,
-        semantics = SemanticsOf.SAFE,
-        commandPublishing = Publishing.DISABLED,
-        executionPublishing = Publishing.DISABLED
-)
-@ActionLayout(
-        cssClassFa = "fa-bolt",
-        position = ActionLayout.Position.PANEL_DROPDOWN,
-        fieldSetId = LayoutConstants.FieldSetId.METADATA,
-        sequence = "900.1"
-)
+@Collection
 @RequiredArgsConstructor
-public class Object_recentCommands {
+public abstract class T_recentBackgroundCommands<T> {
 
-    public static class ActionDomainEvent
-            extends 
CausewayModuleExtCommandLogApplib.ActionDomainEvent<Object_recentCommands> { }
+    private final T domainObject;
 
-    private final Object domainObject;
-
-    @MemberSupport public List<? extends CommandLogEntry> act() {
+    public static class ActionDomainEvent extends 
CausewayModuleExtCommandLogApplib.ActionDomainEvent<T_recentBackgroundCommands> 
{ }
+    @Action(
+            domainEvent = ActionDomainEvent.class
+    )
+    @MemberSupport public List<? extends CommandLogEntry> coll() {
         return bookmarkService.bookmarkFor(domainObject)
-        .map(commandLogEntryRepository::findRecentByTargetOrResult)
-        .orElse(Collections.emptyList());
-    }
-
-    /**
-     * Hide if the mixee itself implements {@link HasInteractionId}.
-     * (commands don't have commands).
-     */
-    @MemberSupport public boolean hideAct() {
-        return (domainObject instanceof HasInteractionId);
+                .map(bookmark -> queryResultsCache.execute(
+                        () -> 
commandLogEntryRepository.findRecentBackgroundByTarget(bookmark),
+                                T_recentBackgroundCommands.class, 
"T_recentBackgroundCommands",
+                                bookmark))
+                .orElse(Collections.emptyList());
     }
 
     @Inject CommandLogEntryRepository<? extends CommandLogEntry> 
commandLogEntryRepository;
     @Inject BookmarkService bookmarkService;
-
+    @Inject QueryResultsCache queryResultsCache;
 }
diff --git 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java
 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java
index 3334144979..3c534d67ee 100644
--- 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java
@@ -103,24 +103,24 @@ implements Comparable<CommandLogEntry>, 
DomainChangeRecord, HasCommandDto {
 
     @UtilityClass
     public static class Nq {
-        public static final String FIND_BY_INTERACTION_ID = LOGICAL_TYPE_NAME 
+ ".findByInteractionId";
-        public static final String FIND_BY_PARENT_INTERACTION_ID = 
LOGICAL_TYPE_NAME + ".findByParentInteractionId";
-        public static final String FIND_CURRENT = LOGICAL_TYPE_NAME + 
".findCurrent";
-        public static final String FIND_COMPLETED = LOGICAL_TYPE_NAME + 
".findCompleted";
-        public static final String FIND_RECENT_BY_TARGET = LOGICAL_TYPE_NAME + 
".findRecentByTarget";
-        public static final String FIND_RECENT_BY_TARGET_OR_RESULT = 
LOGICAL_TYPE_NAME + ".findRecentByTargetOrResult";
+        public static final String FIND_BY_INTERACTION_ID               = 
LOGICAL_TYPE_NAME + ".findByInteractionId";
+        public static final String FIND_BY_PARENT_INTERACTION_ID        = 
LOGICAL_TYPE_NAME + ".findByParentInteractionId";
+        public static final String FIND_CURRENT                         = 
LOGICAL_TYPE_NAME + ".findCurrent";
+        public static final String FIND_COMPLETED                       = 
LOGICAL_TYPE_NAME + ".findCompleted";
+        public static final String FIND_RECENT_BY_TARGET                = 
LOGICAL_TYPE_NAME + ".findRecentByTarget";
+        public static final String FIND_RECENT_BY_TARGET_OR_RESULT      = 
LOGICAL_TYPE_NAME + ".findRecentByTargetOrResult";
         public static final String FIND_BY_TARGET_AND_TIMESTAMP_BETWEEN = 
LOGICAL_TYPE_NAME + ".findByTargetAndTimestampBetween";
-        public static final String FIND_BY_TARGET_AND_TIMESTAMP_AFTER = 
LOGICAL_TYPE_NAME + ".findByTargetAndTimestampAfter";
-        public static final String FIND_BY_TARGET_AND_TIMESTAMP_BEFORE = 
LOGICAL_TYPE_NAME + ".findByTargetAndTimestampBefore";
-        public static final String FIND_BY_TARGET = LOGICAL_TYPE_NAME + 
".findByTarget";
-        public static final String FIND_BY_TIMESTAMP_BETWEEN = 
LOGICAL_TYPE_NAME + ".findByTimestampBetween";
-        public static final String FIND_BY_TIMESTAMP_AFTER = LOGICAL_TYPE_NAME 
+ ".findByTimestampAfter";
-        public static final String FIND_BY_TIMESTAMP_BEFORE = 
LOGICAL_TYPE_NAME + ".findByTimestampBefore";
-        public static final String FIND = LOGICAL_TYPE_NAME + ".find";
-        public static final String FIND_MOST_RECENT = LOGICAL_TYPE_NAME + 
".findMostRecent";
-        public static final String FIND_RECENT_BY_USERNAME = LOGICAL_TYPE_NAME 
+ ".findRecentByUsername";
-        public static final String FIND_FIRST = LOGICAL_TYPE_NAME + 
".findFirst";
-        public static final String FIND_SINCE = LOGICAL_TYPE_NAME + 
".findSince";
+        public static final String FIND_BY_TARGET_AND_TIMESTAMP_AFTER   = 
LOGICAL_TYPE_NAME + ".findByTargetAndTimestampAfter";
+        public static final String FIND_BY_TARGET_AND_TIMESTAMP_BEFORE  = 
LOGICAL_TYPE_NAME + ".findByTargetAndTimestampBefore";
+        public static final String FIND_BY_TARGET                       = 
LOGICAL_TYPE_NAME + ".findByTarget";
+        public static final String FIND_BY_TIMESTAMP_BETWEEN            = 
LOGICAL_TYPE_NAME + ".findByTimestampBetween";
+        public static final String FIND_BY_TIMESTAMP_AFTER              = 
LOGICAL_TYPE_NAME + ".findByTimestampAfter";
+        public static final String FIND_BY_TIMESTAMP_BEFORE             = 
LOGICAL_TYPE_NAME + ".findByTimestampBefore";
+        public static final String FIND                                 = 
LOGICAL_TYPE_NAME + ".find";
+        public static final String FIND_MOST_RECENT                     = 
LOGICAL_TYPE_NAME + ".findMostRecent";
+        public static final String FIND_RECENT_BY_USERNAME              = 
LOGICAL_TYPE_NAME + ".findRecentByUsername";
+        public static final String FIND_FIRST                           = 
LOGICAL_TYPE_NAME + ".findFirst";
+        public static final String FIND_SINCE                           = 
LOGICAL_TYPE_NAME + ".findSince";
         /**
          * The most recent (replayed) command previously replicated from 
primary to secondary.
          *
@@ -128,14 +128,15 @@ implements Comparable<CommandLogEntry>, 
DomainChangeRecord, HasCommandDto {
          *     This should always exist except for the very first times (after 
restored the prod DB to secondary).
          * </p>
          */
-        public static final String FIND_MOST_RECENT_REPLAYED = 
LOGICAL_TYPE_NAME + ".findMostRecentReplayed";
+        public static final String FIND_MOST_RECENT_REPLAYED            = 
LOGICAL_TYPE_NAME + ".findMostRecentReplayed";
         /**
          * The most recent completed command, as queried on the secondary, 
corresponding to the last command run on
          * primary before the production database was restored to the 
secondary.
          */
-        public static final String FIND_MOST_RECENT_COMPLETED = 
LOGICAL_TYPE_NAME + ".findMostRecentCompleted";
-        public static final String FIND_BY_REPLAY_STATE = LOGICAL_TYPE_NAME + 
".findNotYetReplayed";
-        public static final String FIND_BACKGROUND_AND_NOT_YET_STARTED = 
"findBackgroundAndNotYetStarted";
+        public static final String FIND_MOST_RECENT_COMPLETED           = 
LOGICAL_TYPE_NAME + ".findMostRecentCompleted";
+        public static final String FIND_BY_REPLAY_STATE                 = 
LOGICAL_TYPE_NAME + ".findNotYetReplayed";
+        public static final String FIND_BACKGROUND_AND_NOT_YET_STARTED  = 
LOGICAL_TYPE_NAME + ".findBackgroundAndNotYetStarted";
+        public static final String FIND_RECENT_BACKGROUND_BY_TARGET     = 
LOGICAL_TYPE_NAME + ".findRecentBackgroundByTarget";
     }
 
 
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 d8a8267221..0e68f49084 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
@@ -281,6 +281,15 @@ public abstract class CommandLogEntryRepository<C extends 
CommandLogEntry> {
                 Query.named(commandLogEntryClass, 
CommandLogEntry.Nq.FIND_BACKGROUND_AND_NOT_YET_STARTED));
     }
 
+    public List<C> findRecentBackgroundByTarget(Bookmark target) {
+        return repositoryService().allMatches(
+                Query.named(commandLogEntryClass, 
CommandLogEntry.Nq.FIND_RECENT_BACKGROUND_BY_TARGET)
+                        .withParameter("target", target)
+                        .withLimit(30L)
+        );
+    }
+
+
     /**
      * The most recent replayed command previously replicated from primary to
      * secondary.
diff --git 
a/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java
 
b/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java
index 8181966c5f..04a0b51f2e 100644
--- 
a/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java
+++ 
b/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java
@@ -180,6 +180,13 @@ import lombok.Setter;
                   + " WHERE executeIn == 'BACKGROUND' "
                   + "    && startedAt == null "
                   + " ORDER BY timestamp ASC "),
+    @Query(
+            name  = Nq.FIND_RECENT_BACKGROUND_BY_TARGET,
+            value = "SELECT "
+                    + "  FROM " + CommandLogEntry.FQCN + " "
+                    + " WHERE executeIn == 'BACKGROUND' "
+                    + "    && target    == :target "
+                    + " ORDER BY timestamp DESC"),
     @Query(
             name  = Nq.FIND_MOST_RECENT_REPLAYED,
             value = "SELECT "
diff --git 
a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java
 
b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java
index dc7cb0dd08..641c55632f 100644
--- 
a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java
+++ 
b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java
@@ -174,6 +174,13 @@ import org.apache.causeway.schema.cmd.v2.CommandDto;
                   + " WHERE cl.executeIn = 
org.apache.causeway.extensions.commandlog.applib.dom.ExecuteIn.BACKGROUND "
                   + "   AND cl.startedAt is null "
                   + " ORDER BY cl.timestamp ASC"),
+        @NamedQuery(
+            name  = Nq.FIND_RECENT_BACKGROUND_BY_TARGET,
+            query = "SELECT cl "
+                  + "  FROM CommandLogEntry cl "
+                  + " WHERE cl.executeIn = 
org.apache.causeway.extensions.commandlog.applib.dom.ExecuteIn.BACKGROUND "
+                  + "   AND cl.target    = :target "
+                  + " ORDER BY cl.timestamp DESC"),
     @NamedQuery(
             name  = Nq.FIND_MOST_RECENT_REPLAYED,
             query = "SELECT cl "

Reply via email to