From b09bf6795995cf73b7071017dd46d842fb895c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 13 Jun 2018 10:17:30 +0200 Subject: [PATCH] Implement group dto to entity mapping --- .../v2/resources/GroupDto2GroupMapper.java | 24 ++++++++++++ .../scm/api/v2/resources/MapperModule.java | 2 +- .../resources/GroupDto2GroupMapperTest.java | 39 +++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto2GroupMapper.java create mode 100644 scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupDto2GroupMapperTest.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto2GroupMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto2GroupMapper.java new file mode 100644 index 0000000000..6eb8081b03 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto2GroupMapper.java @@ -0,0 +1,24 @@ +package sonia.scm.api.v2.resources; + +import org.mapstruct.AfterMapping; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.Mappings; +import sonia.scm.group.Group; + +import java.util.stream.Collectors; + +@Mapper +public abstract class GroupDto2GroupMapper { + @Mappings({ + @Mapping(target = "creationDate", ignore = true), + @Mapping(target = "lastModified", ignore = true) + }) + public abstract Group groupDtoToGroup(GroupDto groupDto); + + @AfterMapping + void mapMembers(GroupDto dto, @MappingTarget Group target) { + target.setMembers(dto.getEmbedded().getItemsBy("members").stream().map(m -> m.getAttribute("name").asText()).collect(Collectors.toList())); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java index 8d0f3e086e..92e67ef6e5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MapperModule.java @@ -2,7 +2,6 @@ package sonia.scm.api.v2.resources; import com.google.inject.AbstractModule; import org.mapstruct.factory.Mappers; -import sonia.scm.group.Group; public class MapperModule extends AbstractModule { @Override @@ -11,5 +10,6 @@ public class MapperModule extends AbstractModule { bind(User2UserDtoMapper.class).to(Mappers.getMapper(User2UserDtoMapper.class).getClass()); bind(Group2GroupDtoMapper.class).to(Mappers.getMapper(Group2GroupDtoMapper.class).getClass()); + bind(GroupDto2GroupMapper.class).to(Mappers.getMapper(GroupDto2GroupMapper.class).getClass()); } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupDto2GroupMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupDto2GroupMapperTest.java new file mode 100644 index 0000000000..3bb1ca7f31 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupDto2GroupMapperTest.java @@ -0,0 +1,39 @@ +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.databind.node.TextNode; +import de.otto.edison.hal.HalRepresentation; +import org.junit.Test; +import org.mapstruct.factory.Mappers; +import sonia.scm.group.Group; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; + +public class GroupDto2GroupMapperTest { + + @Test + public void shouldMapAttributes() { + GroupDto dto = new GroupDto(); + dto.setName("group"); + Group group = Mappers.getMapper(GroupDto2GroupMapper.class).groupDtoToGroup(dto); + assertEquals("group", group.getName()); + } + + @Test + public void shouldMapMembers() { + GroupDto dto = new GroupDto(); + + HalRepresentation member1 = new HalRepresentation(); + member1.getAttributes().put("name", new TextNode("member1")); + HalRepresentation member2 = new HalRepresentation(); + member2.getAttributes().put("name", new TextNode("member2")); + + dto.withEmbedded("members", asList(member1, member2)); + + Group group = Mappers.getMapper(GroupDto2GroupMapper.class).groupDtoToGroup(dto); + + assertEquals(2, group.getMembers().size()); + assertEquals("member1", group.getMembers().get(0)); + assertEquals("member2", group.getMembers().get(1)); + } +}