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

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

commit 5bd0c9f9a93151cfa14e9b09265b1e1f553a3ac8
Author: danhaywood <[email protected]>
AuthorDate: Fri Feb 17 07:25:27 2023 +0000

    CAUSEWAY-3362: adds queries for AuditTrailEntry, by username
---
 .../audittrail/applib/dom/AuditTrailEntry.java     |  9 +++
 .../applib/dom/AuditTrailEntryRepository.java      | 81 +++++++++++++++++++++-
 .../audittrail/jdo/dom/AuditTrailEntry.java        | 69 +++++++++++++++++-
 .../audittrail/jpa/dom/AuditTrailEntry.java        | 68 +++++++++++++++++-
 4 files changed, 224 insertions(+), 3 deletions(-)

diff --git 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntry.java
 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntry.java
index 8bf817eafc..fd04a01568 100644
--- 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntry.java
+++ 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntry.java
@@ -86,6 +86,15 @@ public abstract class AuditTrailEntry implements 
DomainChangeRecord, Comparable<
         public static final String FIND_BY_TIMESTAMP_BEFORE = 
"findByTimestampBefore";
         public static final String FIND = "find";
         public static final String FIND_MOST_RECENT = LOGICAL_TYPE_NAME + 
".findMostRecent";
+        public static final String FIND_BY_USERNAME_AND_TIMESTAMP_BETWEEN = 
"findByUsernameAndTimestampBetween";
+        public static final String FIND_BY_USERNAME_AND_TIMESTAMP_AFTER = 
"findByUsernameAndTimestampAfter";
+        public static final String FIND_BY_USERNAME_AND_TIMESTAMP_BEFORE = 
"findByUsernameAndTimestampBefore";
+        public static final String FIND_BY_USERNAME = "findByUsername";
+        public static final String 
FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BETWEEN = 
"findByUsernameAndTargetAndTimestampBetween";
+        public static final String 
FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_AFTER = 
"findByUsernameAndTargetAndTimestampAfter";
+        public static final String 
FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BEFORE = 
"findByUsernameAndTargetAndTimestampBefore";
+        public static final String FIND_BY_USERNAME_AND_TARGET = 
"findByUsernameAndTarget";
+        public static final String FIND_RECENT_BY_USERNAME = LOGICAL_TYPE_NAME 
+ ".findRecentByUsername";
     }
 
     // -- UI & DOMAIN EVENTS
diff --git 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
index af20723c32..a1bd645a5a 100644
--- 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
+++ 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
@@ -115,7 +115,6 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
                         .withParameter("to", toTs);
             } else {
                 query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_TARGET_AND_TIMESTAMP_AFTER)
-                        .withParameter("target", target)
                         .withParameter("target", target)
                         .withParameter("from", fromTs);
             }
@@ -176,6 +175,86 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
                 Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_MOST_RECENT).withLimit(limit));
     }
 
+    public List<E> findByUsernameAndFromAndTo(
+            final String username,
+            final LocalDate from,
+            final LocalDate to) {
+        val fromTs = toTimestampStartOfDayWithOffset(from, 0);
+        val toTs = toTimestampStartOfDayWithOffset(to, 1);
+
+        final Query<E> query;
+        if(from != null) {
+            if(to != null) {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME_AND_TIMESTAMP_BETWEEN)
+                        .withParameter("username", username)
+                        .withParameter("from", fromTs)
+                        .withParameter("to", toTs);
+            } else {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME_AND_TIMESTAMP_AFTER)
+                        .withParameter("username", username)
+                        .withParameter("from", fromTs);
+            }
+        } else {
+            if(to != null) {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME_AND_TIMESTAMP_BEFORE)
+                        .withParameter("username", username)
+                        .withParameter("to", toTs);
+            } else {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME)
+                        .withParameter("username", username)
+                ;
+            }
+        }
+        return repositoryService.allMatches(query);
+    }
+
+    public List<E> findByUsernameAndTargetAndFromAndTo(
+            final String username,
+            final Bookmark target,
+            final LocalDate from,
+            final LocalDate to) {
+        val fromTs = toTimestampStartOfDayWithOffset(from, 0);
+        val toTs = toTimestampStartOfDayWithOffset(to, 1);
+
+        final Query<E> query;
+        if(from != null) {
+            if(to != null) {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BETWEEN)
+                        .withParameter("username", username)
+                        .withParameter("target", target)
+                        .withParameter("from", fromTs)
+                        .withParameter("to", toTs);
+            } else {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_AFTER)
+                        .withParameter("username", username)
+                        .withParameter("target", target)
+                        .withParameter("from", fromTs);
+            }
+        } else {
+            if(to != null) {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BEFORE)
+                        .withParameter("username", username)
+                        .withParameter("target", target)
+                        .withParameter("to", toTs);
+            } else {
+                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_USERNAME_AND_TARGET)
+                        .withParameter("username", username)
+                        .withParameter("target", target)
+                ;
+            }
+        }
+        return repositoryService.allMatches(query);
+    }
+
+
+    public List<E> findRecentByUsername(final String username) {
+        return repositoryService.allMatches(
+                Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_RECENT_BY_USERNAME)
+                        .withParameter("username", username)
+                        .withLimit(100)
+        );
+    }
+
 
 
     /**
diff --git 
a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntry.java
 
b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntry.java
index adc67fdf9d..2455458546 100644
--- 
a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntry.java
+++ 
b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntry.java
@@ -141,7 +141,74 @@ import lombok.Setter;
                   + " WHERE target == :target "
                   + "    && propertyId == :propertyId "
                   + " ORDER BY timestamp DESC "
-                  + " RANGE 0,30")
+                  + " RANGE 0,30"),
+    @Query(
+            name = Nq.FIND_BY_USERNAME_AND_TIMESTAMP_BETWEEN,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + "    && timestamp >= :from "
+                    + "    && timestamp <= :to "
+                    + "ORDER BY timestamp DESC"),
+    @Query(
+            name = Nq.FIND_BY_USERNAME_AND_TIMESTAMP_AFTER,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + "    && timestamp >= :from "
+                    + " ORDER BY timestamp DESC"),
+    @Query(
+            name  = Nq.FIND_BY_USERNAME_AND_TIMESTAMP_BEFORE,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + "    && timestamp <= :to "
+                    + " ORDER BY timestamp DESC"),
+    @Query(
+            name  = Nq.FIND_BY_USERNAME,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + " ORDER BY timestamp DESC"),
+    @Query(
+            name = Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BETWEEN,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + "    && target == :target "
+                    + "    && timestamp >= :from "
+                    + "    && timestamp <= :to "
+                    + "ORDER BY timestamp DESC"),
+    @Query(
+            name = Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_AFTER,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + "    && target == :target "
+                    + "    && timestamp >= :from "
+                    + " ORDER BY timestamp DESC"),
+    @Query(
+            name  = Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BEFORE,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + "    && target == :target "
+                    + "    && timestamp <= :to "
+                    + " ORDER BY timestamp DESC"),
+    @Query(
+            name  = Nq.FIND_BY_USERNAME_AND_TARGET,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + "    && target == :target "
+                    + " ORDER BY timestamp DESC"),
+    @Query(
+            name = Nq.FIND_RECENT_BY_USERNAME,
+            value = "SELECT "
+                    + "  FROM " + AuditTrailEntry.FQCN + " "
+                    + " WHERE username == :username "
+                    + " ORDER BY timestamp DESC "
+                    + " RANGE 0,100")
 })
 @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
diff --git 
a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntry.java
 
b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntry.java
index 7bcd31d3b2..ebaf39729c 100644
--- 
a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntry.java
+++ 
b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntry.java
@@ -138,7 +138,73 @@ import 
org.apache.causeway.persistence.jpa.integration.typeconverters.java.util.
                   + "  FROM AuditTrailEntry e "
                   + " WHERE e.target = :target "
                   + "   AND e.propertyId = :propertyId "
-                  + " ORDER BY e.timestamp DESC ") // programmatic limit 0,30
+                  + " ORDER BY e.timestamp DESC "), // programmatic limit 0,30
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME_AND_TIMESTAMP_BETWEEN,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + "   AND e.timestamp >= :from "
+                    + "   AND e.timestamp <= :to "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME_AND_TIMESTAMP_AFTER,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + "   AND e.timestamp >= :from "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME_AND_TIMESTAMP_BEFORE,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + "   AND e.timestamp <= :to "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BETWEEN,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + "   AND e.target = :target "
+                    + "   AND e.timestamp >= :from "
+                    + "   AND e.timestamp <= :to "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_AFTER,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + "   AND e.target = :target "
+                    + "   AND e.timestamp >= :from "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME_AND_TARGET_AND_TIMESTAMP_BEFORE,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + "   AND e.target = :target "
+                    + "   AND e.timestamp >= :from "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_BY_USERNAME_AND_TARGET,
+            query = "SELECT e "
+                    + "  FROM AuditTrailEntry e "
+                    + " WHERE e.username = :username "
+                    + "   AND e.target = :target "
+                    + " ORDER BY e.timestamp DESC"),
+    @NamedQuery(
+            name = Nq.FIND_RECENT_BY_USERNAME,
+            query = "SELECT e "
+                  + "  FROM AuditTrailEntry e "
+                  + " WHERE e.username = :username "
+                  + " ORDER BY e.timestamp DESC ") // programmatic limit 0,100
 })
 @EntityListeners(CausewayEntityListener.class)
 @XmlJavaTypeAdapter(PersistentEntityAdapter.class)

Reply via email to