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. */ /** Add members to a group. */
public static void addMembers(AccountGroup.UUID groupUUID, public static void addMembers(AccountGroup.UUID groupUUID,
Set<String> members, AsyncCallback<NativeList<MemberInfo>> cb) { Set<String> members,
RestApi call = new RestApi(membersBase(groupUUID)); final AsyncCallback<NativeList<MemberInfo>> cb) {
MemberInput input = MemberInput.create(); if (members.size() == 1) {
for (String member : members) { addMember(groupUUID,
input.add_member(member); 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. */ /** 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, AsyncCallback<VoidResult> cb) {
RestApi call = new RestApi(membersBase(groupUUID)); if (ids.size() == 1) {
MemberInput input = MemberInput.create(); Account.Id u = ids.iterator().next();
for (Account.Id id : ids) { new RestApi(membersBase(groupUUID) + "/" + u).delete(cb);
input.add_member(id.toString()); } 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) { 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. */ /** A read-only list of native JavaScript objects stored in a JSON array. */
public class NativeList<T extends JavaScriptObject> extends JavaScriptObject { 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() { 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 int size() /*-{ return this.length; }-*/;
public final native T get(int i) /*-{ return this[i]; }-*/; 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; }-*/; private final native void set0(int i, T v) /*-{ this[i] = v; }-*/;
} }