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 "