package ddth.dasp.framework.url; import java.util.Map; import java.util.Map.Entry; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.springframework.web.context.ServletContextAware; import ddth.dasp.common.DaspGlobal; public class BundleUrlCreator implements IUrlCreator, ServletContextAware { private String urlSuffix; private ServletContext servletContext; private HttpServletResponse httpResponse; private HttpServletRequest httpRequest; /** * {@inheritDoc} */ @Override public BundleUrlCreator clone() { BundleUrlCreator urlCreator; try { urlCreator = (BundleUrlCreator) super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } urlCreator.servletContext = servletContext; urlCreator.urlSuffix = urlSuffix; urlCreator.httpResponse = httpResponse; urlCreator.httpRequest = httpRequest; return urlCreator; } public String getUrlSuffix() { return urlSuffix; } public void setUrlSuffix(String urlSuffix) { this.urlSuffix = urlSuffix; } public HttpServletResponse getHttpResponse() { return httpResponse; } public void setHttpResponse(HttpServletResponse httpResponse) { this.httpResponse = httpResponse; } public HttpServletRequest getHttpRequest() { return httpRequest; } public void setHttpRequest(HttpServletRequest httpRequest) { this.httpRequest = httpRequest; } /** * {@inheritDoc} */ @Override public String createUrl(String[] virtualParams, Map<String, Object> urlParams) { return createUrl(httpResponse, virtualParams, urlParams); } /** * {@inheritDoc} */ @Override public String createUrl(HttpServletResponse response, String[] virtualParams, Map<String, Object> urlParams) { return createUrl(null, response, virtualParams, urlParams, urlSuffix, false, false, DEFAULT_HTTP_PORT, DEFAULT_HTTPS_PORT); } /** * {@inheritDoc} */ @Override public String createUrl(String[] virtualParams, Map<String, Object> urlParams, String urlSuffix, boolean absoluteUrl, boolean forceHttps) { return createUrl(httpRequest, httpResponse, virtualParams, urlParams, urlSuffix, absoluteUrl, forceHttps, DEFAULT_HTTP_PORT, DEFAULT_HTTPS_PORT); } /** * {@inheritDoc} */ @Override public String createUrl(HttpServletRequest request, HttpServletResponse response, String[] virtualParams, Map<String, Object> urlParams, String urlSuffix, boolean absoluteUrl, boolean forceHttps, int httpPort, int httpsPort) { ServletContext servletContext = getServletContext(); StringBuilder url = new StringBuilder(servletContext.getContextPath()); for (String param : virtualParams) { url.append("/").append(param); } if (!StringUtils.isBlank(urlSuffix)) { url.append(urlSuffix); } if (urlParams != null && urlParams.size() > 0) { url.append("?"); for (Entry<String, ?> entry : urlParams.entrySet()) { url.append(entry.getKey()); url.append("="); url.append(entry.getValue()); url.append("&"); } url.setLength(url.length() - 1); } if (request != null && (absoluteUrl || forceHttps)) { String domain = request.getServerName(); int port = request.getServerPort(); String scheme = request.getScheme(); if (!forceHttps) { if (port != DEFAULT_HTTP_PORT && port != DEFAULT_HTTPS_PORT) { url.insert(0, ":" + port); } url.insert(0, scheme + "://" + domain); } else { if (httpsPort != DEFAULT_HTTPS_PORT) { url.insert(0, ":" + httpsPort); } url.insert(0, "https://" + domain); } } return response != null ? response.encodeURL(url.toString()) : url.toString(); } /** * {@inheritDoc} */ @Override public void setServletContext(ServletContext servletContext) { this.servletContext = servletContext; } protected ServletContext getServletContext() { return servletContext != null ? servletContext : DaspGlobal.getServletContext(); } }