package edu.ualberta.med.biobank.common.action.security;
import edu.ualberta.med.biobank.common.action.Action;
import edu.ualberta.med.biobank.common.action.ActionContext;
import edu.ualberta.med.biobank.common.action.IdResult;
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 RoleSaveAction implements Action<IdResult> {
private static final long serialVersionUID = 1L;
private static final Permission PERMISSION = new RoleManagementPermission();
private final RoleSaveInput input;
public RoleSaveAction(RoleSaveInput input) {
this.input = input;
}
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
return PERMISSION.isAllowed(context);
}
@Override
public IdResult run(ActionContext context) throws ActionException {
Role role = context.load(Role.class, input.getRoleId(), new Role());
role.setName(input.getName());
role.getPermissions().clear();
role.getPermissions().addAll(input.getPermissions());
context.getSession().saveOrUpdate(role);
return new IdResult(role.getId());
}
}