mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
RM-7035: Add policies for holds
- some minor formating - fix unit test
This commit is contained in:
@@ -41,16 +41,19 @@ import java.util.Set;
|
|||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
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.BeforeFileRecord;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService;
|
import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.audit.event.AuditEvent;
|
import org.alfresco.module.org_alfresco_module_rm.audit.event.AuditEvent;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
|
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
|
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeCreateHoldPolicy;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeDeleteHoldPolicy;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnCreateHoldPolicy;
|
||||||
|
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnDeleteHoldPolicy;
|
||||||
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
|
||||||
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.util.PoliciesUtil;
|
|
||||||
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
|
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
|
||||||
import org.alfresco.repo.node.NodeServicePolicies;
|
import org.alfresco.repo.node.NodeServicePolicies;
|
||||||
import org.alfresco.repo.node.integrity.IntegrityException;
|
import org.alfresco.repo.node.integrity.IntegrityException;
|
||||||
@@ -181,7 +184,7 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
|||||||
*
|
*
|
||||||
* @return The policy component instance
|
* @return The policy component instance
|
||||||
*/
|
*/
|
||||||
private PolicyComponent getPolicyComponent()
|
protected PolicyComponent getPolicyComponent()
|
||||||
{
|
{
|
||||||
return this.policyComponent;
|
return this.policyComponent;
|
||||||
}
|
}
|
||||||
@@ -199,10 +202,10 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
|||||||
/**
|
/**
|
||||||
* Policy delegates
|
* Policy delegates
|
||||||
*/
|
*/
|
||||||
private ClassPolicyDelegate<HoldServicePolicies.BeforeCreateHoldPolicy> beforeCreateHoldPolicyDelegate;
|
private ClassPolicyDelegate<BeforeCreateHoldPolicy> beforeCreateHoldPolicyDelegate;
|
||||||
private ClassPolicyDelegate<HoldServicePolicies.OnCreateHoldPolicy> onCreateHoldPolicyDelegate;
|
private ClassPolicyDelegate<OnCreateHoldPolicy> onCreateHoldPolicyDelegate;
|
||||||
private ClassPolicyDelegate<HoldServicePolicies.BeforeDeleteHoldPolicy> beforeDeleteHoldPolicyDelegate;
|
private ClassPolicyDelegate<BeforeDeleteHoldPolicy> beforeDeleteHoldPolicyDelegate;
|
||||||
private ClassPolicyDelegate<HoldServicePolicies.OnDeleteHoldPolicy> onDeleteHoldPolicyDelegate;
|
private ClassPolicyDelegate<OnDeleteHoldPolicy> onDeleteHoldPolicyDelegate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise hold service
|
* Initialise hold service
|
||||||
@@ -221,10 +224,10 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Register the policies
|
// Register the policies
|
||||||
beforeCreateHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.BeforeCreateHoldPolicy.class);
|
beforeCreateHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(BeforeCreateHoldPolicy.class);
|
||||||
onCreateHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.OnCreateHoldPolicy.class);
|
onCreateHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(OnCreateHoldPolicy.class);
|
||||||
beforeDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.BeforeDeleteHoldPolicy.class);
|
beforeDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(BeforeDeleteHoldPolicy.class);
|
||||||
onDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.OnDeleteHoldPolicy.class);
|
onDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(OnDeleteHoldPolicy.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -458,8 +461,7 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
|||||||
// get the root hold container
|
// get the root hold container
|
||||||
NodeRef holdContainer = filePlanService.getHoldContainer(filePlan);
|
NodeRef holdContainer = filePlanService.getHoldContainer(filePlan);
|
||||||
|
|
||||||
//invoke before create hold
|
invokeBeforeCreateHold(holdContainer, name, reason);
|
||||||
beforeCreateHoldPolicyDelegate.get(getTypeAndApsects(holdContainer)).beforeCreateHold(name, reason);
|
|
||||||
|
|
||||||
// create map of properties
|
// create map of properties
|
||||||
Map<QName, Serializable> properties = new HashMap<>(3);
|
Map<QName, Serializable> properties = new HashMap<>(3);
|
||||||
@@ -478,8 +480,7 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
|||||||
|
|
||||||
NodeRef holdNodeRef = childAssocRef.getChildRef();
|
NodeRef holdNodeRef = childAssocRef.getChildRef();
|
||||||
|
|
||||||
//invoke after hold is created
|
invokeOnCreateHold(holdNodeRef);
|
||||||
onCreateHoldPolicyDelegate.get(getTypeAndApsects(holdNodeRef)).onCreateHold(holdNodeRef);
|
|
||||||
|
|
||||||
return holdNodeRef;
|
return holdNodeRef;
|
||||||
}
|
}
|
||||||
@@ -569,12 +570,11 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
|||||||
throw new AlfrescoRuntimeException("Can't delete hold, because filing permissions for the following items are needed: " + sb.toString());
|
throw new AlfrescoRuntimeException("Can't delete hold, because filing permissions for the following items are needed: " + sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeDeleteHoldPolicyDelegate.get(getTypeAndApsects(hold)).beforeDeleteHold(hold);
|
invokeBeforeDeleteHold(hold);
|
||||||
|
|
||||||
// delete the hold node
|
// delete the hold node
|
||||||
nodeService.deleteNode(hold);
|
nodeService.deleteNode(hold);
|
||||||
|
|
||||||
onDeleteHoldPolicyDelegate.get(getTypeAndApsects(hold)).onDeleteHold(hold);
|
invokeOnDeleteHold(hold);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -862,4 +862,52 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
|||||||
removeFromAllHolds(nodeRef);
|
removeFromAllHolds(nodeRef);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoke beforeCreateHold policy
|
||||||
|
*
|
||||||
|
* @param nodeRef node reference
|
||||||
|
* @param name hold name
|
||||||
|
* @param reason hold reason
|
||||||
|
*/
|
||||||
|
protected void invokeBeforeCreateHold(NodeRef nodeRef, String name, String reason)
|
||||||
|
{
|
||||||
|
// execute policy for node type and aspects
|
||||||
|
BeforeCreateHoldPolicy policy = beforeCreateHoldPolicyDelegate.get(getTypeAndApsects(nodeRef));
|
||||||
|
policy.beforeCreateHold(name, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoke onCreateHold policy
|
||||||
|
*
|
||||||
|
* @param nodeRef node reference
|
||||||
|
*/
|
||||||
|
protected void invokeOnCreateHold(NodeRef nodeRef)
|
||||||
|
{
|
||||||
|
OnCreateHoldPolicy policy = onCreateHoldPolicyDelegate.get(getTypeAndApsects(nodeRef));
|
||||||
|
policy.onCreateHold(nodeRef);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoke beforeDeleteHold policy
|
||||||
|
*
|
||||||
|
* @param nodeRef node reference
|
||||||
|
*/
|
||||||
|
protected void invokeBeforeDeleteHold(NodeRef nodeRef)
|
||||||
|
{
|
||||||
|
BeforeDeleteHoldPolicy policy = beforeDeleteHoldPolicyDelegate.get(getTypeAndApsects(nodeRef));
|
||||||
|
policy.beforeDeleteHold(nodeRef);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoke onDeleteHold policy
|
||||||
|
*
|
||||||
|
* @param nodeRef node reference
|
||||||
|
*/
|
||||||
|
protected void invokeOnDeleteHold(NodeRef nodeRef)
|
||||||
|
{
|
||||||
|
// execute policy for node type and aspects
|
||||||
|
OnDeleteHoldPolicy policy = onDeleteHoldPolicyDelegate.get(getTypeAndApsects(nodeRef));
|
||||||
|
policy.onDeleteHold(nodeRef);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -41,17 +41,9 @@ import org.alfresco.service.namespace.QName;
|
|||||||
|
|
||||||
public interface HoldServicePolicies
|
public interface HoldServicePolicies
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* Policy names
|
|
||||||
*/
|
|
||||||
public static final QName BEFORE_CREATE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "beforeCreateHold");
|
|
||||||
public static final QName ON_CREATE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "onCreateHold");
|
|
||||||
public static final QName BEFORE_DELETE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "beforeDeleteHold");
|
|
||||||
public static final QName ON_DELETE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "onDeleteHold");
|
|
||||||
|
|
||||||
interface BeforeCreateHoldPolicy extends ClassPolicy
|
interface BeforeCreateHoldPolicy extends ClassPolicy
|
||||||
{
|
{
|
||||||
|
QName BEFORE_CREATE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "beforeCreateHold");
|
||||||
/**
|
/**
|
||||||
* Called before a hold is created.
|
* Called before a hold is created.
|
||||||
*
|
*
|
||||||
@@ -63,6 +55,7 @@ public interface HoldServicePolicies
|
|||||||
|
|
||||||
interface OnCreateHoldPolicy extends ClassPolicy
|
interface OnCreateHoldPolicy extends ClassPolicy
|
||||||
{
|
{
|
||||||
|
QName ON_CREATE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "onCreateHold");
|
||||||
/**
|
/**
|
||||||
* Called when a hold is created.
|
* Called when a hold is created.
|
||||||
*
|
*
|
||||||
@@ -73,6 +66,7 @@ public interface HoldServicePolicies
|
|||||||
|
|
||||||
interface BeforeDeleteHoldPolicy extends ClassPolicy
|
interface BeforeDeleteHoldPolicy extends ClassPolicy
|
||||||
{
|
{
|
||||||
|
QName BEFORE_DELETE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "beforeDeleteHold");
|
||||||
/**
|
/**
|
||||||
* Called before a hold is created.
|
* Called before a hold is created.
|
||||||
*
|
*
|
||||||
@@ -83,6 +77,8 @@ public interface HoldServicePolicies
|
|||||||
|
|
||||||
interface OnDeleteHoldPolicy extends ClassPolicy
|
interface OnDeleteHoldPolicy extends ClassPolicy
|
||||||
{
|
{
|
||||||
|
QName ON_DELETE_HOLD = QName.createQName(NamespaceService.ALFRESCO_URI, "onDeleteHold");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a hold is deleted.
|
* Called when a hold is deleted.
|
||||||
*
|
*
|
||||||
|
@@ -158,11 +158,11 @@ public class CreateHoldTest extends BaseRMTestCase implements BeforeCreateHoldPo
|
|||||||
public Void run()
|
public Void run()
|
||||||
{
|
{
|
||||||
BehaviourDefinition<ClassBehaviourBinding> beforeCreateHoldBehaviour = policyComponent.bindClassBehaviour(
|
BehaviourDefinition<ClassBehaviourBinding> beforeCreateHoldBehaviour = policyComponent.bindClassBehaviour(
|
||||||
HoldServicePolicies.BEFORE_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD_CONTAINER,
|
HoldServicePolicies.BeforeCreateHoldPolicy.BEFORE_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD_CONTAINER,
|
||||||
new JavaBehaviour(CreateHoldTest.this, "beforeCreateHold", NotificationFrequency.EVERY_EVENT));
|
new JavaBehaviour(CreateHoldTest.this, "beforeCreateHold", NotificationFrequency.EVERY_EVENT));
|
||||||
|
|
||||||
BehaviourDefinition<ClassBehaviourBinding> onCreateHoldBehaviour = policyComponent.bindClassBehaviour(
|
BehaviourDefinition<ClassBehaviourBinding> onCreateHoldBehaviour = policyComponent.bindClassBehaviour(
|
||||||
HoldServicePolicies.ON_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD,
|
HoldServicePolicies.OnCreateHoldPolicy.ON_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD,
|
||||||
new JavaBehaviour(CreateHoldTest.this, "onCreateHold", NotificationFrequency.EVERY_EVENT));
|
new JavaBehaviour(CreateHoldTest.this, "onCreateHold", NotificationFrequency.EVERY_EVENT));
|
||||||
|
|
||||||
assertFalse(beforeCreateHoldFlag);
|
assertFalse(beforeCreateHoldFlag);
|
||||||
|
@@ -258,11 +258,11 @@ public class DeleteHoldTest extends BaseRMTestCase implements BeforeDeleteHoldPo
|
|||||||
public Void run()
|
public Void run()
|
||||||
{
|
{
|
||||||
BehaviourDefinition<ClassBehaviourBinding> beforeDeleteHoldBehaviour = policyComponent.bindClassBehaviour(
|
BehaviourDefinition<ClassBehaviourBinding> beforeDeleteHoldBehaviour = policyComponent.bindClassBehaviour(
|
||||||
HoldServicePolicies.BEFORE_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
|
HoldServicePolicies.BeforeDeleteHoldPolicy.BEFORE_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
|
||||||
new JavaBehaviour(DeleteHoldTest.this, "beforeDeleteHold", NotificationFrequency.EVERY_EVENT));
|
new JavaBehaviour(DeleteHoldTest.this, "beforeDeleteHold", NotificationFrequency.EVERY_EVENT));
|
||||||
|
|
||||||
BehaviourDefinition<ClassBehaviourBinding> onDeleteHoldBehaviour = policyComponent.bindClassBehaviour(
|
BehaviourDefinition<ClassBehaviourBinding> onDeleteHoldBehaviour = policyComponent.bindClassBehaviour(
|
||||||
HoldServicePolicies.ON_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
|
HoldServicePolicies.OnDeleteHoldPolicy.ON_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
|
||||||
new JavaBehaviour(DeleteHoldTest.this, "onDeleteHold", NotificationFrequency.EVERY_EVENT));
|
new JavaBehaviour(DeleteHoldTest.this, "onDeleteHold", NotificationFrequency.EVERY_EVENT));
|
||||||
|
|
||||||
NodeRef hold = holdService.createHold(filePlan, generate(), generate(), generate());
|
NodeRef hold = holdService.createHold(filePlan, generate(), generate(), generate());
|
||||||
|
@@ -39,6 +39,7 @@ import static org.mockito.Matchers.any;
|
|||||||
import static org.mockito.Matchers.anyString;
|
import static org.mockito.Matchers.anyString;
|
||||||
import static org.mockito.Matchers.eq;
|
import static org.mockito.Matchers.eq;
|
||||||
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.doAnswer;
|
||||||
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
@@ -70,6 +71,7 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.InjectMocks;
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Matchers;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.Spy;
|
import org.mockito.Spy;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
@@ -220,6 +222,10 @@ public class HoldServiceImplUnitTest extends BaseUnitTest
|
|||||||
when(mockedNodeService.createNode(eq(holdContainer), eq(ContentModel.ASSOC_CONTAINS), any(QName.class) , eq(TYPE_HOLD), any(Map.class)))
|
when(mockedNodeService.createNode(eq(holdContainer), eq(ContentModel.ASSOC_CONTAINS), any(QName.class) , eq(TYPE_HOLD), any(Map.class)))
|
||||||
.thenReturn(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, holdContainer, generateQName(), hold));
|
.thenReturn(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, holdContainer, generateQName(), hold));
|
||||||
|
|
||||||
|
// mocks for policies
|
||||||
|
doNothing().when(holdService).invokeBeforeCreateHold(any(), anyString(), anyString());
|
||||||
|
doNothing().when(holdService).invokeOnCreateHold(any());
|
||||||
|
|
||||||
// create hold
|
// create hold
|
||||||
NodeRef newHold = holdService.createHold(filePlan, HOLD_NAME, HOLD_REASON, HOLD_DESCRIPTION);
|
NodeRef newHold = holdService.createHold(filePlan, HOLD_NAME, HOLD_REASON, HOLD_DESCRIPTION);
|
||||||
assertNotNull(newHold);
|
assertNotNull(newHold);
|
||||||
@@ -306,6 +312,10 @@ public class HoldServiceImplUnitTest extends BaseUnitTest
|
|||||||
@Test
|
@Test
|
||||||
public void deleteHold()
|
public void deleteHold()
|
||||||
{
|
{
|
||||||
|
// mocks for policies
|
||||||
|
doNothing().when(holdService).invokeBeforeDeleteHold(any());
|
||||||
|
doNothing().when(holdService).invokeOnDeleteHold(any());
|
||||||
|
|
||||||
// delete hold
|
// delete hold
|
||||||
holdService.deleteHold(hold);
|
holdService.deleteHold(hold);
|
||||||
verify(mockedNodeService).deleteNode(hold);
|
verify(mockedNodeService).deleteNode(hold);
|
||||||
|
Reference in New Issue
Block a user