diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml index bd90339ffb..7ff02d14d0 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml @@ -577,8 +577,11 @@ - + + + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java index f0068e8066..ece768b6f9 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java @@ -32,6 +32,8 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.event.EventCompletionDetails; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementSearchBehaviour; +import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ParameterDefinition; import org.alfresco.service.cmr.repository.NodeRef; @@ -54,6 +56,13 @@ public class BroadcastDispositionActionDefinitionUpdateAction extends RMActionEx public static final String NAME = "broadcastDispositionActionDefinitionUpdate"; public static final String CHANGED_PROPERTIES = "changedProperties"; + + private BehaviourFilter behaviourFilter; + + public void setBehaviourFilter(BehaviourFilter behaviourFilter) + { + this.behaviourFilter = behaviourFilter; + } /** * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, @@ -75,11 +84,19 @@ public class BroadcastDispositionActionDefinitionUpdateAction extends RMActionEx NodeRef rmContainer = nodeService.getPrimaryParent(dispositionScheduleNode).getParentRef(); DispositionSchedule dispositionSchedule = dispositionService.getAssociatedDispositionSchedule(rmContainer); - List disposableItems = dispositionService.getDisposableItems(dispositionSchedule); - for (NodeRef disposableItem : disposableItems) + behaviourFilter.disableBehaviour(); + try { - updateDisposableItem(dispositionSchedule, disposableItem, actionedUponNodeRef, changedProps); - } + List disposableItems = dispositionService.getDisposableItems(dispositionSchedule); + for (NodeRef disposableItem : disposableItems) + { + updateDisposableItem(dispositionSchedule, disposableItem, actionedUponNodeRef, changedProps); + } + } + finally + { + behaviourFilter.enableBehaviour(); + } } /** @@ -250,6 +267,9 @@ public class BroadcastDispositionActionDefinitionUpdateAction extends RMActionEx } } + // NOTE: eventsList contains all the events that have been updated! + // TODO: manually update the search properties for the parent node! + // finally since events may have changed re-calculate the events eligible flag boolean eligible = updateEventEligible(nextAction); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java index 1d9d428438..ba13a75752 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java @@ -19,6 +19,7 @@ package org.alfresco.module.org_alfresco_module_rm.job; +import java.util.Date; import java.util.List; import org.alfresco.error.AlfrescoRuntimeException; @@ -100,8 +101,27 @@ public class PublishUpdatesJobExecuter extends RecordsManagementJobExecuter markPublishInProgress(nodeRef); try { + Date start = new Date(); + if (logger.isDebugEnabled() == true) + { + logger.debug("Starting publish of updates ..."); + logger.debug(" - for " + nodeRef.toString()); + logger.debug(" - at " + start.toString()); + } + // Publish updates publishUpdates(nodeRef); + + + if (logger.isDebugEnabled() == true) + { + Date end = new Date(); + long duration = end.getTime() - start.getTime(); + logger.debug("Completed publish of updates ..."); + logger.debug(" - for " + nodeRef.toString()); + logger.debug(" - at " + end.toString()); + logger.debug(" - duration " + Long.toString(duration)); + } } finally { @@ -143,10 +163,19 @@ public class PublishUpdatesJobExecuter extends RecordsManagementJobExecuter } // Execute query to find updates awaiting publishing - ResultSet results = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, - SearchService.LANGUAGE_LUCENE, query); - List resultNodes = results.getNodeRefs(); - results.close(); + List resultNodes = null; + ResultSet results = searchService.query( + StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, + SearchService.LANGUAGE_LUCENE, + query); + try + { + resultNodes = results.getNodeRefs(); + } + finally + { + results.close(); + } if (logger.isDebugEnabled() == true) { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordComponentIdentifierAspect.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordComponentIdentifierAspect.java index d2589821b2..2a037bf81c 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordComponentIdentifierAspect.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordComponentIdentifierAspect.java @@ -136,14 +136,13 @@ public class RecordComponentIdentifierAspect */ private void updateUniqueness(NodeRef nodeRef, String beforeId, String afterId) { - ChildAssociationRef childAssoc = nodeService.getPrimaryParent(nodeRef); - NodeRef contextNodeRef = childAssoc.getParentRef(); - if (beforeId == null) { if (afterId != null) { // Just create it + ChildAssociationRef childAssoc = nodeService.getPrimaryParent(nodeRef); + NodeRef contextNodeRef = childAssoc.getParentRef(); attributeService.createAttribute(null, CONTEXT_VALUE, contextNodeRef, afterId); } else @@ -156,6 +155,8 @@ public class RecordComponentIdentifierAspect if (beforeId != null) { // The before value was not null, so remove it + ChildAssociationRef childAssoc = nodeService.getPrimaryParent(nodeRef); + NodeRef contextNodeRef = childAssoc.getParentRef(); attributeService.removeAttribute(CONTEXT_VALUE, contextNodeRef, beforeId); } // Do a blanket removal in case this is a contextual nodes @@ -164,6 +165,8 @@ public class RecordComponentIdentifierAspect else { // This is a full update + ChildAssociationRef childAssoc = nodeService.getPrimaryParent(nodeRef); + NodeRef contextNodeRef = childAssoc.getParentRef(); attributeService.updateOrCreateAttribute( CONTEXT_VALUE, contextNodeRef, beforeId, CONTEXT_VALUE, contextNodeRef, afterId); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementSearchBehaviour.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementSearchBehaviour.java index c7f33df3a3..4941787fdd 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementSearchBehaviour.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementSearchBehaviour.java @@ -146,7 +146,22 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel } /** Java behaviour */ - private JavaBehaviour onAddSearchAspect = new JavaBehaviour(this, "rmSearchAspectAdd", NotificationFrequency.TRANSACTION_COMMIT); + private JavaBehaviour onAddSearchAspect = new JavaBehaviour(this, "rmSearchAspectAdd", NotificationFrequency.TRANSACTION_COMMIT); + private JavaBehaviour jbDispositionActionCreate = new JavaBehaviour(this, "dispositionActionCreate", NotificationFrequency.TRANSACTION_COMMIT); + private JavaBehaviour jbDispositionActionPropertiesUpdate = new JavaBehaviour(this, "dispositionActionPropertiesUpdate", NotificationFrequency.TRANSACTION_COMMIT); + private JavaBehaviour jbDispositionSchedulePropertiesUpdate = new JavaBehaviour(this, "dispositionSchedulePropertiesUpdate", NotificationFrequency.TRANSACTION_COMMIT); + private JavaBehaviour jbEventExecutionUpdate = new JavaBehaviour(this, "eventExecutionUpdate", NotificationFrequency.TRANSACTION_COMMIT); + private JavaBehaviour jbEventExecutionDelete = new JavaBehaviour(this, "eventExecutionDelete", NotificationFrequency.TRANSACTION_COMMIT); + + /** Array of behaviours related to disposition schedule artifacts */ + private JavaBehaviour[] jbDispositionBehaviours = + { + jbDispositionActionCreate, + jbDispositionActionPropertiesUpdate, + jbDispositionSchedulePropertiesUpdate, + jbEventExecutionUpdate, + jbEventExecutionDelete + }; /** * Initialisation method @@ -156,28 +171,28 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel this.policyComponent.bindClassBehaviour( QName.createQName(NamespaceService.ALFRESCO_URI, "onCreateNode"), TYPE_DISPOSITION_ACTION, - new JavaBehaviour(this, "dispositionActionCreate", NotificationFrequency.TRANSACTION_COMMIT)); + jbDispositionActionCreate); this.policyComponent.bindClassBehaviour( QName.createQName(NamespaceService.ALFRESCO_URI, "onUpdateProperties"), TYPE_DISPOSITION_ACTION, - new JavaBehaviour(this, "dispositionActionPropertiesUpdate", NotificationFrequency.TRANSACTION_COMMIT)); + jbDispositionActionPropertiesUpdate); this.policyComponent.bindClassBehaviour( QName.createQName(NamespaceService.ALFRESCO_URI, "onUpdateProperties"), TYPE_DISPOSITION_SCHEDULE, - new JavaBehaviour(this, "dispositionSchedulePropertiesUpdate", NotificationFrequency.TRANSACTION_COMMIT)); + jbDispositionSchedulePropertiesUpdate); this.policyComponent.bindAssociationBehaviour( QName.createQName(NamespaceService.ALFRESCO_URI, "onCreateChildAssociation"), TYPE_DISPOSITION_ACTION, ASSOC_EVENT_EXECUTIONS, - new JavaBehaviour(this, "eventExecutionUpdate", NotificationFrequency.TRANSACTION_COMMIT)); + jbEventExecutionUpdate); this.policyComponent.bindClassBehaviour( QName.createQName(NamespaceService.ALFRESCO_URI, "onDeleteNode"), TYPE_EVENT_EXECUTION, - new JavaBehaviour(this, "eventExecutionDelete", NotificationFrequency.TRANSACTION_COMMIT)); + jbEventExecutionDelete); this.policyComponent.bindClassBehaviour( QName.createQName(NamespaceService.ALFRESCO_URI, "onAddAspect"), @@ -216,6 +231,22 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel new JavaBehaviour(this, "frozenAspectUpdateProperties", NotificationFrequency.TRANSACTION_COMMIT)); } + public void disableDispositionScheduleBehaviour() + { + for (JavaBehaviour jb : jbDispositionBehaviours) + { + jb.disable(); + } + } + + public void enableDispositionScheduleBehaviour() + { + for (JavaBehaviour jb : jbDispositionBehaviours) + { + jb.enable(); + } + } + /** * Ensures the search aspect for the given node is present, complete and correct. *