From 0bbc58b9786c10be36d6f6a5036aaa785fe3550f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 5 Jul 2018 13:07:43 +0200 Subject: [PATCH] Make setting of id explicit for modified repositories --- .../api/v2/resources/RepositoryCollectionResource.java | 2 +- .../v2/resources/RepositoryDtoToRepositoryMapper.java | 9 ++++++++- .../sonia/scm/api/v2/resources/RepositoryResource.java | 9 ++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java index a2f303ae8d..11078090af 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java @@ -68,7 +68,7 @@ public class RepositoryCollectionResource { @ResponseHeaders(@ResponseHeader(name = "Location", description = "uri to the created repository")) public Response create(RepositoryDto repositoryDto) throws IOException, RepositoryException { return adapter.create(repositoryDto, - () -> dtoToRepositoryMapper.map(repositoryDto), + () -> dtoToRepositoryMapper.map(repositoryDto, null), repository -> resourceLinks.repository().self(repository.getNamespace(), repository.getName())); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDtoToRepositoryMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDtoToRepositoryMapper.java index 9bab9d1d3b..2c02bb8180 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDtoToRepositoryMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDtoToRepositoryMapper.java @@ -1,7 +1,10 @@ package sonia.scm.api.v2.resources; +import org.mapstruct.AfterMapping; +import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; import sonia.scm.repository.Repository; @Mapper @@ -13,6 +16,10 @@ public abstract class RepositoryDtoToRepositoryMapper { @Mapping(target = "publicReadable", ignore = true) @Mapping(target = "healthCheckFailures", ignore = true) @Mapping(target = "permissions", ignore = true) - public abstract Repository map(RepositoryDto repositoryDto); + public abstract Repository map(RepositoryDto repositoryDto, @Context String id); + @AfterMapping + void updateId(@MappingTarget Repository repository, @Context String id) { + repository.setId(id); + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index f7fd3dab37..e6d8b80fd3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -92,11 +92,10 @@ public class RepositoryResource { }) @TypeHint(TypeHint.NO_CONTENT.class) public Response update(@PathParam("namespace") String namespace, @PathParam("name") String name, RepositoryDto repositoryDto) { - return adapter.update(() -> manager.getByNamespace(namespace, name), existing -> { - Repository repository = dtoToRepositoryMapper.map(repositoryDto); - repository.setId(existing.getId()); - return repository; - }); + return adapter.update( + () -> manager.getByNamespace(namespace, name), + existing -> dtoToRepositoryMapper.map(repositoryDto, existing.getId()) + ); } @Path("tags/")