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 09:14:34 UTC

[causeway] branch CAUSEWAY-3361 created (now dd9ed9ccc7)

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

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


      at dd9ed9ccc7 CAUSEWAY-3361: adds configuration properties to disable audittrail, commandlog and executionlog optionally

This branch includes the following new commits:

     new dd9ed9ccc7 CAUSEWAY-3361: adds configuration properties to disable audittrail, commandlog and executionlog optionally

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-3361: adds configuration properties to disable audittrail, commandlog and executionlog optionally

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit dd9ed9ccc7d7559434783ce0513550a6997a8287
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Feb 17 09:14:26 2023 +0000

    CAUSEWAY-3361: adds configuration properties to disable audittrail, commandlog and executionlog optionally
---
 .../core/config/CausewayConfiguration.java         | 120 ++++++++++++++++++++-
 .../subscriber/CommandSubscriberForCommandLog.java |   4 +
 .../ExecutionSubscriberForExecutionLog.java        |  10 +-
 ...ntityPropertyChangeSubscriberForAuditTrail.java |   6 +-
 4 files changed, 135 insertions(+), 5 deletions(-)

diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index f37d86a31b..c669ed5533 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -75,8 +75,6 @@ import org.apache.causeway.applib.services.userui.UserMenu;
 import org.apache.causeway.applib.value.semantics.TemporalValueSemantics.TemporalEditingPattern;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.context._Context;
-import org.apache.causeway.core.config.CausewayConfiguration.Core;
-import org.apache.causeway.core.config.CausewayConfiguration.Viewer;
 import org.apache.causeway.core.config.metamodel.facets.ActionConfigOptions;
 import org.apache.causeway.core.config.metamodel.facets.CollectionLayoutConfigOptions;
 import org.apache.causeway.core.config.metamodel.facets.DomainObjectConfigOptions;
@@ -2860,10 +2858,87 @@ public class CausewayConfiguration {
     @Data
     public static class Extensions {
 
+        private final AuditTrail auditTrail = new AuditTrail();
+        @Data
+        public static class AuditTrail {
+
+            /**
+             * As per {@link AuditTrail#getPersist()}.
+             *
+             * <p>
+             *     Implementation note: we use an enum here (rather than a simple boolean) to allow for future
+             *     enhancements.
+             * </p>
+             */
+            public enum PersistPolicy {
+                /**
+                 * Persist to the audit trail.  This is the default.
+                 */
+                ENABLED,
+                /**
+                 * Do <i>NOT</i> persist to the audit trail.
+                 *
+                 * <p>
+                 *     One reason to use this option is if you wish to provide your own implementation that wraps
+                 *     or delegates to the default implementation of {@link EntityPropertyChangeSubscriber} that is
+                 *     provided by the <i>audittrail</i> extension.  Because entity property changes are published to
+                 *     <i>all</i> subscribers on the class path, you can disable the default implementation from
+                 *     doing anything using this setting.
+                 * </p>
+                 */
+                DISABLED;
+
+                public boolean isDisabled() { return this == DISABLED; }
+            }
+
+            /**
+             * Whether the {@link EntityPropertyChangeSubscriber} implementation provided by this extension (which
+             * persists property changes to the audit trail) is enabled or not.
+             */
+            @Getter @Setter
+            private PersistPolicy persist = PersistPolicy.ENABLED;
+        }
+
         private final CommandLog commandLog = new CommandLog();
         @Data
         public static class CommandLog {
 
+            /**
+             * As per {@link CommandLog#getPersist()}.
+             *
+             * <p>
+             *     Implementation note: we use an enum here (rather than a simple boolean) to allow for future
+             *     enhancements.
+             * </p>
+             */
+            public enum PersistPolicy {
+                /**
+                 * Persist to the command log .  This is the default.
+                 */
+                ENABLED,
+                /**
+                 * Do <i>NOT</i> persist to the audit trail.
+                 *
+                 * <p>
+                 *     One reason to use this option is if you wish to provide your own implementation that wraps
+                 *     or delegates to the default implementation of {@link org.apache.causeway.applib.services.publishing.spi.CommandSubscriber} that is
+                 *     provided by the <i>commandlog</i> extension.  Because commands are published to
+                 *     <i>all</i> subscribers on the class path, you can disable the default implementation from
+                 *     doing anything using this setting.
+                 * </p>
+                 */
+                DISABLED;
+
+                public boolean isDisabled() { return this == DISABLED; }
+            }
+
+            /**
+             * Whether the {@link org.apache.causeway.applib.services.publishing.spi.CommandSubscriber} implementation
+             * provided by this extension (which persists commands to the command log) is enabled or not.
+             */
+            @Getter @Setter
+            private PersistPolicy persist = PersistPolicy.ENABLED;
+
             public enum PublishPolicy {
                 ALWAYS,
                 ONLY_IF_SYSTEM_CHANGED,
@@ -3064,6 +3139,47 @@ public class CausewayConfiguration {
 
         }
 
+        private final ExecutionLog executionLog = new ExecutionLog();
+        @Data
+        public static class ExecutionLog {
+
+            /**
+             * As per {@link ExecutionLog#getPersist()}.
+             *
+             * <p>
+             *     Implementation note: we use an enum here (rather than a simple boolean) to allow for future
+             *     enhancements.
+             * </p>
+             */
+            public enum PersistPolicy {
+                /**
+                 * Persist to the audit trail.  This is the default.
+                 */
+                ENABLED,
+                /**
+                 * Do <i>NOT</i> persist to the audit trail.
+                 *
+                 * <p>
+                 *     One reason to use this option is if you wish to provide your own implementation that wraps
+                 *     or delegates to the default implementation of {@link org.apache.causeway.applib.services.publishing.spi.ExecutionSubscriber} that is
+                 *     provided by the <i>executionLog</i> extension.  Because executions are published to
+                 *     <i>all</i> subscribers on the class path, you can disable the default implementation from
+                 *     doing anything using this setting.
+                 * </p>
+                 */
+                DISABLED;
+
+                public boolean isDisabled() { return this == DISABLED; }
+            }
+
+            /**
+             * Whether the {@link EntityPropertyChangeSubscriber} implementation provided by this extension (which
+             * persists property changes to the audit trail) is enabled or not.
+             */
+            @Getter @Setter
+            private PersistPolicy persist = PersistPolicy.ENABLED;
+        }
+
         private final ExecutionOutbox executionOutbox = new ExecutionOutbox();
         @Valid
         @Data
diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/subscriber/CommandSubscriberForCommandLog.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/subscriber/CommandSubscriberForCommandLog.java
index 1d9650109b..cb5df8a42a 100644
--- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/subscriber/CommandSubscriberForCommandLog.java
+++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/subscriber/CommandSubscriberForCommandLog.java
@@ -57,6 +57,10 @@ public class CommandSubscriberForCommandLog implements CommandSubscriber {
     @Override
     public void onCompleted(final Command command) {
 
+        if (causewayConfiguration.getExtensions().getCommandLog().getPersist().isDisabled()) {
+            return;
+        }
+
         // skip if no changes AND skipping is allowed
         if (causewayConfiguration.getExtensions().getCommandLog().getPublishPolicy().isOnlyIfSystemChanged()
                 && !command.isSystemStateChanged()) {
diff --git a/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/spiimpl/ExecutionSubscriberForExecutionLog.java b/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/spiimpl/ExecutionSubscriberForExecutionLog.java
index eaf919dbca..5db13b43dc 100644
--- a/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/spiimpl/ExecutionSubscriberForExecutionLog.java
+++ b/extensions/core/executionlog/applib/src/main/java/org/apache/causeway/extensions/executionlog/applib/spiimpl/ExecutionSubscriberForExecutionLog.java
@@ -20,6 +20,7 @@ package org.apache.causeway.extensions.executionlog.applib.spiimpl;
 
 import javax.inject.Inject;
 
+import org.apache.causeway.core.config.CausewayConfiguration;
 import org.springframework.stereotype.Service;
 
 import org.apache.causeway.applib.services.iactn.Execution;
@@ -32,13 +33,18 @@ import lombok.RequiredArgsConstructor;
  * @since 2.0 {@index}
  */
 @Service
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class ExecutionSubscriberForExecutionLog implements ExecutionSubscriber {
 
-    final @Inject ExecutionLogEntryRepository repository;
+    final ExecutionLogEntryRepository repository;
+    final CausewayConfiguration causewayConfiguration;
 
     @Override
     public void onExecution(Execution<?, ?> execution) {
+        if (causewayConfiguration.getExtensions().getExecutionLog().getPersist().isDisabled()) {
+            return;
+        }
+
         repository.createEntryAndPersist(execution);
     }
 
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 578477fca0..f8483560f6 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
@@ -24,6 +24,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.core.config.CausewayConfiguration;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
@@ -57,11 +58,14 @@ public class EntityPropertyChangeSubscriberForAuditTrail implements EntityProper
 
     final TransactionService transactionService;
     final AuditTrailEntryRepository<? extends AuditTrailEntry> auditTrailEntryRepository;
+    final CausewayConfiguration causewayConfiguration;
 
     @Override
     public void onChanging(EntityPropertyChange entityPropertyChange) {
+        if (causewayConfiguration.getExtensions().getAuditTrail().getPersist().isDisabled()) {
+            return;
+        }
         auditTrailEntryRepository.createFor(entityPropertyChange);
-
     }
 
     @Override