/**
* 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.xmlworkflow.storedcomponents.*;
import java.sql.SQLException;
/**
* 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 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 = Group.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 = CollectionRole.find(context,wfi.getCollection().getID(),id);
if(collectionRole != null){
RoleMembers assignees = new RoleMembers();
assignees.addGroup(collectionRole.getGroup());
return assignees;
}
return new RoleMembers();
}else{
WorkflowItemRole[] roles = WorkflowItemRole.find(context, wfi.getID(), 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;
}
}
}