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
- implementation for policies - integration tests
This commit is contained in:
@@ -41,6 +41,7 @@ import java.util.Set;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies;
|
||||
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;
|
||||
@@ -49,10 +50,13 @@ import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
|
||||
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;
|
||||
import org.alfresco.module.org_alfresco_module_rm.util.PoliciesUtil;
|
||||
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
|
||||
import org.alfresco.repo.node.NodeServicePolicies;
|
||||
import org.alfresco.repo.node.integrity.IntegrityException;
|
||||
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
|
||||
import org.alfresco.repo.policy.ClassPolicyDelegate;
|
||||
import org.alfresco.repo.policy.PolicyComponent;
|
||||
import org.alfresco.repo.policy.annotation.Behaviour;
|
||||
import org.alfresco.repo.policy.annotation.BehaviourBean;
|
||||
import org.alfresco.repo.policy.annotation.BehaviourKind;
|
||||
@@ -113,6 +117,9 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
||||
/** Capability service */
|
||||
private CapabilityService capabilityService;
|
||||
|
||||
/** Policy component */
|
||||
private PolicyComponent policyComponent;
|
||||
|
||||
/**
|
||||
* Set the file plan service
|
||||
*
|
||||
@@ -169,6 +176,34 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
||||
this.capabilityService = capabilityService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the policy component instance
|
||||
*
|
||||
* @return The policy component instance
|
||||
*/
|
||||
private PolicyComponent getPolicyComponent()
|
||||
{
|
||||
return this.policyComponent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the policy component instance
|
||||
*
|
||||
* @param policyComponent The policy component instance
|
||||
*/
|
||||
public void setPolicyComponent(PolicyComponent policyComponent)
|
||||
{
|
||||
this.policyComponent = policyComponent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Policy delegates
|
||||
*/
|
||||
private ClassPolicyDelegate<HoldServicePolicies.BeforeCreateHoldPolicy> beforeCreateHoldPolicyDelegate;
|
||||
private ClassPolicyDelegate<HoldServicePolicies.OnCreateHoldPolicy> onCreateHoldPolicyDelegate;
|
||||
private ClassPolicyDelegate<HoldServicePolicies.BeforeDeleteHoldPolicy> beforeDeleteHoldPolicyDelegate;
|
||||
private ClassPolicyDelegate<HoldServicePolicies.OnDeleteHoldPolicy> onDeleteHoldPolicyDelegate;
|
||||
|
||||
/**
|
||||
* Initialise hold service
|
||||
*/
|
||||
@@ -184,6 +219,12 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
// Register the policies
|
||||
beforeCreateHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.BeforeCreateHoldPolicy.class);
|
||||
onCreateHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.OnCreateHoldPolicy.class);
|
||||
beforeDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.BeforeDeleteHoldPolicy.class);
|
||||
onDeleteHoldPolicyDelegate = getPolicyComponent().registerClassPolicy(HoldServicePolicies.OnDeleteHoldPolicy.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -417,6 +458,9 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
||||
// get the root hold container
|
||||
NodeRef holdContainer = filePlanService.getHoldContainer(filePlan);
|
||||
|
||||
//invoke before create hold
|
||||
beforeCreateHoldPolicyDelegate.get(getTypeAndApsects(holdContainer)).beforeCreateHold(name, reason);
|
||||
|
||||
// create map of properties
|
||||
Map<QName, Serializable> properties = new HashMap<>(3);
|
||||
properties.put(ContentModel.PROP_NAME, name);
|
||||
@@ -432,7 +476,12 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
||||
// create hold
|
||||
ChildAssociationRef childAssocRef = nodeService.createNode(holdContainer, ContentModel.ASSOC_CONTAINS, assocName, TYPE_HOLD, properties);
|
||||
|
||||
return childAssocRef.getChildRef();
|
||||
NodeRef holdNodeRef = childAssocRef.getChildRef();
|
||||
|
||||
//invoke after hold is created
|
||||
onCreateHoldPolicyDelegate.get(getTypeAndApsects(holdNodeRef)).onCreateHold(holdNodeRef);
|
||||
|
||||
return holdNodeRef;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -520,8 +569,12 @@ public class HoldServiceImpl extends ServiceBaseImpl
|
||||
throw new AlfrescoRuntimeException("Can't delete hold, because filing permissions for the following items are needed: " + sb.toString());
|
||||
}
|
||||
|
||||
beforeDeleteHoldPolicyDelegate.get(getTypeAndApsects(hold)).beforeDeleteHold(hold);
|
||||
|
||||
// delete the hold node
|
||||
nodeService.deleteNode(hold);
|
||||
|
||||
onDeleteHoldPolicyDelegate.get(getTypeAndApsects(hold)).onDeleteHold(hold);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -27,6 +27,8 @@
|
||||
|
||||
package org.alfresco.module.org_alfresco_module_rm.hold;
|
||||
|
||||
import org.alfresco.repo.policy.ClassPolicy;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
|
||||
@@ -37,6 +39,55 @@ import org.alfresco.service.namespace.QName;
|
||||
* @since 3.3
|
||||
*/
|
||||
|
||||
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
|
||||
{
|
||||
/**
|
||||
* Called before a hold is created.
|
||||
*
|
||||
* @param name name of the hold to be created
|
||||
* @param reason reason for the hold to be created
|
||||
*/
|
||||
void beforeCreateHold(String name, String reason);
|
||||
}
|
||||
|
||||
interface OnCreateHoldPolicy extends ClassPolicy
|
||||
{
|
||||
/**
|
||||
* Called when a hold is created.
|
||||
*
|
||||
* @param hold node reference
|
||||
*/
|
||||
void onCreateHold(NodeRef hold);
|
||||
}
|
||||
|
||||
interface BeforeDeleteHoldPolicy extends ClassPolicy
|
||||
{
|
||||
/**
|
||||
* Called before a hold is created.
|
||||
*
|
||||
* @param hold node reference
|
||||
*/
|
||||
void beforeDeleteHold(NodeRef hold);
|
||||
}
|
||||
|
||||
interface OnDeleteHoldPolicy extends ClassPolicy
|
||||
{
|
||||
/**
|
||||
* Called when a hold is deleted.
|
||||
*
|
||||
* @param hold node reference
|
||||
*/
|
||||
void onDeleteHold(NodeRef hold);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user