From 6ac076578822f1df1b1a8c9504b72c7ef8c13899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 28 May 2018 14:13:47 +0200 Subject: [PATCH] Add links map --- .../sonia/scm/api/rest/resources/Link.java | 17 +++++++++++++ .../sonia/scm/api/rest/resources/UserDto.java | 6 +++++ .../scm/api/rest/resources/UserMapper.java | 24 ++++++++++++++----- .../api/rest/resources/UserNewResource.java | 6 ++--- .../api/rest/resources/UserMapperTest.java | 23 ++++++++++++++++++ 5 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/rest/resources/Link.java create mode 100644 scm-webapp/src/test/java/sonia/scm/api/rest/resources/UserMapperTest.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/Link.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/Link.java new file mode 100644 index 0000000000..aa02164a66 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/Link.java @@ -0,0 +1,17 @@ +package sonia.scm.api.rest.resources; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; +import java.net.URI; + +@Data +@XmlRootElement +public class Link { + + private URI href; + + public Link(URI href) { + this.href = href; + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserDto.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserDto.java index da9c954a6e..a1938a86c8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserDto.java @@ -2,6 +2,9 @@ package sonia.scm.api.rest.resources; import lombok.Data; +import javax.xml.bind.annotation.XmlElement; +import java.util.Map; + @Data public class UserDto { private boolean active; @@ -13,4 +16,7 @@ public class UserDto { private String name; private String password; private String type; + + @XmlElement(name = "_links") + private Map links; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserMapper.java index eb2be1e703..49f5a3bfa0 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserMapper.java @@ -1,14 +1,26 @@ package sonia.scm.api.rest.resources; +import org.mapstruct.AfterMapping; +import org.mapstruct.Context; import org.mapstruct.Mapper; -import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; import org.mapstruct.factory.Mappers; import sonia.scm.user.User; +import javax.ws.rs.core.UriInfo; +import java.util.LinkedHashMap; +import java.util.Map; + @Mapper -public interface UserMapper { - UserMapper INSTANCE = Mappers.getMapper( UserMapper.class ); - - @Mapping(source = "name", target = "name") - UserDto userToUserDto(User user); +public abstract class UserMapper { + public static UserMapper INSTANCE = Mappers.getMapper(UserMapper.class); + + abstract public UserDto userToUserDto(User user, @Context UriInfo uriInfo); + + @AfterMapping + public void appendLinks(User source, @MappingTarget UserDto target, @Context UriInfo uriInfo) { + Map links = new LinkedHashMap<>(); + links.put("self", new Link(uriInfo.getAbsolutePath())); + target.setLinks(links); + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserNewResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserNewResource.java index 48cdbef4b2..66a0100105 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserNewResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserNewResource.java @@ -6,7 +6,6 @@ import com.webcohesion.enunciate.metadata.rs.ResponseCode; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; import org.apache.shiro.SecurityUtils; -import sonia.scm.Manager; import sonia.scm.security.Role; import sonia.scm.user.User; import sonia.scm.user.UserException; @@ -57,13 +56,12 @@ public class UserNewResource extends AbstractManagerResource