private String[] updateUserRoles(Role role, List<String> selectedUsers, Realm realm)
      throws Exception {
    UserDatabase userDatabase = UserDatabaseManager.getInstance().getUserDatabase(realm);
    User[] usersInRole = userDatabase.getUsersInRole(role);

    Collection<String> usersNotRemoved = new TreeSet<String>();
    for (User user : usersInRole) {
      String principalName = user.getPrincipalName();
      if (selectedUsers.contains(principalName)) {
        // role is already assigned so make sure this don't happen again
        selectedUsers.remove(principalName);
      } else {
        Role[] updatedRoles = removeRole(role, user.getRoles());
        try {
          userDatabase.updateAccount(user, user.getEmail(), user.getFullname(), updatedRoles);
        } catch (GroupsRequiredForUserException e) {
          usersNotRemoved.add(principalName);
        }
      }
    }

    for (String principalName : selectedUsers) {
      User user = userDatabase.getAccount(principalName);
      Role[] updatedRoles = addRole(role, user.getRoles());
      userDatabase.updateAccount(user, user.getEmail(), user.getFullname(), updatedRoles);
    }
    return usersNotRemoved.toArray(new String[usersNotRemoved.size()]);
  }