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 {
|
public final class VoidResult extends JavaScriptObject {
|
||||||
protected VoidResult() {
|
protected VoidResult() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static VoidResult create() {
|
||||||
|
return createObject().cast();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -67,17 +67,34 @@ public class GroupApi {
|
|||||||
|
|
||||||
/** Remove members from a group. */
|
/** Remove members from a group. */
|
||||||
public static void removeMembers(AccountGroup.UUID groupUUID,
|
public static void removeMembers(AccountGroup.UUID groupUUID,
|
||||||
Set<Account.Id> ids, AsyncCallback<VoidResult> cb) {
|
Set<Account.Id> ids, final AsyncCallback<VoidResult> cb) {
|
||||||
if (ids.size() == 1) {
|
final int cnt = ids.size();
|
||||||
Account.Id u = ids.iterator().next();
|
if (cnt == 0) {
|
||||||
new RestApi(membersBase(groupUUID) + "/" + u).delete(cb);
|
cb.onSuccess(VoidResult.create());
|
||||||
} else {
|
return;
|
||||||
RestApi call = new RestApi(membersBase(groupUUID));
|
}
|
||||||
MemberInput input = MemberInput.create();
|
|
||||||
for (Account.Id id : ids) {
|
final AsyncCallback<VoidResult> state = new AsyncCallback<VoidResult>() {
|
||||||
input.add_member(id.toString());
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user