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 1a2d5b7f2a..6b39d6389f 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
@@ -50,7 +50,6 @@
-
@@ -440,7 +439,10 @@
-
+
+
+
+
@@ -466,10 +468,13 @@
@@ -597,7 +602,11 @@
org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.createRole=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.updateRole=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.deleteRole=RM_ALLOW
+ org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.getUsersAssignedToRole=RM.Read.0
+ org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.getGroupsAssignedToRole=RM.Read.0
+ org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.getAllAssignedToRole=RM.Read.0
org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.assignRoleToAuthority=RM_ALLOW
+ org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.unassignRoleFromAuthority=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.getAllRolesContainerGroup=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService.*=RM_DENY
]]>
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
index 0d6f8ccc87..aee66f263a 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
@@ -268,38 +268,43 @@
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.delete.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.delete.desc.xml
index c7b6c75835..1cd7262836 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.delete.desc.xml
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.delete.desc.xml
@@ -6,7 +6,9 @@
]]>
- /api/rma/admin/rmroles/{rolename}
+ /api/rma/admin/rmroles/{rolename}
+ /api/rma/admin/{siteid}/rmroles/{rolename}
+ /api/rma/admin/{store_type}/{store_id}/{id}/rmroles/{rolename}
argument
user
required
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.get.desc.xml
index 21693f3819..75a9fa715c 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.get.desc.xml
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.get.desc.xml
@@ -6,7 +6,9 @@
]]>
- /api/rma/admin/rmroles/{rolename}
+ /api/rma/admin/rmroles/{rolename}
+ /api/rma/admin/{siteid}/rmroles/{rolename}
+ /api/rma/admin/{store_type}/{store_id}/{id}/rmroles/{rolename}
argument
user
required
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.lib.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.lib.ftl
index f1404c3d2a..cc454571ba 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.lib.ftl
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.lib.ftl
@@ -10,6 +10,27 @@
"${capability.name}": "${capability.title}" <#if capability_has_next>,#if>
#list>
}
+ <#if role.showAuths>
+ ,
+ "assignedUsers" :
+ [
+ <#list role.assignedUsers as user>
+ {
+ "name" : "${user.name}",
+ "displayLabel" : "${user.displayLabel}"
+ }<#if user_has_next>,#if>
+ #list>
+ ],
+ "assignedGroups" :
+ [
+ <#list role.assignedGroups as group>
+ {
+ "name" : "${group.name}",
+ "displayLabel" : "${group.displayLabel}"
+ }<#if group_has_next>,#if>
+ #list>
+ ]
+ #if>
}
#escape>
#macro>
\ No newline at end of file
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.put.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.put.desc.xml
index 7849806794..093b5e49c9 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.put.desc.xml
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmrole.put.desc.xml
@@ -6,7 +6,9 @@
]]>
- /api/rma/admin/rmroles/{rolename}
+ /api/rma/admin/rmroles/{rolename}
+ /api/rma/admin/{siteid}/rmroles/{rolename}
+ /api/rma/admin/{store_type}/{store_id}/{id}/rmroles/{rolename}
argument
user
required
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.get.desc.xml
index c3dd070b97..ec3ef12310 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.get.desc.xml
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.get.desc.xml
@@ -1,12 +1,19 @@
- Get list of records management roles
+ Get list of records management roles and their details, for a file plan.
- /api/rma/admin/rmroles?user={user?}
+ /api/rma/admin/rmroles?user={user?}&auths={auths?}
+ /api/rma/admin/{store_type}/{store_id}/{id}/rmroles?user={user?}&auths={auths?}
+ /api/rma/admin/{siteid}/rmroles?user={user?}&auths={auths?}
argument
user
required
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.post.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.post.desc.xml
index 205815899c..9486b8337b 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.post.desc.xml
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/admin/rmrole/rmroles.post.desc.xml
@@ -6,7 +6,9 @@
]]>
- /api/rma/admin/rmroles
+ /api/rma/admin/rmroles
+ /api/rma/admin/{siteid}/rmroles
+ /api/rma/admin/{store_type}/{store_id}/{id}/rmroles
argument
user
required
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java
index 1f8d5a4ff2..d5020c82db 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementService.java
@@ -154,8 +154,11 @@ public interface RecordsManagementService
/**
* Gets the file plan the node is in.
*
- * @return {@link NodeRef} file node reference, null if none
+ * @return {@link NodeRef} file node reference, null if none
+ *
+ * @deprecated As of 2.1, see {@link FilePlanService#getFilePlan(NodeRef)}
*/
+ @Deprecated
NodeRef getFilePlan(NodeRef nodeRef);
/********** File Plan Methods **********/
@@ -165,11 +168,11 @@ public interface RecordsManagementService
* Searches the SpacesStore by default.
*
* @return List list of file plan nodes
+ * @deprecated As of 2.1, see {@link FilePlanService#getFilePlans()}
*/
+ @Deprecated
List getFilePlans();
- // TODO NodeRef getFilePlanById(String id);
-
/**
* Creates a file plan as a child of the given parent node, with the name
* provided.
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java
index df5c56d9eb..72dd07686c 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/RecordsManagementServiceImpl.java
@@ -35,7 +35,6 @@ import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomM
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService;
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
-import org.alfresco.repo.domain.node.NodeDAO;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
@@ -47,8 +46,10 @@ import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.RegexQNamePattern;
-import org.alfresco.util.Pair;
import org.alfresco.util.ParameterCheck;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
import org.springframework.extensions.surf.util.I18NUtil;
/**
@@ -60,7 +61,8 @@ public class RecordsManagementServiceImpl extends ServiceBaseImpl
implements RecordsManagementService,
RecordsManagementModel,
RecordsManagementPolicies.OnCreateReference,
- RecordsManagementPolicies.OnRemoveReference
+ RecordsManagementPolicies.OnRemoveReference,
+ ApplicationContextAware
{
/** I18N */
private final static String MSG_ERROR_ADD_CONTENT_CONTAINER = "rm.service.error-add-content-container";
@@ -86,9 +88,6 @@ public class RecordsManagementServiceImpl extends ServiceBaseImpl
/** Service registry */
private RecordsManagementServiceRegistry serviceRegistry;
-
- /** Node DAO */
- private NodeDAO nodeDAO;
/** Policy component */
private PolicyComponent policyComponent;
@@ -99,6 +98,18 @@ public class RecordsManagementServiceImpl extends ServiceBaseImpl
/** Java behaviour */
private JavaBehaviour onChangeToDispositionActionDefinition;
+ /** Application context */
+ private ApplicationContext applicationContext;
+
+ /**
+ * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
+ */
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
+ {
+ this.applicationContext = applicationContext;
+ }
+
/**
* Set the service registry service
*
@@ -120,16 +131,6 @@ public class RecordsManagementServiceImpl extends ServiceBaseImpl
{
this.policyComponent = policyComponent;
}
-
- /**
- * Set the node DAO object
- *
- * @param nodeDAO node DAO
- */
- public void setNodeDAO(NodeDAO nodeDAO)
- {
- this.nodeDAO = nodeDAO;
- }
/**
* Sets the default RM store reference
@@ -571,32 +572,13 @@ public class RecordsManagementServiceImpl extends ServiceBaseImpl
/**
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementService#getFilePlan(org.alfresco.service.cmr.repository.NodeRef)
+ * @deprecated As of 2.1, see {@link FilePlanService#getFilePlan(NodeRef)}
*/
+ @Deprecated
public NodeRef getFilePlan(NodeRef nodeRef)
{
- NodeRef result = null;
-
- if (nodeRef != null)
- {
- result = (NodeRef)nodeService.getProperty(nodeRef, PROP_ROOT_NODEREF);
- if (result == null)
- {
- if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true)
- {
- result = nodeRef;
- }
- else
- {
- ChildAssociationRef parentAssocRef = nodeService.getPrimaryParent(nodeRef);
- if (parentAssocRef != null)
- {
- result = getFilePlan(parentAssocRef.getParentRef());
- }
- }
- }
- }
-
- return result;
+ FilePlanService filePlanService = (FilePlanService)applicationContext.getBean("filePlanService");
+ return filePlanService.getFilePlan(nodeRef);
}
/**
@@ -648,27 +630,13 @@ public class RecordsManagementServiceImpl extends ServiceBaseImpl
/**
* @see org.alfresco.module.org_alfresco_module_rm.RecordsManagementService#getRecordsManagementRoots(org.alfresco.service.cmr.repository.StoreRef)
+ *
+ * @deprecated As of 2.1, see {@link FilePlanService#getFilePlans()}
*/
+ @Deprecated
public List getFilePlans()
{
- final List results = new ArrayList();
- Set aspects = new HashSet(1);
- aspects.add(ASPECT_RECORDS_MANAGEMENT_ROOT);
- nodeDAO.getNodesWithAspects(aspects, Long.MIN_VALUE, Long.MAX_VALUE, new NodeDAO.NodeRefQueryCallback()
- {
- @Override
- public boolean handle(Pair nodePair)
- {
- NodeRef nodeRef = nodePair.getSecond();
- if (StoreRef.STORE_REF_ARCHIVE_SPACESSTORE.equals(nodeRef.getStoreRef()) == false)
- {
- results.add(nodeRef);
- }
-
- return true;
- }
- });
- return results;
+ return new ArrayList(serviceRegistry.getFilePlanService().getFilePlans());
}
/**
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMPermissionModel.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMPermissionModel.java
index 3b2c329dfa..50cc4ff0d9 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMPermissionModel.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMPermissionModel.java
@@ -29,28 +29,15 @@ import org.alfresco.repo.security.permissions.impl.SimplePermissionReference;
public interface RMPermissionModel
{
// Assignment of Filing
-
public static final String FILING = "Filing";
-
public static final String READ_RECORDS = "ReadRecords";
-
public static final String FILE_RECORDS = "FileRecords";
// Roles
-
public static final String ROLE_NAME_USER = "User";
- //public static final String ROLE_USER = SimplePermissionReference.getPermissionReference(RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT, ROLE_NAME_USER).toString();
-
public static final String ROLE_NAME_POWER_USER = "PowerUser";
- // public static final String ROLE_POWER_USER = SimplePermissionReference.getPermissionReference(RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT, ROLE_NAME_POWER_USER).toString();
-
public static final String ROLE_NAME_SECURITY_OFFICER = "SecurityOfficer";
- // public static final String ROLE_SECURITY_OFFICER = SimplePermissionReference.getPermissionReference(RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT, ROLE_NAME_SECURITY_OFFICER)
- // .toString();
-
public static final String ROLE_NAME_RECORDS_MANAGER = "RecordsManager";
- // public static final String ROLE_RECORDS_MANAGER = SimplePermissionReference.getPermissionReference(RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT, ROLE_NAME_RECORDS_MANAGER)
- // .toString();
public static final String ROLE_NAME_ADMINISTRATOR = "Administrator";
public static final String ROLE_ADMINISTRATOR = SimplePermissionReference.getPermissionReference(RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT, ROLE_NAME_ADMINISTRATOR).toString();
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java
index 9676e36bba..fbae15f2cc 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/FilePlanService.java
@@ -18,7 +18,10 @@
*/
package org.alfresco.module.org_alfresco_module_rm.fileplan;
+import java.util.Set;
+
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.StoreRef;
import com.hazelcast.impl.Node;
@@ -38,6 +41,38 @@ public interface FilePlanService
*/
boolean isFilePlan(NodeRef nodeRef);
+ /**
+ * Gets all the file plan nodes.
+ * Looks in the SpacesStore by default.
+ *
+ * @return Set set of file plan nodes
+ */
+ Set getFilePlans();
+
+ /**
+ * Getse all the file plan nodes in a store.
+ *
+ * @param storeRef store reference
+ * @return Set set of file plan nodes
+ */
+ Set getFilePlans(StoreRef storeRef);
+
+ /**
+ * Gets the file plan the node is in.
+ *
+ * @return {@link NodeRef} file node reference, null if none
+ */
+ NodeRef getFilePlan(NodeRef nodeRef);
+
+ /**
+ * Gets a file plan by site id. Assumes the site is a RM site and that the file plan node, ie
+ * the document library container, has been already created. Otherwise returns null.
+ *
+ * @param siteId records management site id
+ * @return NodeRef file plan, null if can't be found
+ */
+ NodeRef getFilePlanBySiteId(String siteId);
+
/**
* Indicates whether the unfiled container exists for a given file plan or not.
*
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 92d4479c64..fc23697dd9 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
@@ -20,8 +20,10 @@ package org.alfresco.module.org_alfresco_module_rm.fileplan;
import java.io.Serializable;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
@@ -31,10 +33,16 @@ import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedReaderDynamicAuthority;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedWriterDynamicAuthority;
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
+import org.alfresco.repo.domain.node.NodeDAO;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.PermissionService;
+import org.alfresco.service.cmr.site.SiteInfo;
+import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.namespace.QName;
+import org.alfresco.util.Pair;
import org.alfresco.util.ParameterCheck;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
@@ -55,12 +63,27 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
private static final String NAME_UNFILED_CONTAINER = "Unfiled Records";
private static final QName QNAME_UNFILED_CONTAINER = QName.createQName(RM_URI, NAME_UNFILED_CONTAINER);
+ /** 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)
+ */
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
@@ -86,6 +109,30 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
this.permissionService = permissionService;
}
+ /**
+ * @param nodeDAO node DAO
+ */
+ public void setNodeDAO(NodeDAO nodeDAO)
+ {
+ this.nodeDAO = nodeDAO;
+ }
+
+ /**
+ * @param internalNodeService node service (internal bean)
+ */
+ public void setInternalNodeService(NodeService internalNodeService)
+ {
+ this.internalNodeService = internalNodeService;
+ }
+
+ /**
+ * @param siteService site service
+ */
+ public void setSiteService(SiteService siteService)
+ {
+ this.siteService = siteService;
+ }
+
/**
* @see org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService#isFilePlan(org.alfresco.service.cmr.repository.NodeRef)
*/
@@ -94,6 +141,97 @@ public class FilePlanServiceImpl extends ServiceBaseImpl
return instanceOf(nodeRef, TYPE_FILE_PLAN);
}
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService#getFilePlans()
+ */
+ @Override
+ public Set getFilePlans()
+ {
+ return getFilePlans(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService#getFilePlans(org.alfresco.service.cmr.repository.StoreRef)
+ */
+ @Override
+ public Set getFilePlans(final StoreRef storeRef)
+ {
+ ParameterCheck.mandatory("storeRef", storeRef);
+
+ 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()
+ {
+ @Override
+ public boolean handle(Pair nodePair)
+ {
+ NodeRef nodeRef = nodePair.getSecond();
+ if (storeRef.equals(nodeRef.getStoreRef()) == true)
+ {
+ results.add(nodeRef);
+ }
+
+ return true;
+ }
+ });
+ return results;
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService#getFilePlan(org.alfresco.service.cmr.repository.NodeRef)
+ */
+ @Override
+ public NodeRef getFilePlan(NodeRef nodeRef)
+ {
+ NodeRef result = null;
+ if (nodeRef != null)
+ {
+ result = (NodeRef)internalNodeService.getProperty(nodeRef, PROP_ROOT_NODEREF);
+ if (result == null)
+ {
+ if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true)
+ {
+ result = nodeRef;
+ }
+ else
+ {
+ ChildAssociationRef parentAssocRef = internalNodeService.getPrimaryParent(nodeRef);
+ if (parentAssocRef != null)
+ {
+ result = getFilePlan(parentAssocRef.getParentRef());
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService#getFilePlanBySiteId(java.lang.String)
+ */
+ @Override
+ public NodeRef getFilePlanBySiteId(String siteId)
+ {
+ NodeRef filePlan = null;
+
+ SiteInfo siteInfo = siteService.getSite(siteId);
+ if (siteInfo != null)
+ {
+ if (siteService.hasContainer(siteId, FILE_PLAN_CONTAINER) == true)
+ {
+ NodeRef nodeRef = siteService.getContainer(siteId, FILE_PLAN_CONTAINER);
+ if (instanceOf(nodeRef, TYPE_FILE_PLAN) == true)
+ {
+ filePlan = nodeRef;
+ }
+ }
+ }
+
+ return filePlan;
+ }
+
/**
* @see org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService#existsUnfiledContainer(org.alfresco.service.cmr.repository.NodeRef)
*/
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleService.java
index afb260d62a..c0f3cd1b9e 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleService.java
@@ -120,6 +120,33 @@ public interface FilePlanRoleService
*/
void deleteRole(NodeRef filePlan, String role);
+ /**
+ * Gets all the users that have been directly assigned to a role.
+ *
+ * @param filePlan file plan
+ * @param role role
+ * @return {@link Set}<{@link String}> set of users
+ */
+ Set getUsersAssignedToRole(NodeRef filePlan, String role);
+
+ /**
+ * Gets all the groups that have been directly assigned to a role.
+ *
+ * @param filePlan file plan
+ * @param role role
+ * @return {@link Set}<{@link String}> set of groups
+ */
+ Set getGroupsAssignedToRole(NodeRef filePlan, String role);
+
+ /**
+ * Gets all the groups and users that have been directly assigned to a role.
+ *
+ * @param filePlan file plan
+ * @param role role
+ * @return {@link Set}<{@link String}> set of groups and users
+ */
+ Set getAllAssignedToRole(NodeRef filePlan, String role);
+
/**
* Assign a role to an authority
*
@@ -128,4 +155,14 @@ public interface FilePlanRoleService
* @param authorityName authority name
*/
void assignRoleToAuthority(NodeRef filePlan, String role, String authorityName);
+
+
+ /**
+ * Unassign a role from an authority
+ *
+ * @param filePlan file plan
+ * @param role role
+ * @param authorityName authority name
+ */
+ void unassignRoleFromAuthority(NodeRef filePlan, String role, String authorityName);
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
index 66530648b6..e99c0e2cb5 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/role/FilePlanRoleServiceImpl.java
@@ -47,6 +47,7 @@ import org.alfresco.service.cmr.security.AccessPermission;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.service.cmr.security.PermissionService;
+import org.alfresco.util.ParameterCheck;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONArray;
@@ -686,23 +687,105 @@ public class FilePlanRoleServiceImpl implements FilePlanRoleService,
}
}, AuthenticationUtil.getSystemUserName());
}
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService#getUsersAssignedToRole(org.alfresco.service.cmr.repository.NodeRef, java.lang.String)
+ */
+ @Override
+ public Set getUsersAssignedToRole(final NodeRef filePlan, final String roleName)
+ {
+ ParameterCheck.mandatory("filePlan", filePlan);
+ ParameterCheck.mandatory("roleName", roleName);
+
+ return getAuthoritiesAssignedToRole(filePlan, roleName, AuthorityType.USER);
+ }
+
+ /**
+ * Gets all the authorities of a given type directly assigned to the given role in the file plan.
+ *
+ * @param filePlan file plan
+ * @param roleName role name
+ * @param authorityType authority type
+ * @return Set directly assigned authorities
+ */
+ private Set getAuthoritiesAssignedToRole(final NodeRef filePlan, final String roleName, final AuthorityType authorityType)
+ {
+ return AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork>()
+ {
+ public Set doWork() throws Exception
+ {
+ Role role = getRole(filePlan, roleName);
+ if (role == null)
+ {
+ throw new AlfrescoRuntimeException("Can not get authorities for role " + roleName + ", because it does not exist. (filePlan=" + filePlan.toString() + ")");
+ }
+ return authorityService.getContainedAuthorities(authorityType, role.getRoleGroupName(), false);
+ }
+ }, AuthenticationUtil.getSystemUserName());
+
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService#getGroupsAssignedToRole(org.alfresco.service.cmr.repository.NodeRef, java.lang.String)
+ */
+ @Override
+ public Set getGroupsAssignedToRole(final NodeRef filePlan, final String roleName)
+ {
+ ParameterCheck.mandatory("filePlan", filePlan);
+ ParameterCheck.mandatory("roleName", roleName);
+
+ return getAuthoritiesAssignedToRole(filePlan, roleName, AuthorityType.GROUP);
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService#getAllAssignedToRole(org.alfresco.service.cmr.repository.NodeRef, java.lang.String)
+ */
+ @Override
+ public Set getAllAssignedToRole(NodeRef filePlan, String role)
+ {
+ ParameterCheck.mandatory("filePlan", filePlan);
+ ParameterCheck.mandatory("roleName", role);
+
+ Set result = new HashSet(21);
+ result.addAll(getUsersAssignedToRole(filePlan, role));
+ result.addAll(getGroupsAssignedToRole(filePlan, role));
+ return result;
+ }
/**
* @see org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService#assignRoleToAuthority(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, java.lang.String)
*/
- public void assignRoleToAuthority(final NodeRef rmRootNode, final String role, final String authorityName)
+ public void assignRoleToAuthority(final NodeRef filePlan, final String role, final String authorityName)
{
- AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork