package edu.ualberta.med.biobank.common.action.security;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import org.hibernate.criterion.CriteriaSpecification;
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.model.Role;
public class RoleGetAllAction implements Action<RoleGetAllOutput> {
private static final long serialVersionUID = 1L;
private static final Permission PERMISSION = new RoleManagementPermission();
@SuppressWarnings("unused")
private final RoleGetAllInput input;
public RoleGetAllAction(RoleGetAllInput input) {
this.input = input;
}
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
return PERMISSION.isAllowed(context);
}
@Override
public RoleGetAllOutput run(ActionContext context) throws ActionException {
@SuppressWarnings("unchecked")
List<Role> results = context.getSession()
.createCriteria(Role.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.list();
SortedSet<Role> roles = new TreeSet<Role>(Role.NAME_COMPARATOR);
roles.addAll(results);
return new RoleGetAllOutput(roles);
}
}