Remove group members in separate RPCs
Some web servers don't like a request body during a DELETE method. Work around this by sending each member deletion as its own DELETE request. Change-Id: I67404e06ef6f87d5f96ead1c39ef1ed470ece86c
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -67,17 +67,34 @@ public class GroupApi {
|
||||
|
||||
/** Remove members from a group. */
|
||||
public static void removeMembers(AccountGroup.UUID groupUUID,
|
||||
Set<Account.Id> ids, AsyncCallback<VoidResult> 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<Account.Id> ids, final AsyncCallback<VoidResult> cb) {
|
||||
final int cnt = ids.size();
|
||||
if (cnt == 0) {
|
||||
cb.onSuccess(VoidResult.create());
|
||||
return;
|
||||
}
|
||||
call.data(input).delete(cb);
|
||||
|
||||
final AsyncCallback<VoidResult> state = new AsyncCallback<VoidResult>() {
|
||||
private int remaining = cnt;
|
||||
private boolean error;
|
||||
|
||||
@Override
|
||||
public void onSuccess(VoidResult result) {
|
||||
if (--remaining == 0 && !error) {
|
||||
cb.onSuccess(result);
|
||||
}
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user