1
22
23 package com.liferay.portal.kernel.portlet;
24
25 import com.liferay.portal.kernel.servlet.SessionErrors;
26 import com.liferay.portal.kernel.servlet.SessionMessages;
27 import com.liferay.portal.kernel.util.MethodCache;
28 import com.liferay.portal.kernel.util.MethodKey;
29 import com.liferay.portal.kernel.util.ParamUtil;
30 import com.liferay.portal.kernel.util.Validator;
31 import com.liferay.portal.kernel.util.WebKeys;
32
33 import java.io.IOException;
34
35 import java.lang.reflect.InvocationTargetException;
36 import java.lang.reflect.Method;
37
38 import java.util.HashMap;
39 import java.util.Map;
40
41 import javax.portlet.ActionRequest;
42 import javax.portlet.ActionResponse;
43 import javax.portlet.GenericPortlet;
44 import javax.portlet.PortletException;
45 import javax.portlet.PortletMode;
46 import javax.portlet.PortletRequest;
47 import javax.portlet.RenderRequest;
48 import javax.portlet.RenderResponse;
49 import javax.portlet.ResourceRequest;
50 import javax.portlet.ResourceResponse;
51 import javax.portlet.WindowState;
52
53
58 public class LiferayPortlet extends GenericPortlet {
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 SessionMessages.add(actionRequest, "request_processed");
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 boolean callActionMethod(
98 ActionRequest actionRequest, ActionResponse actionResponse)
99 throws PortletException {
100
101 String actionName = ParamUtil.getString(
102 actionRequest, ActionRequest.ACTION_NAME);
103
104 if (Validator.isNull(actionName)) {
105 return false;
106 }
107
108 try {
109 Method method = MethodCache.get(
110 _classesMap, _methodsMap, getClass().getName(), actionName,
111 new Class[] {ActionRequest.class, ActionResponse.class});
112
113 method.invoke(this, actionRequest, actionResponse);
114
115 return true;
116 }
117 catch (InvocationTargetException ite) {
118 Throwable cause = ite.getCause();
119
120 if (cause != null) {
121 throw new PortletException(cause);
122 }
123 else {
124 throw new PortletException(ite);
125 }
126 }
127 catch (Exception e) {
128 throw new PortletException(e);
129 }
130 }
131
132 protected void doDispatch(
133 RenderRequest renderRequest, RenderResponse renderResponse)
134 throws IOException, PortletException {
135
136 if (!isProcessRenderRequest(renderRequest)) {
137 renderRequest.setAttribute(WebKeys.PORTLET_DECORATE, Boolean.FALSE);
138
139 return;
140 }
141
142 WindowState state = renderRequest.getWindowState();
143
144 if (state.equals(WindowState.MINIMIZED)) {
145 return;
146 }
147
148 PortletMode mode = renderRequest.getPortletMode();
149
150 if (mode.equals(PortletMode.VIEW)) {
151 doView(renderRequest, renderResponse);
152 }
153 else if (mode.equals(LiferayPortletMode.ABOUT)) {
154 doAbout(renderRequest, renderResponse);
155 }
156 else if (mode.equals(LiferayPortletMode.CONFIG)) {
157 doConfig(renderRequest, renderResponse);
158 }
159 else if (mode.equals(PortletMode.EDIT)) {
160 doEdit(renderRequest, renderResponse);
161 }
162 else if (mode.equals(LiferayPortletMode.EDIT_DEFAULTS)) {
163 doEditDefaults(renderRequest, renderResponse);
164 }
165 else if (mode.equals(LiferayPortletMode.EDIT_GUEST)) {
166 doEditGuest(renderRequest, renderResponse);
167 }
168 else if (mode.equals(PortletMode.HELP)) {
169 doHelp(renderRequest, renderResponse);
170 }
171 else if (mode.equals(LiferayPortletMode.PREVIEW)) {
172 doPreview(renderRequest, renderResponse);
173 }
174 else if (mode.equals(LiferayPortletMode.PRINT)) {
175 doPrint(renderRequest, renderResponse);
176 }
177 else {
178 throw new PortletException(mode.toString());
179 }
180 }
181
182 @SuppressWarnings("unused")
183 protected void doAbout(
184 RenderRequest renderRequest, RenderResponse renderResponse)
185 throws IOException, PortletException {
186
187 throw new PortletException("doAbout method not implemented");
188 }
189
190 @SuppressWarnings("unused")
191 protected void doConfig(
192 RenderRequest renderRequest, RenderResponse renderResponse)
193 throws IOException, PortletException {
194
195 throw new PortletException("doConfig method not implemented");
196 }
197
198 @SuppressWarnings("unused")
199 protected void doEditDefaults(
200 RenderRequest renderRequest, RenderResponse renderResponse)
201 throws IOException, PortletException {
202
203 throw new PortletException("doEditDefaults method not implemented");
204 }
205
206 @SuppressWarnings("unused")
207 protected void doEditGuest(
208 RenderRequest renderRequest, RenderResponse renderResponse)
209 throws IOException, PortletException {
210
211 throw new PortletException("doEditGuest method not implemented");
212 }
213
214 @SuppressWarnings("unused")
215 protected void doPreview(
216 RenderRequest renderRequest, RenderResponse renderResponse)
217 throws IOException, PortletException {
218
219 throw new PortletException("doPreview method not implemented");
220 }
221
222 @SuppressWarnings("unused")
223 protected void doPrint(
224 RenderRequest renderRequest, RenderResponse renderResponse)
225 throws IOException, PortletException {
226
227 throw new PortletException("doPrint method not implemented");
228 }
229
230 protected boolean isProcessActionRequest(ActionRequest actionRequest) {
231 return isProcessPortletRequest(actionRequest);
232 }
233
234 protected boolean isProcessPortletRequest(PortletRequest portletRequest) {
235 return _PROCESS_PORTLET_REQUEST;
236 }
237
238 protected boolean isProcessRenderRequest(RenderRequest renderRequest) {
239 return isProcessPortletRequest(renderRequest);
240 }
241
242 protected boolean isProcessResourceRequest(
243 ResourceRequest resourceRequest) {
244
245 return isProcessPortletRequest(resourceRequest);
246 }
247
248 private static final boolean _PROCESS_PORTLET_REQUEST = true;
249
250 private Map<String, Class<?>> _classesMap = new HashMap<String, Class<?>>();
251 private Map<MethodKey, Method> _methodsMap =
252 new HashMap<MethodKey, Method>();
253
254 }