You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/13 18:13:49 UTC

[07/50] [abbrv] isis git commit: ISIS-1370: PublishingServiceInternal now calling the PublisherService.

ISIS-1370: PublishingServiceInternal now calling the PublisherService.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/0d892e1b
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/0d892e1b
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/0d892e1b

Branch: refs/heads/master
Commit: 0d892e1bea5f7ab9e4765a477a9f5a56ef4d4632
Parents: ad43cad
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun May 1 14:51:44 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun May 1 14:51:44 2016 +0100

----------------------------------------------------------------------
 .../utils/ActionInvocationMementoDtoUtils.java  |  2 +-
 .../publishing/PublishingServiceInternal.java   |  3 -
 .../PublishingServiceInternalDefault.java       | 85 +++++++++++++++++---
 .../system/persistence/PersistenceSession.java  |  3 +-
 4 files changed, 77 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0d892e1b/core/applib/src/main/java/org/apache/isis/schema/utils/ActionInvocationMementoDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/ActionInvocationMementoDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/ActionInvocationMementoDtoUtils.java
index f8287b9..ed74b83 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/ActionInvocationMementoDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/ActionInvocationMementoDtoUtils.java
@@ -132,7 +132,7 @@ public final class ActionInvocationMementoDtoUtils {
 
         aim.setTransactionId(transactionId.toString());
 
-        ActionInvocationDto invocation = invocationFor(aim);
+        final ActionInvocationDto invocation = invocationFor(aim);
 
         invocation.setSequence(sequence);
         invocation.setId(aim.getTransactionId() + "." + invocation.getSequence());

http://git-wip-us.apache.org/repos/asf/isis/blob/0d892e1b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/publishing/PublishingServiceInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/publishing/PublishingServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/publishing/PublishingServiceInternal.java
index b0ed8c1..93f5e64 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/publishing/PublishingServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/publishing/PublishingServiceInternal.java
@@ -28,9 +28,6 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 public interface PublishingServiceInternal {
 
     @Programmatic
-    boolean canPublish();
-
-    @Programmatic
     void publishObjects();
 
     @Programmatic

http://git-wip-us.apache.org/repos/asf/isis/blob/0d892e1b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
index 8d5441d..c19c494 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
@@ -43,10 +43,12 @@ import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.applib.services.iactn.Interaction;
+import org.apache.isis.applib.services.iactn.InteractionContext;
 import org.apache.isis.applib.services.publish.EventMetadata;
 import org.apache.isis.applib.services.publish.EventPayload;
 import org.apache.isis.applib.services.publish.EventType;
 import org.apache.isis.applib.services.publish.ObjectStringifier;
+import org.apache.isis.applib.services.publish.PublisherService;
 import org.apache.isis.applib.services.publish.PublishingService;
 import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -66,6 +68,8 @@ import org.apache.isis.core.runtime.services.enlist.EnlistedObjectsServiceIntern
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+import org.apache.isis.schema.aim.v2.ActionInvocationMementoDto;
+import org.apache.isis.schema.utils.ActionInvocationMementoDtoUtils;
 
 /**
  * Wrapper around {@link PublishingService}.  Is a no-op if there is no injected service.
@@ -110,15 +114,9 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
 
     @Override
     @Programmatic
-    public boolean canPublish() {
-        return publishingServiceIfAny != null;
-    }
-
-    @Override
-    @Programmatic
     public void publishObjects() {
 
-        if(!canPublish()) {
+        if(publishingServiceIfAny == null) {
             return;
         }
 
@@ -169,16 +167,30 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
         publishingServiceIfAny.publish(metadata, payload);
     }
 
+    @Programmatic
     public void publishAction(
             final ObjectAction objectAction,
             final IdentifiedHolder identifiedHolder,
             final ObjectAdapter targetAdapter,
             final List<ObjectAdapter> parameterAdapters,
             final ObjectAdapter resultAdapter) {
-        if(!canPublish()) {
+
+        publishActionToPublishingService(
+                objectAction, identifiedHolder, targetAdapter, parameterAdapters, resultAdapter);
+
+        publishActionToPublisherServices(
+                objectAction, identifiedHolder, targetAdapter, parameterAdapters, resultAdapter);
+
+    }
+
+    private void publishActionToPublishingService(
+            final ObjectAction objectAction,
+            final IdentifiedHolder identifiedHolder,
+            final ObjectAdapter targetAdapter,
+            final List<ObjectAdapter> parameterAdapters, final ObjectAdapter resultAdapter) {
+        if(publishingServiceIfAny == null) {
             return;
         }
-
         final String currentUser = userService.getUser().getName();
         final Timestamp timestamp = clockService.nowAsJavaSqlTimestamp();
 
@@ -240,7 +252,6 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
         publishingServiceIfAny.publish(metadata, payload);
     }
 
-
     private static <T> List<T> immutableList(final Iterable<T> iterable) {
         return Collections.unmodifiableList(Lists.newArrayList(iterable));
     }
@@ -299,18 +310,72 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
                 enlistedAdapterClass, null, enlistedTarget, null, null, null, null);
     }
 
+    private void publishActionToPublisherServices(
+            final ObjectAction objectAction,
+            final IdentifiedHolder identifiedHolder,
+            final ObjectAdapter targetAdapter,
+            final List<ObjectAdapter> parameterAdapters,
+            final ObjectAdapter resultAdapter) {
+
+        final Interaction interaction = interactionContext.getInteraction();
+        final Interaction.Execution execution = interaction.getPriorExecution();
+
+        if(publisherServices == null || publisherServices.isEmpty()) {
+            return;
+        }
+
+        final Command command = commandContext.getCommand();
+
+        final Interaction.SequenceName sequenceName = Interaction.SequenceName.PUBLISHED_EVENT;
+        final int nextEventSequence = command.next(sequenceName.abbr());
+        final UUID transactionId = command.getTransactionId();
+
+        final String actionMemberIdentifier = CommandUtil.actionIdentifierFor(objectAction);
+        final Bookmark actionTarget = CommandUtil.bookmarkFor(targetAdapter);
+
+        final RootOid adapterOid = (RootOid) targetAdapter.getOid();
+        final String oidStr = getOidMarshaller().marshal(adapterOid);
+        final Identifier actionIdentifier = objectAction.getIdentifier();
+
+        final String title = oidStr + ": " + actionIdentifier.toNameParmsIdentityString();
+
+        final String currentUser = userService.getUser().getName();
+        final Timestamp timestamp = clockService.nowAsJavaSqlTimestamp();
+
+        for (PublisherService publisherService : publisherServices) {
+            final ActionInvocationMementoDto aimDto =
+                ActionInvocationMementoDtoUtils.newDto(
+                        transactionId,
+                        nextEventSequence,
+                        actionMemberIdentifier,
+                        actionTarget,
+                        title,
+                        currentUser,
+                        timestamp
+                );
+            publisherService.publish(aimDto);
+        }
+    }
+
+
     private IsisTransactionManager.PersistenceSessionTransactionManagement getPersistenceSession() {
         return IsisContext.getPersistenceSession();
     }
 
 
     @Inject
+    private List<PublisherService> publisherServices;
+
+    @Inject
     private PublishingService publishingServiceIfAny;
 
     @Inject
     private EnlistedObjectsServiceInternal enlistedObjectsServiceInternal;
 
     @Inject
+    private InteractionContext interactionContext;
+
+    @Inject
     private CommandContext commandContext;
 
     @Inject

http://git-wip-us.apache.org/repos/asf/isis/blob/0d892e1b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index b05e4b9..7fe16c1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -2225,9 +2225,8 @@ public class PersistenceSession implements
      * to determine which callback to fire.
      */
     public void enlistCreatedAndRemapIfRequiredThenInvokeIsisInvokePersistingOrUpdatedCallback(final Persistable pojo) {
-        final ObjectAdapter objectAdapter = adapterFor(pojo);
+        final ObjectAdapter adapter = adapterFor(pojo);
 
-        final ObjectAdapter adapter = objectAdapter;
         final RootOid rootOid = (RootOid) adapter.getOid(); // ok since this is for a Persistable
 
         if (rootOid.isTransient()) {