Do not fail on adding a user to a group that is already a member

Trying to add a user to a group that is already a member of the group
currently fails with 'Not Found'. If multiple users are added in bulk,
the users which are already a member of the group are ignored. Do the
same on adding a single user to a group. If the user is already a
member of the group do nothing, but also do not fail.

Change-Id: I644af9876c8488d9bf80d2c4bec3cbd75b2ffead
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
Edwin Kempin
2013-01-24 13:14:54 +01:00
parent 2830110fc9
commit 2cbbd293bb
3 changed files with 26 additions and 6 deletions

View File

@@ -14,17 +14,12 @@
package com.google.gerrit.server.group;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.RestReadView;
import com.google.gerrit.server.group.MembersCollection.MemberInfo;
public class GetMember implements RestReadView<MemberResource> {
@Override
public MemberInfo apply(final MemberResource resource) throws AuthException,
BadRequestException, ResourceConflictException, Exception {
public MemberInfo apply(MemberResource resource) {
return MembersCollection.parse(resource.getUser().getAccount());
}
}

View File

@@ -21,6 +21,7 @@ import static com.google.gerrit.server.group.MemberResource.MEMBER_KIND;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.extensions.restapi.RestApiModule;
import com.google.gerrit.server.group.DeleteMembers.DeleteMember;
import com.google.gerrit.server.group.PutMembers.UpdateMember;
public class Module extends RestApiModule {
@Override
@@ -37,6 +38,7 @@ public class Module extends RestApiModule {
get(MEMBER_KIND).to(GetMember.class);
post(GROUP_KIND, "members").to(PostMembers.class);
put(GROUP_KIND, "members").to(PutMembers.class);
put(MEMBER_KIND).to(UpdateMember.class);
delete(MEMBER_KIND).to(DeleteMember.class);
child(GROUP_KIND, "groups").to(IncludedGroupsCollection.class);

View File

@@ -224,4 +224,27 @@ class PutMembers implements RestModifyView<GroupResource, Input> {
}
}
}
static class UpdateMember implements RestModifyView<MemberResource, PutMember.Input> {
static class Input {
}
private final Provider<GetMember> get;
@Inject
UpdateMember(Provider<GetMember> get) {
this.get = get;
}
@Override
public Class<PutMember.Input> inputType() {
return PutMember.Input.class;
}
@Override
public Object apply(MemberResource resource, PutMember.Input input) {
// Do nothing, the user is already a member.
return get.get().apply(resource);
}
}
}