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(new PortletRenderWeightComparator());
62
63 _parallelRenderEnable = PropsValues.LAYOUT_PARALLEL_RENDER_ENABLE;
64
65 if (_parallelRenderEnable) {
66 if (PropsValues.SESSION_DISABLED) {
67 if (_log.isWarnEnabled()) {
68 _log.warn(
69 "Parallel rendering should be disabled if sessions " +
70 "are disabled");
71 }
72 }
73 }
74
75 if (_parallelRenderEnable) {
76 Boolean portletParallelRender =
77 (Boolean)req.getAttribute(WebKeys.PORTLET_PARALLEL_RENDER);
78
79 if ((portletParallelRender != null) &&
80 (portletParallelRender.booleanValue() == false)) {
81
82 _parallelRenderEnable = false;
83 }
84 }
85 else {
86 req.removeAttribute(WebKeys.PORTLET_PARALLEL_RENDER);
87 }
88 }
89
90 public void processContent(StringMaker sm, Map attributes)
91 throws Exception {
92
93 LayoutTypePortlet layoutTypePortlet =
94 _themeDisplay.getLayoutTypePortlet();
95
96 String columnId = (String)attributes.get("id");
97
98 List portlets = layoutTypePortlet.getAllPortlets(columnId);
99
100 String columnCssClass = "lfr-portlet-column";
101
102 if (portlets.size() == 0) {
103 columnCssClass += " empty";
104 }
105
106 sm.append("<div class=\"");
107 sm.append(columnCssClass);
108 sm.append("\" id=\"layout-column_");
109 sm.append(columnId);
110 sm.append("\">");
111
112 for (int i = 0; i < portlets.size(); i++) {
113 Portlet portlet = (Portlet)portlets.get(i);
114
115 String queryString = null;
116 Integer columnPos = new Integer(i);
117 Integer columnCount = new Integer(portlets.size());
118 String path = null;
119
120 if (_parallelRenderEnable) {
121 path = "/html/portal/load_render_portlet.jsp";
122
123 if (portlet.getRenderWeight() >= 1) {
124 _portletsMap.put(
125 portlet,
126 new Object[] {
127 queryString, columnId, columnPos, columnCount
128 });
129 }
130 }
131
132 RuntimePortletUtil.processPortlet(
133 sm, _ctx, _req, _res, portlet, queryString, columnId, columnPos,
134 columnCount, path);
135 }
136
137 sm.append("</div>");
138 }
139
140 public Map getPortletsMap() {
141 return _portletsMap;
142 }
143
144 private static Log _log = LogFactory.getLog(PortletColumnLogic.class);
145
146 private ServletContext _ctx;
147 private HttpServletRequest _req;
148 private HttpServletResponse _res;
149 private ThemeDisplay _themeDisplay;
150 private Map _portletsMap;
151 private boolean _parallelRenderEnable;
152
153 }