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">
|
||||
<property name="scriptService" ref="ScriptService" />
|
||||
<property name="extendedSecurityService" ref="ExtendedSecurityService" />
|
||||
<property name="recordService" ref="RecordService" />
|
||||
<property name="dispositionService" ref="DispositionService" />
|
||||
</bean>
|
||||
|
||||
<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 (!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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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.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)
|
||||
{
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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(
|
||||
{
|
||||
RejectRecordTest.class,
|
||||
CreateRecordTest.class
|
||||
CreateRecordTest.class,
|
||||
MoveRecordTest.class
|
||||
})
|
||||
public class RecordTestSuite
|
||||
{
|
||||
|
@@ -38,7 +38,7 @@ import org.alfresco.service.namespace.QName;
|
||||
import org.springframework.extensions.webscripts.GUID;
|
||||
|
||||
/**
|
||||
* Move record tests.
|
||||
* Move record folder tests.
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
* @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_IMMEDIATELY = "immediately|0";
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param applicationContext application context
|
||||
*/
|
||||
public CommonRMTestUtils(ApplicationContext applicationContext)
|
||||
{
|
||||
dispositionService = (DispositionService)applicationContext.getBean("DispositionService");
|
||||
@@ -99,14 +104,8 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param container
|
||||
* @param dispositionInstructions
|
||||
* @param dispositionAuthority
|
||||
* @param isRecordLevel
|
||||
* @param defaultDispositionActions
|
||||
* @return
|
||||
*/
|
||||
* Create test disposition schedule
|
||||
*/
|
||||
public DispositionSchedule createBasicDispositionSchedule(
|
||||
NodeRef container,
|
||||
String dispositionInstructions,
|
||||
@@ -118,14 +117,7 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param container
|
||||
* @param dispositionInstructions
|
||||
* @param dispositionAuthority
|
||||
* @param isRecordLevel
|
||||
* @param defaultDispositionActions
|
||||
* @param extendedDispositionSchedule
|
||||
* @return
|
||||
* Create test disposition schedule
|
||||
*/
|
||||
public DispositionSchedule createDispositionSchedule(
|
||||
NodeRef container,
|
||||
@@ -134,6 +126,28 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
||||
boolean isRecordLevel,
|
||||
boolean defaultDispositionActions,
|
||||
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);
|
||||
dsProps.put(PROP_DISPOSITION_AUTHORITY, dispositionAuthority);
|
||||
@@ -148,7 +162,7 @@ public class CommonRMTestUtils implements RecordsManagementModel
|
||||
adParams.put(PROP_DISPOSITION_DESCRIPTION, DEFAULT_DISPOSITION_DESCRIPTION);
|
||||
|
||||
List<String> events = new ArrayList<String>(1);
|
||||
events.add(DEFAULT_EVENT_NAME);
|
||||
events.add(defaultEvent);
|
||||
adParams.put(PROP_DISPOSITION_EVENT, (Serializable)events);
|
||||
|
||||
dispositionService.addDispositionActionDefinition(dispositionSchedule, adParams);
|
||||
|
Reference in New Issue
Block a user