From cef10a210c2803d163085a7278cb2741c30c3a75 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Thu, 21 Mar 2013 07:37:20 +0000 Subject: [PATCH] RM: Fix unit test * ensure file plan param is provided to create record action * deal with some of the depreaction warnings from recent changes git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@48441 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org_alfresco_module_rm/module-context.xml | 2 +- .../rm-model-context.xml | 2 +- .../rm-public-services-security-context.xml | 2 +- .../rm-service-context.xml | 9 +-- .../AuthenticatedUserRolesDataExtractor.java | 15 +++-- .../capability/RMAfterInvocationProvider.java | 2 +- .../capability/RMSecurityCommon.java | 16 ++++- .../declarative/DeclarativeCapability.java | 2 +- .../capability/impl/CreateCapability.java | 4 +- .../fileplan/FilePlanServiceImpl.java | 62 ++++++------------- .../behaviour/FilePlanComponentAspect.java | 31 +++++----- .../test/action/HideRecordActionTest.java | 1 + 12 files changed, 70 insertions(+), 78 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml index b5ab9c02d0..41d6b9855e 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/module-context.xml @@ -48,7 +48,7 @@ - + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml index f12ed72a23..fb5c1a63b5 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml @@ -41,7 +41,7 @@ - + - + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 6b39d6389f..af625eeddf 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -439,10 +439,11 @@ - - - - + + + + + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java index 57ca95cd83..e13489d476 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/AuthenticatedUserRolesDataExtractor.java @@ -21,7 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.audit; import java.io.Serializable; import java.util.Set; -import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; +import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; 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.role.Role; @@ -41,7 +41,7 @@ import org.alfresco.service.cmr.repository.NodeService; public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtractor { private NodeService nodeService; - private RecordsManagementService rmService; + private FilePlanService filePlanService; private FilePlanRoleService filePlanRoleService; /** @@ -53,11 +53,11 @@ public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtra } /** - * Used to find the RM root + * @param filePlanService file plan service */ - public void setRmService(RecordsManagementService rmService) + public void setFilePlanService(FilePlanService filePlanService) { - this.rmService = rmService; + this.filePlanService = filePlanService; } /** @@ -81,6 +81,9 @@ public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtra return nodeService.hasAspect((NodeRef)data, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT); } + /** + * @see org.alfresco.repo.audit.extractor.DataExtractor#extractData(java.io.Serializable) + */ public Serializable extractData(Serializable value) throws Throwable { NodeRef nodeRef = (NodeRef) value; @@ -92,7 +95,7 @@ public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtra } // Get the rm root - NodeRef rmRootNodeRef = rmService.getFilePlan(nodeRef); + NodeRef rmRootNodeRef = filePlanService.getFilePlan(nodeRef); Set roles = filePlanRoleService.getRolesByUser(rmRootNodeRef, user); StringBuilder sb = new StringBuilder(100); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java index 4b7b0fd118..4117569fae 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java @@ -959,7 +959,7 @@ public class RMAfterInvocationProvider extends RMSecurityCommon String uuid = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_NODE_UUID)); StoreRef storeRef = new StoreRef(protocol, identifier); NodeRef nodeRef = new NodeRef(storeRef, uuid); - if ((nodeRef == null) || (permissionService.hasPermission(rmService.getFilePlan(nodeRef), RMPermissionModel.VIEW_UPDATE_REASONS_FOR_FREEZE) != AccessStatus.ALLOWED)) + if ((nodeRef == null) || (permissionService.hasPermission(filePlanService.getFilePlan(nodeRef), RMPermissionModel.VIEW_UPDATE_REASONS_FOR_FREEZE) != AccessStatus.ALLOWED)) { filtered.remove(RecordsManagementModel.PROP_HOLD_REASON); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java index c098cc4ed6..a02fc646d5 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMSecurityCommon.java @@ -22,6 +22,8 @@ import net.sf.acegisecurity.vote.AccessDecisionVoter; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.module.org_alfresco_module_rm.caveat.RMCaveatConfigComponent; +import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; +import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.service.cmr.repository.NodeRef; @@ -32,6 +34,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** + * Common security functions. + * + * TODO move methods to the appropriate services + * * @author Roy Wetherall * @since 2.0 */ @@ -41,10 +47,12 @@ public class RMSecurityCommon private static Log logger = LogFactory.getLog(RMSecurityCommon.class); + /** Services */ protected NodeService nodeService; protected PermissionService permissionService; protected RecordsManagementService rmService; protected RMCaveatConfigComponent caveatConfigComponent; + protected FilePlanService filePlanService; public void setNodeService(NodeService nodeService) { @@ -66,6 +74,11 @@ public class RMSecurityCommon this.caveatConfigComponent = caveatConfigComponent; } + public void setFilePlanService(FilePlanService filePlanService) + { + this.filePlanService = filePlanService; + } + /** * * @param prefix @@ -165,7 +178,7 @@ public class RMSecurityCommon } // Get the file plan for the node - NodeRef filePlan = rmService.getFilePlan(nodeRef); + NodeRef filePlan = filePlanService.getFilePlan(nodeRef); // Admin role if (permissionService.hasPermission(filePlan, RMPermissionModel.ROLE_ADMINISTRATOR) == AccessStatus.ALLOWED) @@ -208,5 +221,4 @@ public class RMSecurityCommon } } - } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java index 8b2950e029..43d17b4fbe 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/DeclarativeCapability.java @@ -170,7 +170,7 @@ public class DeclarativeCapability extends AbstractCapability protected boolean checkPermissionsImpl(NodeRef nodeRef, String ... permissions) { boolean result = true; - NodeRef filePlan = rmService.getFilePlan(nodeRef); + NodeRef filePlan = filePlanService.getFilePlan(nodeRef); for (String permission : permissions) { diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java index 9c00f2320c..f0e8868c16 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/CreateCapability.java @@ -122,7 +122,7 @@ public class CreateCapability extends DeclarativeCapability { if (rmService.isRecordFolder(destination)) { - if (permissionService.hasPermission(rmService.getFilePlan(destination), RMPermissionModel.DECLARE_RECORDS_IN_CLOSED_FOLDERS) == AccessStatus.ALLOWED) + if (permissionService.hasPermission(filePlanService.getFilePlan(destination), RMPermissionModel.DECLARE_RECORDS_IN_CLOSED_FOLDERS) == AccessStatus.ALLOWED) { return AccessDecisionVoter.ACCESS_GRANTED; } @@ -135,7 +135,7 @@ public class CreateCapability extends DeclarativeCapability { if (rmService.isRecordFolder(destination)) { - if (permissionService.hasPermission(rmService.getFilePlan(destination), RMPermissionModel.CREATE_MODIFY_RECORDS_IN_CUTOFF_FOLDERS) == AccessStatus.ALLOWED) + if (permissionService.hasPermission(filePlanService.getFilePlan(destination), RMPermissionModel.CREATE_MODIFY_RECORDS_IN_CUTOFF_FOLDERS) == AccessStatus.ALLOWED) { return AccessDecisionVoter.ACCESS_GRANTED; } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java index fc23697dd9..68d2437b7e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanServiceImpl.java @@ -66,21 +66,9 @@ public class FilePlanServiceImpl extends ServiceBaseImpl /** RM site file plan container */ private static final String FILE_PLAN_CONTAINER = "documentLibrary"; - /** Services */ - private PermissionService permissionService; - /** Application context */ private ApplicationContext applicationContext; - /** Node DAO */ - private NodeDAO nodeDAO; - - /** Internal node service */ - private NodeService internalNodeService; - - /** Site service */ - private SiteService siteService; - /** * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */ @@ -96,41 +84,29 @@ public class FilePlanServiceImpl extends ServiceBaseImpl * * @return file plan role service */ - public FilePlanRoleService getFilePlanRoleService() + protected FilePlanRoleService getFilePlanRoleService() { return (FilePlanRoleService)applicationContext.getBean("FilePlanRoleService"); } - /** - * @param permissionService permission service - */ - public void setPermissionService(PermissionService permissionService) + protected PermissionService getPermissionService() { - this.permissionService = permissionService; + return (PermissionService)applicationContext.getBean("permissionService"); } - /** - * @param nodeDAO node DAO - */ - public void setNodeDAO(NodeDAO nodeDAO) + protected NodeDAO getNodeDAO() { - this.nodeDAO = nodeDAO; + return (NodeDAO)applicationContext.getBean("nodeDAO"); } - /** - * @param internalNodeService node service (internal bean) - */ - public void setInternalNodeService(NodeService internalNodeService) + protected NodeService getInternalNodeService() { - this.internalNodeService = internalNodeService; + return (NodeService)applicationContext.getBean("nodeService"); } - /** - * @param siteService site service - */ - public void setSiteService(SiteService siteService) + protected SiteService getSiteService() { - this.siteService = siteService; + return (SiteService)applicationContext.getBean("SiteService"); } /** @@ -161,7 +137,7 @@ public class FilePlanServiceImpl extends ServiceBaseImpl final Set results = new HashSet(); Set aspects = new HashSet(1); aspects.add(ASPECT_RECORDS_MANAGEMENT_ROOT); - nodeDAO.getNodesWithAspects(aspects, Long.MIN_VALUE, Long.MAX_VALUE, new NodeDAO.NodeRefQueryCallback() + getNodeDAO().getNodesWithAspects(aspects, Long.MIN_VALUE, Long.MAX_VALUE, new NodeDAO.NodeRefQueryCallback() { @Override public boolean handle(Pair nodePair) @@ -187,7 +163,7 @@ public class FilePlanServiceImpl extends ServiceBaseImpl NodeRef result = null; if (nodeRef != null) { - result = (NodeRef)internalNodeService.getProperty(nodeRef, PROP_ROOT_NODEREF); + result = (NodeRef)getInternalNodeService().getProperty(nodeRef, PROP_ROOT_NODEREF); if (result == null) { if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true) @@ -196,7 +172,7 @@ public class FilePlanServiceImpl extends ServiceBaseImpl } else { - ChildAssociationRef parentAssocRef = internalNodeService.getPrimaryParent(nodeRef); + ChildAssociationRef parentAssocRef = getInternalNodeService().getPrimaryParent(nodeRef); if (parentAssocRef != null) { result = getFilePlan(parentAssocRef.getParentRef()); @@ -216,12 +192,12 @@ public class FilePlanServiceImpl extends ServiceBaseImpl { NodeRef filePlan = null; - SiteInfo siteInfo = siteService.getSite(siteId); + SiteInfo siteInfo = getSiteService().getSite(siteId); if (siteInfo != null) { - if (siteService.hasContainer(siteId, FILE_PLAN_CONTAINER) == true) + if (getSiteService().hasContainer(siteId, FILE_PLAN_CONTAINER) == true) { - NodeRef nodeRef = siteService.getContainer(siteId, FILE_PLAN_CONTAINER); + NodeRef nodeRef = getSiteService().getContainer(siteId, FILE_PLAN_CONTAINER); if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true) { filePlan = nodeRef; @@ -295,10 +271,10 @@ public class FilePlanServiceImpl extends ServiceBaseImpl properties).getChildRef(); // set inheritance to false - permissionService.setInheritParentPermissions(container, false); - permissionService.setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true); - permissionService.setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true); - permissionService.setPermission(container, ExtendedWriterDynamicAuthority.EXTENDED_WRITER, RMPermissionModel.FILING, true); + getPermissionService().setInheritParentPermissions(container, false); + getPermissionService().setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true); + getPermissionService().setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true); + getPermissionService().setPermission(container, ExtendedWriterDynamicAuthority.EXTENDED_WRITER, RMPermissionModel.FILING, true); // TODO set the admin users to have filing permissions on the unfiled container!!! // TODO we will need to be able to get a list of the admin roles from the service diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanComponentAspect.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanComponentAspect.java index dae35c2349..8d19f6143c 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanComponentAspect.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/FilePlanComponentAspect.java @@ -21,7 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.model.behaviour; import java.io.Serializable; import java.util.Map; -import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; +import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.copy.AbstractCopyBehaviourCallback; import org.alfresco.repo.copy.CopyBehaviourCallback; @@ -50,12 +50,12 @@ public class FilePlanComponentAspect implements RecordsManagementModel, /** Policy component */ private PolicyComponent policyComponent; - /** Records Management Service */ - private RecordsManagementService recordsManagementService; - /** Node service */ private NodeService nodeService; + /** File plan service */ + private FilePlanService filePlanService; + /** * Set the policy component * @param policyComponent policy component @@ -65,15 +65,6 @@ public class FilePlanComponentAspect implements RecordsManagementModel, this.policyComponent = policyComponent; } - /** - * Set the records management service - * @param recordsManagementService records management service - */ - public void setRecordsManagementService(RecordsManagementService recordsManagementService) - { - this.recordsManagementService = recordsManagementService; - } - /** * Set node service * @param nodeService node service @@ -83,6 +74,14 @@ public class FilePlanComponentAspect implements RecordsManagementModel, this.nodeService = nodeService; } + /** + * @param filePlanService file plan service + */ + public void setFilePlanService(FilePlanService filePlanService) + { + this.filePlanService = filePlanService; + } + /** * Bean initialisation method */ @@ -116,7 +115,7 @@ public class FilePlanComponentAspect implements RecordsManagementModel, if (nodeService.exists(nodeRef) == true) { // Look up the root and set on the aspect if found - NodeRef root = recordsManagementService.getFilePlan(nodeRef); + NodeRef root = filePlanService.getFilePlan(nodeRef); if (root != null) { nodeService.setProperty(nodeRef, PROP_ROOT_NODEREF, root); @@ -143,7 +142,7 @@ public class FilePlanComponentAspect implements RecordsManagementModel, nodeService.exists(newChildAssocRef.getChildRef()) == true) { // Look up the root and re-set the value currently stored on the aspect - NodeRef root = recordsManagementService.getFilePlan(newChildAssocRef.getParentRef()); + NodeRef root = filePlanService.getFilePlan(newChildAssocRef.getParentRef()); // NOTE: set the null value if no root found nodeService.setProperty(newChildAssocRef.getChildRef(), PROP_ROOT_NODEREF, root); } @@ -185,7 +184,7 @@ public class FilePlanComponentAspect implements RecordsManagementModel, Map properties) { // Only copy the root node reference if the new value can be looked up via the parent - NodeRef root = recordsManagementService.getFilePlan(copyDetails.getTargetParentNodeRef()); + NodeRef root = filePlanService.getFilePlan(copyDetails.getTargetParentNodeRef()); if (root != null) { properties.put(PROP_ROOT_NODEREF, root); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/action/HideRecordActionTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/action/HideRecordActionTest.java index 700700a665..3b84c455ca 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/action/HideRecordActionTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/action/HideRecordActionTest.java @@ -83,6 +83,7 @@ public class HideRecordActionTest extends BaseRMTestCase // Create a record from that document Action createAction = dmActionService.createAction(CreateRecordAction.NAME); + createAction.setParameterValue(CreateRecordAction.PARAM_FILE_PLAN, filePlan); dmActionService.executeAction(createAction, doc); // Check if the document is a record now