001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.portlet.LiferayPortlet;
018 import com.liferay.portal.kernel.util.GetterUtil;
019 import com.liferay.portal.kernel.util.Validator;
020 import com.liferay.portal.struts.PortletRequestProcessor;
021 import com.liferay.portal.struts.StrutsUtil;
022 import com.liferay.portal.util.PortalUtil;
023 import com.liferay.portal.util.WebKeys;
024
025 import java.io.IOException;
026
027 import java.util.Map;
028
029 import javax.portlet.ActionRequest;
030 import javax.portlet.ActionResponse;
031 import javax.portlet.PortletConfig;
032 import javax.portlet.PortletException;
033 import javax.portlet.PortletRequest;
034 import javax.portlet.RenderRequest;
035 import javax.portlet.RenderResponse;
036 import javax.portlet.ResourceRequest;
037 import javax.portlet.ResourceResponse;
038
039 import javax.servlet.ServletException;
040
041
044 public class StrutsPortlet extends LiferayPortlet {
045
046 @Override
047 public void doAbout(
048 RenderRequest renderRequest, RenderResponse renderResponse)
049 throws IOException, PortletException {
050
051 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, aboutAction);
052
053 include(renderRequest, renderResponse);
054 }
055
056 @Override
057 public void doConfig(
058 RenderRequest renderRequest, RenderResponse renderResponse)
059 throws IOException, PortletException {
060
061 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, configAction);
062
063 include(renderRequest, renderResponse);
064 }
065
066 @Override
067 public void doEdit(
068 RenderRequest renderRequest, RenderResponse renderResponse)
069 throws IOException, PortletException {
070
071 if (renderRequest.getPreferences() == null) {
072 super.doEdit(renderRequest, renderResponse);
073 }
074 else {
075 renderRequest.setAttribute(
076 WebKeys.PORTLET_STRUTS_ACTION, editAction);
077
078 include(renderRequest, renderResponse);
079 }
080 }
081
082 @Override
083 public void doEditDefaults(
084 RenderRequest renderRequest, RenderResponse renderResponse)
085 throws IOException, PortletException {
086
087 if (renderRequest.getPreferences() == null) {
088 super.doEdit(renderRequest, renderResponse);
089 }
090 else {
091 renderRequest.setAttribute(
092 WebKeys.PORTLET_STRUTS_ACTION, editDefaultsAction);
093
094 include(renderRequest, renderResponse);
095 }
096 }
097
098 @Override
099 public void doEditGuest(
100 RenderRequest renderRequest, RenderResponse renderResponse)
101 throws IOException, PortletException {
102
103 if (renderRequest.getPreferences() == null) {
104 super.doEdit(renderRequest, renderResponse);
105 }
106 else {
107 renderRequest.setAttribute(
108 WebKeys.PORTLET_STRUTS_ACTION, editGuestAction);
109
110 include(renderRequest, renderResponse);
111 }
112 }
113
114 @Override
115 public void doHelp(
116 RenderRequest renderRequest, RenderResponse renderResponse)
117 throws IOException, PortletException {
118
119 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, helpAction);
120
121 include(renderRequest, renderResponse);
122 }
123
124 @Override
125 public void doPreview(
126 RenderRequest renderRequest, RenderResponse renderResponse)
127 throws IOException, PortletException {
128
129 renderRequest.setAttribute(
130 WebKeys.PORTLET_STRUTS_ACTION, previewAction);
131
132 include(renderRequest, renderResponse);
133 }
134
135 @Override
136 public void doPrint(
137 RenderRequest renderRequest, RenderResponse renderResponse)
138 throws IOException, PortletException {
139
140 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, printAction);
141
142 include(renderRequest, renderResponse);
143 }
144
145 @Override
146 public void doView(
147 RenderRequest renderRequest, RenderResponse renderResponse)
148 throws IOException, PortletException {
149
150 renderRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, viewAction);
151
152 include(renderRequest, renderResponse);
153 }
154
155 @Override
156 public void init(PortletConfig portletConfig) throws PortletException {
157 super.init(portletConfig);
158
159 aboutAction = getInitParameter("about-action");
160 configAction = getInitParameter("config-action");
161 editAction = getInitParameter("edit-action");
162 editDefaultsAction = getInitParameter("edit-defaults-action");
163 editGuestAction = getInitParameter("edit-guest-action");
164 helpAction = getInitParameter("help-action");
165 previewAction = getInitParameter("preview-action");
166 printAction = getInitParameter("print-action");
167 viewAction = getInitParameter("view-action");
168
169 copyRequestParameters = GetterUtil.getBoolean(
170 getInitParameter("copy-request-parameters"), true);
171
172 _portletConfig = (PortletConfigImpl)portletConfig;
173 }
174
175 @Override
176 public void processAction(
177 ActionRequest actionRequest, ActionResponse actionResponse)
178 throws IOException, PortletException {
179
180 String path = actionRequest.getParameter("struts_action");
181
182 if (Validator.isNotNull(path)) {
183
184
185
186 try {
187 PortletRequestProcessor processor = _getPortletRequestProcessor(
188 actionRequest);
189
190 processor.process(actionRequest, actionResponse, path);
191 }
192 catch (ServletException se) {
193 throw new PortletException(se);
194 }
195 }
196
197 if (copyRequestParameters) {
198 PortalUtil.copyRequestParameters(actionRequest, actionResponse);
199 }
200 }
201
202 @Override
203 public void serveResource(
204 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
205 throws IOException, PortletException {
206
207 resourceRequest.setAttribute(WebKeys.PORTLET_STRUTS_ACTION, viewAction);
208
209
210
211 try {
212 PortletRequestProcessor processor = _getPortletRequestProcessor(
213 resourceRequest);
214
215 processor.process(resourceRequest, resourceResponse);
216 }
217 catch (ServletException se) {
218 throw new PortletException(se);
219 }
220 }
221
222 protected void include(
223 RenderRequest renderRequest, RenderResponse renderResponse)
224 throws IOException, PortletException {
225
226
227
228 Map<String, Object> strutsAttributes = null;
229
230 if (_portletConfig.isWARFile()) {
231 strutsAttributes = StrutsUtil.removeStrutsAttributes(
232 getPortletContext(), renderRequest);
233 }
234
235 try {
236 PortletRequestProcessor processor = _getPortletRequestProcessor(
237 renderRequest);
238
239 processor.process(renderRequest, renderResponse);
240 }
241 catch (ServletException se) {
242 throw new PortletException(se);
243 }
244 finally {
245 if (_portletConfig.isWARFile()) {
246 StrutsUtil.setStrutsAttributes(renderRequest, strutsAttributes);
247 }
248 }
249
250 if (copyRequestParameters) {
251 PortalUtil.clearRequestParameters(renderRequest);
252 }
253 }
254
255 protected String aboutAction;
256 protected String configAction;
257 protected boolean copyRequestParameters;
258 protected String editAction;
259 protected String editDefaultsAction;
260 protected String editGuestAction;
261 protected String helpAction;
262 protected String previewAction;
263 protected String printAction;
264 protected String viewAction;
265
266 private PortletRequestProcessor _getPortletRequestProcessor(
267 PortletRequest portletRequest) {
268
269 return (PortletRequestProcessor)getPortletContext().getAttribute(
270 WebKeys.PORTLET_STRUTS_PROCESSOR);
271 }
272
273 private PortletConfigImpl _portletConfig;
274
275 }