RM-5012 - fix write records created in current transaction

This commit is contained in:
Ana Bozianu
2017-05-16 15:53:29 +03:00
parent 49119d6d3b
commit d17121ff2c
6 changed files with 52 additions and 22 deletions

View File

@@ -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());

View File

@@ -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());

View File

@@ -38,6 +38,7 @@
<bean id="writeContentPolicy" parent="basePolicy" class="org.alfresco.module.org_alfresco_module_rm.capability.policy.WriteContentPolicy">
<property name="name" value="WriteContent"/>
<property name="transactionalResourceHelper" ref="rm.transactionalResourceHelper" />
</bean>
<bean id="declarePolicy" parent="basePolicy" class="org.alfresco.module.org_alfresco_module_rm.capability.policy.DeclarePolicy">

View File

@@ -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<NodeRef> 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;
}
}
}

View File

@@ -1205,11 +1205,11 @@ public class RecordServiceImpl extends BaseBehaviourBean
disablePropertyEditableCheck();
try
{
authenticationUtil.runAsSystem(new RunAsWork<Void>()
{
authenticationUtil.runAsSystem(new RunAsWork<Void>()
{
@Override
public Void doWork() throws Exception {
@Override
public Void doWork() throws Exception {
Map<QName, Serializable> 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
{

View File

@@ -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<ChildAssociationRef> 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);
}
});
}