You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/02/17 07:25:34 UTC

[causeway] branch CAUSEWAY-3362 created (now 5bd0c9f9a9)

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

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


      at 5bd0c9f9a9 CAUSEWAY-3362: adds queries for AuditTrailEntry, by username

This branch includes the following new commits:

     new 5bd0c9f9a9 CAUSEWAY-3362: adds queries for AuditTrailEntry, by username

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[causeway] 01/01: CAUSEWAY-3362: adds queries for AuditTrailEntry, by username

Posted by da...@apache.org.
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 <da...@haywood-associates.co.uk>
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)