mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -105,6 +105,8 @@
|
|||||||
<bean id="rma.record" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.RecordAspect" parent="rm.baseBehaviour">
|
<bean id="rma.record" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.RecordAspect" parent="rm.baseBehaviour">
|
||||||
<property name="scriptService" ref="ScriptService" />
|
<property name="scriptService" ref="ScriptService" />
|
||||||
<property name="extendedSecurityService" ref="ExtendedSecurityService" />
|
<property name="extendedSecurityService" ref="ExtendedSecurityService" />
|
||||||
|
<property name="recordService" ref="RecordService" />
|
||||||
|
<property name="dispositionService" ref="DispositionService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="rma.recordComponentIdentifier" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.RecordComponentIdentifierAspect" parent="rm.baseBehaviour">
|
<bean id="rma.recordComponentIdentifier" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.RecordComponentIdentifierAspect" parent="rm.baseBehaviour">
|
||||||
|
@@ -472,28 +472,33 @@ public class DispositionActionImpl implements DispositionAction,
|
|||||||
|
|
||||||
if (!events.isEmpty())
|
if (!events.isEmpty())
|
||||||
{
|
{
|
||||||
if (!getDispositionActionDefinition().eligibleOnFirstCompleteEvent())
|
// get the disposition action definition
|
||||||
{
|
DispositionActionDefinition dispositionActionDefinition = getDispositionActionDefinition();
|
||||||
// if one event is complete then the disposition action is eligible
|
if (dispositionActionDefinition != null)
|
||||||
eligible = true;
|
{
|
||||||
for (EventCompletionDetails event : events)
|
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;
|
if (!event.isEventComplete())
|
||||||
break;
|
{
|
||||||
|
eligible = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else
|
|
||||||
{
|
|
||||||
// all events must be complete for the disposition action to be eligible
|
|
||||||
for (EventCompletionDetails event : events)
|
|
||||||
{
|
{
|
||||||
if (event.isEventComplete())
|
// all events must be complete for the disposition action to be eligible
|
||||||
|
for (EventCompletionDetails event : events)
|
||||||
{
|
{
|
||||||
eligible = true;
|
if (event.isEventComplete())
|
||||||
break;
|
{
|
||||||
|
eligible = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -25,9 +25,9 @@ import java.util.Set;
|
|||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies;
|
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.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.module.org_alfresco_module_rm.security.ExtendedSecurityService;
|
||||||
import org.alfresco.repo.copy.CopyBehaviourCallback;
|
import org.alfresco.repo.copy.CopyBehaviourCallback;
|
||||||
import org.alfresco.repo.copy.CopyDetails;
|
import org.alfresco.repo.copy.CopyDetails;
|
||||||
@@ -54,7 +54,7 @@ import org.alfresco.service.namespace.QName;
|
|||||||
(
|
(
|
||||||
defaultType = "rma:record"
|
defaultType = "rma:record"
|
||||||
)
|
)
|
||||||
public class RecordAspect extends BaseBehaviourBean
|
public class RecordAspect extends AbstractDisposableItem
|
||||||
implements NodeServicePolicies.OnCreateChildAssociationPolicy,
|
implements NodeServicePolicies.OnCreateChildAssociationPolicy,
|
||||||
RecordsManagementPolicies.OnCreateReference,
|
RecordsManagementPolicies.OnCreateReference,
|
||||||
RecordsManagementPolicies.OnRemoveReference,
|
RecordsManagementPolicies.OnRemoveReference,
|
||||||
@@ -69,6 +69,9 @@ public class RecordAspect extends BaseBehaviourBean
|
|||||||
|
|
||||||
/** script service */
|
/** script service */
|
||||||
protected ScriptService scriptService;
|
protected ScriptService scriptService;
|
||||||
|
|
||||||
|
/** record service */
|
||||||
|
protected RecordService recordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param extendedSecurityService extended security service
|
* @param extendedSecurityService extended security service
|
||||||
@@ -85,6 +88,14 @@ public class RecordAspect extends BaseBehaviourBean
|
|||||||
{
|
{
|
||||||
this.scriptService = scriptService;
|
this.scriptService = scriptService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param recordService record service
|
||||||
|
*/
|
||||||
|
public void setRecordService(RecordService recordService)
|
||||||
|
{
|
||||||
|
this.recordService = recordService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Behaviour to ensure renditions have the appropriate extended security.
|
* 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
|
// check the records parent has actually changed
|
||||||
if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef()))
|
if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef()))
|
||||||
{
|
{
|
||||||
final NodeRef newNodeRef = newChildAssocRef.getChildRef();
|
final NodeRef record = newChildAssocRef.getChildRef();
|
||||||
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
|
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Object>()
|
||||||
{
|
{
|
||||||
public Object doWork()
|
public Object doWork()
|
||||||
{
|
{
|
||||||
if (nodeService.exists(newNodeRef))
|
if (nodeService.exists(record))
|
||||||
{
|
{
|
||||||
// only remove the search details .. the rest will be resolved automatically
|
// clean record
|
||||||
nodeService.removeAspect(newNodeRef, RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH);
|
cleanDisposableItem(nodeService, record);
|
||||||
|
|
||||||
|
// re-file in the new folder
|
||||||
|
recordService.file(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -239,10 +253,10 @@ public class RecordAspect extends BaseBehaviourBean
|
|||||||
/**
|
/**
|
||||||
* Executes a reference script if present
|
* Executes a reference script if present
|
||||||
*
|
*
|
||||||
* @param policy
|
* @param policy policy
|
||||||
* @param reference
|
* @param reference reference
|
||||||
* @param from
|
* @param from reference from
|
||||||
* @param to
|
* @param to reference to
|
||||||
*/
|
*/
|
||||||
private void executeReferenceScript(String policy, QName reference, NodeRef from, NodeRef to)
|
private void executeReferenceScript(String policy, QName reference, NodeRef from, NodeRef to)
|
||||||
{
|
{
|
||||||
|
@@ -22,10 +22,7 @@ import java.io.Serializable;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction;
|
import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem;
|
||||||
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.record.RecordService;
|
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.recordfolder.RecordFolderService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService;
|
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.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
|
|
||||||
@@ -55,27 +51,16 @@ import org.apache.commons.lang.ArrayUtils;
|
|||||||
(
|
(
|
||||||
defaultType = "rma:recordFolder"
|
defaultType = "rma:recordFolder"
|
||||||
)
|
)
|
||||||
public class RecordFolderType extends BaseBehaviourBean
|
public class RecordFolderType extends AbstractDisposableItem
|
||||||
implements NodeServicePolicies.OnMoveNodePolicy,
|
implements NodeServicePolicies.OnMoveNodePolicy,
|
||||||
NodeServicePolicies.OnCreateChildAssociationPolicy
|
NodeServicePolicies.OnCreateChildAssociationPolicy
|
||||||
{
|
{
|
||||||
/** unwanted aspects */
|
|
||||||
private QName[] unwantedAspects =
|
|
||||||
{
|
|
||||||
ASPECT_VITAL_RECORD,
|
|
||||||
ASPECT_DISPOSITION_LIFECYCLE,
|
|
||||||
RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH
|
|
||||||
};
|
|
||||||
|
|
||||||
/** record service */
|
/** record service */
|
||||||
private RecordService recordService;
|
private RecordService recordService;
|
||||||
|
|
||||||
/** record folder service */
|
/** record folder service */
|
||||||
private RecordFolderService recordFolderService;
|
private RecordFolderService recordFolderService;
|
||||||
|
|
||||||
/** disposition service */
|
|
||||||
private DispositionService dispositionService;
|
|
||||||
|
|
||||||
/** vital record service */
|
/** vital record service */
|
||||||
protected VitalRecordService vitalRecordService;
|
protected VitalRecordService vitalRecordService;
|
||||||
|
|
||||||
@@ -95,14 +80,6 @@ public class RecordFolderType extends BaseBehaviourBean
|
|||||||
this.recordFolderService = recordFolderService;
|
this.recordFolderService = recordFolderService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param dispositionService disposition service
|
|
||||||
*/
|
|
||||||
public void setDispositionService(DispositionService dispositionService)
|
|
||||||
{
|
|
||||||
this.dispositionService = dispositionService;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param vitalRecordService vital record service
|
* @param vitalRecordService vital record service
|
||||||
*/
|
*/
|
||||||
@@ -273,29 +250,4 @@ public class RecordFolderType extends BaseBehaviourBean
|
|||||||
behaviourFilter.enableBehaviour();
|
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,278 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2014 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This file is part of Alfresco
|
||||||
|
*
|
||||||
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.alfresco.module.org_alfresco_module_rm.test.integration.record;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.action.impl.CutOffAction;
|
||||||
|
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.test.util.BaseRMTestCase;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
import org.alfresco.service.namespace.QName;
|
||||||
|
import org.springframework.extensions.webscripts.GUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move record tests.
|
||||||
|
*
|
||||||
|
* @author Roy Wetherall
|
||||||
|
* @since 2.2
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public class MoveRecordTest extends BaseRMTestCase
|
||||||
|
{
|
||||||
|
private static final String OTHER_EVENT = "abolished";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a record is filed in a event disposition and moved then the
|
||||||
|
* record no longer has any disposition.
|
||||||
|
*
|
||||||
|
* @see https://issues.alfresco.com/jira/browse/RM-1540
|
||||||
|
*/
|
||||||
|
public void testMoveRecordEventDispositinoToNoDisposition() throws Exception
|
||||||
|
{
|
||||||
|
doBehaviourDrivenTest(new BehaviourDrivenTest()
|
||||||
|
{
|
||||||
|
NodeRef sourceCategory;
|
||||||
|
NodeRef sourceRecordFolder;
|
||||||
|
NodeRef destinationCategory;
|
||||||
|
NodeRef destinationRecordFolder;
|
||||||
|
NodeRef record;
|
||||||
|
|
||||||
|
public void given()
|
||||||
|
{
|
||||||
|
// create test data
|
||||||
|
sourceCategory = filePlanService.createRecordCategory(filePlan, GUID.generate());
|
||||||
|
utils.createBasicDispositionSchedule(sourceCategory, GUID.generate(), GUID.generate(), true, true);
|
||||||
|
sourceRecordFolder = recordFolderService.createRecordFolder(sourceCategory, GUID.generate());
|
||||||
|
destinationCategory = filePlanService.createRecordCategory(filePlan, GUID.generate());;
|
||||||
|
destinationRecordFolder = recordFolderService.createRecordFolder(destinationCategory, GUID.generate());
|
||||||
|
|
||||||
|
// create record
|
||||||
|
record = utils.createRecord(sourceRecordFolder, GUID.generate());
|
||||||
|
|
||||||
|
// check for the lifecycle aspect
|
||||||
|
assertFalse(nodeService.hasAspect(sourceRecordFolder, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
|
||||||
|
// check the disposition action details
|
||||||
|
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record);
|
||||||
|
assertNotNull(dispositionAction);
|
||||||
|
assertNotNull(CutOffAction.NAME, dispositionAction.getName());
|
||||||
|
assertNull(dispositionAction.getAsOfDate());
|
||||||
|
assertFalse(dispositionService.isNextDispositionActionEligible(record));
|
||||||
|
assertNotNull(dispositionAction.getEventCompletionDetails(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void when() throws Exception
|
||||||
|
{
|
||||||
|
// check the search aspect details
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH));
|
||||||
|
assertEquals(CutOffAction.NAME, nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME));
|
||||||
|
assertNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF));
|
||||||
|
assertTrue(((List<String>)nodeService.getProperty(record, PROP_RS_DISPOSITION_EVENTS)).contains(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
|
||||||
|
// move record
|
||||||
|
fileFolderService.move(record, destinationRecordFolder, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void then()
|
||||||
|
{
|
||||||
|
// check for the lifecycle aspect
|
||||||
|
assertFalse(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
|
||||||
|
// check the disposition action details
|
||||||
|
assertNull(dispositionService.getNextDispositionAction(record));
|
||||||
|
|
||||||
|
// check the search aspect properties
|
||||||
|
assertFalse(nodeService.hasAspect(record, ASPECT_RM_SEARCH));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a record in a event disposition, when it moved to another event disposition then the record should have the
|
||||||
|
* new events, rather than the old ones.
|
||||||
|
*/
|
||||||
|
public void testMoveRecordEventDisToEventDis()
|
||||||
|
{
|
||||||
|
doBehaviourDrivenTest(new BehaviourDrivenTest()
|
||||||
|
{
|
||||||
|
NodeRef sourceCategory;
|
||||||
|
NodeRef sourceRecordFolder;
|
||||||
|
NodeRef destinationCategory;
|
||||||
|
NodeRef destinationRecordFolder;
|
||||||
|
NodeRef record;
|
||||||
|
|
||||||
|
public void given()
|
||||||
|
{
|
||||||
|
// create test data
|
||||||
|
sourceCategory = filePlanService.createRecordCategory(filePlan, GUID.generate());
|
||||||
|
utils.createBasicDispositionSchedule(sourceCategory, GUID.generate(), GUID.generate(), true, true);
|
||||||
|
sourceRecordFolder = recordFolderService.createRecordFolder(sourceCategory, GUID.generate());
|
||||||
|
|
||||||
|
destinationCategory = filePlanService.createRecordCategory(filePlan, GUID.generate());
|
||||||
|
utils.createDispositionSchedule(destinationCategory, GUID.generate(), GUID.generate(), true, true, false, OTHER_EVENT);
|
||||||
|
destinationRecordFolder = recordFolderService.createRecordFolder(destinationCategory, GUID.generate());
|
||||||
|
|
||||||
|
// create record
|
||||||
|
record = utils.createRecord(sourceRecordFolder, GUID.generate());
|
||||||
|
|
||||||
|
// check for the lifecycle aspect
|
||||||
|
assertFalse(nodeService.hasAspect(sourceRecordFolder, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
|
||||||
|
// check the disposition action details
|
||||||
|
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record);
|
||||||
|
assertNotNull(dispositionAction);
|
||||||
|
assertNotNull(CutOffAction.NAME, dispositionAction.getName());
|
||||||
|
assertNull(dispositionAction.getAsOfDate());
|
||||||
|
assertFalse(dispositionService.isNextDispositionActionEligible(record));
|
||||||
|
assertNotNull(dispositionAction.getEventCompletionDetails(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
assertNull(dispositionAction.getEventCompletionDetails(OTHER_EVENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void when() throws Exception
|
||||||
|
{
|
||||||
|
// check the search aspect details
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH));
|
||||||
|
assertEquals(CutOffAction.NAME, nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME));
|
||||||
|
assertNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF));
|
||||||
|
assertTrue(((List<String>)nodeService.getProperty(record, PROP_RS_DISPOSITION_EVENTS)).contains(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
|
||||||
|
// move record
|
||||||
|
fileFolderService.move(record, destinationRecordFolder, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void then()
|
||||||
|
{
|
||||||
|
// check for the lifecycle aspect
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
|
||||||
|
// check the disposition action details
|
||||||
|
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record);
|
||||||
|
assertNotNull(dispositionAction);
|
||||||
|
assertNotNull(CutOffAction.NAME, dispositionAction.getName());
|
||||||
|
assertNull(dispositionAction.getAsOfDate());
|
||||||
|
assertFalse(dispositionService.isNextDispositionActionEligible(record));
|
||||||
|
assertNull(dispositionAction.getEventCompletionDetails(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
assertNotNull(dispositionAction.getEventCompletionDetails(OTHER_EVENT));
|
||||||
|
|
||||||
|
// check the search aspect details
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH));
|
||||||
|
assertEquals(CutOffAction.NAME, nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME));
|
||||||
|
assertNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF));
|
||||||
|
assertTrue(((List<String>)nodeService.getProperty(record, PROP_RS_DISPOSITION_EVENTS)).contains(OTHER_EVENT));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a record in a event disposition, when it moved to a time disposition then the record should have the correct as of
|
||||||
|
* date and no longer have the events.
|
||||||
|
*/
|
||||||
|
public void testMoveRecordEventDisToTimeDis()
|
||||||
|
{
|
||||||
|
doBehaviourDrivenTest(new BehaviourDrivenTest()
|
||||||
|
{
|
||||||
|
NodeRef sourceCategory;
|
||||||
|
NodeRef sourceRecordFolder;
|
||||||
|
NodeRef destinationCategory;
|
||||||
|
NodeRef destinationRecordFolder;
|
||||||
|
NodeRef record;
|
||||||
|
|
||||||
|
public void given()
|
||||||
|
{
|
||||||
|
// create test data
|
||||||
|
sourceCategory = filePlanService.createRecordCategory(filePlan, GUID.generate());
|
||||||
|
utils.createBasicDispositionSchedule(sourceCategory, GUID.generate(), GUID.generate(), true, true);
|
||||||
|
sourceRecordFolder = recordFolderService.createRecordFolder(sourceCategory, GUID.generate());
|
||||||
|
|
||||||
|
destinationCategory = filePlanService.createRecordCategory(filePlan, GUID.generate());
|
||||||
|
DispositionSchedule dis = utils.createBasicDispositionSchedule(destinationCategory, GUID.generate(), GUID.generate(), true, false);
|
||||||
|
Map<QName, Serializable> adParams = new HashMap<QName, Serializable>(3);
|
||||||
|
adParams.put(PROP_DISPOSITION_ACTION_NAME, CutOffAction.NAME);
|
||||||
|
adParams.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate());
|
||||||
|
adParams.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY);
|
||||||
|
dispositionService.addDispositionActionDefinition(dis, adParams);
|
||||||
|
destinationRecordFolder = recordFolderService.createRecordFolder(destinationCategory, GUID.generate());
|
||||||
|
|
||||||
|
// create record
|
||||||
|
record = utils.createRecord(sourceRecordFolder, GUID.generate());
|
||||||
|
|
||||||
|
// check for the lifecycle aspect
|
||||||
|
assertFalse(nodeService.hasAspect(sourceRecordFolder, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
|
||||||
|
// check the disposition action details
|
||||||
|
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record);
|
||||||
|
assertNotNull(dispositionAction);
|
||||||
|
assertNotNull(CutOffAction.NAME, dispositionAction.getName());
|
||||||
|
assertNull(dispositionAction.getAsOfDate());
|
||||||
|
assertFalse(dispositionService.isNextDispositionActionEligible(record));
|
||||||
|
assertNotNull(dispositionAction.getEventCompletionDetails(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
assertNull(dispositionAction.getEventCompletionDetails(OTHER_EVENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void when() throws Exception
|
||||||
|
{
|
||||||
|
// check the search aspect details
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH));
|
||||||
|
assertEquals(CutOffAction.NAME, nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME));
|
||||||
|
assertNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF));
|
||||||
|
assertTrue(((List<String>)nodeService.getProperty(record, PROP_RS_DISPOSITION_EVENTS)).contains(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
|
||||||
|
// move record
|
||||||
|
fileFolderService.move(record, destinationRecordFolder, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void then()
|
||||||
|
{
|
||||||
|
// check for the lifecycle aspect
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE));
|
||||||
|
|
||||||
|
// check the disposition action details
|
||||||
|
DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record);
|
||||||
|
assertNotNull(dispositionAction);
|
||||||
|
assertNotNull(CutOffAction.NAME, dispositionAction.getName());
|
||||||
|
assertNotNull(dispositionAction.getAsOfDate());
|
||||||
|
assertTrue(dispositionService.isNextDispositionActionEligible(record));
|
||||||
|
assertNull(dispositionAction.getEventCompletionDetails(CommonRMTestUtils.DEFAULT_EVENT_NAME));
|
||||||
|
|
||||||
|
// check the search aspect details
|
||||||
|
assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH));
|
||||||
|
assertEquals(CutOffAction.NAME, nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME));
|
||||||
|
assertNotNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF));
|
||||||
|
assertNull(((List<String>)nodeService.getProperty(record, PROP_RS_DISPOSITION_EVENTS)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO moveRecordNoDisToEventDis
|
||||||
|
|
||||||
|
// TODO moveRecordRecordDisToFolderDis
|
||||||
|
|
||||||
|
}
|
@@ -32,7 +32,8 @@ import org.junit.runners.Suite.SuiteClasses;
|
|||||||
@SuiteClasses(
|
@SuiteClasses(
|
||||||
{
|
{
|
||||||
RejectRecordTest.class,
|
RejectRecordTest.class,
|
||||||
CreateRecordTest.class
|
CreateRecordTest.class,
|
||||||
|
MoveRecordTest.class
|
||||||
})
|
})
|
||||||
public class RecordTestSuite
|
public class RecordTestSuite
|
||||||
{
|
{
|
||||||
|
@@ -38,7 +38,7 @@ import org.alfresco.service.namespace.QName;
|
|||||||
import org.springframework.extensions.webscripts.GUID;
|
import org.springframework.extensions.webscripts.GUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Move record tests.
|
* Move record folder tests.
|
||||||
*
|
*
|
||||||
* @author Roy Wetherall
|
* @author Roy Wetherall
|
||||||
* @since 2.2
|
* @since 2.2
|
||||||
|
@@ -76,6 +76,11 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
|||||||
public static final String PERIOD_NONE = "none|0";
|
public static final String PERIOD_NONE = "none|0";
|
||||||
public static final String PERIOD_IMMEDIATELY = "immediately|0";
|
public static final String PERIOD_IMMEDIATELY = "immediately|0";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param applicationContext application context
|
||||||
|
*/
|
||||||
public CommonRMTestUtils(ApplicationContext applicationContext)
|
public CommonRMTestUtils(ApplicationContext applicationContext)
|
||||||
{
|
{
|
||||||
dispositionService = (DispositionService)applicationContext.getBean("DispositionService");
|
dispositionService = (DispositionService)applicationContext.getBean("DispositionService");
|
||||||
@@ -99,14 +104,8 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Create test disposition schedule
|
||||||
* @param container
|
*/
|
||||||
* @param dispositionInstructions
|
|
||||||
* @param dispositionAuthority
|
|
||||||
* @param isRecordLevel
|
|
||||||
* @param defaultDispositionActions
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public DispositionSchedule createBasicDispositionSchedule(
|
public DispositionSchedule createBasicDispositionSchedule(
|
||||||
NodeRef container,
|
NodeRef container,
|
||||||
String dispositionInstructions,
|
String dispositionInstructions,
|
||||||
@@ -118,14 +117,7 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Create test disposition schedule
|
||||||
* @param container
|
|
||||||
* @param dispositionInstructions
|
|
||||||
* @param dispositionAuthority
|
|
||||||
* @param isRecordLevel
|
|
||||||
* @param defaultDispositionActions
|
|
||||||
* @param extendedDispositionSchedule
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public DispositionSchedule createDispositionSchedule(
|
public DispositionSchedule createDispositionSchedule(
|
||||||
NodeRef container,
|
NodeRef container,
|
||||||
@@ -134,6 +126,28 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
|||||||
boolean isRecordLevel,
|
boolean isRecordLevel,
|
||||||
boolean defaultDispositionActions,
|
boolean defaultDispositionActions,
|
||||||
boolean extendedDispositionSchedule)
|
boolean extendedDispositionSchedule)
|
||||||
|
{
|
||||||
|
return createDispositionSchedule(
|
||||||
|
container,
|
||||||
|
dispositionInstructions,
|
||||||
|
dispositionAuthority,
|
||||||
|
isRecordLevel,
|
||||||
|
defaultDispositionActions,
|
||||||
|
extendedDispositionSchedule,
|
||||||
|
DEFAULT_EVENT_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create test disposition schedule
|
||||||
|
*/
|
||||||
|
public DispositionSchedule createDispositionSchedule(
|
||||||
|
NodeRef container,
|
||||||
|
String dispositionInstructions,
|
||||||
|
String dispositionAuthority,
|
||||||
|
boolean isRecordLevel,
|
||||||
|
boolean defaultDispositionActions,
|
||||||
|
boolean extendedDispositionSchedule,
|
||||||
|
String defaultEvent)
|
||||||
{
|
{
|
||||||
Map<QName, Serializable> dsProps = new HashMap<QName, Serializable>(3);
|
Map<QName, Serializable> dsProps = new HashMap<QName, Serializable>(3);
|
||||||
dsProps.put(PROP_DISPOSITION_AUTHORITY, dispositionAuthority);
|
dsProps.put(PROP_DISPOSITION_AUTHORITY, dispositionAuthority);
|
||||||
@@ -148,7 +162,7 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
|||||||
adParams.put(PROP_DISPOSITION_DESCRIPTION, DEFAULT_DISPOSITION_DESCRIPTION);
|
adParams.put(PROP_DISPOSITION_DESCRIPTION, DEFAULT_DISPOSITION_DESCRIPTION);
|
||||||
|
|
||||||
List<String> events = new ArrayList<String>(1);
|
List<String> events = new ArrayList<String>(1);
|
||||||
events.add(DEFAULT_EVENT_NAME);
|
events.add(defaultEvent);
|
||||||
adParams.put(PROP_DISPOSITION_EVENT, (Serializable)events);
|
adParams.put(PROP_DISPOSITION_EVENT, (Serializable)events);
|
||||||
|
|
||||||
dispositionService.addDispositionActionDefinition(dispositionSchedule, adParams);
|
dispositionService.addDispositionActionDefinition(dispositionSchedule, adParams);
|
||||||
|
Reference in New Issue
Block a user