package de.codecentric.roca.core; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; public class LinkBuilder { private LinkBuilder(){ // nothing to do } private LinkBuilder(String baseUrl) { href.append(baseUrl); } private StringBuilder href = new StringBuilder(); private Map<RequestParameter,String> requestParams = new HashMap<>(); public static LinkBuilder linkTo(String baseUrl){ return new LinkBuilder(baseUrl); } public static LinkBuilder linkTo(PathFragment path){ return new LinkBuilder().path(path); } public LinkBuilder path(PathFragment path) { href.append("/").append(path.getName()); return this; } public LinkBuilder path(Object path) { href.append("/").append(Objects.toString(path)); return this; } public LinkBuilder requestParam(RequestParameter param, String value) { try { requestParams.put(param, URLEncoder.encode(value, "UTF-8")); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } return this; } public Link withRel(Relation relation){ boolean firstParam = true; for (Entry<RequestParameter,String> entry:requestParams.entrySet()){ if (firstParam){ href.append("?"); firstParam = false; } else { href.append("&"); } href.append(entry.getKey().getName()).append("=").append(entry.getValue()); } return new Link(href.toString(),relation.getName()); } }