001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.model.Portlet;
018 import com.liferay.portal.kernel.theme.ThemeDisplay;
019 import com.liferay.portal.kernel.util.Http;
020 import com.liferay.portal.kernel.util.HttpUtil;
021 import com.liferay.portal.kernel.util.PortalUtil;
022 import com.liferay.portal.kernel.util.WebKeys;
023
024 import java.util.ArrayList;
025 import java.util.List;
026 import java.util.Set;
027
028 import javax.servlet.http.HttpServletRequest;
029
030
033 public class PortletResourceStaticURLGenerator {
034
035 public List<String> generate(
036 Portlet portlet, PortletResourceAccessor... portletResourceAccessors) {
037
038 List<String> urls = new ArrayList<>();
039
040 for (PortletResourceAccessor portletResourceAccessor :
041 portletResourceAccessors) {
042
043 String contextPath = null;
044
045 if (portletResourceAccessor.isPortalResource()) {
046 contextPath = PortalUtil.getPathContext();
047 }
048 else {
049 contextPath =
050 PortalUtil.getPathProxy() + portlet.getContextPath();
051 }
052
053 List<String> portletResources = portletResourceAccessor.get(
054 portlet);
055
056 for (String portletResource : portletResources) {
057 if (!HttpUtil.hasProtocol(portletResource)) {
058 Portlet rootPortlet = portlet.getRootPortlet();
059
060 portletResource = PortalUtil.getStaticResourceURL(
061 _request, contextPath + portletResource,
062 rootPortlet.getTimestamp());
063 }
064
065 if (!portletResource.contains(Http.PROTOCOL_DELIMITER)) {
066 String cdnBaseURL = _themeDisplay.getCDNBaseURL();
067
068 portletResource = cdnBaseURL.concat(portletResource);
069 }
070
071 if (!_visitedURLs.contains(portletResource)) {
072 urls.add(portletResource);
073
074 _visitedURLs.add(portletResource);
075 }
076 }
077 }
078
079 return urls;
080 }
081
082 public void setRequest(HttpServletRequest request) {
083 _request = request;
084 _themeDisplay = (ThemeDisplay)request.getAttribute(
085 WebKeys.THEME_DISPLAY);
086 }
087
088 public void setVisitedURLs(Set<String> visitedURLs) {
089 _visitedURLs = visitedURLs;
090 }
091
092 private HttpServletRequest _request;
093 private ThemeDisplay _themeDisplay;
094 private Set<String> _visitedURLs;
095
096 }