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.
*