mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 16:35:45 +01:00
Abstraction for LinkBuilder
This commit is contained in:
@@ -14,6 +14,8 @@ import java.util.stream.Collectors;
|
||||
|
||||
import static de.otto.edison.hal.Link.link;
|
||||
import static de.otto.edison.hal.Links.linkingTo;
|
||||
import static sonia.scm.api.v2.resources.ResourceLinks.group;
|
||||
import static sonia.scm.api.v2.resources.ResourceLinks.user;
|
||||
|
||||
@Mapper
|
||||
public abstract class GroupToGroupDtoMapper extends BaseMapper {
|
||||
@@ -22,17 +24,12 @@ public abstract class GroupToGroupDtoMapper extends BaseMapper {
|
||||
|
||||
@AfterMapping
|
||||
void appendLinks(Group group, @MappingTarget GroupDto target, @Context UriInfo uriInfo) {
|
||||
LinkBuilder groupLinkBuilder = new LinkBuilder(uriInfo, GroupV2Resource.class, GroupSubResource.class);
|
||||
|
||||
Links.Builder linksBuilder = linkingTo()
|
||||
.self(groupLinkBuilder.method("getGroupSubResource").parameters(target.getName()).method("get").parameters().href());
|
||||
Links.Builder linksBuilder = linkingTo().self(group(uriInfo).self(target.getName()));
|
||||
if (GroupPermissions.delete(group).isPermitted()) {
|
||||
linksBuilder
|
||||
.single(link("delete", groupLinkBuilder.method("getGroupSubResource").parameters(target.getName()).method("delete").parameters().href()));
|
||||
linksBuilder.single(link("delete", group(uriInfo).delete(target.getName())));
|
||||
}
|
||||
if (GroupPermissions.modify(group).isPermitted()) {
|
||||
linksBuilder
|
||||
.single(link("update", groupLinkBuilder.method("getGroupSubResource").parameters(target.getName()).method("update").parameters().href()));
|
||||
linksBuilder.single(link("update", group(uriInfo).update(target.getName())));
|
||||
}
|
||||
target.add(linksBuilder.build());
|
||||
}
|
||||
@@ -44,9 +41,7 @@ public abstract class GroupToGroupDtoMapper extends BaseMapper {
|
||||
}
|
||||
|
||||
private MemberDto createMember(String name, UriInfo uriInfo) {
|
||||
LinkBuilder userLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserSubResource.class);
|
||||
Links.Builder linksBuilder = linkingTo()
|
||||
.self(userLinkBuilder.method("getUserSubResource").parameters(name).method("get").parameters().href());
|
||||
Links.Builder linksBuilder = linkingTo().self(user(uriInfo).self(name));
|
||||
MemberDto memberDto = new MemberDto(name);
|
||||
memberDto.add(linksBuilder.build());
|
||||
return memberDto;
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
|
||||
class ResourceLinks {
|
||||
|
||||
private ResourceLinks() {
|
||||
}
|
||||
|
||||
static GroupLinks group(UriInfo uriInfo) {
|
||||
return new GroupLinks(uriInfo);
|
||||
}
|
||||
|
||||
static class GroupLinks {
|
||||
private final LinkBuilder groupLinkBuilder;
|
||||
|
||||
private GroupLinks(UriInfo uriInfo) {
|
||||
groupLinkBuilder = new LinkBuilder(uriInfo, GroupV2Resource.class, GroupSubResource.class);
|
||||
}
|
||||
|
||||
String self(String name) {
|
||||
return groupLinkBuilder.method("getGroupSubResource").parameters(name).method("get").parameters().href();
|
||||
}
|
||||
|
||||
String delete(String name) {
|
||||
return groupLinkBuilder.method("getGroupSubResource").parameters(name).method("delete").parameters().href();
|
||||
}
|
||||
|
||||
public String update(String name) {
|
||||
return groupLinkBuilder.method("getGroupSubResource").parameters(name).method("update").parameters().href();
|
||||
}
|
||||
}
|
||||
|
||||
static UserLinks user(UriInfo uriInfo) {
|
||||
return new UserLinks(uriInfo);
|
||||
}
|
||||
|
||||
static class UserLinks {
|
||||
private final LinkBuilder userLinkBuilder;
|
||||
|
||||
private UserLinks(UriInfo uriInfo) {
|
||||
userLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserSubResource.class);
|
||||
}
|
||||
|
||||
String self(String name) {
|
||||
return userLinkBuilder.method("getUserSubResource").parameters(name).method("get").parameters().href();
|
||||
}
|
||||
|
||||
String delete(String name) {
|
||||
return userLinkBuilder.method("getUserSubResource").parameters(name).method("delete").parameters().href();
|
||||
}
|
||||
|
||||
public String update(String name) {
|
||||
return userLinkBuilder.method("getUserSubResource").parameters(name).method("update").parameters().href();
|
||||
}
|
||||
}
|
||||
|
||||
static UserCollectionLinks userCollection(UriInfo uriInfo) {
|
||||
return new UserCollectionLinks(uriInfo);
|
||||
}
|
||||
|
||||
static class UserCollectionLinks {
|
||||
private final LinkBuilder collectionLinkBuilder;
|
||||
|
||||
private UserCollectionLinks(UriInfo uriInfo) {
|
||||
collectionLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserCollectionResource.class);
|
||||
}
|
||||
|
||||
String self() {
|
||||
return collectionLinkBuilder.method("getUserCollectionResource").parameters().method("getAll").parameters().href();
|
||||
}
|
||||
|
||||
public String create() {
|
||||
return collectionLinkBuilder.method("getUserCollectionResource").parameters().method("create").parameters().href();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import static de.otto.edison.hal.Embedded.embeddedBuilder;
|
||||
import static de.otto.edison.hal.Link.link;
|
||||
import static de.otto.edison.hal.Links.linkingTo;
|
||||
import static de.otto.edison.hal.paging.NumberedPaging.zeroBasedNumberedPaging;
|
||||
import static sonia.scm.api.v2.resources.ResourceLinks.userCollection;
|
||||
|
||||
public class UserCollectionToDtoMapper {
|
||||
|
||||
@@ -42,16 +43,14 @@ public class UserCollectionToDtoMapper {
|
||||
}
|
||||
|
||||
private static Links createLinks(UriInfo uriInfo, NumberedPaging page) {
|
||||
LinkBuilder collectionLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserCollectionResource.class);
|
||||
String baseUrl = collectionLinkBuilder.method("getUserCollectionResource").parameters().method("create").parameters().href();
|
||||
String baseUrl = userCollection(uriInfo).self();
|
||||
|
||||
Links.Builder linksBuilder = linkingTo()
|
||||
.with(page.links(
|
||||
fromTemplate(baseUrl + "{?page,pageSize}"),
|
||||
EnumSet.allOf(PagingRel.class)));
|
||||
if (UserPermissions.create().isPermitted()) {
|
||||
linksBuilder
|
||||
.single(link("create", collectionLinkBuilder. method("getUserCollectionResource").parameters().method("create").parameters().href()));
|
||||
linksBuilder.single(link("create", userCollection(uriInfo).create()));
|
||||
}
|
||||
return linksBuilder.build();
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import javax.ws.rs.core.UriInfo;
|
||||
|
||||
import static de.otto.edison.hal.Link.link;
|
||||
import static de.otto.edison.hal.Links.linkingTo;
|
||||
import static sonia.scm.api.v2.resources.ResourceLinks.user;
|
||||
|
||||
@Mapper
|
||||
public abstract class UserToUserDtoMapper extends BaseMapper {
|
||||
@@ -26,17 +27,12 @@ public abstract class UserToUserDtoMapper extends BaseMapper {
|
||||
|
||||
@AfterMapping
|
||||
void appendLinks(User user, @MappingTarget UserDto target, @Context UriInfo uriInfo) {
|
||||
LinkBuilder userLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserSubResource.class);
|
||||
|
||||
Links.Builder linksBuilder = linkingTo()
|
||||
.self(userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("get").parameters().href());
|
||||
Links.Builder linksBuilder = linkingTo().self(user(uriInfo).self(target.getName()));
|
||||
if (UserPermissions.delete(user).isPermitted()) {
|
||||
linksBuilder
|
||||
.single(link("delete", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("delete").parameters().href()));
|
||||
linksBuilder.single(link("delete", user(uriInfo).delete(target.getName())));
|
||||
}
|
||||
if (UserPermissions.modify(user).isPermitted()) {
|
||||
linksBuilder
|
||||
.single(link("update", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("update").parameters().href()));
|
||||
linksBuilder.single(link("update", user(uriInfo).update(target.getName())));
|
||||
}
|
||||
target.add(
|
||||
linksBuilder.build());
|
||||
|
||||
Reference in New Issue
Block a user