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
59 public class LiferayPortlet extends GenericPortlet {
60
61 public void processAction(
62 ActionRequest actionRequest, ActionResponse actionResponse)
63 throws IOException, PortletException {
64
65 if (!isProcessActionRequest(actionRequest)) {
66 return;
67 }
68
69 if (!callActionMethod(actionRequest, actionResponse)) {
70 return;
71 }
72
73 if (SessionErrors.isEmpty(actionRequest)) {
74 SessionMessages.add(actionRequest, "request_processed");
75 }
76
77 String redirect = ParamUtil.getString(actionRequest, "redirect");
78
79 if (Validator.isNotNull(redirect)) {
80 actionResponse.sendRedirect(redirect);
81 }
82 }
83
84 public void serveResource(
85 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
86 throws IOException, PortletException {
87
88 if (!isProcessResourceRequest(resourceRequest)) {
89 return;
90 }
91
92 super.serveResource(resourceRequest, resourceResponse);
93 }
94
95 protected boolean callActionMethod(
96 ActionRequest actionRequest, ActionResponse actionResponse)
97 throws IOException, PortletException {
98
99 String actionName = ParamUtil.getString(
100 actionRequest, ActionRequest.ACTION_NAME);
101
102 if (Validator.isNull(actionName)) {
103 return false;
104 }
105
106 try {
107 Method method = MethodCache.get(
108 _classesMap, _methodsMap, getClass().getName(), actionName,
109 new Class[] {ActionRequest.class, ActionResponse.class});
110
111 method.invoke(this, actionRequest, actionResponse);
112
113 return true;
114 }
115 catch (InvocationTargetException ite) {
116 Throwable cause = ite.getCause();
117
118 if (cause != null) {
119 throw new PortletException(cause);
120 }
121 else {
122 throw new PortletException(ite);
123 }
124 }
125 catch (Exception e) {
126 throw new PortletException(e);
127 }
128 }
129
130 protected void doDispatch(
131 RenderRequest renderRequest, RenderResponse renderResponse)
132 throws IOException, PortletException {
133
134 if (!isProcessRenderRequest(renderRequest)) {
135 renderRequest.setAttribute(WebKeys.PORTLET_DECORATE, Boolean.FALSE);
136
137 return;
138 }
139
140 WindowState state = renderRequest.getWindowState();
141
142 if (state.equals(WindowState.MINIMIZED)) {
143 return;
144 }
145
146 PortletMode mode = renderRequest.getPortletMode();
147
148 if (mode.equals(PortletMode.VIEW)) {
149 doView(renderRequest, renderResponse);
150 }
151 else if (mode.equals(LiferayPortletMode.ABOUT)) {
152 doAbout(renderRequest, renderResponse);
153 }
154 else if (mode.equals(LiferayPortletMode.CONFIG)) {
155 doConfig(renderRequest, renderResponse);
156 }
157 else if (mode.equals(PortletMode.EDIT)) {
158 doEdit(renderRequest, renderResponse);
159 }
160 else if (mode.equals(LiferayPortletMode.EDIT_DEFAULTS)) {
161 doEditDefaults(renderRequest, renderResponse);
162 }
163 else if (mode.equals(LiferayPortletMode.EDIT_GUEST)) {
164 doEditGuest(renderRequest, renderResponse);
165 }
166 else if (mode.equals(PortletMode.HELP)) {
167 doHelp(renderRequest, renderResponse);
168 }
169 else if (mode.equals(LiferayPortletMode.PREVIEW)) {
170 doPreview(renderRequest, renderResponse);
171 }
172 else if (mode.equals(LiferayPortletMode.PRINT)) {
173 doPrint(renderRequest, renderResponse);
174 }
175 else {
176 throw new PortletException(mode.toString());
177 }
178 }
179
180 protected void doAbout(
181 RenderRequest renderRequest, RenderResponse renderResponse)
182 throws IOException, PortletException {
183
184 throw new PortletException("doAbout method not implemented");
185 }
186
187 protected void doConfig(
188 RenderRequest renderRequest, RenderResponse renderResponse)
189 throws IOException, PortletException {
190
191 throw new PortletException("doConfig method not implemented");
192 }
193
194 protected void doEditDefaults(
195 RenderRequest renderRequest, RenderResponse renderResponse)
196 throws IOException, PortletException {
197
198 throw new PortletException("doEditDefaults method not implemented");
199 }
200
201 protected void doEditGuest(
202 RenderRequest renderRequest, RenderResponse renderResponse)
203 throws IOException, PortletException {
204
205 throw new PortletException("doEditGuest method not implemented");
206 }
207
208 protected void doPreview(
209 RenderRequest renderRequest, RenderResponse renderResponse)
210 throws IOException, PortletException {
211
212 throw new PortletException("doPreview method not implemented");
213 }
214
215 protected void doPrint(
216 RenderRequest renderRequest, RenderResponse renderResponse)
217 throws IOException, PortletException {
218
219 throw new PortletException("doPrint method not implemented");
220 }
221
222 protected boolean isProcessActionRequest(ActionRequest actionRequest) {
223 return isProcessPortletRequest(actionRequest);
224 }
225
226 protected boolean isProcessPortletRequest(PortletRequest portletRequest) {
227 return _PROCESS_PORTLET_REQUEST;
228 }
229
230 protected boolean isProcessRenderRequest(RenderRequest renderRequest) {
231 return isProcessPortletRequest(renderRequest);
232 }
233
234 protected boolean isProcessResourceRequest(
235 ResourceRequest resourceRequest) {
236
237 return isProcessPortletRequest(resourceRequest);
238 }
239
240 private static final boolean _PROCESS_PORTLET_REQUEST = true;
241
242 private Map<String, Class<?>> _classesMap = new HashMap<String, Class<?>>();
243 private Map<MethodKey, Method> _methodsMap =
244 new HashMap<MethodKey, Method>();
245
246 }