mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +01:00
Migrate to edison hal library for links
This commit is contained in:
@@ -1,17 +0,0 @@
|
||||
package sonia.scm.api.v2.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;
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,7 @@ class LinkBuilder {
|
||||
return new Parameters(method);
|
||||
}
|
||||
|
||||
public Link create() {
|
||||
public URI create() {
|
||||
if (calls.size() < classes.length) {
|
||||
throw new IllegalStateException("not enough methods for all classes");
|
||||
}
|
||||
@@ -53,7 +53,11 @@ class LinkBuilder {
|
||||
URI baseUri = uriInfo.getBaseUri();
|
||||
URI relativeUri = createRelativeUri();
|
||||
URI absoluteUri = baseUri.resolve(relativeUri);
|
||||
return new Link(absoluteUri);
|
||||
return absoluteUri;
|
||||
}
|
||||
|
||||
public String href() {
|
||||
return create().toString();
|
||||
}
|
||||
|
||||
private LinkBuilder add(String method, String[] parameters) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import de.otto.edison.hal.Links;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.mapstruct.*;
|
||||
import sonia.scm.api.rest.resources.UserResource;
|
||||
@@ -8,10 +9,11 @@ import sonia.scm.user.User;
|
||||
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import java.time.Instant;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import static de.otto.edison.hal.Link.link;
|
||||
import static de.otto.edison.hal.Links.linkingTo;
|
||||
|
||||
@Mapper
|
||||
public abstract class User2UserDtoMapper {
|
||||
|
||||
@@ -26,14 +28,17 @@ public abstract class User2UserDtoMapper {
|
||||
void appendLinks(@MappingTarget UserDto target, @Context UriInfo uriInfo) {
|
||||
LinkBuilder userLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserSubResource.class);
|
||||
LinkBuilder collectionLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserCollectionResource.class);
|
||||
Map<String, Link> links = new HashMap<>();
|
||||
links.put("self", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("get").parameters().create());
|
||||
|
||||
Links.Builder linksBuilder = linkingTo()
|
||||
.self(userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("get").parameters().href());
|
||||
if (SecurityUtils.getSubject().hasRole(Role.ADMIN)) {
|
||||
links.put("delete", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("delete").parameters().create());
|
||||
links.put("update", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("update").parameters().create());
|
||||
links.put("create", collectionLinkBuilder.method("getUserCollectionResource").parameters().method("create").parameters().create());
|
||||
linksBuilder
|
||||
.single(link("delete", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("delete").parameters().href()))
|
||||
.single(link("update", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("update").parameters().href()))
|
||||
.single(link("create", collectionLinkBuilder. method("getUserCollectionResource").parameters().method("create").parameters().href()));
|
||||
}
|
||||
target.setLinks(links);
|
||||
target.add(
|
||||
linksBuilder.build());
|
||||
}
|
||||
|
||||
@Mapping(target = "creationDate")
|
||||
|
||||
@@ -76,7 +76,7 @@ public class UserCollectionResource extends AbstractManagerResource<User, UserEx
|
||||
manager.create(user);
|
||||
|
||||
LinkBuilder builder = new LinkBuilder(uriInfo, UserV2Resource.class, UserSubResource.class);
|
||||
return Response.created(builder.method("getUserSubResource").parameters(user.getName()).method("get").parameters().create().getHref()).build();
|
||||
return Response.created(builder.method("getUserSubResource").parameters(user.getName()).method("get").parameters().create()).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import de.otto.edison.hal.HalRepresentation;
|
||||
import de.otto.edison.hal.Links;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Data @AllArgsConstructor @NoArgsConstructor
|
||||
public class UserDto {
|
||||
public class UserDto extends HalRepresentation {
|
||||
private boolean active;
|
||||
private boolean admin;
|
||||
private Instant creationDate;
|
||||
@@ -23,6 +23,8 @@ public class UserDto {
|
||||
private String password;
|
||||
private String type;
|
||||
|
||||
@JsonProperty("_links")
|
||||
private Map<String, Link> links;
|
||||
@Override
|
||||
protected HalRepresentation add(Links links) {
|
||||
return super.add(links);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user