mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-11 16:05:44 +01:00
Add links map
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,9 @@ package sonia.scm.api.rest.resources;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class UserDto {
|
public class UserDto {
|
||||||
private boolean active;
|
private boolean active;
|
||||||
@@ -13,4 +16,7 @@ public class UserDto {
|
|||||||
private String name;
|
private String name;
|
||||||
private String password;
|
private String password;
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
|
@XmlElement(name = "_links")
|
||||||
|
private Map<String, Link> links;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,26 @@
|
|||||||
package sonia.scm.api.rest.resources;
|
package sonia.scm.api.rest.resources;
|
||||||
|
|
||||||
|
import org.mapstruct.AfterMapping;
|
||||||
|
import org.mapstruct.Context;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
import org.mapstruct.MappingTarget;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
import sonia.scm.user.User;
|
import sonia.scm.user.User;
|
||||||
|
|
||||||
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface UserMapper {
|
public abstract class UserMapper {
|
||||||
UserMapper INSTANCE = Mappers.getMapper( UserMapper.class );
|
public static UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
|
||||||
|
|
||||||
@Mapping(source = "name", target = "name")
|
abstract public UserDto userToUserDto(User user, @Context UriInfo uriInfo);
|
||||||
UserDto userToUserDto(User user);
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import com.webcohesion.enunciate.metadata.rs.ResponseCode;
|
|||||||
import com.webcohesion.enunciate.metadata.rs.StatusCodes;
|
import com.webcohesion.enunciate.metadata.rs.StatusCodes;
|
||||||
import com.webcohesion.enunciate.metadata.rs.TypeHint;
|
import com.webcohesion.enunciate.metadata.rs.TypeHint;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
import sonia.scm.Manager;
|
|
||||||
import sonia.scm.security.Role;
|
import sonia.scm.security.Role;
|
||||||
import sonia.scm.user.User;
|
import sonia.scm.user.User;
|
||||||
import sonia.scm.user.UserException;
|
import sonia.scm.user.UserException;
|
||||||
@@ -57,13 +56,12 @@ public class UserNewResource extends AbstractManagerResource<User, UserException
|
|||||||
@ResponseCode(code = 500, condition = "internal server error")
|
@ResponseCode(code = 500, condition = "internal server error")
|
||||||
})
|
})
|
||||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||||
@Override
|
public Response get(@Context Request request, @Context UriInfo uriInfo, @PathParam("id") String id)
|
||||||
public Response get(@Context Request request, @PathParam("id") String id)
|
|
||||||
{
|
{
|
||||||
if (SecurityUtils.getSubject().hasRole(Role.ADMIN))
|
if (SecurityUtils.getSubject().hasRole(Role.ADMIN))
|
||||||
{
|
{
|
||||||
User user = manager.get(id);
|
User user = manager.get(id);
|
||||||
UserDto userDto = UserMapper.INSTANCE.userToUserDto(user);
|
UserDto userDto = UserMapper.INSTANCE.userToUserDto(user, uriInfo);
|
||||||
return Response.ok(userDto).build();
|
return Response.ok(userDto).build();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package sonia.scm.api.rest.resources;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import sonia.scm.user.User;
|
||||||
|
|
||||||
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
|
public class UserMapperTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldMapLinks() {
|
||||||
|
User user = new User();
|
||||||
|
user.setName("abc");
|
||||||
|
UserDto userDto = UserMapper.INSTANCE.userToUserDto(user, mock(UriInfo.class));
|
||||||
|
assertEquals("abc" , userDto.getName());
|
||||||
|
assertNotNull("expected map with links", userDto.getLinks());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user