/** * */ package com.design.pattern.builder; import java.net.URI; import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; /** * This class helps to call the provided web address with common headers. <br /> * Extra headers can be added with proper request model while calling the * endpoint * * @author s0j0180 * */ public class WebClient { private Map<String, String> headers; private URI endpoint; private Boolean isAuthRequired; private WebClient(WebClientBuilder builder) { this.headers = builder.headers; this.endpoint = builder.endpoint; this.isAuthRequired = builder.isAuthRequired; } public Map<String, String> getHeaders() { return headers; } public URI getEndpoint() { return endpoint; } public Boolean getIsAuthRequired() { return isAuthRequired; } public static class WebClientBuilder { private Map<String, String> headers = new HashMap<>(); private URI endpoint; private Boolean isAuthRequired; public static WebClientBuilder builder() { return new WebClientBuilder(); } public WebClientBuilder withHeaders(Map<String, String> headers) { if (headers != null) { this.headers.putAll(headers); } return this; } public WebClientBuilder withEndPoint(URI endpoint) { if (endpoint != null) { this.endpoint = endpoint; } return this; } public WebClientBuilder withIsAuthRequired(Boolean isAuthRequired) { this.isAuthRequired = isAuthRequired; return this; } public WebClient build() { return new WebClient(this); } } public String call(String request) { // Call external service and return response return new StringBuilder().append("Successfully called UIR: ").append(this.endpoint).append(", with Request: ").append(request).toString(); } //Test builder public static void main(String[] args) throws URISyntaxException { WebClient client = WebClientBuilder.builder().withEndPoint(new URI("http://localhost:8080/demo")).withHeaders(null).withIsAuthRequired(true).build(); System.out.println(client.call("my Request")); } }