1
22
23 package com.liferay.portlet;
24
25 import com.liferay.portal.kernel.portlet.LiferayPortlet;
26 import com.liferay.portal.kernel.util.GetterUtil;
27 import com.liferay.portal.kernel.util.Validator;
28 import com.liferay.portal.security.permission.PermissionChecker;
29 import com.liferay.portal.security.permission.PermissionThreadLocal;
30 import com.liferay.portal.struts.PortletRequestProcessor;
31 import com.liferay.portal.struts.StrutsUtil;
32 import com.liferay.portal.util.PortalUtil;
33 import com.liferay.portal.util.WebKeys;
34
35 import java.io.IOException;
36
37 import java.util.Map;
38
39 import javax.portlet.ActionRequest;
40 import javax.portlet.ActionResponse;
41 import javax.portlet.PortletConfig;
42 import javax.portlet.PortletException;
43 import javax.portlet.PortletRequest;
44 import javax.portlet.RenderRequest;
45 import javax.portlet.RenderResponse;
46 import javax.portlet.ResourceRequest;
47 import javax.portlet.ResourceResponse;
48
49 import javax.servlet.ServletException;
50
51
57 public class StrutsPortlet extends LiferayPortlet {
58
59 public void doAbout(
60 RenderRequest renderRequest, RenderResponse renderResponse)
61 throws IOException, PortletException {
62
63 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, aboutAction);
64
65 include(renderRequest, renderResponse);
66 }
67
68 public void doConfig(
69 RenderRequest renderRequest, RenderResponse renderResponse)
70 throws IOException, PortletException {
71
72 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, configAction);
73
74 include(renderRequest, renderResponse);
75 }
76
77 public void doEdit(
78 RenderRequest renderRequest, RenderResponse renderResponse)
79 throws IOException, PortletException {
80
81 if (renderRequest.getPreferences() == null) {
82 super.doEdit(renderRequest, renderResponse);
83 }
84 else {
85 renderRequest.setAttribute(
86 WebKeys.PORTLET_STRUTS_ACTION, editAction);
87
88 include(renderRequest, renderResponse);
89 }
90 }
91
92 public void doEditDefaults(
93 RenderRequest renderRequest, RenderResponse renderResponse)
94 throws IOException, PortletException {
95
96 if (renderRequest.getPreferences() == null) {
97 super.doEdit(renderRequest, renderResponse);
98 }
99 else {
100 renderRequest.setAttribute(
101 WebKeys.PORTLET_STRUTS_ACTION, editDefaultsAction);
102
103 include(renderRequest, renderResponse);
104 }
105 }
106
107 public void doEditGuest(
108 RenderRequest renderRequest, RenderResponse renderResponse)
109 throws IOException, PortletException {
110
111 if (renderRequest.getPreferences() == null) {
112 super.doEdit(renderRequest, renderResponse);
113 }
114 else {
115 renderRequest.setAttribute(
116 WebKeys.PORTLET_STRUTS_ACTION, editGuestAction);
117
118 include(renderRequest, renderResponse);
119 }
120 }
121
122 public void doHelp(
123 RenderRequest renderRequest, RenderResponse renderResponse)
124 throws IOException, PortletException {
125
126 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, helpAction);
127
128 include(renderRequest, renderResponse);
129 }
130
131 public void doPreview(
132 RenderRequest renderRequest, RenderResponse renderResponse)
133 throws IOException, PortletException {
134
135 renderRequest.setAttribute(
136 WebKeys.PORTLET_STRUTS_ACTION, previewAction);
137
138 include(renderRequest, renderResponse);
139 }
140
141 public void doPrint(
142 RenderRequest renderRequest, RenderResponse renderResponse)
143 throws IOException, PortletException {
144
145 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, printAction);
146
147 include(renderRequest, renderResponse);
148 }
149
150 public void doView(
151 RenderRequest renderRequest, RenderResponse renderResponse)
152 throws IOException, PortletException {
153
154 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, viewAction);
155
156 include(renderRequest, renderResponse);
157 }
158
159 public void init(PortletConfig portletConfig) throws PortletException {
160 super.init(portletConfig);
161
162 aboutAction = getInitParameter("about-action");
163 configAction = getInitParameter("config-action");
164 editAction = getInitParameter("edit-action");
165 editDefaultsAction = getInitParameter("edit-defaults-action");
166 editGuestAction = getInitParameter("edit-guest-action");
167 helpAction = getInitParameter("help-action");
168 previewAction = getInitParameter("preview-action");
169 printAction = getInitParameter("print-action");
170 viewAction = getInitParameter("view-action");
171
172 copyRequestParameters = GetterUtil.getBoolean(
173 getInitParameter("copy-request-parameters"), true);
174
175 _portletConfig = (PortletConfigImpl)portletConfig;
176 }
177
178 public void processAction(
179 ActionRequest actionRequest, ActionResponse actionResponse)
180 throws IOException, PortletException {
181
182 String path = actionRequest.getParameter("struts_action");
183
184 if (Validator.isNotNull(path)) {
185
186
188 PermissionChecker permissionChecker =
189 PermissionThreadLocal.getPermissionChecker();
190
191 try {
192 permissionChecker.setValues(actionRequest);
193
194 PortletRequestProcessor processor =
195 _getPortletRequestProcessor(actionRequest);
196
197 processor.process(actionRequest, actionResponse, path);
198 }
199 catch (ServletException se) {
200 throw new PortletException(se);
201 }
202 finally {
203 permissionChecker.resetValues();
204 }
205 }
206
207 if (copyRequestParameters) {
208 PortalUtil.copyRequestParameters(actionRequest, actionResponse);
209 }
210 }
211
212 public void serveResource(
213 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
214 throws IOException, PortletException {
215
216
218 PermissionChecker permissionChecker =
219 PermissionThreadLocal.getPermissionChecker();
220
221 try {
222 permissionChecker.setValues(resourceRequest);
223
224 PortletRequestProcessor processor =
225 _getPortletRequestProcessor(resourceRequest);
226
227 processor.process(resourceRequest, resourceResponse);
228 }
229 catch (IOException ioe) {
230 throw ioe;
231 }
232 catch (ServletException se) {
233 throw new PortletException(se);
234 }
235 finally {
236 permissionChecker.resetValues();
237 }
238 }
239
240 protected void include(
241 RenderRequest renderRequest, RenderResponse renderResponse)
242 throws IOException, PortletException {
243
244
246 Map<String, Object> strutsAttributes = null;
247
248 if (_portletConfig.isWARFile()) {
249 strutsAttributes = StrutsUtil.removeStrutsAttributes(
250 getPortletContext(), renderRequest);
251 }
252
253 PermissionChecker permissionChecker =
254 PermissionThreadLocal.getPermissionChecker();
255
256 try {
257 permissionChecker.setValues(renderRequest);
258
259 PortletRequestProcessor processor =
260 _getPortletRequestProcessor(renderRequest);
261
262 processor.process(renderRequest, renderResponse);
263 }
264 catch (IOException ioe) {
265 throw ioe;
266 }
267 catch (ServletException se) {
268 throw new PortletException(se);
269 }
270 finally {
271 permissionChecker.resetValues();
272
273 if (_portletConfig.isWARFile()) {
274 StrutsUtil.setStrutsAttributes(renderRequest, strutsAttributes);
275 }
276 }
277
278 if (copyRequestParameters) {
279 PortalUtil.clearRequestParameters(renderRequest);
280 }
281 }
282
283 private PortletRequestProcessor _getPortletRequestProcessor(
284 PortletRequest portletRequest) {
285
286 return (PortletRequestProcessor)getPortletContext().getAttribute(
287 WebKeys.PORTLET_STRUTS_PROCESSOR);
288 }
289
290 protected String aboutAction;
291 protected String configAction;
292 protected String editAction;
293 protected String editDefaultsAction;
294 protected String editGuestAction;
295 protected String helpAction;
296 protected String previewAction;
297 protected String printAction;
298 protected String viewAction;
299 protected boolean copyRequestParameters;
300
301 private PortletConfigImpl _portletConfig;
302
303 }