001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
021 import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
022 import com.liferay.portal.kernel.portlet.LiferayPortletURL;
023 import com.liferay.portal.kernel.util.JavaConstants;
024 import com.liferay.portal.kernel.util.WebKeys;
025 import com.liferay.portal.model.Group;
026 import com.liferay.portal.model.Layout;
027 import com.liferay.portal.model.impl.VirtualLayout;
028 import com.liferay.portal.service.LayoutLocalServiceUtil;
029 import com.liferay.portal.theme.ThemeDisplay;
030 import com.liferay.portal.util.PortalUtil;
031
032 import javax.portlet.PortletRequest;
033 import javax.portlet.PortletResponse;
034 import javax.portlet.PortletURL;
035 import javax.portlet.WindowState;
036 import javax.portlet.WindowStateException;
037
038 import javax.servlet.http.HttpServletRequest;
039
040
044 public class RequestBackedPortletURLFactoryUtil {
045
046 public static RequestBackedPortletURLFactory create(
047 HttpServletRequest request) {
048
049 return new HttpServletRequestRequestBackedPortletURLFactory(request);
050 }
051
052 public static RequestBackedPortletURLFactory create(
053 PortletRequest portletRequest) {
054
055 PortletResponse portletResponse =
056 (PortletResponse)portletRequest.getAttribute(
057 JavaConstants.JAVAX_PORTLET_RESPONSE);
058
059 if (portletResponse == null) {
060 return create(PortalUtil.getHttpServletRequest(portletRequest));
061 }
062
063 return new LiferayPortletResponseRequestBackedPortletURLFactory(
064 PortalUtil.getLiferayPortletRequest(portletRequest),
065 PortalUtil.getLiferayPortletResponse(portletResponse));
066 }
067
068 private static Layout _getControlPanelLayout(long companyId, Group group) {
069 Layout layout = null;
070
071 try {
072 long plid = PortalUtil.getControlPanelPlid(companyId);
073
074 layout = LayoutLocalServiceUtil.getLayout(plid);
075 }
076 catch (PortalException pe) {
077 _log.error("Unable to get control panel layout", pe);
078
079 return null;
080 }
081
082 if (group.isControlPanel()) {
083 return layout;
084 }
085
086 return new VirtualLayout(layout, group);
087 }
088
089 private static PortletURL _populateControlPanelPortletURL(
090 LiferayPortletURL liferayPortletURL, long refererGroupId,
091 long refererPlid) {
092
093 if (refererGroupId > 0) {
094 liferayPortletURL.setRefererGroupId(refererGroupId);
095 }
096
097 if (refererPlid > 0) {
098 liferayPortletURL.setRefererPlid(refererPlid);
099 }
100
101 try {
102 liferayPortletURL.setWindowState(WindowState.MAXIMIZED);
103 }
104 catch (WindowStateException wse) {
105 }
106
107 return liferayPortletURL;
108 }
109
110 private static final Log _log = LogFactoryUtil.getLog(
111 RequestBackedPortletURLFactoryUtil.class);
112
113 private static class HttpServletRequestRequestBackedPortletURLFactory
114 implements RequestBackedPortletURLFactory {
115
116 @Override
117 public PortletURL createActionURL(String portletId) {
118 String actionPhase = PortletRequest.ACTION_PHASE;
119
120 return createPortletURL(portletId, actionPhase);
121 }
122
123 @Override
124 public PortletURL createControlPanelActionURL(
125 String portletId, Group group, long refererGroupId,
126 long refererPlid) {
127
128 return createControlPanelPortletURL(
129 portletId, group, refererGroupId, refererPlid,
130 PortletRequest.ACTION_PHASE);
131 }
132
133 @Override
134 public PortletURL createControlPanelPortletURL(
135 String portletId, Group group, long refererGroupId,
136 long refererPlid, String lifecycle) {
137
138 ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute(
139 WebKeys.THEME_DISPLAY);
140
141 if (group == null) {
142 group = themeDisplay.getScopeGroup();
143 }
144
145 LiferayPortletURL liferayPortletURL = PortletURLFactoryUtil.create(
146 _request, portletId,
147 _getControlPanelLayout(themeDisplay.getCompanyId(), group),
148 lifecycle);
149
150 return _populateControlPanelPortletURL(
151 liferayPortletURL, refererGroupId, refererPlid);
152 }
153
154 @Override
155 public PortletURL createControlPanelRenderURL(
156 String portletId, Group group, long refererGroupId,
157 long refererPlid) {
158
159 return createControlPanelPortletURL(
160 portletId, group, refererGroupId, refererPlid,
161 PortletRequest.RENDER_PHASE);
162 }
163
164 @Override
165 public PortletURL createControlPanelResourceURL(
166 String portletId, Group group, long refererGroupId,
167 long refererPlid) {
168
169 return createControlPanelPortletURL(
170 portletId, group, refererGroupId, refererPlid,
171 PortletRequest.RESOURCE_PHASE);
172 }
173
174 @Override
175 public PortletURL createPortletURL(String portletId, String lifecycle) {
176 ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute(
177 WebKeys.THEME_DISPLAY);
178
179 return PortletURLFactoryUtil.create(
180 _request, portletId, themeDisplay.getPlid(), lifecycle);
181 }
182
183 @Override
184 public PortletURL createRenderURL(String portletId) {
185 return createPortletURL(portletId, PortletRequest.RENDER_PHASE);
186 }
187
188 @Override
189 public PortletURL createResourceURL(String portletId) {
190 return createPortletURL(portletId, PortletRequest.RESOURCE_PHASE);
191 }
192
193 private HttpServletRequestRequestBackedPortletURLFactory(
194 HttpServletRequest request) {
195
196 _request = request;
197 }
198
199 private final HttpServletRequest _request;
200
201 }
202
203 private static class LiferayPortletResponseRequestBackedPortletURLFactory
204 implements RequestBackedPortletURLFactory {
205
206 @Override
207 public PortletURL createActionURL(String portletId) {
208 return _liferayPortletResponse.createActionURL(portletId);
209 }
210
211 @Override
212 public PortletURL createControlPanelActionURL(
213 String portletId, Group group, long refererGroupId,
214 long refererPlid) {
215
216 return createControlPanelPortletURL(
217 portletId, group, refererGroupId, refererPlid,
218 PortletRequest.ACTION_PHASE);
219 }
220
221 @Override
222 public PortletURL createControlPanelPortletURL(
223 String portletId, Group group, long refererGroupId,
224 long refererPlid, String lifecycle) {
225
226 ThemeDisplay themeDisplay =
227 (ThemeDisplay)_liferayPortletRequest.getAttribute(
228 WebKeys.THEME_DISPLAY);
229
230 if (group == null) {
231 group = themeDisplay.getScopeGroup();
232 }
233
234 LiferayPortletURL liferayPortletURL = PortletURLFactoryUtil.create(
235 _liferayPortletRequest, portletId,
236 _getControlPanelLayout(themeDisplay.getCompanyId(), group),
237 lifecycle);
238
239 return _populateControlPanelPortletURL(
240 liferayPortletURL, refererGroupId, refererPlid);
241 }
242
243 @Override
244 public PortletURL createControlPanelRenderURL(
245 String portletId, Group group, long refererGroupId,
246 long refererPlid) {
247
248 return createControlPanelPortletURL(
249 portletId, group, refererGroupId, refererPlid,
250 PortletRequest.RENDER_PHASE);
251 }
252
253 @Override
254 public PortletURL createControlPanelResourceURL(
255 String portletId, Group group, long refererGroupId,
256 long refererPlid) {
257
258 return createControlPanelPortletURL(
259 portletId, group, refererGroupId, refererPlid,
260 PortletRequest.RESOURCE_PHASE);
261 }
262
263 @Override
264 public PortletURL createPortletURL(String portletId, String lifecycle) {
265 return _liferayPortletResponse.createLiferayPortletURL(
266 portletId, lifecycle);
267 }
268
269 @Override
270 public PortletURL createRenderURL(String portletId) {
271 return _liferayPortletResponse.createRenderURL(portletId);
272 }
273
274 @Override
275 public PortletURL createResourceURL(String portletId) {
276 return _liferayPortletResponse.createResourceURL(portletId);
277 }
278
279 private LiferayPortletResponseRequestBackedPortletURLFactory(
280 LiferayPortletRequest liferayPortletRequest,
281 LiferayPortletResponse liferayPortletResponse) {
282
283 _liferayPortletRequest = liferayPortletRequest;
284 _liferayPortletResponse = liferayPortletResponse;
285 }
286
287 private final LiferayPortletRequest _liferayPortletRequest;
288 private final LiferayPortletResponse _liferayPortletResponse;
289
290 }
291
292 }