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);
}