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);
+ }
+ }
}