diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/VoidResult.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/VoidResult.java index 1f7418d129..d7bcd0cac8 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/VoidResult.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/VoidResult.java @@ -19,4 +19,8 @@ import com.google.gwt.core.client.JavaScriptObject; public final class VoidResult extends JavaScriptObject { protected VoidResult() { } + + public static VoidResult create() { + return createObject().cast(); + } } diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupApi.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupApi.java index b0c1034dc1..48fb3ad3d8 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupApi.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupApi.java @@ -67,17 +67,34 @@ public class GroupApi { /** Remove members from a group. */ public static void removeMembers(AccountGroup.UUID groupUUID, - Set ids, AsyncCallback cb) { - if (ids.size() == 1) { - Account.Id u = ids.iterator().next(); - new RestApi(membersBase(groupUUID) + "/" + u).delete(cb); - } else { - RestApi call = new RestApi(membersBase(groupUUID)); - MemberInput input = MemberInput.create(); - for (Account.Id id : ids) { - input.add_member(id.toString()); + Set ids, final AsyncCallback cb) { + final int cnt = ids.size(); + if (cnt == 0) { + cb.onSuccess(VoidResult.create()); + return; + } + + final AsyncCallback state = new AsyncCallback() { + private int remaining = cnt; + private boolean error; + + @Override + public void onSuccess(VoidResult result) { + if (--remaining == 0 && !error) { + cb.onSuccess(result); + } } - call.data(input).delete(cb); + + @Override + public void onFailure(Throwable caught) { + if (!error) { + error = true; + cb.onFailure(caught); + } + } + }; + for (Account.Id u : ids) { + new RestApi(membersBase(groupUUID) + "/" + u).delete(state); } }