1
22
23 package com.liferay.portlet.layoutconfiguration.util.velocity;
24
25 import com.liferay.portal.kernel.util.StringMaker;
26 import com.liferay.portal.model.LayoutTypePortlet;
27 import com.liferay.portal.model.Portlet;
28 import com.liferay.portal.theme.ThemeDisplay;
29 import com.liferay.portal.util.PropsValues;
30 import com.liferay.portal.util.WebKeys;
31 import com.liferay.portal.util.comparator.PortletRenderWeightComparator;
32 import com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil;
33
34 import java.util.List;
35 import java.util.Map;
36 import java.util.TreeMap;
37
38 import javax.servlet.ServletContext;
39 import javax.servlet.http.HttpServletRequest;
40 import javax.servlet.http.HttpServletResponse;
41
42 import org.apache.commons.logging.Log;
43 import org.apache.commons.logging.LogFactory;
44
45
52 public class PortletColumnLogic extends RuntimeLogic {
53
54 public PortletColumnLogic(
55 ServletContext ctx, HttpServletRequest req, HttpServletResponse res) {
56
57 _ctx = ctx;
58 _req = req;
59 _res = res;
60 _themeDisplay = (ThemeDisplay)_req.getAttribute(WebKeys.THEME_DISPLAY);
61 _portletsMap = new TreeMap<Portlet, Object[]>(
62 new PortletRenderWeightComparator());
63
64 _parallelRenderEnable = PropsValues.LAYOUT_PARALLEL_RENDER_ENABLE;
65
66 if (_parallelRenderEnable) {
67 if (PropsValues.SESSION_DISABLED) {
68 if (_log.isWarnEnabled()) {
69 _log.warn(
70 "Parallel rendering should be disabled if sessions " +
71 "are disabled");
72 }
73 }
74 }
75
76 if (_parallelRenderEnable) {
77 Boolean portletParallelRender =
78 (Boolean)req.getAttribute(WebKeys.PORTLET_PARALLEL_RENDER);
79
80 if ((portletParallelRender != null) &&
81 (portletParallelRender.booleanValue() == false)) {
82
83 _parallelRenderEnable = false;
84 }
85 }
86 else {
87 req.removeAttribute(WebKeys.PORTLET_PARALLEL_RENDER);
88 }
89 }
90
91 public void processContent(StringMaker sm, Map<String, String> attributes)
92 throws Exception {
93
94 LayoutTypePortlet layoutTypePortlet =
95 _themeDisplay.getLayoutTypePortlet();
96
97 String columnId = attributes.get("id");
98
99 List<Portlet> portlets = layoutTypePortlet.getAllPortlets(columnId);
100
101 String columnCssClass = "lfr-portlet-column";
102
103 if (portlets.size() == 0) {
104 columnCssClass += " empty";
105 }
106
107 sm.append("<div class=\"");
108 sm.append(columnCssClass);
109 sm.append("\" id=\"layout-column_");
110 sm.append(columnId);
111 sm.append("\">");
112
113 for (int i = 0; i < portlets.size(); i++) {
114 Portlet portlet = portlets.get(i);
115
116 String queryString = null;
117 Integer columnPos = new Integer(i);
118 Integer columnCount = new Integer(portlets.size());
119 String path = null;
120
121 if (_parallelRenderEnable) {
122 path = "/html/portal/load_render_portlet.jsp";
123
124 if (portlet.getRenderWeight() >= 1) {
125 _portletsMap.put(
126 portlet,
127 new Object[] {
128 queryString, columnId, columnPos, columnCount
129 });
130 }
131 }
132
133 RuntimePortletUtil.processPortlet(
134 sm, _ctx, _req, _res, portlet, queryString, columnId, columnPos,
135 columnCount, path);
136 }
137
138 sm.append("</div>");
139 }
140
141 public Map<Portlet, Object[]> getPortletsMap() {
142 return _portletsMap;
143 }
144
145 private static Log _log = LogFactory.getLog(PortletColumnLogic.class);
146
147 private ServletContext _ctx;
148 private HttpServletRequest _req;
149 private HttpServletResponse _res;
150 private ThemeDisplay _themeDisplay;
151 private Map<Portlet, Object[]> _portletsMap;
152 private boolean _parallelRenderEnable;
153
154 }