diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml index 07adb5d9bf..6c0783de97 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml @@ -52,6 +52,7 @@ + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordsManagementSearchBehaviour.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordsManagementSearchBehaviour.java index 95a77f610f..b6e778e094 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordsManagementSearchBehaviour.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/RecordsManagementSearchBehaviour.java @@ -45,6 +45,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedul import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; 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.rma.aspect.FrozenAspect; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordDefinition; @@ -99,6 +100,11 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel /** Record service*/ private RecordService recordService; + /** + * Frozen aspect + */ + private FrozenAspect frozenAspect; + /** * @param nodeService the nodeService to set */ @@ -155,6 +161,15 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel this.recordService = recordService; } + /** + * @param frozenAspect frozen aspect + */ + public void setFrozenAspect(FrozenAspect frozenAspect) + { + this.frozenAspect = frozenAspect; + } + + /** on add search aspect behaviour */ private JavaBehaviour onAddSearchAspect = new JavaBehaviour(this, "rmSearchAspectAdd", NotificationFrequency.TRANSACTION_COMMIT); @@ -800,26 +815,34 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel if (!methodCached("setVitalRecordDefinitionDetails", nodeRef)) { VitalRecordDefinition vrd = vitalRecordService.getVitalRecordDefinition(nodeRef); - - if (vrd != null && vrd.isEnabled() && vrd.getReviewPeriod() != null) + try { - // Set the property values - nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD, vrd.getReviewPeriod().getPeriodType()); - nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION, vrd.getReviewPeriod().getExpression()); - - if (logger.isDebugEnabled()) + frozenAspect.disableOnPropUpdateFrozenAspect(); + if (vrd != null && vrd.isEnabled() && vrd.getReviewPeriod() != null) { - logger.debug("Set rma:recordSearchVitalRecordReviewPeriod for node " + nodeRef + " to: " + + // Set the property values + nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD, vrd.getReviewPeriod().getPeriodType()); + nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION, vrd.getReviewPeriod().getExpression()); + + if (logger.isDebugEnabled()) + { + logger.debug("Set rma:recordSearchVitalRecordReviewPeriod for node " + nodeRef + " to: " + vrd.getReviewPeriod().getPeriodType()); - logger.debug("Set rma:recordSearchVitalRecordReviewPeriodExpression for node " + nodeRef + " to: " + + logger.debug("Set rma:recordSearchVitalRecordReviewPeriodExpression for node " + nodeRef + " to: " + vrd.getReviewPeriod().getExpression()); + } + } + else + { + // Clear the vital record properties + nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD, null); + nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION, null); } } - else + finally { - // Clear the vital record properties - nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD, null); - nodeService.setProperty(nodeRef, PROP_RS_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION, null); + frozenAspect.enableOnPropUpdateFrozenAspect(); + } } } @@ -871,13 +894,21 @@ public class RecordsManagementSearchBehaviour implements RecordsManagementModel { if (schedule != null) { - nodeService.setProperty(recordOrFolder, PROP_RS_DISPOITION_AUTHORITY, schedule.getDispositionAuthority()); - nodeService.setProperty(recordOrFolder, PROP_RS_DISPOITION_INSTRUCTIONS, schedule.getDispositionInstructions()); - - if (logger.isDebugEnabled()) + try { - logger.debug("Set rma:recordSearchDispositionAuthority for node " + recordOrFolder + " to: " + schedule.getDispositionAuthority()); - logger.debug("Set rma:recordSearchDispositionInstructions for node " + recordOrFolder + " to: " + schedule.getDispositionInstructions()); + frozenAspect.disableOnPropUpdateFrozenAspect(); + nodeService.setProperty(recordOrFolder, PROP_RS_DISPOITION_AUTHORITY, schedule.getDispositionAuthority()); + nodeService.setProperty(recordOrFolder, PROP_RS_DISPOITION_INSTRUCTIONS, schedule.getDispositionInstructions()); + + if (logger.isDebugEnabled()) + { + logger.debug("Set rma:recordSearchDispositionAuthority for node " + recordOrFolder + " to: " + schedule.getDispositionAuthority()); + logger.debug("Set rma:recordSearchDispositionInstructions for node " + recordOrFolder + " to: " + schedule.getDispositionInstructions()); + } + } + finally + { + frozenAspect.enableOnPropUpdateFrozenAspect(); } } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java index 7f4648fb6c..b40ccea490 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/FrozenAspect.java @@ -68,6 +68,11 @@ public class FrozenAspect extends BaseBehaviourBean NodeServicePolicies.OnUpdatePropertiesPolicy, NodeServicePolicies.BeforeMoveNodePolicy { + /** + * Behaviour name for on update properties for frozen aspect + */ + private static final String ON_UPDATE_PROP_FROZEN_BEHAVIOUR_NAME = "onUpdatePropertiesFrozenAspect"; + /** freeze service */ protected FreezeService freezeService; @@ -79,6 +84,32 @@ public class FrozenAspect extends BaseBehaviourBean this.freezeService = freezeService; } + + /** + * Disable the on update properties for frozen aspect behaviour + */ + public void disableOnPropUpdateFrozenAspect() + { + org.alfresco.repo.policy.Behaviour behaviour = getBehaviour(ON_UPDATE_PROP_FROZEN_BEHAVIOUR_NAME); + if (behaviour != null) + { + behaviour.disable(); + } + + } + + /** + * Enable the on update properties for frozen aspect + */ + public void enableOnPropUpdateFrozenAspect() + { + org.alfresco.repo.policy.Behaviour behaviour = getBehaviour(ON_UPDATE_PROP_FROZEN_BEHAVIOUR_NAME); + if (behaviour != null && !behaviour.isEnabled()) + { + behaviour.enable(); + } + } + /** * Ensure that no frozen node is deleted. * @@ -229,6 +260,7 @@ public class FrozenAspect extends BaseBehaviourBean @Behaviour ( kind = BehaviourKind.CLASS, + name = ON_UPDATE_PROP_FROZEN_BEHAVIOUR_NAME, notificationFrequency = NotificationFrequency.FIRST_EVENT ) public void onUpdateProperties(NodeRef nodeRef, Map before, Map after)