RM-652: Updated "Reject" rule is executed when the record is created

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@49881 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2013-05-09 06:39:29 +00:00
parent c9ec62ab8c
commit 9a81e08b14
2 changed files with 65 additions and 44 deletions

View File

@@ -1105,6 +1105,7 @@
<property name="ownableService" ref="OwnableService" /> <property name="ownableService" ref="OwnableService" />
<property name="notificationHelper" ref="recordsManagementNotificationHelper"/> <property name="notificationHelper" ref="recordsManagementNotificationHelper"/>
<property name="capabilityService" ref="CapabilityService" /> <property name="capabilityService" ref="CapabilityService" />
<property name="ruleService" ref="RuleService" />
</bean> </bean>
<bean id="RecordService" class="org.springframework.aop.framework.ProxyFactoryBean"> <bean id="RecordService" class="org.springframework.aop.framework.ProxyFactoryBean">

View File

@@ -62,6 +62,7 @@ import org.alfresco.service.cmr.dictionary.PropertyDefinition;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.service.cmr.security.AccessPermission; import org.alfresco.service.cmr.security.AccessPermission;
import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.OwnableService; import org.alfresco.service.cmr.security.OwnableService;
@@ -169,6 +170,9 @@ public class RecordServiceImpl implements RecordService,
/** Capability service */ /** Capability service */
private CapabilityService capabilityService; private CapabilityService capabilityService;
/** Rule service */
private RuleService ruleService;
/** List of available record meta-data aspects */ /** List of available record meta-data aspects */
private Set<QName> recordMetaDataAspects; private Set<QName> recordMetaDataAspects;
@@ -284,6 +288,14 @@ public class RecordServiceImpl implements RecordService,
{ {
this.capabilityService = capabilityService; this.capabilityService = capabilityService;
} }
/**
* @param ruleService rule service
*/
public void setRuleService(RuleService ruleService)
{
this.ruleService = ruleService;
}
/** /**
* Init method * Init method
@@ -663,57 +675,65 @@ public class RecordServiceImpl implements RecordService,
@Override @Override
public Void doWork() throws Exception public Void doWork() throws Exception
{ {
// take note of the record id ruleService.disableRules();
String recordId = (String)nodeService.getProperty(nodeRef, PROP_IDENTIFIER); try
{
// take node of the original document owner // take note of the record id
String documentOwner = (String) nodeService.getProperty(nodeRef, PROP_RECORD_ORIGINATING_USER_ID); String recordId = (String)nodeService.getProperty(nodeRef, PROP_IDENTIFIER);
// first remove the secondary link association // take node of the original document owner
NodeRef originatingLocation = (NodeRef) nodeService.getProperty(nodeRef, PROP_RECORD_ORIGINATING_LOCATION); String documentOwner = (String) nodeService.getProperty(nodeRef, PROP_RECORD_ORIGINATING_USER_ID);
List<ChildAssociationRef> parentAssocs = nodeService.getParentAssocs(nodeRef);
for (ChildAssociationRef childAssociationRef : parentAssocs) // first remove the secondary link association
{ NodeRef originatingLocation = (NodeRef) nodeService.getProperty(nodeRef, PROP_RECORD_ORIGINATING_LOCATION);
if (childAssociationRef.isPrimary() == false && childAssociationRef.getParentRef().equals(originatingLocation)) List<ChildAssociationRef> parentAssocs = nodeService.getParentAssocs(nodeRef);
for (ChildAssociationRef childAssociationRef : parentAssocs)
{ {
nodeService.removeChildAssociation(childAssociationRef); if (childAssociationRef.isPrimary() == false && childAssociationRef.getParentRef().equals(originatingLocation))
break; {
nodeService.removeChildAssociation(childAssociationRef);
break;
}
} }
}
// remove all RM related aspects from the node
// remove all RM related aspects from the node Set<QName> aspects = nodeService.getAspects(nodeRef);
Set<QName> aspects = nodeService.getAspects(nodeRef); for (QName aspect : aspects)
for (QName aspect : aspects)
{
if (RM_URI.equals(aspect.getNamespaceURI()) == true)
{ {
// remove the aspect if (RM_URI.equals(aspect.getNamespaceURI()) == true)
nodeService.removeAspect(nodeRef, aspect); {
// remove the aspect
nodeService.removeAspect(nodeRef, aspect);
}
} }
// get the records primary parent association
ChildAssociationRef parentAssoc = nodeService.getPrimaryParent(nodeRef);
// move the record into the collaboration site
nodeService.moveNode(nodeRef, originatingLocation, ContentModel.ASSOC_CONTAINS, parentAssoc.getQName());
// save the information about the rejection details
Map<QName, Serializable> aspectProperties = new HashMap<QName, Serializable>(3);
aspectProperties.put(PROP_RECORD_REJECTION_USER_ID, userId);
aspectProperties.put(PROP_RECORD_REJECTION_DATE, new Date());
aspectProperties.put(PROP_RECORD_REJECTION_REASON, reason);
nodeService.addAspect(nodeRef, ASPECT_RECORD_REJECTION_DETAILS, aspectProperties);
// Restore the owner of the document
if (StringUtils.isBlank(documentOwner))
{
throw new AlfrescoRuntimeException("Unable to find the creator of document.");
}
ownableService.setOwner(nodeRef, documentOwner);
// send an email to the record creator
notificationHelper.recordRejectedEmailNotification(nodeRef, recordId, documentOwner);
} }
finally
// get the records primary parent association
ChildAssociationRef parentAssoc = nodeService.getPrimaryParent(nodeRef);
// move the record into the collaboration site
nodeService.moveNode(nodeRef, originatingLocation, ContentModel.ASSOC_CONTAINS, parentAssoc.getQName());
// save the information about the rejection details
Map<QName, Serializable> aspectProperties = new HashMap<QName, Serializable>(3);
aspectProperties.put(PROP_RECORD_REJECTION_USER_ID, userId);
aspectProperties.put(PROP_RECORD_REJECTION_DATE, new Date());
aspectProperties.put(PROP_RECORD_REJECTION_REASON, reason);
nodeService.addAspect(nodeRef, ASPECT_RECORD_REJECTION_DETAILS, aspectProperties);
// Restore the owner of the document
if (StringUtils.isBlank(documentOwner))
{ {
throw new AlfrescoRuntimeException("Unable to find the creator of document."); ruleService.enableRules();
} }
ownableService.setOwner(nodeRef, documentOwner);
// send an email to the record creator
notificationHelper.recordRejectedEmailNotification(nodeRef, recordId, documentOwner);
return null; return null;
} }