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