From 6bffee562498fa7b1d55f8d2c5c5d4997c9778bb Mon Sep 17 00:00:00 2001 From: Philipp Czora Date: Wed, 27 Jun 2018 11:27:12 +0200 Subject: [PATCH] Implemented PUT for Groups --- .../scm/api/v2/resources/GroupResource.java | 33 +++++++++++++------ .../sonia/scm/group/DefaultGroupManager.java | 13 ++------ .../v2/resources/GroupRootResourceTest.java | 6 ++-- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java index 4872b2ab27..6f198d642d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java @@ -9,12 +9,7 @@ import sonia.scm.group.GroupManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; @@ -24,11 +19,14 @@ import javax.ws.rs.core.UriInfo; public class GroupResource { private final GroupToGroupDtoMapper groupToGroupDtoMapper; + private final GroupDtoToGroupMapper dtoToGroupMapper; private final ResourceManagerAdapter adapter; @Inject - public GroupResource(GroupManager manager, GroupToGroupDtoMapper groupToGroupDtoMapper) { + public GroupResource(GroupManager manager, GroupToGroupDtoMapper groupToGroupDtoMapper, + GroupDtoToGroupMapper groupDtoToGroupMapper) { this.groupToGroupDtoMapper = groupToGroupDtoMapper; + this.dtoToGroupMapper = groupDtoToGroupMapper; this.adapter = new ResourceManagerAdapter<>(manager); } @@ -51,9 +49,24 @@ public class GroupResource { throw new RuntimeException(); } - @Path("") + + /** + * Modifies the given group. + * + * Note: This method requires "group" privileges. + * + * @param name name of the group to be modified + * @param groupDto group object to modify + */ @PUT - public Response update(@PathParam("id") String id) { - throw new RuntimeException(); + @Path("") + @StatusCodes({ + @ResponseCode(code = 204, condition = "update success"), + @ResponseCode(code = 403, condition = "forbidden, the current user does not have the \"group\" privilege"), + @ResponseCode(code = 500, condition = "internal server error") + }) + @TypeHint(TypeHint.NO_CONTENT.class) + public Response update(@Context UriInfo uriInfo, @PathParam("id") String name, GroupDto groupDto) { + return adapter.update(name, existing -> dtoToGroupMapper.map(groupDto)); } } diff --git a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java index ef69e5c07d..b4e9df2430 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java +++ b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java @@ -40,10 +40,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.inject.Inject; import com.google.inject.Singleton; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.HandlerEventType; import sonia.scm.SCMContextProvider; import sonia.scm.TransformFilter; @@ -52,16 +50,10 @@ import sonia.scm.search.SearchUtil; import sonia.scm.util.CollectionAppender; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +import java.util.*; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -214,6 +206,7 @@ public class DefaultGroupManager extends AbstractGroupManager removeDuplicateMembers(group); fireEvent(HandlerEventType.BEFORE_MODIFY, group, notModified); group.setLastModified(System.currentTimeMillis()); + group.setCreationDate(notModified.getCreationDate()); groupDAO.modify(group); fireEvent(HandlerEventType.MODIFY, group, notModified); } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java index b436722830..2b4cedb4fc 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java @@ -28,9 +28,7 @@ import java.net.URL; import java.util.Collections; import static java.util.Collections.singletonList; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; @@ -74,7 +72,7 @@ public class GroupRootResourceTest { GroupCollectionToDtoMapper groupCollectionToDtoMapper = new GroupCollectionToDtoMapper(groupToDtoMapper, uriInfoStore); GroupCollectionResource groupCollectionResource = new GroupCollectionResource(groupManager, dtoToGroupMapper, groupCollectionToDtoMapper); - GroupResource groupResource = new GroupResource(groupManager, groupToDtoMapper); + GroupResource groupResource = new GroupResource(groupManager, groupToDtoMapper, dtoToGroupMapper); GroupRootResource groupRootResource = new GroupRootResource(MockProvider.of(groupCollectionResource), MockProvider.of(groupResource)); dispatcher.getRegistry().addSingletonResource(groupRootResource);