Merge branch 'master' of https://git.alfresco.com/records-management/records-management into feature/RM-7020_AllowUpdateOfPropertiesForSystemNamespaceURIRefactor

This commit is contained in:
Rodica Sutu
2019-11-05 11:37:56 +02:00
5 changed files with 564 additions and 219 deletions

View File

@@ -47,10 +47,14 @@ 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.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.BeforeAddToHoldPolicy;
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.BeforeRemoveFromHoldPolicy;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnAddToHoldPolicy;
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.hold.HoldServicePolicies.OnRemoveFromHoldPolicy;
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.recordfolder.RecordFolderService;
@@ -206,6 +210,10 @@ public class HoldServiceImpl extends ServiceBaseImpl
private ClassPolicyDelegate<OnCreateHoldPolicy> onCreateHoldPolicyDelegate;
private ClassPolicyDelegate<BeforeDeleteHoldPolicy> beforeDeleteHoldPolicyDelegate;
private ClassPolicyDelegate<OnDeleteHoldPolicy> onDeleteHoldPolicyDelegate;
private ClassPolicyDelegate<BeforeAddToHoldPolicy> beforeAddToHoldPolicyDelegate;
private ClassPolicyDelegate<OnAddToHoldPolicy> onAddToHoldPolicyDelegate;
private ClassPolicyDelegate<BeforeRemoveFromHoldPolicy> beforeRemoveFromHoldPolicyDelegate;
private ClassPolicyDelegate<OnRemoveFromHoldPolicy> onRemoveFromHoldPolicyDelegate;
/**
* Initialise hold service
@@ -228,6 +236,11 @@ public class HoldServiceImpl extends ServiceBaseImpl
onCreateHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(OnCreateHoldPolicy.class);
beforeDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(BeforeDeleteHoldPolicy.class);
onDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(OnDeleteHoldPolicy.class);
beforeAddToHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(BeforeAddToHoldPolicy.class);
onAddToHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(OnAddToHoldPolicy.class);
beforeRemoveFromHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(BeforeRemoveFromHoldPolicy.class);
onRemoveFromHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(OnRemoveFromHoldPolicy.class);
}
/**
@@ -637,6 +650,8 @@ public class HoldServiceImpl extends ServiceBaseImpl
// check that the node isn't already in the hold
if (!getHeld(hold).contains(nodeRef))
{
// fire before add to hold policy
invokeBeforeAddToHold(hold, nodeRef);
// run as system to ensure we have all the appropriate permissions to perform the manipulations we require
authenticationUtil.runAsSystem((RunAsWork<Void>) () -> {
// gather freeze properties
@@ -661,6 +676,9 @@ public class HoldServiceImpl extends ServiceBaseImpl
records.forEach(record -> addFrozenAspect(record, props));
}
// fire on add to hold policy
invokeOnAddToHold(hold, nodeRef);
return null;
});
}
@@ -797,6 +815,8 @@ public class HoldServiceImpl extends ServiceBaseImpl
// run as system so we don't run into further permission issues
// we already know we have to have the correct capability to get here
authenticationUtil.runAsSystem((RunAsWork<Void>) () -> {
// fire before remove from hold policy
invokeBeforeRemoveFromHold(hold, nodeRef);
// remove from hold
//set in transaction cache in order not to trigger update policy when removing the child association
transactionalResourceHelper.getSet("frozen").add(nodeRef);
@@ -806,6 +826,9 @@ public class HoldServiceImpl extends ServiceBaseImpl
// TODO add details of the hold that the node was removed from
recordsManagementAuditService.auditEvent(nodeRef, AUDIT_REMOVE_FROM_HOLD);
// fire on remove from hold policy
invokeOnRemoveFromHold(hold, nodeRef);
return null;
});
@@ -916,4 +939,52 @@ public class HoldServiceImpl extends ServiceBaseImpl
}
/**
* Invoke beforeAddToHold policy
*
* @param hold hold node reference
* @param contentNodeRef content node reference
*/
protected void invokeBeforeAddToHold(NodeRef hold, NodeRef contentNodeRef)
{
BeforeAddToHoldPolicy policy = beforeAddToHoldPolicyDelegate.get(getTypeAndApsects(hold));
policy.beforeAddToHold(hold, contentNodeRef);
}
/**
* Invoke onAddToHold policy
*
* @param hold hold node reference
* @param contentNodeRef content node reference
*/
protected void invokeOnAddToHold(NodeRef hold, NodeRef contentNodeRef)
{
OnAddToHoldPolicy policy = onAddToHoldPolicyDelegate.get(getTypeAndApsects(hold));
policy.onAddToHold(hold, contentNodeRef);
}
/**
* Invoke beforeRemoveFromHold policy
*
* @param hold hold node reference
* @param contentNodeRef content node reference
*/
protected void invokeBeforeRemoveFromHold(NodeRef hold, NodeRef contentNodeRef)
{
BeforeRemoveFromHoldPolicy policy = beforeRemoveFromHoldPolicyDelegate.get(getTypeAndApsects(hold));
policy.beforeRemoveFromHold(hold, contentNodeRef);
}
/**
* Invoke onRemoveFromHold policy
*
* @param hold hold node reference
* @param contentNodeRef content node reference
*/
protected void invokeOnRemoveFromHold(NodeRef hold, NodeRef contentNodeRef)
{
OnRemoveFromHoldPolicy policy = onRemoveFromHoldPolicyDelegate.get(getTypeAndApsects(hold));
policy.onRemoveFromHold(hold, contentNodeRef);
}
}

View File

@@ -36,6 +36,7 @@ import org.alfresco.service.namespace.QName;
* Hold Service Policies
*
* @author Ramona Popa
* @author Roxana Lucanu
* @since 3.3
*/
@@ -86,4 +87,57 @@ public interface HoldServicePolicies
*/
void onDeleteHold(String holdname);
}
interface BeforeAddToHoldPolicy extends ClassPolicy
{
QName QNAME = QName.createQName(NamespaceService.ALFRESCO_URI, "beforeAddToHold");
/**
* Called before adding content to hold.
*
* @param hold the hold to be added into
* @param contentNodeRef the item to be added to hold
*/
void beforeAddToHold(NodeRef hold, NodeRef contentNodeRef);
}
interface OnAddToHoldPolicy extends ClassPolicy
{
QName QNAME = QName.createQName(NamespaceService.ALFRESCO_URI, "onAddToHold");
/**
* Called when content is added to hold.
*
* @param hold the hold to be added into
* @param contentNodeRef the item to be added to hold
*/
void onAddToHold(NodeRef hold, NodeRef contentNodeRef);
}
interface BeforeRemoveFromHoldPolicy extends ClassPolicy
{
QName QNAME = QName.createQName(NamespaceService.ALFRESCO_URI, "beforeRemoveFromHold");
/**
* Called before removing content from hold.
*
* @param hold the hold to be removed from
* @param contentNodeRef the item to be removed from hold
*/
void beforeRemoveFromHold(NodeRef hold, NodeRef contentNodeRef);
}
interface OnRemoveFromHoldPolicy extends ClassPolicy
{
QName QNAME = QName.createQName(NamespaceService.ALFRESCO_URI, "onRemoveFromHold");
/**
* Called when removing content from hold.
*
* @param hold the hold to be removed from
* @param contentNodeRef the item to be removed from hold
*/
void onRemoveFromHold(NodeRef hold, NodeRef contentNodeRef);
}
}