/*
   * Update the roles for the user.
   * @param editRoles the new set of roles for the user
   * @param permissionsHelper the PermissionsHelper
   */
  private void updateRoles(
      PermissionsUserEditRoles editRoles, PermissionsHelperBase permissionsHelper) {

    /*
     * Clear the current roles before setting the new ones
     */
    Role rolePI = null;
    Role roleCOI = null;
    UserState userState = permissionsHelper.getUserState(editRoles.getUserName());
    List<RoleState> statesList = userState.getRoleStates();
    for (RoleState roleState : statesList) {
      if (Constants.CO_INVESTIGATOR_ROLE.equalsIgnoreCase(roleState.getRole().getName())
          && roleState.isAssigned()) {
        roleCOI = roleState.getRole();
      }
      if (Constants.PRINCIPAL_INVESTIGATOR_ROLE.equalsIgnoreCase(roleState.getRole().getName())
          && roleState.isAssigned()) {
        rolePI = roleState.getRole();
      }
    }
    userState.clearAssignments();

    /*
     * Set the new roles.
     */

    List<PermissionsRoleState> roleStates = editRoles.getRoleStates();
    PermissionsRoleState permissionsRoleState = null;

    if (roleCOI != null) {
      permissionsRoleState = new PermissionsRoleState(roleCOI);
      permissionsRoleState.setState(true);
      if (permissionsRoleState != null || permissionsRoleState.getState()) {
        roleStates.add(permissionsRoleState);
      }
    }

    if (rolePI != null) {
      permissionsRoleState = new PermissionsRoleState(rolePI);
      permissionsRoleState.setState(true);
      if (permissionsRoleState != null || permissionsRoleState.getState()) {
        roleStates.add(permissionsRoleState);
      }
    }

    for (PermissionsRoleState roleState : roleStates) {
      if (roleState.getState()) {
        userState.setAssigned(roleState.getRole().getName(), true);
      }
    }

    // If the user isn't assigned to any of the normal roles, then he/she will
    // be assigned to the unassigned role.

    if (!userState.hasAnyRole() && permissionsHelper.getUnassignedRoleName() != null) {
      userState.setAssigned(permissionsHelper.getUnassignedRoleName(), true);
    }
  }