From f32bb38ac2d4b7058040764feacc70b732ae8c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 29 May 2018 16:29:13 +0200 Subject: [PATCH] Refactoring --- .../rest/resources/User2UserDtoMapper.java | 52 +++++++++++++------ 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java index 447417fa9c..91a4722339 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java @@ -9,6 +9,7 @@ import sonia.scm.user.User; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import java.net.URI; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -24,26 +25,43 @@ public abstract class User2UserDtoMapper { @AfterMapping void appendLinks(@MappingTarget UserDto target, @Context UriInfo uriInfo) { - Map links = new LinkedHashMap<>(); - links.put("self", createLink("get", uriInfo, target.getName())); - links.put("delete", createLink("delete", uriInfo, target.getName())); - links.put("update", createLink("update", uriInfo, target.getName())); - links.put("create", createLink("create", uriInfo)); - target.setLinks(links); + LinkMapBuilder builder = new LinkMapBuilder(uriInfo); + builder.add("self", "get", target.getName()); + builder.add("delete", "delete", target.getName()); + builder.add("update", "update", target.getName()); + builder.add("create", "create"); + target.setLinks(builder.getLinkMap()); } - private Link createLink(String methodName, UriInfo uriInfo, String... parameters) { - URI baseUri = uriInfo.getBaseUri(); - URI relativeUri = createRelativeUri(methodName, parameters); - URI absoluteUri = baseUri.resolve(relativeUri); - return new Link(absoluteUri); - } + private static class LinkMapBuilder { + private final UriInfo uriInfo; + private final Map links = new LinkedHashMap<>(); - private URI createRelativeUri(String methodName, Object[] parameters) { - return userUriBuilder().path(UserNewResource.class, methodName).build(parameters); - } + private LinkMapBuilder(UriInfo uriInfo) { + this.uriInfo = uriInfo; + } - private UriBuilder userUriBuilder() { - return UriBuilder.fromResource(UserNewResource.class); + void add(String linkName, String methodName, String... parameters) { + links.put(linkName, createLink(methodName, parameters)); + } + + Map getLinkMap() { + return Collections.unmodifiableMap(links); + } + + private Link createLink(String methodName, String... parameters) { + URI baseUri = uriInfo.getBaseUri(); + URI relativeUri = createRelativeUri(methodName, parameters); + URI absoluteUri = baseUri.resolve(relativeUri); + return new Link(absoluteUri); + } + + private URI createRelativeUri(String methodName, Object[] parameters) { + return userUriBuilder().path(UserNewResource.class, methodName).build(parameters); + } + + private UriBuilder userUriBuilder() { + return UriBuilder.fromResource(UserNewResource.class); + } } }