From 232c42be6cf95f4d8b289293877ef390378e221a Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Fri, 19 May 2017 15:37:36 +0300 Subject: [PATCH] RM-5012 - fix "can't get rid of the identifier" --- .../rm-action-context.xml | 1 + .../action/impl/DeclareRecordAction.java | 25 ++++++++++++++++--- .../model/rma/type/RecordFolderType.java | 2 -- .../type/RecordsManagementContainerType.java | 12 --------- .../record/RecordServiceImpl.java | 19 ++++++++++++++ 5 files changed, 41 insertions(+), 18 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml index 3b05142894..73adaab087 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml @@ -389,6 +389,7 @@ + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java index f0be02b99a..062929f92f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/DeclareRecordAction.java @@ -38,6 +38,8 @@ import java.util.Set; import static org.alfresco.module.org_alfresco_module_rm.record.RecordUtils.generateRecordIdentifier; import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase; +import org.alfresco.module.org_alfresco_module_rm.record.RecordServiceImpl; +import org.alfresco.module.org_alfresco_module_rm.util.TransactionalResourceHelper; import org.alfresco.repo.action.executer.ActionExecuterAbstractBase; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -72,13 +74,24 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase /** check mandatory properties */ private boolean checkMandatoryPropertiesEnabled = true; + /** transactional resource helper */ + private TransactionalResourceHelper transactionalResourceHelper; + /** * @param checkMandatoryPropertiesEnabled true if check mandatory properties is enabled, false otherwise */ public void setCheckMandatoryPropertiesEnabled(boolean checkMandatoryPropertiesEnabled) { - this.checkMandatoryPropertiesEnabled = checkMandatoryPropertiesEnabled; - } + this.checkMandatoryPropertiesEnabled = checkMandatoryPropertiesEnabled; + } + + /** + * @param transactionalResourceHelper + */ + public void setTransactionalResourceHelper(TransactionalResourceHelper transactionalResourceHelper) + { + this.transactionalResourceHelper = transactionalResourceHelper; + } /** * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef) @@ -92,8 +105,12 @@ public class DeclareRecordAction extends RMActionExecuterAbstractBase { if (!getRecordService().isDeclared(actionedUponNodeRef)) { - // make sure the record identifier is set - generateRecordIdentifier(getNodeService(), getIdentifierService(), actionedUponNodeRef); + // if the record is newly created make sure the record identifier is set before completing the record + Set newRecords = transactionalResourceHelper.getSet(RecordServiceImpl.KEY_NEW_RECORDS); + if(newRecords.contains(actionedUponNodeRef)) + { + generateRecordIdentifier(getNodeService(), getIdentifierService(), actionedUponNodeRef); + } List missingProperties = new ArrayList(5); // Aspect not already defined - check mandatory properties then add diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index 80fb8b2a0b..37ba895c11 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -274,8 +274,6 @@ public class RecordFolderType extends AbstractDisposableItem throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER_CHILD, nodeService.getType(child)), null); } - generateRecordIdentifier(nodeService, identifierService, child); - behaviourFilter.disableBehaviour(); try { diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java index 3dc7c4ce99..a1517015ff 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordsManagementContainerType.java @@ -196,18 +196,6 @@ public class RecordsManagementContainerType extends BaseBehaviourBean setIdenifierProperty(child); } } - else - { - NodeRef parentRef = childAssocRef.getParentRef(); - QName parentType = nodeService.getType(parentRef); - boolean isContentSubType = dictionaryService.isSubClass(childType, ContentModel.TYPE_CONTENT); - boolean isUnfiledRecordContainer = parentType.equals(RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER); - boolean isUnfiledRecordFolder = parentType.equals(RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER); - if (isContentSubType && (isUnfiledRecordContainer || isUnfiledRecordFolder)) - { - generateRecordIdentifier(nodeService, identifierService, child); - } - } } return null; 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 bbf8449374..4af92d28b5 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 @@ -132,6 +132,7 @@ public class RecordServiceImpl extends BaseBehaviourBean implements RecordService, RecordsManagementModel, RecordsManagementCustomModel, + NodeServicePolicies.OnAddAspectPolicy, NodeServicePolicies.OnCreateChildAssociationPolicy, NodeServicePolicies.OnRemoveAspectPolicy, NodeServicePolicies.OnUpdatePropertiesPolicy, @@ -421,6 +422,24 @@ public class RecordServiceImpl extends BaseBehaviourBean onRecordDeclarationDelegate = policyComponent.registerClassPolicy(OnRecordDeclaration.class); } + /** + * @see org.alfresco.repo.node.NodeServicePolicies.OnAddAspectPolicy#onAddAspect(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ + @Override + @Behaviour + ( + kind = BehaviourKind.CLASS, + type = "rma:record", + notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT + ) + public void onAddAspect(NodeRef nodeRef, QName aspect) + { + if (nodeService.exists(nodeRef) && nodeService.hasAspect(nodeRef, ASPECT_RECORD)) + { + generateRecordIdentifier(nodeService, identifierService, nodeRef); + } + } + /** * @see org.alfresco.repo.node.NodeServicePolicies.OnRemoveAspectPolicy#onRemoveAspect(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) */