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

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

commit 83cf9062026ac1319f3dc7973a7e7be9f304985e
Author: danhaywood <[email protected]>
AuthorDate: Wed Jan 3 23:32:27 2024 +0000

    CAUSEWAY-3390: makes design of AuditTrailEntryRepository consistent with ...
    
    ... secman's ApplicationUserRepository
---
 .../audittrail/applib/app/AuditTrailMenu.java      |   4 +-
 .../HasInteractionId_auditTrailEntries.java        |   5 +-
 .../Object_recentAuditTrailEntries.java            |   5 +-
 .../applib/dom/AuditTrailEntryRepository.java      | 224 ++-------------------
 ...java => AuditTrailEntryRepositoryAbstract.java} |  80 +++++---
 ...ntityPropertyChangeSubscriberForAuditTrail.java |   4 +-
 .../integtests/AuditTrail_IntegTestAbstract.java   |   5 +-
 .../jdo/dom/AuditTrailEntryRepository.java         |   4 +-
 .../jpa/dom/AuditTrailEntryRepository.java         |   3 +-
 .../dom/ApplicationUserRepositoryAbstract.java     |   2 +
 10 files changed, 89 insertions(+), 247 deletions(-)

diff --git 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
index 3c655e0aa6..f1f7727f1c 100644
--- 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
+++ 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/app/AuditTrailMenu.java
@@ -41,7 +41,7 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
 import org.apache.causeway.applib.services.clock.ClockService;
 import 
org.apache.causeway.extensions.audittrail.applib.CausewayModuleExtAuditTrailApplib;
 import org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntry;
-import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
+import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepositoryAbstract;
 
 import lombok.RequiredArgsConstructor;
 
@@ -68,7 +68,7 @@ public class AuditTrailMenu {
             extends CausewayModuleExtAuditTrailApplib.ActionDomainEvent<T> { }
 
 
-    final AuditTrailEntryRepository<? extends AuditTrailEntry> 
auditTrailEntryRepository;
+    final AuditTrailEntryRepositoryAbstract<? extends AuditTrailEntry> 
auditTrailEntryRepository;
     final ClockService clockService;
 
 
diff --git 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
index 0b7a141fcc..8f967e748b 100644
--- 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
+++ 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.java
@@ -28,7 +28,7 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 import org.apache.causeway.applib.mixins.system.HasInteractionId;
 import 
org.apache.causeway.extensions.audittrail.applib.CausewayModuleExtAuditTrailApplib;
 import org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntry;
-import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
+import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepositoryAbstract;
 
 import lombok.RequiredArgsConstructor;
 
@@ -51,6 +51,7 @@ public class HasInteractionId_auditTrailEntries {
         return 
auditTrailEntryRepository.findByInteractionId(hasInteractionId.getInteractionId());
     }
 
-    @Inject AuditTrailEntryRepository<? extends AuditTrailEntry> 
auditTrailEntryRepository;
+    @Inject
+    AuditTrailEntryRepositoryAbstract<? extends AuditTrailEntry> 
auditTrailEntryRepository;
 
 }
diff --git 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
index ff5e899297..57bf241a2a 100644
--- 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
+++ 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/contributions/Object_recentAuditTrailEntries.java
@@ -38,7 +38,7 @@ import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.applib.services.metamodel.MetaModelService;
 import 
org.apache.causeway.extensions.audittrail.applib.CausewayModuleExtAuditTrailApplib;
 import org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntry;
-import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
+import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepositoryAbstract;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -93,6 +93,7 @@ public class Object_recentAuditTrailEntries {
 
     @Inject MetaModelService metaModelService;
     @Inject ApplicationFeatureRepository applicationFeatureRepository;
-    @Inject AuditTrailEntryRepository<? extends AuditTrailEntry> 
auditTrailEntryRepository;
+    @Inject
+    AuditTrailEntryRepositoryAbstract<? extends AuditTrailEntry> 
auditTrailEntryRepository;
     @Inject BookmarkService bookmarkService;
 }
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 a1bd645a5a..b1cb1e62af 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
@@ -44,240 +44,56 @@ import lombok.val;
  *
  * @since 2.0 {@index}
  */
-@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
-public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
+public interface AuditTrailEntryRepository {
 
 
-    private final Class<E> auditTrailEntryClass;
+    AuditTrailEntry createFor(final EntityPropertyChange change);
 
-    @Inject RepositoryService repositoryService;
-    @Inject FactoryService factoryService;
-    @Inject CausewaySystemEnvironment causewaySystemEnvironment;
+    Optional<AuditTrailEntry> findFirstByTarget(final Bookmark target);
 
-    public Class<E> getEntityClass() {
-        return auditTrailEntryClass;
-    }
+    List<AuditTrailEntry> findRecentByTarget(final Bookmark target);
 
-    public AuditTrailEntry createFor(final EntityPropertyChange change) {
-        E entry = factoryService.detachedEntity(auditTrailEntryClass);
-        entry.init(change);
-        return repositoryService.persistAndFlush(entry);
-    }
-
-    public Optional<E> findFirstByTarget(final Bookmark target) {
-        return repositoryService.firstMatch(
-                Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_FIRST_BY_TARGET)
-                        .withParameter("target", target)
-                        .withLimit(2)
-        );
-    }
-
-    public List<E> findRecentByTarget(final Bookmark target) {
-        return repositoryService.allMatches(
-                Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_RECENT_BY_TARGET)
-                        .withParameter("target", target)
-                        .withLimit(100)
-        );
-    }
-
-    public List<E> findRecentByTargetAndPropertyId(
+    List<AuditTrailEntry> findRecentByTargetAndPropertyId(
             final Bookmark target,
-            final String propertyId) {
-        final String targetStr = target.toString();
-        return repositoryService.allMatches(
-                Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_RECENT_BY_TARGET_AND_PROPERTY_ID)
-                        .withParameter("target", target)
-                        .withParameter("propertyId", propertyId)
-                        .withLimit(30)
-        );
-    }
+            final String propertyId);
 
-    public List<E> findByInteractionId(final UUID interactionId) {
-        return repositoryService.allMatches(
-                Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_INTERACTION_ID)
-                        .withParameter("interactionId", interactionId)
-        );
-    }
+    List<AuditTrailEntry> findByInteractionId(final UUID interactionId);
 
-    public List<E> findByTargetAndFromAndTo(
+    List<AuditTrailEntry> findByTargetAndFromAndTo(
             final Bookmark target,
             final LocalDate from,
-            final LocalDate to) {
-        val fromTs = toTimestampStartOfDayWithOffset(from, 0);
-        val toTs = toTimestampStartOfDayWithOffset(to, 1);
+            final LocalDate to);
 
-        final Query<E> query;
-        if(from != null) {
-            if(to != null) {
-                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_TARGET_AND_TIMESTAMP_BETWEEN)
-                        .withParameter("target", target)
-                        .withParameter("from", fromTs)
-                        .withParameter("to", toTs);
-            } else {
-                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_TARGET_AND_TIMESTAMP_AFTER)
-                        .withParameter("target", target)
-                        .withParameter("from", fromTs);
-            }
-        } else {
-            if(to != null) {
-                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_TARGET_AND_TIMESTAMP_BEFORE)
-                        .withParameter("target", target)
-                        .withParameter("to", toTs);
-            } else {
-                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_TARGET)
-                        .withParameter("target", target)
-                ;
-            }
-        }
-        return repositoryService.allMatches(query);
-    }
-
-    public List<E> findByFromAndTo(
+    List<AuditTrailEntry> findByFromAndTo(
             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_TIMESTAMP_BETWEEN)
-                        .withParameter("from", fromTs)
-                        .withParameter("to", toTs);
-            } else {
-                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_TIMESTAMP_AFTER)
-                        .withParameter("from", fromTs);
-            }
-        } else {
-            if(to != null) {
-                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_TIMESTAMP_BEFORE)
-                        .withParameter("to", toTs);
-            } else {
-                query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND);
-            }
-        }
-        return repositoryService.allMatches(query);
-    }
-
-    private static Timestamp toTimestampStartOfDayWithOffset(final LocalDate 
dt, final int daysOffset) {
-        return dt!=null
-                ? Timestamp.valueOf(dt.atStartOfDay().plusDays(daysOffset))
-                :null;
-    }
+            final LocalDate to);
 
+    List<AuditTrailEntry> findMostRecent();
 
-    public List<E> findMostRecent() {
-        return findMostRecent(100);
-    }
+    List<AuditTrailEntry> findMostRecent(final int limit);
 
-    public List<E> findMostRecent(final int limit) {
-        return repositoryService.allMatches(
-                Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_MOST_RECENT).withLimit(limit));
-    }
-
-    public List<E> findByUsernameAndFromAndTo(
+    List<AuditTrailEntry> 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);
-    }
+            final LocalDate to);
 
-    public List<E> findByUsernameAndTargetAndFromAndTo(
+    List<AuditTrailEntry> 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)
-        );
-    }
+            final LocalDate to);
 
+    List<AuditTrailEntry> findRecentByUsername(final String username);
 
 
     /**
      * intended for testing only
      */
-    public List<? extends AuditTrailEntry> findAll() {
-        if (causewaySystemEnvironment.getDeploymentType().isProduction()) {
-            throw new IllegalStateException("Cannot call 'findAll' in 
production systems");
-        }
-        return repositoryService.allMatches(
-                Query.named(auditTrailEntryClass, AuditTrailEntry.Nq.FIND)
-        );
-    }
+    List<AuditTrailEntry> findAll();
 
     /**
      * intended for testing only
      */
-    public void removeAll() {
-        if (causewaySystemEnvironment.getDeploymentType().isProduction()) {
-            throw new IllegalStateException("Cannot call 'removeAll' in 
production systems");
-        }
-        repositoryService.removeAll(auditTrailEntryClass);
-    }
-
+    void removeAll();
 
 }
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/AuditTrailEntryRepositoryAbstract.java
similarity index 80%
copy from 
extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntryRepository.java
copy to 
extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/dom/AuditTrailEntryRepositoryAbstract.java
index a1bd645a5a..f95edbf615 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/AuditTrailEntryRepositoryAbstract.java
@@ -33,6 +33,7 @@ import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.factory.FactoryService;
 import org.apache.causeway.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.causeway.applib.services.repository.RepositoryService;
+import org.apache.causeway.commons.internal.base._Casts;
 import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
 
 import lombok.AccessLevel;
@@ -44,16 +45,19 @@ import lombok.val;
  *
  * @since 2.0 {@index}
  */
-@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
-public abstract class AuditTrailEntryRepository<E extends AuditTrailEntry> {
-
-
-    private final Class<E> auditTrailEntryClass;
+public abstract class AuditTrailEntryRepositoryAbstract<E extends 
AuditTrailEntry>
+        implements AuditTrailEntryRepository  {
 
     @Inject RepositoryService repositoryService;
     @Inject FactoryService factoryService;
     @Inject CausewaySystemEnvironment causewaySystemEnvironment;
 
+    private final Class<E> auditTrailEntryClass;
+
+    protected AuditTrailEntryRepositoryAbstract(Class<E> auditTrailEntryClass) 
{
+        this.auditTrailEntryClass = auditTrailEntryClass;
+    }
+
     public Class<E> getEntityClass() {
         return auditTrailEntryClass;
     }
@@ -64,42 +68,49 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
         return repositoryService.persistAndFlush(entry);
     }
 
-    public Optional<E> findFirstByTarget(final Bookmark target) {
-        return repositoryService.firstMatch(
+    public Optional<AuditTrailEntry> findFirstByTarget(final Bookmark target) {
+        return _Casts.uncheckedCast(
+                repositoryService.firstMatch(
                 Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_FIRST_BY_TARGET)
                         .withParameter("target", target)
                         .withLimit(2)
+                )
         );
     }
 
-    public List<E> findRecentByTarget(final Bookmark target) {
-        return repositoryService.allMatches(
+    public List<AuditTrailEntry> findRecentByTarget(final Bookmark target) {
+        return _Casts.uncheckedCast(
+                repositoryService.allMatches(
                 Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_RECENT_BY_TARGET)
                         .withParameter("target", target)
                         .withLimit(100)
+                )
         );
     }
 
-    public List<E> findRecentByTargetAndPropertyId(
+    public List<AuditTrailEntry> findRecentByTargetAndPropertyId(
             final Bookmark target,
             final String propertyId) {
-        final String targetStr = target.toString();
-        return repositoryService.allMatches(
+        return _Casts.uncheckedCast(
+                repositoryService.allMatches(
                 Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_RECENT_BY_TARGET_AND_PROPERTY_ID)
                         .withParameter("target", target)
                         .withParameter("propertyId", propertyId)
                         .withLimit(30)
+                )
         );
     }
 
-    public List<E> findByInteractionId(final UUID interactionId) {
-        return repositoryService.allMatches(
+    public List<AuditTrailEntry> findByInteractionId(final UUID interactionId) 
{
+        return _Casts.uncheckedCast(
+                repositoryService.allMatches(
                 Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_BY_INTERACTION_ID)
                         .withParameter("interactionId", interactionId)
+                )
         );
     }
 
-    public List<E> findByTargetAndFromAndTo(
+    public List<AuditTrailEntry> findByTargetAndFromAndTo(
             final Bookmark target,
             final LocalDate from,
             final LocalDate to) {
@@ -129,10 +140,10 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
                 ;
             }
         }
-        return repositoryService.allMatches(query);
+        return _Casts.uncheckedCast(repositoryService.allMatches(query));
     }
 
-    public List<E> findByFromAndTo(
+    public List<AuditTrailEntry> findByFromAndTo(
             final LocalDate from,
             final LocalDate to) {
         val fromTs = toTimestampStartOfDayWithOffset(from, 0);
@@ -156,7 +167,7 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
                 query = Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND);
             }
         }
-        return repositoryService.allMatches(query);
+        return _Casts.uncheckedCast(repositoryService.allMatches(query));
     }
 
     private static Timestamp toTimestampStartOfDayWithOffset(final LocalDate 
dt, final int daysOffset) {
@@ -166,16 +177,19 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
     }
 
 
-    public List<E> findMostRecent() {
+    public List<AuditTrailEntry> findMostRecent() {
         return findMostRecent(100);
     }
 
-    public List<E> findMostRecent(final int limit) {
-        return repositoryService.allMatches(
-                Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_MOST_RECENT).withLimit(limit));
+    public List<AuditTrailEntry> findMostRecent(final int limit) {
+        return _Casts.uncheckedCast(
+                repositoryService.allMatches(
+                    Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_MOST_RECENT).withLimit(limit)
+                )
+        );
     }
 
-    public List<E> findByUsernameAndFromAndTo(
+    public List<AuditTrailEntry> findByUsernameAndFromAndTo(
             final String username,
             final LocalDate from,
             final LocalDate to) {
@@ -205,10 +219,10 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
                 ;
             }
         }
-        return repositoryService.allMatches(query);
+        return _Casts.uncheckedCast(repositoryService.allMatches(query));
     }
 
-    public List<E> findByUsernameAndTargetAndFromAndTo(
+    public List<AuditTrailEntry> findByUsernameAndTargetAndFromAndTo(
             final String username,
             final Bookmark target,
             final LocalDate from,
@@ -243,15 +257,17 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
                 ;
             }
         }
-        return repositoryService.allMatches(query);
+        return _Casts.uncheckedCast(repositoryService.allMatches(query));
     }
 
 
-    public List<E> findRecentByUsername(final String username) {
-        return repositoryService.allMatches(
+    public List<AuditTrailEntry> findRecentByUsername(final String username) {
+        return _Casts.uncheckedCast(
+                repositoryService.allMatches(
                 Query.named(auditTrailEntryClass, 
AuditTrailEntry.Nq.FIND_RECENT_BY_USERNAME)
                         .withParameter("username", username)
                         .withLimit(100)
+                )
         );
     }
 
@@ -260,12 +276,14 @@ public abstract class AuditTrailEntryRepository<E extends 
AuditTrailEntry> {
     /**
      * intended for testing only
      */
-    public List<? extends AuditTrailEntry> findAll() {
+    public List<AuditTrailEntry> findAll() {
         if (causewaySystemEnvironment.getDeploymentType().isProduction()) {
             throw new IllegalStateException("Cannot call 'findAll' in 
production systems");
         }
-        return repositoryService.allMatches(
-                Query.named(auditTrailEntryClass, AuditTrailEntry.Nq.FIND)
+        return _Casts.uncheckedCast(
+                repositoryService.allMatches(
+                    Query.named(auditTrailEntryClass, AuditTrailEntry.Nq.FIND)
+                )
         );
     }
 
diff --git 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
index 58a22da9e5..5840283afa 100644
--- 
a/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
+++ 
b/extensions/security/audittrail/applib/src/main/java/org/apache/causeway/extensions/audittrail/applib/spiimpl/EntityPropertyChangeSubscriberForAuditTrail.java
@@ -34,7 +34,7 @@ import 
org.apache.causeway.applib.services.publishing.spi.EntityPropertyChangeSu
 import org.apache.causeway.applib.services.xactn.TransactionService;
 import 
org.apache.causeway.extensions.audittrail.applib.CausewayModuleExtAuditTrailApplib;
 import org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntry;
-import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
+import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepositoryAbstract;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
@@ -57,7 +57,7 @@ public class EntityPropertyChangeSubscriberForAuditTrail 
implements EntityProper
     static final String LOGICAL_TYPE_NAME = 
CausewayModuleExtAuditTrailApplib.NAMESPACE + 
".EntityPropertyChangeSubscriberForAuditTrail";
 
     final TransactionService transactionService;
-    final AuditTrailEntryRepository<? extends AuditTrailEntry> 
auditTrailEntryRepository;
+    final AuditTrailEntryRepositoryAbstract<? extends AuditTrailEntry> 
auditTrailEntryRepository;
     final CausewayConfiguration causewayConfiguration;
 
     @Override
diff --git 
a/extensions/security/audittrail/applib/src/test/java/org/apache/causeway/extensions/audittrail/applib/integtests/AuditTrail_IntegTestAbstract.java
 
b/extensions/security/audittrail/applib/src/test/java/org/apache/causeway/extensions/audittrail/applib/integtests/AuditTrail_IntegTestAbstract.java
index 3db1d3830d..f537b88698 100644
--- 
a/extensions/security/audittrail/applib/src/test/java/org/apache/causeway/extensions/audittrail/applib/integtests/AuditTrail_IntegTestAbstract.java
+++ 
b/extensions/security/audittrail/applib/src/test/java/org/apache/causeway/extensions/audittrail/applib/integtests/AuditTrail_IntegTestAbstract.java
@@ -34,7 +34,7 @@ import 
org.apache.causeway.applib.services.iactnlayer.InteractionService;
 import org.apache.causeway.applib.services.wrapper.WrapperFactory;
 import org.apache.causeway.core.config.presets.CausewayPresets;
 import org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntry;
-import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepository;
+import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepositoryAbstract;
 import 
org.apache.causeway.extensions.audittrail.applib.integtests.model.Counter;
 import 
org.apache.causeway.extensions.audittrail.applib.integtests.model.CounterRepository;
 import 
org.apache.causeway.extensions.audittrail.applib.integtests.model.Counter_bumpUsingMixin;
@@ -203,7 +203,8 @@ public abstract class AuditTrail_IntegTestAbstract extends 
CausewayIntegrationTe
     @Inject CounterRepository<? extends Counter> counterRepository;
     @Inject WrapperFactory wrapperFactory;
     @Inject BookmarkService bookmarkService;
-    @Inject AuditTrailEntryRepository<? extends AuditTrailEntry> 
auditTrailEntryRepository;
+    @Inject
+    AuditTrailEntryRepositoryAbstract<? extends AuditTrailEntry> 
auditTrailEntryRepository;
 
 
 }
diff --git 
a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntryRepository.java
 
b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntryRepository.java
index 3832c95e6c..dfe3a15c11 100644
--- 
a/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntryRepository.java
+++ 
b/extensions/security/audittrail/persistence-jdo/src/main/java/org/apache/causeway/extensions/audittrail/jdo/dom/AuditTrailEntryRepository.java
@@ -19,10 +19,12 @@
  */
 package org.apache.causeway.extensions.audittrail.jdo.dom;
 
+import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepositoryAbstract;
+
 import org.springframework.stereotype.Service;
 
 @Service
-public class AuditTrailEntryRepository extends 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry>
 {
+public class AuditTrailEntryRepository extends 
AuditTrailEntryRepositoryAbstract<AuditTrailEntry> {
 
     public AuditTrailEntryRepository() {
         super(AuditTrailEntry.class);
diff --git 
a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntryRepository.java
 
b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntryRepository.java
index 644d630ba6..c24310990a 100644
--- 
a/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntryRepository.java
+++ 
b/extensions/security/audittrail/persistence-jpa/src/main/java/org/apache/causeway/extensions/audittrail/jpa/dom/AuditTrailEntryRepository.java
@@ -19,10 +19,11 @@
  */
 package org.apache.causeway.extensions.audittrail.jpa.dom;
 
+import 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepositoryAbstract;
 import org.springframework.stereotype.Service;
 
 @Service
-public class AuditTrailEntryRepository extends 
org.apache.causeway.extensions.audittrail.applib.dom.AuditTrailEntryRepository<AuditTrailEntry>
 {
+public class AuditTrailEntryRepository extends 
AuditTrailEntryRepositoryAbstract<AuditTrailEntry> {
 
     public AuditTrailEntryRepository() {
         super(AuditTrailEntry.class);
diff --git 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
index d653a7c38a..ed988696dc 100644
--- 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
+++ 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
@@ -55,6 +55,7 @@ import lombok.val;
  *
  * @since 2.0 {@index}
  */
+@SuppressWarnings("CdiManagedBeanInconsistencyInspection")
 public class ApplicationUserRepositoryAbstract<U extends ApplicationUser>
 implements ApplicationUserRepository {
 
@@ -66,6 +67,7 @@ implements ApplicationUserRepository {
     @Inject private Provider<QueryResultsCache> queryResultsCacheProvider;
 
     // empty if no candidate is available
+    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
     @Autowired(required = false) @Qualifier("Secman") PasswordEncoder 
passwordEncoder;
 
 

Reply via email to