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
This commit is contained in:
Roy Wetherall
2013-03-21 07:37:20 +00:00
parent 096c74aaa9
commit cef10a210c
12 changed files with 70 additions and 78 deletions

View File

@@ -48,7 +48,7 @@
<bean id="org_alfresco_module_rm_userRolesExtractor" class="org.alfresco.module.org_alfresco_module_rm.audit.AuthenticatedUserRolesDataExtractor"> <bean id="org_alfresco_module_rm_userRolesExtractor" class="org.alfresco.module.org_alfresco_module_rm.audit.AuthenticatedUserRolesDataExtractor">
<property name="registry" ref="auditModel.extractorRegistry" /> <property name="registry" ref="auditModel.extractorRegistry" />
<property name="nodeService" ref="nodeService" /> <property name="nodeService" ref="nodeService" />
<property name="rmService" ref="recordsManagementService" /> <property name="filePlanService" ref="filePlanService" />
<property name="filePlanRoleService" ref="filePlanRoleService" /> <property name="filePlanRoleService" ref="filePlanRoleService" />
</bean> </bean>

View File

@@ -41,7 +41,7 @@
<bean id="org_alfresco_module_rm_FilePlanComponentAspect" <bean id="org_alfresco_module_rm_FilePlanComponentAspect"
class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.FilePlanComponentAspect" class="org.alfresco.module.org_alfresco_module_rm.model.behaviour.FilePlanComponentAspect"
parent="org_alfresco_module_rm_BaseBehaviour"> parent="org_alfresco_module_rm_BaseBehaviour">
<property name="recordsManagementService" ref="recordsManagementService"/> <property name="filePlanService" ref="filePlanService"/>
</bean> </bean>
<bean id="org_alfresco_module_rm_ScheduledAspect" <bean id="org_alfresco_module_rm_ScheduledAspect"

View File

@@ -48,7 +48,7 @@
<property name="permissionService" ref="permissionService"/> <property name="permissionService" ref="permissionService"/>
<property name="recordsManagementService" ref="recordsManagementService"/> <property name="recordsManagementService" ref="recordsManagementService"/>
<property name="caveatConfigComponent" ref="caveatConfigComponent"/> <property name="caveatConfigComponent" ref="caveatConfigComponent"/>
<!-- <property name="recordService" ref="recordService"/> --> <property name="filePlanService" ref="filePlanService"/>
</bean> </bean>
<!-- ====== --> <!-- ====== -->

View File

@@ -439,10 +439,11 @@
<bean id="filePlanService" <bean id="filePlanService"
parent="baseService" parent="baseService"
class="org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanServiceImpl"> class="org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanServiceImpl">
<property name="permissionService" ref="PermissionService"/> <!-- NOTE: for some reason we need to grab these references within the class to avoid cyclic Spring issues! -->
<property name="nodeDAO" ref="nodeDAO"/> <!-- <property name="permissionService" ref="permissionService"/> -->
<property name="internalNodeService" ref="nodeService"/> <!-- <property name="nodeDAO" ref="nodeDAO"/> -->
<property name="siteService" ref="SiteService" /> <!-- <property name="internalNodeService" ref="nodeService"/> -->
<!-- <property name="siteService" ref="SiteService" /> -->
</bean> </bean>
<bean id="FilePlanService" class="org.springframework.aop.framework.ProxyFactoryBean"> <bean id="FilePlanService" class="org.springframework.aop.framework.ProxyFactoryBean">

View File

@@ -21,7 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.audit;
import java.io.Serializable; import java.io.Serializable;
import java.util.Set; 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.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
import org.alfresco.module.org_alfresco_module_rm.role.Role; 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 public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtractor
{ {
private NodeService nodeService; private NodeService nodeService;
private RecordsManagementService rmService; private FilePlanService filePlanService;
private FilePlanRoleService filePlanRoleService; 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); 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 public Serializable extractData(Serializable value) throws Throwable
{ {
NodeRef nodeRef = (NodeRef) value; NodeRef nodeRef = (NodeRef) value;
@@ -92,7 +95,7 @@ public final class AuthenticatedUserRolesDataExtractor extends AbstractDataExtra
} }
// Get the rm root // Get the rm root
NodeRef rmRootNodeRef = rmService.getFilePlan(nodeRef); NodeRef rmRootNodeRef = filePlanService.getFilePlan(nodeRef);
Set<Role> roles = filePlanRoleService.getRolesByUser(rmRootNodeRef, user); Set<Role> roles = filePlanRoleService.getRolesByUser(rmRootNodeRef, user);
StringBuilder sb = new StringBuilder(100); StringBuilder sb = new StringBuilder(100);

View File

@@ -959,7 +959,7 @@ public class RMAfterInvocationProvider extends RMSecurityCommon
String uuid = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_NODE_UUID)); String uuid = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_NODE_UUID));
StoreRef storeRef = new StoreRef(protocol, identifier); StoreRef storeRef = new StoreRef(protocol, identifier);
NodeRef nodeRef = new NodeRef(storeRef, uuid); 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); filtered.remove(RecordsManagementModel.PROP_HOLD_REASON);
} }

View File

@@ -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.RecordsManagementService;
import org.alfresco.module.org_alfresco_module_rm.caveat.RMCaveatConfigComponent; 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.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -32,6 +34,10 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
/** /**
* Common security functions.
*
* TODO move methods to the appropriate services
*
* @author Roy Wetherall * @author Roy Wetherall
* @since 2.0 * @since 2.0
*/ */
@@ -41,10 +47,12 @@ public class RMSecurityCommon
private static Log logger = LogFactory.getLog(RMSecurityCommon.class); private static Log logger = LogFactory.getLog(RMSecurityCommon.class);
/** Services */
protected NodeService nodeService; protected NodeService nodeService;
protected PermissionService permissionService; protected PermissionService permissionService;
protected RecordsManagementService rmService; protected RecordsManagementService rmService;
protected RMCaveatConfigComponent caveatConfigComponent; protected RMCaveatConfigComponent caveatConfigComponent;
protected FilePlanService filePlanService;
public void setNodeService(NodeService nodeService) public void setNodeService(NodeService nodeService)
{ {
@@ -66,6 +74,11 @@ public class RMSecurityCommon
this.caveatConfigComponent = caveatConfigComponent; this.caveatConfigComponent = caveatConfigComponent;
} }
public void setFilePlanService(FilePlanService filePlanService)
{
this.filePlanService = filePlanService;
}
/** /**
* *
* @param prefix * @param prefix
@@ -165,7 +178,7 @@ public class RMSecurityCommon
} }
// Get the file plan for the node // Get the file plan for the node
NodeRef filePlan = rmService.getFilePlan(nodeRef); NodeRef filePlan = filePlanService.getFilePlan(nodeRef);
// Admin role // Admin role
if (permissionService.hasPermission(filePlan, RMPermissionModel.ROLE_ADMINISTRATOR) == AccessStatus.ALLOWED) if (permissionService.hasPermission(filePlan, RMPermissionModel.ROLE_ADMINISTRATOR) == AccessStatus.ALLOWED)
@@ -208,5 +221,4 @@ public class RMSecurityCommon
} }
} }
} }

View File

@@ -170,7 +170,7 @@ public class DeclarativeCapability extends AbstractCapability
protected boolean checkPermissionsImpl(NodeRef nodeRef, String ... permissions) protected boolean checkPermissionsImpl(NodeRef nodeRef, String ... permissions)
{ {
boolean result = true; boolean result = true;
NodeRef filePlan = rmService.getFilePlan(nodeRef); NodeRef filePlan = filePlanService.getFilePlan(nodeRef);
for (String permission : permissions) for (String permission : permissions)
{ {

View File

@@ -122,7 +122,7 @@ public class CreateCapability extends DeclarativeCapability
{ {
if (rmService.isRecordFolder(destination)) 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; return AccessDecisionVoter.ACCESS_GRANTED;
} }
@@ -135,7 +135,7 @@ public class CreateCapability extends DeclarativeCapability
{ {
if (rmService.isRecordFolder(destination)) 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; return AccessDecisionVoter.ACCESS_GRANTED;
} }

View File

@@ -66,21 +66,9 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
/** RM site file plan container */ /** RM site file plan container */
private static final String FILE_PLAN_CONTAINER = "documentLibrary"; private static final String FILE_PLAN_CONTAINER = "documentLibrary";
/** Services */
private PermissionService permissionService;
/** Application context */ /** Application context */
private ApplicationContext applicationContext; 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) * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/ */
@@ -96,41 +84,29 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
* *
* @return file plan role service * @return file plan role service
*/ */
public FilePlanRoleService getFilePlanRoleService() protected FilePlanRoleService getFilePlanRoleService()
{ {
return (FilePlanRoleService)applicationContext.getBean("FilePlanRoleService"); return (FilePlanRoleService)applicationContext.getBean("FilePlanRoleService");
} }
/** protected PermissionService getPermissionService()
* @param permissionService permission service
*/
public void setPermissionService(PermissionService permissionService)
{ {
this.permissionService = permissionService; return (PermissionService)applicationContext.getBean("permissionService");
} }
/** protected NodeDAO getNodeDAO()
* @param nodeDAO node DAO
*/
public void setNodeDAO(NodeDAO nodeDAO)
{ {
this.nodeDAO = nodeDAO; return (NodeDAO)applicationContext.getBean("nodeDAO");
} }
/** protected NodeService getInternalNodeService()
* @param internalNodeService node service (internal bean)
*/
public void setInternalNodeService(NodeService internalNodeService)
{ {
this.internalNodeService = internalNodeService; return (NodeService)applicationContext.getBean("nodeService");
} }
/** protected SiteService getSiteService()
* @param siteService site service
*/
public void setSiteService(SiteService siteService)
{ {
this.siteService = siteService; return (SiteService)applicationContext.getBean("SiteService");
} }
/** /**
@@ -161,7 +137,7 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
final Set<NodeRef> results = new HashSet<NodeRef>(); final Set<NodeRef> results = new HashSet<NodeRef>();
Set<QName> aspects = new HashSet<QName>(1); Set<QName> aspects = new HashSet<QName>(1);
aspects.add(ASPECT_RECORDS_MANAGEMENT_ROOT); 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 @Override
public boolean handle(Pair<Long, NodeRef> nodePair) public boolean handle(Pair<Long, NodeRef> nodePair)
@@ -187,7 +163,7 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
NodeRef result = null; NodeRef result = null;
if (nodeRef != null) if (nodeRef != null)
{ {
result = (NodeRef)internalNodeService.getProperty(nodeRef, PROP_ROOT_NODEREF); result = (NodeRef)getInternalNodeService().getProperty(nodeRef, PROP_ROOT_NODEREF);
if (result == null) if (result == null)
{ {
if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true) if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true)
@@ -196,7 +172,7 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
} }
else else
{ {
ChildAssociationRef parentAssocRef = internalNodeService.getPrimaryParent(nodeRef); ChildAssociationRef parentAssocRef = getInternalNodeService().getPrimaryParent(nodeRef);
if (parentAssocRef != null) if (parentAssocRef != null)
{ {
result = getFilePlan(parentAssocRef.getParentRef()); result = getFilePlan(parentAssocRef.getParentRef());
@@ -216,12 +192,12 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
{ {
NodeRef filePlan = null; NodeRef filePlan = null;
SiteInfo siteInfo = siteService.getSite(siteId); SiteInfo siteInfo = getSiteService().getSite(siteId);
if (siteInfo != null) 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) if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true)
{ {
filePlan = nodeRef; filePlan = nodeRef;
@@ -295,10 +271,10 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
properties).getChildRef(); properties).getChildRef();
// set inheritance to false // set inheritance to false
permissionService.setInheritParentPermissions(container, false); getPermissionService().setInheritParentPermissions(container, false);
permissionService.setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true); getPermissionService().setPermission(container, allRoles, RMPermissionModel.READ_RECORDS, true);
permissionService.setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true); getPermissionService().setPermission(container, ExtendedReaderDynamicAuthority.EXTENDED_READER, RMPermissionModel.READ_RECORDS, true);
permissionService.setPermission(container, ExtendedWriterDynamicAuthority.EXTENDED_WRITER, RMPermissionModel.FILING, true); getPermissionService().setPermission(container, ExtendedWriterDynamicAuthority.EXTENDED_WRITER, RMPermissionModel.FILING, true);
// TODO set the admin users to have filing permissions on the unfiled container!!! // 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 // TODO we will need to be able to get a list of the admin roles from the service

View File

@@ -21,7 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
import java.io.Serializable; import java.io.Serializable;
import java.util.Map; 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.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.copy.AbstractCopyBehaviourCallback; import org.alfresco.repo.copy.AbstractCopyBehaviourCallback;
import org.alfresco.repo.copy.CopyBehaviourCallback; import org.alfresco.repo.copy.CopyBehaviourCallback;
@@ -50,12 +50,12 @@ public class FilePlanComponentAspect implements RecordsManagementModel,
/** Policy component */ /** Policy component */
private PolicyComponent policyComponent; private PolicyComponent policyComponent;
/** Records Management Service */
private RecordsManagementService recordsManagementService;
/** Node service */ /** Node service */
private NodeService nodeService; private NodeService nodeService;
/** File plan service */
private FilePlanService filePlanService;
/** /**
* Set the policy component * Set the policy component
* @param policyComponent policy component * @param policyComponent policy component
@@ -65,15 +65,6 @@ public class FilePlanComponentAspect implements RecordsManagementModel,
this.policyComponent = policyComponent; this.policyComponent = policyComponent;
} }
/**
* Set the records management service
* @param recordsManagementService records management service
*/
public void setRecordsManagementService(RecordsManagementService recordsManagementService)
{
this.recordsManagementService = recordsManagementService;
}
/** /**
* Set node service * Set node service
* @param nodeService node service * @param nodeService node service
@@ -83,6 +74,14 @@ public class FilePlanComponentAspect implements RecordsManagementModel,
this.nodeService = nodeService; this.nodeService = nodeService;
} }
/**
* @param filePlanService file plan service
*/
public void setFilePlanService(FilePlanService filePlanService)
{
this.filePlanService = filePlanService;
}
/** /**
* Bean initialisation method * Bean initialisation method
*/ */
@@ -116,7 +115,7 @@ public class FilePlanComponentAspect implements RecordsManagementModel,
if (nodeService.exists(nodeRef) == true) if (nodeService.exists(nodeRef) == true)
{ {
// Look up the root and set on the aspect if found // Look up the root and set on the aspect if found
NodeRef root = recordsManagementService.getFilePlan(nodeRef); NodeRef root = filePlanService.getFilePlan(nodeRef);
if (root != null) if (root != null)
{ {
nodeService.setProperty(nodeRef, PROP_ROOT_NODEREF, root); nodeService.setProperty(nodeRef, PROP_ROOT_NODEREF, root);
@@ -143,7 +142,7 @@ public class FilePlanComponentAspect implements RecordsManagementModel,
nodeService.exists(newChildAssocRef.getChildRef()) == true) nodeService.exists(newChildAssocRef.getChildRef()) == true)
{ {
// Look up the root and re-set the value currently stored on the aspect // 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 // NOTE: set the null value if no root found
nodeService.setProperty(newChildAssocRef.getChildRef(), PROP_ROOT_NODEREF, root); nodeService.setProperty(newChildAssocRef.getChildRef(), PROP_ROOT_NODEREF, root);
} }
@@ -185,7 +184,7 @@ public class FilePlanComponentAspect implements RecordsManagementModel,
Map<QName, Serializable> properties) Map<QName, Serializable> properties)
{ {
// Only copy the root node reference if the new value can be looked up via the parent // 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) if (root != null)
{ {
properties.put(PROP_ROOT_NODEREF, root); properties.put(PROP_ROOT_NODEREF, root);

View File

@@ -83,6 +83,7 @@ public class HideRecordActionTest extends BaseRMTestCase
// Create a record from that document // Create a record from that document
Action createAction = dmActionService.createAction(CreateRecordAction.NAME); Action createAction = dmActionService.createAction(CreateRecordAction.NAME);
createAction.setParameterValue(CreateRecordAction.PARAM_FILE_PLAN, filePlan);
dmActionService.executeAction(createAction, doc); dmActionService.executeAction(createAction, doc);
// Check if the document is a record now // Check if the document is a record now