From 2399f46fc196accea19048aeeb46fc951edcb3a2 Mon Sep 17 00:00:00 2001 From: Chris Shields Date: Fri, 15 May 2020 10:18:22 +0100 Subject: [PATCH] REPO-5117: Node move event - primary parent only (#991) REPO-5117: Node move event - primary parent only --- .../repo/event2/EventConsolidator.java | 25 +++++++++++++++++++ .../alfresco/repo/event2/EventGenerator.java | 9 +++++++ .../repo/event2/EventSupportedPolicies.java | 3 ++- .../repo/event2/NodeResourceHelper.java | 7 ++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/alfresco/repo/event2/EventConsolidator.java b/src/main/java/org/alfresco/repo/event2/EventConsolidator.java index 7bb68bd08b..e0a0777ac7 100644 --- a/src/main/java/org/alfresco/repo/event2/EventConsolidator.java +++ b/src/main/java/org/alfresco/repo/event2/EventConsolidator.java @@ -33,6 +33,7 @@ import java.util.Date; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -64,6 +65,7 @@ public class EventConsolidator implements EventSupportedPolicies private Map propertiesAfter; private NodeRef nodeRef; private QName nodeType; + private List primaryHierarchyBefore; public EventConsolidator(NodeResourceHelper nodeResourceHelper) { @@ -144,6 +146,15 @@ public class EventConsolidator implements EventSupportedPolicies setAfterProperties(helper.getProperties(nodeRef)); } + @Override + public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) + { + eventTypes.add(EventType.NODE_UPDATED); + + createBuilderIfAbsent(newChildAssocRef.getChildRef()); + setBeforePrimaryHierarchy(helper.getPrimaryHierarchy(oldChildAssocRef.getParentRef(), true)); + } + @Override public void onUpdateProperties(NodeRef nodeRef, Map before, Map after) { @@ -196,6 +207,15 @@ public class EventConsolidator implements EventSupportedPolicies } } + private void setBeforePrimaryHierarchy(List before) + { + // Don't overwrite the original value if there are multiple calls. + if (primaryHierarchyBefore == null) + { + primaryHierarchyBefore = before; + } + } + private NodeResource buildNodeResource() { if (resourceBuilder == null) @@ -265,6 +285,11 @@ public class EventConsolidator implements EventSupportedPolicies builder.setAspectNames(aspectsBefore); } + if (primaryHierarchyBefore != null && !primaryHierarchyBefore.isEmpty()) + { + builder.setPrimaryHierarchy(primaryHierarchyBefore); + } + return builder.build(); } diff --git a/src/main/java/org/alfresco/repo/event2/EventGenerator.java b/src/main/java/org/alfresco/repo/event2/EventGenerator.java index e1ba1ebeaa..9e2e385ca4 100644 --- a/src/main/java/org/alfresco/repo/event2/EventGenerator.java +++ b/src/main/java/org/alfresco/repo/event2/EventGenerator.java @@ -39,6 +39,7 @@ import org.alfresco.repo.event2.filter.NodeTypeFilter; import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy; import org.alfresco.repo.node.NodeServicePolicies.OnAddAspectPolicy; import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy; +import org.alfresco.repo.node.NodeServicePolicies.OnMoveNodePolicy; import org.alfresco.repo.node.NodeServicePolicies.OnRemoveAspectPolicy; import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy; import org.alfresco.repo.policy.JavaBehaviour; @@ -119,6 +120,8 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin new JavaBehaviour(this, "onAddAspect")); policyComponent.bindClassBehaviour(OnRemoveAspectPolicy.QNAME, this, new JavaBehaviour(this, "onRemoveAspect")); + policyComponent.bindClassBehaviour(OnMoveNodePolicy.QNAME, this, + new JavaBehaviour(this, "onMoveNode")); } public void setPolicyComponent(PolicyComponent policyComponent) @@ -172,6 +175,12 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin getEventConsolidator(childAssocRef.getChildRef()).onCreateNode(childAssocRef); } + @Override + public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) + { + getEventConsolidator(newChildAssocRef.getChildRef()).onMoveNode(oldChildAssocRef, newChildAssocRef); + } + @Override public void onUpdateProperties(NodeRef nodeRef, Map before, Map after) { diff --git a/src/main/java/org/alfresco/repo/event2/EventSupportedPolicies.java b/src/main/java/org/alfresco/repo/event2/EventSupportedPolicies.java index fc037f9549..b31a8bfc85 100644 --- a/src/main/java/org/alfresco/repo/event2/EventSupportedPolicies.java +++ b/src/main/java/org/alfresco/repo/event2/EventSupportedPolicies.java @@ -37,6 +37,7 @@ public interface EventSupportedPolicies extends NodeServicePolicies.OnCreateNode NodeServicePolicies.OnUpdatePropertiesPolicy, NodeServicePolicies.BeforeDeleteNodePolicy, NodeServicePolicies.OnAddAspectPolicy, - NodeServicePolicies.OnRemoveAspectPolicy + NodeServicePolicies.OnRemoveAspectPolicy, + NodeServicePolicies.OnMoveNodePolicy { } diff --git a/src/main/java/org/alfresco/repo/event2/NodeResourceHelper.java b/src/main/java/org/alfresco/repo/event2/NodeResourceHelper.java index b03338aaf3..beaf77f1ce 100644 --- a/src/main/java/org/alfresco/repo/event2/NodeResourceHelper.java +++ b/src/main/java/org/alfresco/repo/event2/NodeResourceHelper.java @@ -31,6 +31,7 @@ import java.time.ZonedDateTime; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -274,4 +275,10 @@ public class NodeResourceHelper { return mapToNodeAspects(nodeService.getAspects(nodeRef)); } + + public List getPrimaryHierarchy(NodeRef nodeRef, boolean showLeaf) + { + final Path path = nodeService.getPath(nodeRef); + return PathUtil.getNodeIdsInReverse(path, showLeaf); + } } \ No newline at end of file