001
014
015 package com.liferay.portal.servlet;
016
017 import com.liferay.portal.kernel.util.HtmlUtil;
018 import com.liferay.portal.kernel.util.HttpUtil;
019 import com.liferay.portal.kernel.util.ListUtil;
020 import com.liferay.portal.kernel.util.PredicateFilter;
021 import com.liferay.portal.kernel.util.StringBundler;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.model.Portlet;
024 import com.liferay.portal.util.comparator.PortletNameComparator;
025 import com.liferay.portlet.PortletResourceAccessor;
026
027 import java.util.ArrayList;
028 import java.util.List;
029 import java.util.Set;
030
031
034 public class ComboServletStaticURLGenerator {
035
036 public List<String> generate(List<Portlet> portlets) {
037 List<String> urls = new ArrayList<>();
038
039 StringBundler sb = new StringBundler();
040
041 long timestamp = _timestamp;
042
043 portlets = ListUtil.sort(portlets, _portletNameComparator);
044
045 for (Portlet portlet : portlets) {
046 for (PortletResourceAccessor portletResourceAccessor :
047 _portletResourceAccessors) {
048
049 List<String> portletResources = portletResourceAccessor.get(
050 portlet);
051
052 for (String portletResource : portletResources) {
053 if (!_predicateFilter.filter(portletResource)) {
054 continue;
055 }
056
057 String url = portletResource;
058
059 if (!HttpUtil.hasProtocol(portletResource)) {
060 url = portlet.getContextPath() + portletResource;
061 }
062
063 if (_visitedURLs.contains(url)) {
064 continue;
065 }
066
067 if (HttpUtil.hasProtocol(portletResource)) {
068 urls.add(portletResource);
069 }
070 else {
071 sb.append(StringPool.AMPERSAND);
072
073 if (!portletResourceAccessor.isPortalResource()) {
074 sb.append(portlet.getPortletId());
075 sb.append(StringPool.COLON);
076 }
077
078 sb.append(HtmlUtil.escapeURL(portletResource));
079
080 timestamp = Math.max(timestamp, portlet.getTimestamp());
081 }
082
083 _visitedURLs.add(url);
084 }
085 }
086 }
087
088 if (sb.length() > 0) {
089 String url = _urlPrefix + sb.toString();
090
091 url = HttpUtil.addParameter(url, "t", timestamp);
092
093 urls.add(url);
094 }
095
096 return urls;
097 }
098
099 public void setPortletResourceAccessors(
100 PortletResourceAccessor... portletResourceAccessors) {
101
102 _portletResourceAccessors = portletResourceAccessors;
103 }
104
105 public void setPredicateFilter(PredicateFilter<String> predicateFilter) {
106 _predicateFilter = predicateFilter;
107 }
108
109 public void setTimestamp(long timestamp) {
110 _timestamp = timestamp;
111 }
112
113 public void setURLPrefix(String urlPrefix) {
114 _urlPrefix = urlPrefix;
115 }
116
117 public void setVisitedURLs(Set<String> visitedURLs) {
118 _visitedURLs = visitedURLs;
119 }
120
121 private static final PortletNameComparator _portletNameComparator =
122 new PortletNameComparator();
123
124 private PortletResourceAccessor[] _portletResourceAccessors;
125 private PredicateFilter<String> _predicateFilter = PredicateFilter.ALL;
126 private long _timestamp;
127 private String _urlPrefix;
128 private Set<String> _visitedURLs;
129
130 }