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