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:03:25 UTC
[isis] 02/02: ISIS-2573: refactor HasEnlistedEntityChanges to not
return a nullable
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
commit 2091f581abfdf48fcc17e2377781911d0c403568
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 26 16:03:08 2021 +0100
ISIS-2573: refactor HasEnlistedEntityChanges to not return a nullable
---
.../publish/EntityChangesPublisherDefault.java | 36 ++++++++++++----------
.../isis/core/runtimeservices/publish/_Xray.java | 23 ++++++++++++++
.../changetracking/ChangingEntitiesFactory.java | 17 +++++-----
.../changetracking/EntityChangeTrackerDefault.java | 3 +-
.../changetracking/HasEnlistedEntityChanges.java | 5 ++-
5 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
index dd988ed..6deaed3 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/EntityChangesPublisherDefault.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.runtimeservices.publish;
import java.util.List;
+import java.util.Optional;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
@@ -31,10 +32,12 @@ 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.EntityChanges;
import org.apache.isis.applib.services.publishing.spi.EntityChangesSubscriber;
import org.apache.isis.applib.services.user.UserService;
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.EntityChangesPublisher;
import org.apache.isis.core.transaction.changetracking.HasEnlistedEntityChanges;
@@ -53,8 +56,9 @@ public class EntityChangesPublisherDefault implements EntityChangesPublisher {
private final List<EntityChangesSubscriber> subscribers;
private final ClockService clockService;
private final UserService userService;
+ private final InteractionTracker iaTracker;
- private Can<EntityChangesSubscriber> enabledSubscribers;
+ private Can<EntityChangesSubscriber> enabledSubscribers = Can.empty();
@PostConstruct
public void init() {
@@ -64,28 +68,26 @@ public class EntityChangesPublisherDefault implements EntityChangesPublisher {
public void publishChangingEntities(HasEnlistedEntityChanges hasEnlistedEntityChanges) {
- if(!canPublish()) {
- return;
- }
+ val payload = getPayload(hasEnlistedEntityChanges);
+ val handle = _Xray.enterEntityChangesPublishing(iaTracker, payload, enabledSubscribers);
- val currentTime = clockService.getClock().javaSqlTimestamp();
- val currentUser = userService.currentUserNameElseNobody();
+ payload.ifPresent(entityChanges->{
+ for (val subscriber : enabledSubscribers) {
+ subscriber.onChanging(entityChanges);
+ }
+ });
- val entityChanges = hasEnlistedEntityChanges.getEntityChanges(currentTime, currentUser);
-
- if(entityChanges == null) {
- return;
- }
-
- for (val subscriber : enabledSubscribers) {
- subscriber.onChanging(entityChanges);
- }
+ _Xray.exitPublishing(handle);
}
// -- HELPER
- private boolean canPublish() {
- return enabledSubscribers.isNotEmpty();
+ private Optional<EntityChanges> getPayload(HasEnlistedEntityChanges hasEnlistedEntityChanges) {
+ return enabledSubscribers.isEmpty()
+ ? Optional.empty()
+ : hasEnlistedEntityChanges.getEntityChanges(
+ clockService.getClock().javaSqlTimestamp(), // current time
+ userService.currentUserNameElseNobody()); // current user
}
}
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 6899c55..e035a37 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
@@ -18,11 +18,16 @@
*/
package org.apache.isis.core.runtimeservices.publish;
+import java.util.Optional;
+
import javax.annotation.Nullable;
import org.apache.isis.applib.services.command.Command;
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.EntityPropertyChangeSubscriber;
import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
@@ -103,6 +108,24 @@ final class _Xray {
}
+ // -- ENTITY CHANGES
+
+ public static SequenceHandle enterEntityChangesPublishing(
+ final @NonNull InteractionTracker iaTracker,
+ final @NonNull Optional<EntityChanges> payload,
+ final @NonNull Can<EntityChangesSubscriber> enabledSubscribers) {
+ return null;
+ }
+
+ // -- ENTITY PROPERTY CHANGES
+
+ public static SequenceHandle enterEntityPropertyChangePublishing(
+ final @NonNull InteractionTracker iaTracker,
+ final boolean canPublish,
+ final @NonNull Can<EntityPropertyChangeSubscriber> enabledSubscribers) {
+ return null;
+ }
+
// -- EXIT
public static void exitPublishing(final @Nullable SequenceHandle handle) {
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/ChangingEntitiesFactory.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/ChangingEntitiesFactory.java
index 4cce664..12c0110 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/ChangingEntitiesFactory.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/ChangingEntitiesFactory.java
@@ -21,10 +21,9 @@ package org.apache.isis.core.transaction.changetracking;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import java.util.UUID;
-import javax.annotation.Nullable;
-
import org.apache.isis.applib.annotation.EntityChangeKind;
import org.apache.isis.applib.jaxb.JavaSqlXMLGregorianCalendarMarshalling;
import org.apache.isis.applib.services.iactn.Interaction;
@@ -46,23 +45,21 @@ import lombok.experimental.UtilityClass;
@UtilityClass
class ChangingEntitiesFactory {
- @Nullable
- public static EntityChanges createChangingEntities(
+ public static Optional<EntityChanges> createChangingEntities(
final java.sql.Timestamp completedAt,
final String userName,
final EntityChangeTrackerDefault entityChangeTracker) {
+ if(entityChangeTracker.getChangeKindByEnlistedAdapter().isEmpty()) {
+ return Optional.empty();
+ }
+
// take a copy of enlisted adapters ... the JDO implementation of the PublishingService
// creates further entities which would be enlisted;
// taking copy of the map avoids ConcurrentModificationException
-
val changeKindByEnlistedAdapter = new HashMap<>(
entityChangeTracker.getChangeKindByEnlistedAdapter());
- if(changeKindByEnlistedAdapter.isEmpty()) {
- return null;
- }
-
val changingEntities = newChangingEntities(
completedAt,
userName,
@@ -71,7 +68,7 @@ class ChangingEntitiesFactory {
entityChangeTracker.numberAuditedEntityPropertiesModified(),
changeKindByEnlistedAdapter);
- return changingEntities;
+ return Optional.of(changingEntities);
}
// -- HELPER
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 3a49411..86a22c0 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
@@ -19,6 +19,7 @@
package org.apache.isis.core.transaction.changetracking;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.LongAdder;
@@ -207,7 +208,7 @@ implements
}
@Override
- public EntityChanges getEntityChanges(
+ public Optional<EntityChanges> getEntityChanges(
final java.sql.Timestamp timestamp,
final String userName) {
return ChangingEntitiesFactory.createChangingEntities(timestamp, userName, this);
diff --git a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityChanges.java b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityChanges.java
index 1d6aec3..6cb6ebd 100644
--- a/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityChanges.java
+++ b/core/transaction/src/main/java/org/apache/isis/core/transaction/changetracking/HasEnlistedEntityChanges.java
@@ -18,13 +18,12 @@
*/
package org.apache.isis.core.transaction.changetracking;
-import javax.annotation.Nullable;
+import java.util.Optional;
import org.apache.isis.applib.services.publishing.spi.EntityChanges;
public interface HasEnlistedEntityChanges {
- @Nullable
- EntityChanges getEntityChanges(java.sql.Timestamp timestamp, String userName);
+ Optional<EntityChanges> getEntityChanges(java.sql.Timestamp timestamp, String userName);
}