package edu.ualberta.med.biobank.common.action.security;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Order;
import edu.ualberta.med.biobank.common.action.Action;
import edu.ualberta.med.biobank.common.action.ActionContext;
import edu.ualberta.med.biobank.common.action.exception.ActionException;
import edu.ualberta.med.biobank.common.permission.Permission;
import edu.ualberta.med.biobank.common.permission.security.RoleManagementPermission;
import edu.ualberta.med.biobank.common.permission.security.UserManagerPermission;
import edu.ualberta.med.biobank.model.Center;
import edu.ualberta.med.biobank.model.Group;
import edu.ualberta.med.biobank.model.Role;
import edu.ualberta.med.biobank.model.Study;
import edu.ualberta.med.biobank.model.User;
public class ManagerContextGetAction implements Action<ManagerContextGetOutput> {
private static final long serialVersionUID = 1L;
private static final Permission PERMISSION = new UserManagerPermission();
@SuppressWarnings("unused")
private final ManagerContextGetInput input;
public ManagerContextGetAction(ManagerContextGetInput input) {
this.input = input;
}
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
return PERMISSION.isAllowed(context);
}
@Override
public ManagerContextGetOutput run(ActionContext context)
throws ActionException {
@SuppressWarnings("unchecked")
List<Center> centers = context.getSession()
.createCriteria(Center.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.addOrder(Order.asc("name"))
.list();
@SuppressWarnings("unchecked")
List<Study> studies = context.getSession()
.createCriteria(Study.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.addOrder(Order.asc("name"))
.list();
@SuppressWarnings("unchecked")
List<Role> roles = context.getSession()
.createCriteria(Role.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.addOrder(Order.asc("name"))
.list();
@SuppressWarnings("unchecked")
List<User> users = context.getSession()
.createCriteria(User.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.addOrder(Order.asc("login"))
.list();
GroupGetAllOutput groupGetAllOutput = new GroupGetAllAction(
new GroupGetAllInput()).run(context);
List<Group> groups =
new ArrayList<Group>(groupGetAllOutput.getAllManageableGroups());
boolean roleManager = new RoleManagementPermission().isAllowed(context);
// TODO: redesign this whole context system.
User manager = context.getUser();
MembershipContextGetAction.initManager(manager);
ManagerContext managerContext =
new ManagerContext(manager, roles, groups,
users, centers, studies, roleManager);
return new ManagerContextGetOutput(managerContext);
}
}