You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/03/26 15:13:52 UTC

[isis] branch master updated: ISIS-2573: refactor HasEnlistedEntityPropertyChanges to return Can rather than Stream

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

ahuber 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 b991f4d  ISIS-2573: refactor HasEnlistedEntityPropertyChanges to return Can rather than Stream
b991f4d is described below

commit b991f4d409bfcea4dc21f32c05376ae1a3fa7287
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 26 16:13:42 2021 +0100

    ISIS-2573: refactor HasEnlistedEntityPropertyChanges to return Can
    rather than Stream
---
 .../EntityPropertyChangePublisherDefault.java      | 42 +++++++++++++---------
 .../isis/core/runtimeservices/publish/_Xray.java   |  3 +-
 .../changetracking/EntityChangeTrackerDefault.java |  7 ++--
 .../HasEnlistedEntityPropertyChanges.java          |  4 +--
 4 files changed, 33 insertions(+), 23 deletions(-)

diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
index 8071a9d..10c4cba 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
@@ -31,12 +31,14 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber;
 import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.applib.services.xactn.TransactionId;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.having.HasEnabling;
+import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.transaction.changetracking.EntityPropertyChangePublisher;
 import org.apache.isis.core.transaction.changetracking.HasEnlistedEntityPropertyChanges;
 
@@ -56,8 +58,9 @@ public class EntityPropertyChangePublisherDefault implements EntityPropertyChang
     private final UserService userService;
     private final ClockService clockService;
     private final TransactionService transactionService;
+    private final InteractionTracker iaTracker;
     
-    private Can<EntityPropertyChangeSubscriber> enabledSubscribers;
+    private Can<EntityPropertyChangeSubscriber> enabledSubscribers = Can.empty();
     
     @PostConstruct
     public void init() {
@@ -69,31 +72,36 @@ public class EntityPropertyChangePublisherDefault implements EntityPropertyChang
     public void publishChangedProperties(
             final HasEnlistedEntityPropertyChanges hasEnlistedEntityPropertyChanges) {
         
-        if(!canPublish()) { 
-            return; 
-        }
-        
-        val currentTime = clockService.getClock().javaSqlTimestamp();
-        val currentUser = userService.currentUserNameElseNobody();
-        val currentTransactionId = transactionService.currentTransactionId()
-                .orElse(TransactionId.empty());
+        val payload = getPayload(hasEnlistedEntityPropertyChanges);
+        val handle = _Xray.enterEntityPropertyChangePublishing(iaTracker, payload, enabledSubscribers);
         
-        hasEnlistedEntityPropertyChanges.streamPropertyChanges(
-                currentTime, 
-                currentUser,
-                currentTransactionId)
-        .forEach(propertyChange->{
+        payload.forEach(propertyChange->{
             for (val subscriber : enabledSubscribers) {
                 subscriber.onChanging(propertyChange);
             }
         });
+        
+        _Xray.exitPublishing(handle);
     }
 
     // -- HELPER
     
-    private boolean canPublish() {
-        return enabledSubscribers.isNotEmpty();
+    private Can<EntityPropertyChange> getPayload(
+            HasEnlistedEntityPropertyChanges hasEnlistedEntityPropertyChanges) {
+        
+        if(enabledSubscribers.isEmpty()) { 
+            return Can.empty(); 
+        }
+        
+        val currentTime = clockService.getClock().javaSqlTimestamp();
+        val currentUser = userService.currentUserNameElseNobody();
+        val currentTransactionId = transactionService.currentTransactionId()
+                .orElse(TransactionId.empty());
+        
+        return hasEnlistedEntityPropertyChanges.getPropertyChanges(
+                currentTime, 
+                currentUser,
+                currentTransactionId);
     }
 
-
 }
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java
index e035a37..08a6dbb 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/_Xray.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.services.iactn.Execution;
 import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
 import org.apache.isis.applib.services.publishing.spi.EntityChanges;
 import org.apache.isis.applib.services.publishing.spi.EntityChangesSubscriber;
+import org.apache.isis.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber;
 import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.commons.collections.Can;
@@ -121,7 +122,7 @@ final class _Xray {
     
     public static SequenceHandle enterEntityPropertyChangePublishing(
             final @NonNull InteractionTracker iaTracker,
-            final boolean canPublish,
+            final @NonNull Can<EntityPropertyChange> payload,
             final @NonNull Can<EntityPropertyChangeSubscriber> enabledSubscribers) {
         return null;
     }
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
index 86a22c0..0c6545f 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/EntityChangeTrackerDefault.java
@@ -24,7 +24,6 @@ import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.LongAdder;
 import java.util.function.Function;
-import java.util.stream.Stream;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -47,6 +46,7 @@ import org.apache.isis.applib.services.metrics.MetricsService;
 import org.apache.isis.applib.services.publishing.spi.EntityChanges;
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.isis.applib.services.xactn.TransactionId;
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.collections._Sets;
@@ -407,14 +407,15 @@ implements
     }
 
     @Override
-    public Stream<EntityPropertyChange> streamPropertyChanges(
+    public Can<EntityPropertyChange> getPropertyChanges(
             final java.sql.Timestamp timestamp,
             final String userName,
             final TransactionId txId) {
 
         return getPropertyChangeRecords().stream()
                 .map(propertyChangeRecord->EntityPropertyChangeFactory
-                        .createEntityPropertyChange(timestamp, userName, txId, propertyChangeRecord));
+                        .createEntityPropertyChange(timestamp, userName, txId, propertyChangeRecord))
+                .collect(Can.toCan());
     }
 
 }
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityPropertyChanges.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityPropertyChanges.java
index 0dbfc16..f249b3f 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityPropertyChanges.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityPropertyChanges.java
@@ -19,13 +19,13 @@
 package org.apache.isis.core.transaction.changetracking;
 
 import java.sql.Timestamp;
-import java.util.stream.Stream;
 
 import org.apache.isis.applib.services.publishing.spi.EntityPropertyChange;
 import org.apache.isis.applib.services.xactn.TransactionId;
+import org.apache.isis.commons.collections.Can;
 
 public interface HasEnlistedEntityPropertyChanges {
 
-    Stream<EntityPropertyChange> streamPropertyChanges(Timestamp timestamp, String user, TransactionId txId);
+    Can<EntityPropertyChange> getPropertyChanges(Timestamp timestamp, String user, TransactionId txId);
 
 }