Merge "Use single member REST calls when updating a group"

This commit is contained in:
Shawn Pearce
2013-01-18 23:59:01 +00:00
committed by Gerrit Code Review
2 changed files with 40 additions and 11 deletions

View File

@@ -39,24 +39,46 @@ public class GroupApi {
/** Add members to a group. */
public static void addMembers(AccountGroup.UUID groupUUID,
Set<String> members, AsyncCallback<NativeList<MemberInfo>> cb) {
RestApi call = new RestApi(membersBase(groupUUID));
MemberInput input = MemberInput.create();
for (String member : members) {
input.add_member(member);
Set<String> members,
final AsyncCallback<NativeList<MemberInfo>> cb) {
if (members.size() == 1) {
addMember(groupUUID,
members.iterator().next(),
new AsyncCallback<MemberInfo>() {
@Override
public void onSuccess(MemberInfo result) {
cb.onSuccess(NativeList.of(result));
}
@Override
public void onFailure(Throwable caught) {
cb.onFailure(caught);
}
});
} else {
RestApi call = new RestApi(membersBase(groupUUID));
MemberInput input = MemberInput.create();
for (String member : members) {
input.add_member(member);
}
call.data(input).put(cb);
}
call.data(input).put(cb);
}
/** Remove members from a group. */
public static void removeMembers(AccountGroup.UUID groupUUID,
Set<Account.Id> ids, AsyncCallback<VoidResult> cb) {
RestApi call = new RestApi(membersBase(groupUUID));
MemberInput input = MemberInput.create();
for (Account.Id id : ids) {
input.add_member(id.toString());
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());
}
call.data(input).delete(cb);
}
call.data(input).delete(cb);
}
private static String membersBase(AccountGroup.UUID groupUUID) {

View File

@@ -21,6 +21,12 @@ import java.util.List;
/** A read-only list of native JavaScript objects stored in a JSON array. */
public class NativeList<T extends JavaScriptObject> extends JavaScriptObject {
public static <T extends JavaScriptObject> NativeList<T> of(T a) {
NativeList<T> list = createArray().cast();
list.add(a);
return list;
}
protected NativeList() {
}
@@ -51,5 +57,6 @@ public class NativeList<T extends JavaScriptObject> extends JavaScriptObject {
public final native int size() /*-{ return this.length; }-*/;
public final native T get(int i) /*-{ return this[i]; }-*/;
public final native void add(T v) /*-{ this.push(v); }-*/;
private final native void set0(int i, T v) /*-{ this[i] = v; }-*/;
}