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.Link.link;
|
||||||
import static de.otto.edison.hal.Links.linkingTo;
|
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
|
@Mapper
|
||||||
public abstract class GroupToGroupDtoMapper extends BaseMapper {
|
public abstract class GroupToGroupDtoMapper extends BaseMapper {
|
||||||
@@ -22,17 +24,12 @@ public abstract class GroupToGroupDtoMapper extends BaseMapper {
|
|||||||
|
|
||||||
@AfterMapping
|
@AfterMapping
|
||||||
void appendLinks(Group group, @MappingTarget GroupDto target, @Context UriInfo uriInfo) {
|
void appendLinks(Group group, @MappingTarget GroupDto target, @Context UriInfo uriInfo) {
|
||||||
LinkBuilder groupLinkBuilder = new LinkBuilder(uriInfo, GroupV2Resource.class, GroupSubResource.class);
|
Links.Builder linksBuilder = linkingTo().self(group(uriInfo).self(target.getName()));
|
||||||
|
|
||||||
Links.Builder linksBuilder = linkingTo()
|
|
||||||
.self(groupLinkBuilder.method("getGroupSubResource").parameters(target.getName()).method("get").parameters().href());
|
|
||||||
if (GroupPermissions.delete(group).isPermitted()) {
|
if (GroupPermissions.delete(group).isPermitted()) {
|
||||||
linksBuilder
|
linksBuilder.single(link("delete", group(uriInfo).delete(target.getName())));
|
||||||
.single(link("delete", groupLinkBuilder.method("getGroupSubResource").parameters(target.getName()).method("delete").parameters().href()));
|
|
||||||
}
|
}
|
||||||
if (GroupPermissions.modify(group).isPermitted()) {
|
if (GroupPermissions.modify(group).isPermitted()) {
|
||||||
linksBuilder
|
linksBuilder.single(link("update", group(uriInfo).update(target.getName())));
|
||||||
.single(link("update", groupLinkBuilder.method("getGroupSubResource").parameters(target.getName()).method("update").parameters().href()));
|
|
||||||
}
|
}
|
||||||
target.add(linksBuilder.build());
|
target.add(linksBuilder.build());
|
||||||
}
|
}
|
||||||
@@ -44,9 +41,7 @@ public abstract class GroupToGroupDtoMapper extends BaseMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private MemberDto createMember(String name, UriInfo uriInfo) {
|
private MemberDto createMember(String name, UriInfo uriInfo) {
|
||||||
LinkBuilder userLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserSubResource.class);
|
Links.Builder linksBuilder = linkingTo().self(user(uriInfo).self(name));
|
||||||
Links.Builder linksBuilder = linkingTo()
|
|
||||||
.self(userLinkBuilder.method("getUserSubResource").parameters(name).method("get").parameters().href());
|
|
||||||
MemberDto memberDto = new MemberDto(name);
|
MemberDto memberDto = new MemberDto(name);
|
||||||
memberDto.add(linksBuilder.build());
|
memberDto.add(linksBuilder.build());
|
||||||
return memberDto;
|
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.Link.link;
|
||||||
import static de.otto.edison.hal.Links.linkingTo;
|
import static de.otto.edison.hal.Links.linkingTo;
|
||||||
import static de.otto.edison.hal.paging.NumberedPaging.zeroBasedNumberedPaging;
|
import static de.otto.edison.hal.paging.NumberedPaging.zeroBasedNumberedPaging;
|
||||||
|
import static sonia.scm.api.v2.resources.ResourceLinks.userCollection;
|
||||||
|
|
||||||
public class UserCollectionToDtoMapper {
|
public class UserCollectionToDtoMapper {
|
||||||
|
|
||||||
@@ -42,16 +43,14 @@ public class UserCollectionToDtoMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static Links createLinks(UriInfo uriInfo, NumberedPaging page) {
|
private static Links createLinks(UriInfo uriInfo, NumberedPaging page) {
|
||||||
LinkBuilder collectionLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserCollectionResource.class);
|
String baseUrl = userCollection(uriInfo).self();
|
||||||
String baseUrl = collectionLinkBuilder.method("getUserCollectionResource").parameters().method("create").parameters().href();
|
|
||||||
|
|
||||||
Links.Builder linksBuilder = linkingTo()
|
Links.Builder linksBuilder = linkingTo()
|
||||||
.with(page.links(
|
.with(page.links(
|
||||||
fromTemplate(baseUrl + "{?page,pageSize}"),
|
fromTemplate(baseUrl + "{?page,pageSize}"),
|
||||||
EnumSet.allOf(PagingRel.class)));
|
EnumSet.allOf(PagingRel.class)));
|
||||||
if (UserPermissions.create().isPermitted()) {
|
if (UserPermissions.create().isPermitted()) {
|
||||||
linksBuilder
|
linksBuilder.single(link("create", userCollection(uriInfo).create()));
|
||||||
.single(link("create", collectionLinkBuilder. method("getUserCollectionResource").parameters().method("create").parameters().href()));
|
|
||||||
}
|
}
|
||||||
return linksBuilder.build();
|
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.Link.link;
|
||||||
import static de.otto.edison.hal.Links.linkingTo;
|
import static de.otto.edison.hal.Links.linkingTo;
|
||||||
|
import static sonia.scm.api.v2.resources.ResourceLinks.user;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public abstract class UserToUserDtoMapper extends BaseMapper {
|
public abstract class UserToUserDtoMapper extends BaseMapper {
|
||||||
@@ -26,17 +27,12 @@ public abstract class UserToUserDtoMapper extends BaseMapper {
|
|||||||
|
|
||||||
@AfterMapping
|
@AfterMapping
|
||||||
void appendLinks(User user, @MappingTarget UserDto target, @Context UriInfo uriInfo) {
|
void appendLinks(User user, @MappingTarget UserDto target, @Context UriInfo uriInfo) {
|
||||||
LinkBuilder userLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserSubResource.class);
|
Links.Builder linksBuilder = linkingTo().self(user(uriInfo).self(target.getName()));
|
||||||
|
|
||||||
Links.Builder linksBuilder = linkingTo()
|
|
||||||
.self(userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("get").parameters().href());
|
|
||||||
if (UserPermissions.delete(user).isPermitted()) {
|
if (UserPermissions.delete(user).isPermitted()) {
|
||||||
linksBuilder
|
linksBuilder.single(link("delete", user(uriInfo).delete(target.getName())));
|
||||||
.single(link("delete", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("delete").parameters().href()));
|
|
||||||
}
|
}
|
||||||
if (UserPermissions.modify(user).isPermitted()) {
|
if (UserPermissions.modify(user).isPermitted()) {
|
||||||
linksBuilder
|
linksBuilder.single(link("update", user(uriInfo).update(target.getName())));
|
||||||
.single(link("update", userLinkBuilder.method("getUserSubResource").parameters(target.getName()).method("update").parameters().href()));
|
|
||||||
}
|
}
|
||||||
target.add(
|
target.add(
|
||||||
linksBuilder.build());
|
linksBuilder.build());
|
||||||
|
|||||||
Reference in New Issue
Block a user