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/05 19:17:07 UTC
[isis] branch master updated: ISIS-2567: fixes commands not getting
published
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 98495fa ISIS-2567: fixes commands not getting published
98495fa is described below
commit 98495fab24f6ce6885eba3d5b062297076d4f168
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Mar 5 20:16:11 2021 +0100
ISIS-2567: fixes commands not getting published
with member execution, consider CommandPublishingFacet only in case
Command and ObjectMember have a matching member-id
---
.../isis/applib/services/command/Command.java | 7 +++++--
.../publish/command/CommandPublishingFacet.java | 22 ++++++++++++++++++++++
.../executor/MemberExecutorServiceDefault.java | 10 +++++-----
.../publish/CommandPublisherDefault.java | 8 ++++++--
4 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java b/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
index 857e9c1..69dc5a8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
@@ -23,6 +23,7 @@ import java.util.UUID;
import org.apache.isis.applib.events.domain.ActionDomainEvent;
import org.apache.isis.applib.jaxb.JavaSqlXMLGregorianCalendarMarshalling;
+import org.apache.isis.applib.mixins.security.HasUsername;
import org.apache.isis.applib.mixins.system.HasInteractionId;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.commanddto.HasCommandDto;
@@ -32,7 +33,6 @@ import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
import org.apache.isis.applib.services.wrapper.WrapperFactory;
import org.apache.isis.applib.services.wrapper.control.AsyncControl;
import org.apache.isis.commons.functional.Result;
-import org.apache.isis.applib.mixins.security.HasUsername;
import org.apache.isis.schema.cmd.v2.CommandDto;
import lombok.Getter;
@@ -141,6 +141,7 @@ public class Command implements HasInteractionId, HasUsername, HasCommandDto {
* Derived from {@link #getCommandDto()}, is the {@link Bookmark} of
* the target object (entity or service) on which this action/edit was performed.
*/
+ @ToString.Include(name = "target")
public Bookmark getTarget() {
return commandDto != null
? Bookmark.from(commandDto.getTargets().getOid().get(0))
@@ -151,6 +152,7 @@ public class Command implements HasInteractionId, HasUsername, HasCommandDto {
* Derived from {@link #getCommandDto()}, holds a string
* representation of the invoked action, or the edited property.
*/
+ @ToString.Include(name = "memberId")
public String getLogicalMemberIdentifier() {
return commandDto != null
? commandDto.getMember().getLogicalMemberIdentifier()
@@ -251,7 +253,8 @@ public class Command implements HasInteractionId, HasUsername, HasCommandDto {
*/
@Getter
private boolean publishingEnabled;
-
+
+ @ToString.Exclude
private final Updater UPDATER = new Updater();
public class Updater implements CommandOutcomeHandler {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java
index 504b9af..94748e4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java
@@ -19,12 +19,15 @@
package org.apache.isis.core.metamodel.facets.members.publish.command;
+import java.util.Objects;
+
import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.commanddto.processor.CommandDtoProcessor;
import org.apache.isis.applib.services.publishing.spi.CommandSubscriber;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.services.publishing.CommandPublisher;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import lombok.NonNull;
import lombok.val;
@@ -52,4 +55,23 @@ public interface CommandPublishingFacet extends Facet {
}
return false;
}
+
+ /**
+ * Will only run the runnable, if command and objectMember have a matching member-id
+ * and if the facetHoler has a CommandPublishingFacet.
+ */
+ public static void ifPublishingEnabledForCommand(
+ final @NonNull Command command,
+ final @NonNull ObjectMember objectMember,
+ final @NonNull FacetHolder facetHolder,
+ final @NonNull Runnable runnable) {
+
+ val memberId1 = objectMember.getIdentifier().getLogicalIdentityString("#");
+ val memberId2 = command.getLogicalMemberIdentifier();
+
+ if(Objects.equals(memberId1, memberId2)
+ && isPublishingEnabled(facetHolder)) {
+ runnable.run();
+ }
+ }
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java
index 209948c..456c9ee 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/executor/MemberExecutorServiceDefault.java
@@ -116,9 +116,9 @@ implements MemberExecutorService {
val interaction = getInteractionElseFail();
val command = interaction.getCommand();
-
- command.updater().setPublishingEnabled(
- CommandPublishingFacet.isPublishingEnabled(facetHolder));
+
+ CommandPublishingFacet.ifPublishingEnabledForCommand(
+ command, owningAction, facetHolder, ()->command.updater().setPublishingEnabled(true));
val actionId = owningAction.getIdentifier().getFullIdentityString();
log.debug("about to invoke action {}", actionId);
@@ -196,8 +196,8 @@ implements MemberExecutorService {
return head.getTarget();
}
- command.updater().setPublishingEnabled(
- CommandPublishingFacet.isPublishingEnabled(facetHolder));
+ CommandPublishingFacet.ifPublishingEnabledForCommand(
+ command, owningProperty, facetHolder, ()->command.updater().setPublishingEnabled(true));
val propertyId = owningProperty.getIdentifier().getMemberName();
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java
index 5db82b1..71a51fc 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/publish/CommandPublisherDefault.java
@@ -38,6 +38,7 @@ import org.apache.isis.core.metamodel.services.publishing.CommandPublisher;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
@Service
@Named("isis.runtimeservices.CommandPublisherDefault")
@@ -45,7 +46,7 @@ import lombok.RequiredArgsConstructor;
@Primary
@Qualifier("Internal")
@RequiredArgsConstructor(onConstructor_ = {@Inject})
-//@Log4j2
+@Log4j2
public class CommandPublisherDefault implements CommandPublisher {
private final List<CommandSubscriber> subscribers;
@@ -68,12 +69,15 @@ public class CommandPublisherDefault implements CommandPublisher {
if(!command.isPublishingEnabled()) {
return;
}
+
if(command.getLogicalMemberIdentifier() == null) {
// eg if seed fixtures
return;
}
+
+ log.debug("PUSH command: %s to %s", command, enabledSubscribers);
- subscribers.forEach(subscriber -> subscriber.onCompleted(command));
+ enabledSubscribers.forEach(subscriber -> subscriber.onCompleted(command));
}
// -- HELPER