diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 6682d0a617..c2fd343d4b 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -1075,6 +1075,7 @@ + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index 65d4582634..85f3a01d5e 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -80,6 +80,7 @@ import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionModel import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionService; import org.alfresco.repo.content.ContentServicePolicies; import org.alfresco.repo.node.NodeServicePolicies; +import org.alfresco.repo.node.integrity.IncompleteNodeTagger; import org.alfresco.repo.policy.ClassPolicyDelegate; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.policy.Behaviour.NotificationFrequency; @@ -270,6 +271,8 @@ public class RecordServiceImpl extends BaseBehaviourBean private ClassPolicyDelegate beforeRecordRejectionDelegate; private ClassPolicyDelegate onRecordRejectionDelegate; + private IncompleteNodeTagger incompleteNodeTagger; + /** * @param identifierService identifier service */ @@ -414,6 +417,11 @@ public class RecordServiceImpl extends BaseBehaviourBean this.recordableVersionService = recordableVersionService; } + public void setIncompleteNodeTagger(IncompleteNodeTagger incompleteNodeTagger) + { + this.incompleteNodeTagger = incompleteNodeTagger; + } + /** * Init method */ @@ -448,6 +456,7 @@ public class RecordServiceImpl extends BaseBehaviourBean if (nodeService.exists(nodeRef) && nodeService.hasAspect(nodeRef, ASPECT_RECORD)) { generateRecordIdentifier(nodeService, identifierService, nodeRef); + reevaluateIncompleteTag(nodeRef); } return null; } @@ -471,6 +480,7 @@ public class RecordServiceImpl extends BaseBehaviourBean if (ContentData.hasContent(contentData) && contentData.getSize() > 0) { appendIdentifierToName(nodeService, nodeRef); + reevaluateIncompleteTag(nodeRef); } } } @@ -1835,6 +1845,7 @@ public class RecordServiceImpl extends BaseBehaviourBean if (nodeService.exists(nodeRef) && !nodeService.hasAspect(nodeRef, ContentModel.ASPECT_HIDDEN) && !nodeService.hasAspect(nodeRef, ContentModel.ASPECT_LOCKABLE)) { generateRecordIdentifier(nodeService, identifierService, nodeRef); + reevaluateIncompleteTag(nodeRef); } } @@ -1893,4 +1904,22 @@ public class RecordServiceImpl extends BaseBehaviourBean OnRecordRejection policy = onRecordRejectionDelegate.get(qnames); policy.onRecordRejection(nodeRef); } + + /** + * RM-5244 - workaround to make sure the incomplete aspect is removed + * + * @param nodeRef the node to reevaluate for + */ + private void reevaluateIncompleteTag(NodeRef nodeRef) + { + /* + * Check if the node has the aspect because the reevaluation is expensive. + * If the node doesn't have the aspect it means IncompleteNodeTagger didn't load before TransactionBehaviourQueue + * and we don't need to reevaluate. + */ + if(nodeService.hasAspect(nodeRef, ContentModel.ASPECT_INCOMPLETE)) + { + incompleteNodeTagger.beforeCommit(false); + } + } }