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