Add links map

This commit is contained in:
René Pfeuffer
2018-05-28 14:13:47 +02:00
parent 61c2e942be
commit 6ac0765788
5 changed files with 66 additions and 10 deletions

View File

@@ -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;
}
}

View File

@@ -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<String, Link> links;
}

View File

@@ -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<String, Link> links = new LinkedHashMap<>();
links.put("self", new Link(uriInfo.getAbsolutePath()));
target.setLinks(links);
}
}

View File

@@ -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<User, UserException
@ResponseCode(code = 500, condition = "internal server error")
})
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Override
public Response get(@Context Request request, @PathParam("id") String id)
public Response get(@Context Request request, @Context UriInfo uriInfo, @PathParam("id") String id)
{
if (SecurityUtils.getSubject().hasRole(Role.ADMIN))
{
User user = manager.get(id);
UserDto userDto = UserMapper.INSTANCE.userToUserDto(user);
UserDto userDto = UserMapper.INSTANCE.userToUserDto(user, uriInfo);
return Response.ok(userDto).build();
}
else