RM-7035: Add policies for holds

- fixed tests for deleteHold policies
This commit is contained in:
Ramona Popa
2019-10-29 16:02:40 +02:00
parent 2d858fd6ec
commit fcd53d3143
5 changed files with 69 additions and 54 deletions

View File

@@ -28,6 +28,7 @@
package org.alfresco.module.org_alfresco_module_rm.hold;
import static org.alfresco.model.ContentModel.ASPECT_LOCKABLE;
import static org.alfresco.model.ContentModel.PROP_NAME;
import java.io.Serializable;
import java.util.ArrayList;
@@ -41,7 +42,6 @@ import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
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.event.AuditEvent;
import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
@@ -253,7 +253,6 @@ public class HoldServiceImpl extends ServiceBaseImpl
transactionalResourceHelper.getSet("frozen").add(frozenNode);
removeFreezeAspect(frozenNode, 1);
}
return null;
}
};
@@ -571,10 +570,14 @@ public class HoldServiceImpl extends ServiceBaseImpl
}
invokeBeforeDeleteHold(hold);
String holdName = (String) nodeService.getProperty(hold, PROP_NAME);
Set<QName> classQNames = getTypeAndApsects(hold);
// delete the hold node
nodeService.deleteNode(hold);
//invokeOnDeleteHold(hold);
invokeOnDeleteHold(holdName, classQNames);
}
/**
@@ -902,12 +905,15 @@ public class HoldServiceImpl extends ServiceBaseImpl
/**
* Invoke onDeleteHold policy
*
* @param nodeRef node reference
* @param holdName name of the hold
* @param classQNames hold types and aspects
*/
protected void invokeOnDeleteHold(NodeRef nodeRef)
protected void invokeOnDeleteHold(String holdName, Set<QName> classQNames)
{
// execute policy for node type and aspects
OnDeleteHoldPolicy policy = onDeleteHoldPolicyDelegate.get(getTypeAndApsects(nodeRef));
policy.onDeleteHold(nodeRef);
OnDeleteHoldPolicy policy = onDeleteHoldPolicyDelegate.get(classQNames);
policy.onDeleteHold(holdName);
}
}

View File

@@ -82,8 +82,8 @@ public interface HoldServicePolicies
/**
* Called when a hold is deleted.
*
* @param hold node reference
* @param holdname name of the deleted hold
*/
void onDeleteHold(NodeRef hold);
void onDeleteHold(String holdname);
}
}

View File

@@ -39,9 +39,7 @@ import java.util.Set;
import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies;
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.role.Role;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
@@ -150,38 +148,43 @@ public class CreateHoldTest extends BaseRMTestCase implements BeforeCreateHoldPo
public void testPolicyNotificationForCreateHold() throws Exception
{
doTestInTransaction(new Test<Void>()
doBehaviourDrivenTest(new BehaviourDrivenTest()
{
private NodeRef hold;
BehaviourDefinition<ClassBehaviourBinding> beforeCreateHoldBehaviour;
BehaviourDefinition<ClassBehaviourBinding> onCreateHoldBehaviour;
@Override
public Void run()
public void given()
{
BehaviourDefinition<ClassBehaviourBinding> beforeCreateHoldBehaviour = policyComponent.bindClassBehaviour(
HoldServicePolicies.BeforeCreateHoldPolicy.BEFORE_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD_CONTAINER,
beforeCreateHoldBehaviour = policyComponent.bindClassBehaviour(HoldServicePolicies.BeforeCreateHoldPolicy.BEFORE_CREATE_HOLD,
RecordsManagementModel.TYPE_HOLD_CONTAINER,
new JavaBehaviour(CreateHoldTest.this, "beforeCreateHold", NotificationFrequency.EVERY_EVENT));
BehaviourDefinition<ClassBehaviourBinding> onCreateHoldBehaviour = policyComponent.bindClassBehaviour(
HoldServicePolicies.OnCreateHoldPolicy.ON_CREATE_HOLD, RecordsManagementModel.TYPE_HOLD,
onCreateHoldBehaviour = policyComponent.bindClassBehaviour(HoldServicePolicies.OnCreateHoldPolicy.ON_CREATE_HOLD,
RecordsManagementModel.TYPE_HOLD,
new JavaBehaviour(CreateHoldTest.this, "onCreateHold", NotificationFrequency.EVERY_EVENT));
assertFalse(beforeCreateHoldFlag);
assertFalse(onCreateHoldFlag);
// Create a hold
hold = holdService.createHold(filePlan, generate(), generate(), generate());
assertTrue(beforeCreateHoldFlag);
assertTrue(onCreateHoldFlag);
//clean up
policyComponent.removeClassDefinition(beforeCreateHoldBehaviour);
policyComponent.removeClassDefinition(onCreateHoldBehaviour);
return null;
}
}, getAdminUserName());
public void when()
{
// Create a hold
NodeRef hold = holdService.createHold(filePlan, generate(), generate(), generate());
}
public void then()
{
assertTrue(beforeCreateHoldFlag);
assertTrue(onCreateHoldFlag);
}
public void after()
{
policyComponent.removeClassDefinition(beforeCreateHoldBehaviour);
policyComponent.removeClassDefinition(onCreateHoldBehaviour);
}
});
}

View File

@@ -27,13 +27,11 @@
package org.alfresco.module.org_alfresco_module_rm.test.integration.hold;
import static org.alfresco.repo.security.authentication.AuthenticationUtil.getAdminUserName;
import static org.alfresco.util.GUID.generate;
import java.util.ArrayList;
import java.util.List;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeDeleteHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnDeleteHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
@@ -251,39 +249,47 @@ public class DeleteHoldTest extends BaseRMTestCase implements BeforeDeleteHoldPo
public void testPolicyNotificationForDeleteHold() throws Exception
{
doTestInTransaction(new Test<Void>()
doBehaviourDrivenTest(new BehaviourDrivenTest()
{
BehaviourDefinition<ClassBehaviourBinding> beforeDeleteHoldBehaviour;
BehaviourDefinition<ClassBehaviourBinding> onDeleteHoldBehaviour;
NodeRef hold;
@Override
public Void run()
public void given()
{
BehaviourDefinition<ClassBehaviourBinding> beforeDeleteHoldBehaviour = policyComponent.bindClassBehaviour(
HoldServicePolicies.BeforeDeleteHoldPolicy.BEFORE_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
beforeDeleteHoldBehaviour = policyComponent.bindClassBehaviour(BeforeDeleteHoldPolicy.BEFORE_DELETE_HOLD,
RecordsManagementModel.TYPE_HOLD,
new JavaBehaviour(DeleteHoldTest.this, "beforeDeleteHold", NotificationFrequency.EVERY_EVENT));
BehaviourDefinition<ClassBehaviourBinding> onDeleteHoldBehaviour = policyComponent.bindClassBehaviour(
HoldServicePolicies.OnDeleteHoldPolicy.ON_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
onDeleteHoldBehaviour = policyComponent.bindClassBehaviour(OnDeleteHoldPolicy.ON_DELETE_HOLD, RecordsManagementModel.TYPE_HOLD,
new JavaBehaviour(DeleteHoldTest.this, "onDeleteHold", NotificationFrequency.EVERY_EVENT));
NodeRef hold = holdService.createHold(filePlan, generate(), generate(), generate());
// Create a hold
hold = holdService.createHold(filePlan, generate(), generate(), generate());
assertFalse(beforeDeleteHoldFlag);
assertFalse(onDeleteHoldFlag);
assertFalse(beforeDeleteHoldFlag);
}
public void when()
{
// Delete the hold
holdService.deleteHold(hold);
assertTrue(beforeDeleteHoldFlag);
assertTrue(onDeleteHoldFlag);
//clean up
policyComponent.removeClassDefinition(beforeDeleteHoldBehaviour);
policyComponent.removeClassDefinition(onDeleteHoldBehaviour);
return null;
}
}, getAdminUserName());
public void then()
{
assertTrue(beforeDeleteHoldFlag);
assertTrue(onDeleteHoldFlag);
}
public void after()
{
policyComponent.removeClassDefinition(beforeDeleteHoldBehaviour);
policyComponent.removeClassDefinition(onDeleteHoldBehaviour);
}
});
}
@@ -294,7 +300,7 @@ public class DeleteHoldTest extends BaseRMTestCase implements BeforeDeleteHoldPo
}
@Override
public void onDeleteHold(NodeRef hold)
public void onDeleteHold(String holdName)
{
onDeleteHoldFlag = true;
}

View File

@@ -314,7 +314,7 @@ public class HoldServiceImplUnitTest extends BaseUnitTest
{
// mocks for policies
doNothing().when(holdService).invokeBeforeDeleteHold(any());
doNothing().when(holdService).invokeOnDeleteHold(any());
doNothing().when(holdService).invokeOnDeleteHold(any(), any());
// delete hold
holdService.deleteHold(hold);