From d662719915f50f307766548fbfaabeb5b8fe2735 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 16 May 2017 15:53:29 +0300 Subject: [PATCH] RM-5012 - fix write records created in current transaction --- .../recordfolders/RecordFolderTests.java | 4 +-- .../UnfiledRecordsFolderTests.java | 2 +- .../capability/policy/WriteContentPolicy.java | 32 +++++++++++++++++-- .../record/RecordServiceImpl.java | 30 ++++++++--------- .../test/integration/issue/RM978Test.java | 5 ++- 5 files changed, 51 insertions(+), 22 deletions(-) diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/recordfolders/RecordFolderTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/recordfolders/RecordFolderTests.java index 6381fe88f9..dde7d18a30 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/recordfolders/RecordFolderTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/recordfolders/RecordFolderTests.java @@ -464,8 +464,8 @@ public class RecordFolderTests extends BaseRMRestTest assertEquals(record.getParentId(), containerId); //check the record name - assertFalse(record.getName().equals(createdComponent.getName()), - "Record Name"+ record.getName()+" doesn't contain the record identifier"); + assertTrue(record.getName().equals(createdComponent.getName()), + "Record Name"+ record.getName()+" doesn't match the one returned on create"); assertTrue(createdComponent.getName().contains(createdComponent.getProperties().getIdentifier()), "Record Name"+ createdComponent.getName()+" doesn't contain the record identifier in response when creating"); assertEquals(createdComponent.getNodeType(), record.getNodeType()); diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/unfiledrecordfolders/UnfiledRecordsFolderTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/unfiledrecordfolders/UnfiledRecordsFolderTests.java index 7e6c18b500..3e9c860a8c 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/unfiledrecordfolders/UnfiledRecordsFolderTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/unfiledrecordfolders/UnfiledRecordsFolderTests.java @@ -488,7 +488,7 @@ public class UnfiledRecordsFolderTests extends BaseRMRestTest "The record name "+ record.getName()+" is not equal with the record name returned when creating the record " + createdComponent .getName()); - assertTrue(record.getName().equals(record.getProperties().getIdentifier())); + assertTrue(record.getName().contains(record.getProperties().getIdentifier())); assertTrue(createdComponent.getName().contains(createdComponent.getProperties().getIdentifier())); assertEquals(createdComponent.getNodeType(), record.getNodeType()); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/policy/WriteContentPolicy.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/policy/WriteContentPolicy.java index 2279605656..e604675f9f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/policy/WriteContentPolicy.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/capability/policy/WriteContentPolicy.java @@ -27,20 +27,46 @@ package org.alfresco.module.org_alfresco_module_rm.capability.policy; +import java.util.Set; + +import org.alfresco.module.org_alfresco_module_rm.record.RecordServiceImpl; +import org.alfresco.module.org_alfresco_module_rm.util.TransactionalResourceHelper; import org.alfresco.service.cmr.repository.NodeRef; import org.aopalliance.intercept.MethodInvocation; +import net.sf.acegisecurity.vote.AccessDecisionVoter; + public class WriteContentPolicy extends AbstractBasePolicy { + protected TransactionalResourceHelper transactionalResourceHelper; + + public void setTransactionalResourceHelper(TransactionalResourceHelper transactionalResourceHelper) + { + this.transactionalResourceHelper = transactionalResourceHelper; + } @SuppressWarnings("rawtypes") - public int evaluate( + public int evaluate( MethodInvocation invocation, Class[] params, ConfigAttributeDefinition cad) { - NodeRef updatee = getTestNode(invocation, params, cad.getParameters().get(0), cad.isParent()); - return getCapabilityService().getCapability("WriteContent").evaluate(updatee); + try{ + NodeRef updatee = getTestNode(invocation, params, cad.getParameters().get(0), cad.isParent()); + Set newRecords = transactionalResourceHelper.getSet(RecordServiceImpl.KEY_NEW_RECORDS); + if(newRecords.contains(updatee)) + { + return AccessDecisionVoter.ACCESS_GRANTED; + } + else + { + return getCapabilityService().getCapability("WriteContent").evaluate(updatee); + } + } + catch(Exception ex) + { + throw ex; + } } } 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 316036a867..f1a1991fc3 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 @@ -1205,11 +1205,11 @@ public class RecordServiceImpl extends BaseBehaviourBean disablePropertyEditableCheck(); try { - authenticationUtil.runAsSystem(new RunAsWork() - { + authenticationUtil.runAsSystem(new RunAsWork() + { - @Override - public Void doWork() throws Exception { + @Override + public Void doWork() throws Exception { Map props = new HashMap<>(); if(!nodeService.hasAspect(document, ASPECT_RECORD_COMPONENT_ID)) @@ -1226,19 +1226,19 @@ public class RecordServiceImpl extends BaseBehaviourBean props.put(PROP_IDENTIFIER, recordId); props.put(PROP_ORIGIONAL_NAME, name); } - nodeService.addAspect(document, RecordsManagementModel.ASPECT_RECORD, props); + nodeService.addAspect(document, RecordsManagementModel.ASPECT_RECORD, props); - // remove versionable aspect(s) - nodeService.removeAspect(document, RecordableVersionModel.ASPECT_VERSIONABLE); + // remove versionable aspect(s) + nodeService.removeAspect(document, RecordableVersionModel.ASPECT_VERSIONABLE); - // remove the owner - - ownableService.setOwner(document, OwnableService.NO_OWNER); - - appendIdentifierToName(nodeService, document); - return null; - } - }); + // remove the owner + + ownableService.setOwner(document, OwnableService.NO_OWNER); + + appendIdentifierToName(nodeService, document); + return null; + } + }); } finally { diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM978Test.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM978Test.java index 55a5e62195..54abb6a079 100644 --- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM978Test.java +++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM978Test.java @@ -36,6 +36,7 @@ import java.util.List; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -408,8 +409,10 @@ public class RM978Test extends BaseRMTestCase List rmFolderChildAssocs = nodeService.getChildAssocs(rmFolder); assertEquals(1, rmFolderChildAssocs.size()); NodeRef movedDocument = rmFolderChildAssocs.iterator().next().getChildRef(); + String recordIdentifier = (String) nodeService.getProperty(movedDocument, RecordsManagementModel.PROP_IDENTIFIER); + assertNotNull(recordIdentifier); String movedDocumentName = (String) nodeService.getProperty(movedDocument, ContentModel.PROP_NAME); - assertEquals(document1Name, movedDocumentName); + assertEquals(document1Name + " (" + recordIdentifier + ")", movedDocumentName); } }); }