1
14
15 package com.liferay.portal.kernel.portlet;
16
17 import com.liferay.portal.kernel.servlet.SessionErrors;
18 import com.liferay.portal.kernel.servlet.SessionMessages;
19 import com.liferay.portal.kernel.util.GetterUtil;
20 import com.liferay.portal.kernel.util.MethodCache;
21 import com.liferay.portal.kernel.util.MethodKey;
22 import com.liferay.portal.kernel.util.ParamUtil;
23 import com.liferay.portal.kernel.util.Validator;
24 import com.liferay.portal.kernel.util.WebKeys;
25
26 import java.io.IOException;
27
28 import java.lang.reflect.InvocationTargetException;
29 import java.lang.reflect.Method;
30
31 import java.util.HashMap;
32 import java.util.Map;
33
34 import javax.portlet.ActionRequest;
35 import javax.portlet.ActionResponse;
36 import javax.portlet.GenericPortlet;
37 import javax.portlet.PortletException;
38 import javax.portlet.PortletMode;
39 import javax.portlet.PortletRequest;
40 import javax.portlet.RenderRequest;
41 import javax.portlet.RenderResponse;
42 import javax.portlet.ResourceRequest;
43 import javax.portlet.ResourceResponse;
44 import javax.portlet.WindowState;
45
46
51 public class LiferayPortlet extends GenericPortlet {
52
53 public void init() throws PortletException {
54 super.init();
55
56 addProcessActionSuccessMessage = GetterUtil.getBoolean(
57 getInitParameter("add-process-action-success-action"), true);
58 }
59
60 public void processAction(
61 ActionRequest actionRequest, ActionResponse actionResponse)
62 throws IOException, PortletException {
63
64 if (!isProcessActionRequest(actionRequest)) {
65 return;
66 }
67
68 if (!callActionMethod(actionRequest, actionResponse)) {
69 return;
70 }
71
72 if (SessionErrors.isEmpty(actionRequest)) {
73 addSuccessMessage(actionRequest, actionResponse);
74 }
75 else {
76 return;
77 }
78
79 String redirect = ParamUtil.getString(actionRequest, "redirect");
80
81 if (Validator.isNotNull(redirect)) {
82 actionResponse.sendRedirect(redirect);
83 }
84 }
85
86 public void serveResource(
87 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
88 throws IOException, PortletException {
89
90 if (!isProcessResourceRequest(resourceRequest)) {
91 return;
92 }
93
94 super.serveResource(resourceRequest, resourceResponse);
95 }
96
97 protected void addSuccessMessage(
98 ActionRequest actionRequest, ActionResponse actionResponse) {
99
100 if (!addProcessActionSuccessMessage) {
101 return;
102 }
103
104 String successMessage = ParamUtil.getString(
105 actionRequest, "successMessage");
106
107 SessionMessages.add(actionRequest, "request_processed", successMessage);
108 }
109
110 protected boolean callActionMethod(
111 ActionRequest actionRequest, ActionResponse actionResponse)
112 throws PortletException {
113
114 String actionName = ParamUtil.getString(
115 actionRequest, ActionRequest.ACTION_NAME);
116
117 if (Validator.isNull(actionName)) {
118 return false;
119 }
120
121 try {
122 Method method = MethodCache.get(
123 _classesMap, _methodsMap, getClass().getName(), actionName,
124 new Class[] {ActionRequest.class, ActionResponse.class});
125
126 method.invoke(this, actionRequest, actionResponse);
127
128 return true;
129 }
130 catch (NoSuchMethodException nsme) {
131 try {
132 super.processAction(actionRequest, actionResponse);
133
134 return true;
135 }
136 catch (Exception e) {
137 throw new PortletException(nsme);
138 }
139 }
140 catch (InvocationTargetException ite) {
141 Throwable cause = ite.getCause();
142
143 if (cause != null) {
144 throw new PortletException(cause);
145 }
146 else {
147 throw new PortletException(ite);
148 }
149 }
150 catch (Exception e) {
151 throw new PortletException(e);
152 }
153 }
154
155 protected void doDispatch(
156 RenderRequest renderRequest, RenderResponse renderResponse)
157 throws IOException, PortletException {
158
159 if (!isProcessRenderRequest(renderRequest)) {
160 renderRequest.setAttribute(WebKeys.PORTLET_DECORATE, Boolean.FALSE);
161
162 return;
163 }
164
165 WindowState windowState = renderRequest.getWindowState();
166
167 if (windowState.equals(WindowState.MINIMIZED)) {
168 return;
169 }
170
171 PortletMode portletMode = renderRequest.getPortletMode();
172
173 if (portletMode.equals(PortletMode.VIEW)) {
174 doView(renderRequest, renderResponse);
175 }
176 else if (portletMode.equals(LiferayPortletMode.ABOUT)) {
177 doAbout(renderRequest, renderResponse);
178 }
179 else if (portletMode.equals(LiferayPortletMode.CONFIG)) {
180 doConfig(renderRequest, renderResponse);
181 }
182 else if (portletMode.equals(PortletMode.EDIT)) {
183 doEdit(renderRequest, renderResponse);
184 }
185 else if (portletMode.equals(LiferayPortletMode.EDIT_DEFAULTS)) {
186 doEditDefaults(renderRequest, renderResponse);
187 }
188 else if (portletMode.equals(LiferayPortletMode.EDIT_GUEST)) {
189 doEditGuest(renderRequest, renderResponse);
190 }
191 else if (portletMode.equals(PortletMode.HELP)) {
192 doHelp(renderRequest, renderResponse);
193 }
194 else if (portletMode.equals(LiferayPortletMode.PREVIEW)) {
195 doPreview(renderRequest, renderResponse);
196 }
197 else if (portletMode.equals(LiferayPortletMode.PRINT)) {
198 doPrint(renderRequest, renderResponse);
199 }
200 else {
201 throw new PortletException(portletMode.toString());
202 }
203 }
204
205 @SuppressWarnings("unused")
206 protected void doAbout(
207 RenderRequest renderRequest, RenderResponse renderResponse)
208 throws IOException, PortletException {
209
210 throw new PortletException("doAbout method not implemented");
211 }
212
213 @SuppressWarnings("unused")
214 protected void doConfig(
215 RenderRequest renderRequest, RenderResponse renderResponse)
216 throws IOException, PortletException {
217
218 throw new PortletException("doConfig method not implemented");
219 }
220
221 @SuppressWarnings("unused")
222 protected void doEditDefaults(
223 RenderRequest renderRequest, RenderResponse renderResponse)
224 throws IOException, PortletException {
225
226 throw new PortletException("doEditDefaults method not implemented");
227 }
228
229 @SuppressWarnings("unused")
230 protected void doEditGuest(
231 RenderRequest renderRequest, RenderResponse renderResponse)
232 throws IOException, PortletException {
233
234 throw new PortletException("doEditGuest method not implemented");
235 }
236
237 @SuppressWarnings("unused")
238 protected void doPreview(
239 RenderRequest renderRequest, RenderResponse renderResponse)
240 throws IOException, PortletException {
241
242 throw new PortletException("doPreview method not implemented");
243 }
244
245 @SuppressWarnings("unused")
246 protected void doPrint(
247 RenderRequest renderRequest, RenderResponse renderResponse)
248 throws IOException, PortletException {
249
250 throw new PortletException("doPrint method not implemented");
251 }
252
253 protected boolean isProcessActionRequest(ActionRequest actionRequest) {
254 return isProcessPortletRequest(actionRequest);
255 }
256
257 protected boolean isProcessPortletRequest(PortletRequest portletRequest) {
258 return _PROCESS_PORTLET_REQUEST;
259 }
260
261 protected boolean isProcessRenderRequest(RenderRequest renderRequest) {
262 return isProcessPortletRequest(renderRequest);
263 }
264
265 protected boolean isProcessResourceRequest(
266 ResourceRequest resourceRequest) {
267
268 return isProcessPortletRequest(resourceRequest);
269 }
270
271 protected boolean addProcessActionSuccessMessage;
272
273 private static final boolean _PROCESS_PORTLET_REQUEST = true;
274
275 private Map<String, Class<?>> _classesMap = new HashMap<String, Class<?>>();
276 private Map<MethodKey, Method> _methodsMap =
277 new HashMap<MethodKey, Method>();
278
279 }