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()) {