RM-1540: Event is displayed for record moved to category with no disposition

RM-1345: Edit Disposition Date is not working for moved items



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@74311 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2014-06-20 05:02:06 +00:00
parent 4c9673a762
commit 59cc87b1e8
9 changed files with 427 additions and 96 deletions

View File

@@ -472,28 +472,33 @@ public class DispositionActionImpl implements DispositionAction,
if (!events.isEmpty())
{
if (!getDispositionActionDefinition().eligibleOnFirstCompleteEvent())
{
// if one event is complete then the disposition action is eligible
eligible = true;
for (EventCompletionDetails event : events)
// get the disposition action definition
DispositionActionDefinition dispositionActionDefinition = getDispositionActionDefinition();
if (dispositionActionDefinition != null)
{
if (!dispositionActionDefinition.eligibleOnFirstCompleteEvent())
{
if (!event.isEventComplete())
// if one event is complete then the disposition action is eligible
eligible = true;
for (EventCompletionDetails event : events)
{
eligible = false;
break;
if (!event.isEventComplete())
{
eligible = false;
break;
}
}
}
}
else
{
// all events must be complete for the disposition action to be eligible
for (EventCompletionDetails event : events)
else
{
if (event.isEventComplete())
// all events must be complete for the disposition action to be eligible
for (EventCompletionDetails event : events)
{
eligible = true;
break;
if (event.isEventComplete())
{
eligible = true;
break;
}
}
}
}

View File

@@ -0,0 +1,65 @@
/**
*
*/
package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
/**
* Abstract disposable item, containing commonality between record and record folder.
*
* @author Roy Wetherall
* @since 2.2
*/
public abstract class AbstractDisposableItem extends BaseBehaviourBean
{
/** unwanted aspects */
protected QName[] unwantedAspects =
{
ASPECT_VITAL_RECORD,
ASPECT_DISPOSITION_LIFECYCLE,
RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH
};
/** disposition service */
protected DispositionService dispositionService;
/**
* @param dispositionService disposition service
*/
public void setDispositionService(DispositionService dispositionService)
{
this.dispositionService = dispositionService;
}
/**
* Removes unwanted aspects
*
* @param nodeService
* @param nodeRef
*/
protected void cleanDisposableItem(NodeService nodeService, NodeRef nodeRef)
{
// Remove unwanted aspects
for (QName aspect : unwantedAspects)
{
if (nodeService.hasAspect(nodeRef, aspect))
{
nodeService.removeAspect(nodeRef, aspect);
}
}
// remove the current disposition action (if there is one)
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(nodeRef);
if (dispositionAction != null)
{
nodeService.deleteNode(dispositionAction.getNodeRef());
}
}
}

View File

@@ -25,9 +25,9 @@ import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies;
import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomModel;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService;
import org.alfresco.repo.copy.CopyBehaviourCallback;
import org.alfresco.repo.copy.CopyDetails;
@@ -54,7 +54,7 @@ import org.alfresco.service.namespace.QName;
(
defaultType = "rma:record"
)
public class RecordAspect extends BaseBehaviourBean
public class RecordAspect extends AbstractDisposableItem
implements NodeServicePolicies.OnCreateChildAssociationPolicy,
RecordsManagementPolicies.OnCreateReference,
RecordsManagementPolicies.OnRemoveReference,
@@ -69,6 +69,9 @@ public class RecordAspect extends BaseBehaviourBean
/** script service */
protected ScriptService scriptService;
/** record service */
protected RecordService recordService;
/**
* @param extendedSecurityService extended security service
@@ -85,6 +88,14 @@ public class RecordAspect extends BaseBehaviourBean
{
this.scriptService = scriptService;
}
/**
* @param recordService record service
*/
public void setRecordService(RecordService recordService)
{
this.recordService = recordService;
}
/**
* Behaviour to ensure renditions have the appropriate extended security.
@@ -219,15 +230,18 @@ public class RecordAspect extends BaseBehaviourBean
// check the records parent has actually changed
if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef()))
{
final NodeRef newNodeRef = newChildAssocRef.getChildRef();
final NodeRef record = newChildAssocRef.getChildRef();
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
{
public Object doWork()
{
if (nodeService.exists(newNodeRef))
if (nodeService.exists(record))
{
// only remove the search details .. the rest will be resolved automatically
nodeService.removeAspect(newNodeRef, RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH);
// clean record
cleanDisposableItem(nodeService, record);
// re-file in the new folder
recordService.file(record);
}
return null;
@@ -239,10 +253,10 @@ public class RecordAspect extends BaseBehaviourBean
/**
* Executes a reference script if present
*
* @param policy
* @param reference
* @param from
* @param to
* @param policy policy
* @param reference reference
* @param from reference from
* @param to reference to
*/
private void executeReferenceScript(String policy, QName reference, NodeRef from, NodeRef to)
{

View File

@@ -22,10 +22,7 @@ import java.io.Serializable;
import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour;
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem;
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.VitalRecordService;
@@ -41,7 +38,6 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.lang.ArrayUtils;
@@ -55,27 +51,16 @@ import org.apache.commons.lang.ArrayUtils;
(
defaultType = "rma:recordFolder"
)
public class RecordFolderType extends BaseBehaviourBean
public class RecordFolderType extends AbstractDisposableItem
implements NodeServicePolicies.OnMoveNodePolicy,
NodeServicePolicies.OnCreateChildAssociationPolicy
{
/** unwanted aspects */
private QName[] unwantedAspects =
{
ASPECT_VITAL_RECORD,
ASPECT_DISPOSITION_LIFECYCLE,
RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH
};
/** record service */
private RecordService recordService;
/** record folder service */
private RecordFolderService recordFolderService;
/** disposition service */
private DispositionService dispositionService;
/** vital record service */
protected VitalRecordService vitalRecordService;
@@ -95,14 +80,6 @@ public class RecordFolderType extends BaseBehaviourBean
this.recordFolderService = recordFolderService;
}
/**
* @param dispositionService disposition service
*/
public void setDispositionService(DispositionService dispositionService)
{
this.dispositionService = dispositionService;
}
/**
* @param vitalRecordService vital record service
*/
@@ -273,29 +250,4 @@ public class RecordFolderType extends BaseBehaviourBean
behaviourFilter.enableBehaviour();
}
}
/**
* Removes unwanted aspects
*
* @param nodeService
* @param nodeRef
*/
private void cleanDisposableItem(NodeService nodeService, NodeRef nodeRef)
{
// Remove unwanted aspects
for (QName aspect : unwantedAspects)
{
if (nodeService.hasAspect(nodeRef, aspect))
{
nodeService.removeAspect(nodeRef, aspect);
}
}
// remove the current disposition action (if there is one)
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(nodeRef);
if (dispositionAction != null)
{
nodeService.deleteNode(dispositionAction.getNodeRef());
}
}
}