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:23 UTC

[isis] branch master updated (a77d523 -> 2091f58)

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

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from a77d523  ISIS-2573: xray: house keeping
     new 963e9d8  ISIS-2573: xray: simplify util
     new 2091f58  ISIS-2573: refactor HasEnlistedEntityChanges to not return a nullable

The 2 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.


Summary of changes:
 .../apache/isis/core/runtime/util/XrayUtil.java    |  8 ++---
 .../isis/core/runtimeservices/executor/_Xray.java  |  6 ++--
 .../publish/EntityChangesPublisherDefault.java     | 36 ++++++++++++----------
 .../isis/core/runtimeservices/publish/_Xray.java   | 32 +++++++++++++++----
 .../changetracking/ChangingEntitiesFactory.java    | 17 +++++-----
 .../changetracking/EntityChangeTrackerDefault.java |  3 +-
 .../changetracking/HasEnlistedEntityChanges.java   |  5 ++-
 7 files changed, 62 insertions(+), 45 deletions(-)

[isis] 02/02: ISIS-2573: refactor HasEnlistedEntityChanges to not return a nullable

Posted by ah...@apache.org.
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);
     
 }

[isis] 01/02: ISIS-2573: xray: simplify util

Posted by ah...@apache.org.
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 963e9d84ac6b1b22ef939d6ba371979d950c2941
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 26 15:40:57 2021 +0100

    ISIS-2573: xray: simplify util
---
 .../main/java/org/apache/isis/core/runtime/util/XrayUtil.java    | 8 ++++----
 .../org/apache/isis/core/runtimeservices/executor/_Xray.java     | 6 ++----
 .../java/org/apache/isis/core/runtimeservices/publish/_Xray.java | 9 +++------
 3 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/util/XrayUtil.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/util/XrayUtil.java
index 4b543c8..8196ba5 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/util/XrayUtil.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/util/XrayUtil.java
@@ -23,9 +23,9 @@ import java.util.UUID;
 import java.util.function.Consumer;
 
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.debug.xray.XrayUi;
-import org.apache.isis.commons.internal.debug.xray.XrayDataModel.Sequence;
 import org.apache.isis.commons.internal.debug.xray.XrayModel.ThreadMemento;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
+import org.apache.isis.commons.internal.debug.xray.sequence.SequenceDiagram;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 
@@ -91,10 +91,10 @@ public final class XrayUtil {
         final @NonNull String caller;
         final @NonNull Can<String> callees;
         
-        public void submit(Consumer<Sequence> onSequenceEntry) {
+        public void submit(Consumer<SequenceDiagram> onSubmission) {
             XrayUi.updateModel(model->{
                 model.lookupSequence(getSequenceId())
-                .ifPresent(onSequenceEntry);
+                .ifPresent(sequence->onSubmission.accept(sequence.getData()));
             });
         }
         
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/_Xray.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/_Xray.java
index b95dbaa..1f680cb 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/_Xray.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/_Xray.java
@@ -92,8 +92,7 @@ final class _Xray {
         val handleIfAny = XrayUtil.createSequenceHandle(iaTracker, "executor", participantLabel);
         handleIfAny.ifPresent(handle->{
            
-            handle.submit(sequence->{
-                val sequenceData = sequence.getData();
+            handle.submit(sequenceData->{
                 
                 sequenceData.alias("executor", "Member-\nExecutorService-\n(Default)");
                 
@@ -118,8 +117,7 @@ final class _Xray {
             return; // x-ray is not enabled
         }
         
-        handle.submit(sequence->{
-            val sequenceData = sequence.getData();
+        handle.submit(sequenceData->{
             
             val callee1 = handle.getCallees().getFirstOrFail();
             val callee2 = handle.getCallees().getLastOrFail();
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 b2f2ce4..6899c55 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
@@ -54,8 +54,7 @@ final class _Xray {
         val handleIfAny = XrayUtil.createSequenceHandle(iaTracker, "cmd-publisher");
         handleIfAny.ifPresent(handle->{
            
-            handle.submit(sequence->{
-                val sequenceData = sequence.getData();
+            handle.submit(sequenceData->{
                 
                 sequenceData.alias("cmd-publisher", "Command-\nPublisher-\n(Default)");
                 
@@ -89,8 +88,7 @@ final class _Xray {
         val handleIfAny = XrayUtil.createSequenceHandle(iaTracker, "exec-publisher");
         handleIfAny.ifPresent(handle->{
             
-            handle.submit(sequence->{
-                val sequenceData = sequence.getData();
+            handle.submit(sequenceData->{
                 
                 sequenceData.alias("exec-publisher", "Execution-\nPublisher-\n(Default)");
                 
@@ -113,8 +111,7 @@ final class _Xray {
             return; // x-ray is not enabled
         }
         
-        handle.submit(sequence->{
-            val sequenceData = sequence.getData();
+        handle.submit(sequenceData->{
             val callee = handle.getCallees().getFirstOrFail();
             sequenceData.exit(callee, handle.getCaller());
             sequenceData.deactivate(callee);