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