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 ac7e67ed10..b0c1034dc1 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 @@ -39,24 +39,46 @@ public class GroupApi { /** Add members to a group. */ public static void addMembers(AccountGroup.UUID groupUUID, - Set members, AsyncCallback> cb) { - RestApi call = new RestApi(membersBase(groupUUID)); - MemberInput input = MemberInput.create(); - for (String member : members) { - input.add_member(member); + Set members, + final AsyncCallback> cb) { + if (members.size() == 1) { + addMember(groupUUID, + members.iterator().next(), + new AsyncCallback() { + @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 ids, AsyncCallback 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) { diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/NativeList.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/NativeList.java index e820fe060f..969109437e 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/NativeList.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/NativeList.java @@ -21,6 +21,12 @@ import java.util.List; /** A read-only list of native JavaScript objects stored in a JSON array. */ public class NativeList extends JavaScriptObject { + public static NativeList of(T a) { + NativeList list = createArray().cast(); + list.add(a); + return list; + } + protected NativeList() { } @@ -51,5 +57,6 @@ public class NativeList 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; }-*/; }