Compare commits

...

2 Commits

Author SHA1 Message Date
Damian Ujma
2e6f69c5e4 ACS-8668 Add PoC (Event generator solution) 2024-09-25 16:45:10 +02:00
Damian Ujma
6e76b119a9 ACS-8668 Add PoC 2024-09-23 15:04:05 +02:00
5 changed files with 50 additions and 2 deletions

View File

@@ -48,6 +48,7 @@ import org.alfresco.repo.event2.filter.ChildAssociationTypeFilter;
import org.alfresco.repo.event2.filter.EventFilterRegistry;
import org.alfresco.repo.event2.filter.EventUserFilter;
import org.alfresco.repo.event2.filter.NodeTypeFilter;
import org.alfresco.repo.node.NodeServicePolicies.BeforeArchiveNodePolicy;
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteAssociationPolicy;
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteChildAssociationPolicy;
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy;
@@ -155,6 +156,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
{
setClassBehaviour(OnCreateNodePolicy.QNAME, "onCreateNode");
setClassBehaviour(BeforeDeleteNodePolicy.QNAME, "beforeDeleteNode");
setClassBehaviour(BeforeArchiveNodePolicy.QNAME, "beforeArchiveNode");
setClassBehaviour(OnUpdatePropertiesPolicy.QNAME, "onUpdateProperties");
setClassBehaviour(OnSetNodeTypePolicy.QNAME, "onSetNodeType");
setClassBehaviour(OnAddAspectPolicy.QNAME, "onAddAspect");
@@ -549,6 +551,12 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
//NOOP
}
@Override
public void beforeArchiveNode(NodeRef nodeRef)
{
getEventConsolidator(nodeRef).beforeArchiveNode(nodeRef);
}
protected class EventTransactionListener extends TransactionListenerAdapter
{
@Override

View File

@@ -39,6 +39,7 @@ public interface EventSupportedPolicies extends NodeServicePolicies.OnCreateNode
NodeServicePolicies.BeforeDeleteNodePolicy,
NodeServicePolicies.OnAddAspectPolicy,
NodeServicePolicies.OnRemoveAspectPolicy,
NodeServicePolicies.OnMoveNodePolicy
NodeServicePolicies.OnMoveNodePolicy,
NodeServicePolicies.BeforeArchiveNodePolicy
{
}

View File

@@ -67,6 +67,7 @@ public class NodeEventConsolidator extends EventConsolidator<NodeRef, NodeResour
private List<String> primaryHierarchyBefore;
private List<String> secondaryParentsBefore;
private boolean resourceBeforeAllFieldsNull = true;
protected boolean isArchived = false;
public NodeEventConsolidator(NodeResourceHelper nodeResourceHelper)
{
@@ -94,6 +95,11 @@ public class NodeEventConsolidator extends EventConsolidator<NodeRef, NodeResour
eventDataBuilder.setResourceBefore(buildNodeResourceBeforeDelta(resource));
}
if (eventType == EventType.NODE_DELETED && !isArchived)
{
eventDataBuilder.setResourceBefore(NodeResource.builder().build());
}
return eventDataBuilder.build();
}
@@ -196,6 +202,14 @@ public class NodeEventConsolidator extends EventConsolidator<NodeRef, NodeResour
createBuilderIfAbsent(nodeRef);
}
@Override
public void beforeArchiveNode(NodeRef nodeRef)
{
eventTypes.add(EventType.NODE_DELETED);
createBuilderIfAbsent(nodeRef);
isArchived = true;
}
@Override
public void onAddAspect(NodeRef nodeRef, QName aspectTypeQName)
{
@@ -515,4 +529,5 @@ public class NodeEventConsolidator extends EventConsolidator<NodeRef, NodeResour
protected void setResourceBeforeAllFieldsNull(boolean resourceBeforeAllFieldsNull){
this.resourceBeforeAllFieldsNull = resourceBeforeAllFieldsNull;
}
}

View File

@@ -33,6 +33,7 @@ import java.util.Map;
import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.event2.EventGenerator;
import org.alfresco.repo.node.NodeServicePolicies.BeforeAddAspectPolicy;
import org.alfresco.repo.node.NodeServicePolicies.BeforeArchiveNodePolicy;
import org.alfresco.repo.node.NodeServicePolicies.BeforeCreateNodePolicy;
@@ -111,6 +112,8 @@ public abstract class AbstractNodeServiceImpl implements NodeService
protected TransactionService transactionService;
protected TenantService tenantService;
protected Set<String> storesToIgnorePolicies = Collections.emptySet();
protected EventGenerator eventGenerator;
protected String archiveStore;
/*
* Policy delegates
@@ -174,6 +177,16 @@ public abstract class AbstractNodeServiceImpl implements NodeService
this.storesToIgnorePolicies = storesToIgnorePolicies;
}
public void setArchiveStore(String archiveStore)
{
this.archiveStore = archiveStore;
}
public void setEventGenerator(EventGenerator eventGenerator)
{
this.eventGenerator = eventGenerator;
}
/**
* Checks equality by type and uuid
*/
@@ -244,6 +257,11 @@ public abstract class AbstractNodeServiceImpl implements NodeService
{
return (storesToIgnorePolicies.contains(tenantService.getBaseName(nodeRef.getStoreRef()).toString()));
}
private boolean isInArchiveStore(NodeRef nodeRef)
{
return archiveStore.equals(tenantService.getBaseName(nodeRef.getStoreRef()).toString());
}
/**
* @see NodeServicePolicies.BeforeCreateStorePolicy#beforeCreateStore(QName,
@@ -479,11 +497,15 @@ public abstract class AbstractNodeServiceImpl implements NodeService
*/
protected void invokeBeforeDeleteNode(NodeRef nodeRef)
{
if(isInArchiveStore(nodeRef))
{
eventGenerator.beforeDeleteNode(nodeRef);
return;
}
if (ignorePolicy(nodeRef))
{
return;
}
// get qnames to invoke against
Set<QName> qnames = getTypeAndAspectQNames(nodeRef);
// execute policy for node type and aspects

View File

@@ -281,6 +281,8 @@
<ref bean="storesToIgnorePolicies"/>
</property>
<property name="enableTimestampPropagation" value="${system.enableTimestampPropagation}" />
<property name="archiveStore" value="${spaces.archive.store}" />
<property name="eventGenerator" ref="eventGeneratorV2"/>
</bean>
<bean id="nodeAuditor" class="org.alfresco.repo.node.NodeAuditor">