/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.xmlworkflow;
import org.dspace.core.Context;
import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group;
import org.dspace.eperson.factory.EPersonServiceFactory;
import org.dspace.eperson.service.GroupService;
import org.dspace.xmlworkflow.factory.XmlWorkflowServiceFactory;
import org.dspace.xmlworkflow.storedcomponents.*;
import org.dspace.xmlworkflow.storedcomponents.service.CollectionRoleService;
import org.dspace.xmlworkflow.storedcomponents.service.WorkflowItemRoleService;
import java.sql.SQLException;
import java.util.List;
/**
* The role that is responsible for a certain step
* Can either be on a group in the repo, or a collection group
* or an item role will check for workflowItemRoles
*
* @author Bram De Schouwer (bram.deschouwer at dot com)
* @author Kevin Van de Velde (kevin at atmire dot com)
* @author Ben Bosman (ben at atmire dot com)
* @author Mark Diggory (markd at atmire dot com)
*/
public class Role {
private GroupService groupService = EPersonServiceFactory.getInstance().getGroupService();
private CollectionRoleService collectionRoleService = XmlWorkflowServiceFactory.getInstance().getCollectionRoleService();
private WorkflowItemRoleService workflowItemRoleService = XmlWorkflowServiceFactory.getInstance().getWorkflowItemRoleService();
private String id;
private String name;
private String description;
private boolean isInternal;
private Scope scope;
public static enum Scope{
REPOSITORY,
COLLECTION,
ITEM
}
public Role(String id, String name, String description, boolean isInternal, Scope scope){
this.id = id;
this.name = name;
this.description = description;
this.isInternal = isInternal;
this.scope = scope;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public boolean isInternal() {
return isInternal;
}
public Scope getScope() {
return scope;
}
public RoleMembers getMembers(Context context, XmlWorkflowItem wfi) throws SQLException {
if(scope == Scope.REPOSITORY){
Group group = groupService.findByName(context, name);
if(group == null)
return new RoleMembers();
else{
RoleMembers assignees = new RoleMembers();
assignees.addGroup(group);
return assignees;
}
} else
if(scope == Scope.COLLECTION){
CollectionRole collectionRole = collectionRoleService.find(context,wfi.getCollection(),id);
if(collectionRole != null){
RoleMembers assignees = new RoleMembers();
assignees.addGroup(collectionRole.getGroup());
return assignees;
}
return new RoleMembers();
}else{
List<WorkflowItemRole> roles = workflowItemRoleService.find(context, wfi, id);
RoleMembers assignees = new RoleMembers();
for (WorkflowItemRole itemRole : roles){
EPerson user = itemRole.getEPerson();
if(user != null)
assignees.addEPerson(user);
Group group = itemRole.getGroup();
if(group != null)
assignees.addGroup(group);
}
return assignees;
}
}
}