1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
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  /**
44   * <a href="StrutsPortlet.java.html"><b><i>View Source</i></b></a>
45   *
46   * @author Brian Wing Shun Chan
47   */
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             // Call processAction of com.liferay.portal.struts.PortletAction
178 
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         // Call serveResource of com.liferay.portal.struts.PortletAction
210 
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         // Call render of com.liferay.portal.struts.PortletAction
235 
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 }