KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > mvnforum > user > UserModuleProcessor


1 /*
2  * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/user/UserModuleProcessor.java,v 1.85 2006/04/14 17:05:27 minhnn Exp $
3  * $Author: minhnn $
4  * $Revision: 1.85 $
5  * $Date: 2006/04/14 17:05:27 $
6  *
7  * ====================================================================
8  *
9  * Copyright (C) 2002-2006 by MyVietnam.net
10  *
11  * All copyright notices regarding mvnForum MUST remain
12  * intact in the scripts and in the outputted HTML.
13  * The "powered by" text/logo with a link back to
14  * http://www.mvnForum.com and http://www.MyVietnam.net in
15  * the footer of the pages MUST remain visible when the pages
16  * are viewed on the internet or intranet.
17  *
18  * This program is free software; you can redistribute it and/or modify
19  * it under the terms of the GNU General Public License as published by
20  * the Free Software Foundation; either version 2 of the License, or
21  * any later version.
22  *
23  * This program is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26  * GNU General Public License for more details.
27  *
28  * You should have received a copy of the GNU General Public License
29  * along with this program; if not, write to the Free Software
30  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31  *
32  * Support can be obtained from support forums at:
33  * http://www.mvnForum.com/mvnforum/index
34  *
35  * Correspondence and Marketing Questions can be sent to:
36  * info at MyVietnam net
37  *
38  * @author: Minh Nguyen
39  * @author: Mai Nguyen
40  */

41 package com.mvnforum.user;
42
43 import java.io.IOException JavaDoc;
44
45 import javax.servlet.ServletContext JavaDoc;
46 import javax.servlet.ServletException JavaDoc;
47 import javax.servlet.http.*;
48
49 import com.mvnforum.MVNForumConfig;
50 import com.mvnforum.MyUtil;
51 import com.mvnforum.auth.*;
52 import com.mvnforum.common.MVNCaptchaService;
53 import net.myvietnam.mvncore.exception.*;
54 import net.myvietnam.mvncore.filter.DisableHtmlTagFilter;
55 import net.myvietnam.mvncore.mvnframework.URLMap;
56 import net.myvietnam.mvncore.util.ParamUtil;
57 import net.myvietnam.mvncore.util.StringUtil;
58 import net.myvietnam.mvncore.web.GenericRequest;
59 import net.myvietnam.mvncore.web.GenericResponse;
60 import net.myvietnam.mvncore.web.impl.GenericRequestServletImpl;
61 import net.myvietnam.mvncore.web.impl.GenericResponseServletImpl;
62 import org.apache.commons.logging.Log;
63 import org.apache.commons.logging.LogFactory;
64
65 public class UserModuleProcessor {
66
67     private static Log log = LogFactory.getLog(UserModuleProcessor.class);
68
69     private final String JavaDoc ORIGINAL_REQUEST = "mvnforum.user.OriginalRequest";
70
71     private HttpServlet mainServlet = null;
72     private ServletContext JavaDoc servletContext = null;
73
74     private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance();
75     private UserModuleURLMapHandler urlMapHandler = new UserModuleURLMapHandler();
76
77     private ForumWebHandler forumWebHandler = new ForumWebHandler();
78     private ThreadWebHandler threadWebHandler = new ThreadWebHandler();
79     private PostWebHandler postWebHandler = new PostWebHandler();
80     private AttachmentWebHandler attachmentWebHandler = new AttachmentWebHandler();
81     private MemberWebHandler memberWebHandler = new MemberWebHandler();
82     private CompanyWebHandler companyWebHandler = new CompanyWebHandler();
83     private WatchWebHandler watchWebHandler = new WatchWebHandler();
84     private FavoriteThreadWebHandler favoriteThreadWebHandler = new FavoriteThreadWebHandler();
85     private MessageWebHandler messageWebHandler = new MessageWebHandler();
86     private PmAttachmentWebHandler pmAttachmentWebHandler = new PmAttachmentWebHandler();
87     private MessageFolderWebHandler messageFolderWebHandler = new MessageFolderWebHandler();
88
89     public UserModuleProcessor(HttpServlet servlet) {
90         mainServlet = servlet;
91         servletContext = servlet.getServletContext();
92     }
93
94     public String JavaDoc process(HttpServletRequest request, HttpServletResponse response)
95         throws IOException JavaDoc, ServletException JavaDoc {
96
97         long start = 0;
98         String JavaDoc requestURI = StringUtil.getEmptyStringIfNull(request.getPathInfo());
99         String JavaDoc responseURI = null;
100         OnlineUser onlineUser = null;
101
102         GenericRequest genericRequest = new GenericRequestServletImpl(request, servletContext);
103         GenericResponse genericResponse = new GenericResponseServletImpl(response);
104
105         if (log.isDebugEnabled()) {
106             start = System.currentTimeMillis();
107             log.debug("UserModuleProcessor : requestURI = " + requestURI);
108         }
109
110         // step 1: some command need to be processed before we do the URI mapping (of the MODAL)
111
// MODAL processing
112
try {
113             onlineUser = onlineUserManager.getOnlineUser(genericRequest);
114             onlineUser.updateNewMessageCount(false);
115             if (requestURI.equals("/index")) {
116                 if (MVNForumConfig.getEnablePortalLikeIndexPage()) {
117                     forumWebHandler.prepareListIndex(genericRequest, requestURI);//no permission
118
} else {
119                     forumWebHandler.prepareList(genericRequest, requestURI);//no permission
120
}
121                 // change this page;
122
} else if (requestURI.equals("/listforums")) {
123                 forumWebHandler.prepareList(genericRequest, requestURI);//no permission
124
} else if (requestURI.equals("/listthreads")) {
125                 threadWebHandler.prepareList_limit(genericRequest);
126             } else if (requestURI.equals("/listrecentthreads")) {
127                 threadWebHandler.prepareListRecentThreads_limit(genericRequest);//no permission
128
} else if (requestURI.equals("/viewthread")) {
129                 postWebHandler.prepareViewThread(genericRequest);
130             } else if (requestURI.equals("/printthread")) {
131                 postWebHandler.prepareViewThread(genericRequest);
132
133             } else if (requestURI.equals("/deletethread")) {
134                 threadWebHandler.prepareDelete(genericRequest);
135             } else if (requestURI.equals("/deletethreadprocess")) {
136                 threadWebHandler.processDelete(genericRequest);
137             } else if (requestURI.equals("/movethread")) {
138                 threadWebHandler.prepareMoveThread(genericRequest);
139             } else if (requestURI.equals("/movethreadprocess")) {
140                 threadWebHandler.processMoveThread(genericRequest);
141             } else if (requestURI.equals("/editthreadstatus")) {
142                 threadWebHandler.prepareEditThreadStatus(genericRequest);
143             } else if (requestURI.equals("/editthreadstatusprocess")) {
144                 threadWebHandler.processEditThreadStatus(genericRequest);
145             } else if (requestURI.equals("/editthreadtype")) {
146                 threadWebHandler.prepareEditThreadType(genericRequest);
147             } else if (requestURI.equals("/editthreadtypeprocess")) {
148                 threadWebHandler.processEditThreadType(genericRequest);
149
150             } else if (requestURI.equals("/modcp")) {
151                 threadWebHandler.prepareModerationControlPanel(genericRequest);
152             } else if (requestURI.equals("/listrecentpendingthreads")) {
153                 threadWebHandler.prepareListRecentDisabledThreads_limit(genericRequest);
154             } else if (requestURI.equals("/listthreadswithpendingposts")) {
155                 threadWebHandler.prepareListEnableThreadsWithPendingPosts_inForum_limit(genericRequest);
156             } else if (requestURI.equals("/listrecentthreadswithpendingposts")) {
157                 threadWebHandler.prepareListRecentEnableThreadsWithPendingPosts_limit(genericRequest);
158             } else if (requestURI.equals("/moderatependingthreads")) {
159                 threadWebHandler.prepareModeratePendingThreads_inForum_limit(genericRequest);
160             } else if (requestURI.equals("/moderatependingthreadsprocess")) {
161                 threadWebHandler.processModeratePendingThreads(genericRequest);
162             } else if (requestURI.equals("/moderatependingposts")) {
163                 postWebHandler.prepareModeratePendingPosts_limit(genericRequest);
164             } else if (requestURI.equals("/moderatependingpostsprocess")) {
165                 postWebHandler.processModeratePendingPosts(genericRequest);
166
167             } else if (requestURI.equals("/listpendingthreadsxml")) {
168                 threadWebHandler.prepareListDisabledThreads_limit_xml(genericRequest);
169
170             } else if (requestURI.equals("/addpost")) {
171                 postWebHandler.prepareAdd(genericRequest, genericResponse);
172             } else if (requestURI.equals("/addpostprocess")) {
173                 postWebHandler.processAdd(genericRequest, genericResponse);
174             } else if (requestURI.equals("/editpost")) {
175                 postWebHandler.prepareEdit(genericRequest);
176             } else if (requestURI.equals("/updatepost")) {
177                 postWebHandler.processUpdate(genericRequest);
178             } else if (requestURI.equals("/printpost")) {
179                 postWebHandler.preparePrintPost(genericRequest);
180             } else if (requestURI.equals("/deletepost")) {
181                 postWebHandler.prepareDelete(genericRequest);
182             } else if (requestURI.equals("/deletepostprocess")) {
183                 postWebHandler.processDelete(genericRequest);
184
185             } else if (requestURI.equals("/addattachment")) {
186                 attachmentWebHandler.prepareAdd(genericRequest);
187             } else if (requestURI.equals("/addattachmentprocess")) {
188                 attachmentWebHandler.processAdd(genericRequest, genericResponse);
189             } else if (requestURI.equals("/getattachment")) {
190                 attachmentWebHandler.downloadAttachment(request, response);
191                 return null;//download attachment, no further process is needed
192
} else if (requestURI.equals("/deleteattachment")) {
193                 attachmentWebHandler.prepareDelete(genericRequest);
194             } else if (requestURI.equals("/deleteattachmentprocess")) {
195                 attachmentWebHandler.processDelete(genericRequest);
196             } else if (requestURI.equals("/editattachment")) {
197                 attachmentWebHandler.prepareEdit(genericRequest);
198             } else if (requestURI.equals("/editattachmentprocess")) {
199                 attachmentWebHandler.processEdit(genericRequest);
200
201             } else if (requestURI.equals("/myfavoritethread")) {
202                 threadWebHandler.prepareList_inFavorite(genericRequest);
203             } else if (requestURI.equals("/addfavoritethreadprocess")) {
204                 favoriteThreadWebHandler.processAdd(genericRequest);
205             } else if (requestURI.equals("/deletefavoritethreadprocess")) {
206                 favoriteThreadWebHandler.processDelete(genericRequest);
207
208             } else if (requestURI.equals("/registermember")) {
209                 memberWebHandler.prepareAdd(genericRequest);
210             } else if (requestURI.equals("/registermemberprocess")) {
211                 memberWebHandler.processAdd(genericRequest, genericResponse);// no permission
212
} else if (requestURI.equals("/viewmember")) {
213                 memberWebHandler.prepareView_forPublic(genericRequest);// no permission
214
} else if (requestURI.equals("/listmembers")) {
215                 memberWebHandler.prepareListMembers_forPublic(genericRequest);// no permission
216
} else if (requestURI.equals("/editmember")) {
217                 memberWebHandler.prepareEdit_forCurrentMember(genericRequest);
218             } else if (requestURI.equals("/updatemember")) {
219                 memberWebHandler.processUpdate(genericRequest, genericResponse);
220             } else if (requestURI.equals("/myprofile")) {
221                 memberWebHandler.prepareView_forCurrentMember(genericRequest);
222             } else if (requestURI.equals("/changepassword")) {
223                 onlineUser.getPermission().ensureIsAuthenticated();// check if login
224
} else if (requestURI.equals("/changepasswordprocess")) {
225                 memberWebHandler.processUpdatePassword(genericRequest);
226             } else if (requestURI.equals("/changeemail")) {
227                 memberWebHandler.prepareEditEmail(genericRequest);
228             } else if (requestURI.equals("/changeemailprocess")) {
229                 memberWebHandler.processUpdateEmail(genericRequest);
230             } else if (requestURI.equals("/changesignature")) {
231                 memberWebHandler.prepareEditSignature(genericRequest);
232             } else if (requestURI.equals("/changesignatureprocess")) {
233                 memberWebHandler.processUpdateSignature(genericRequest, genericResponse);
234             } else if (requestURI.equals("/changeavatar")) {
235                 memberWebHandler.prepareEditAvatar(genericRequest);
236             } else if (requestURI.equals("/uploadavatar")) {
237                 memberWebHandler.uploadAvatar(mainServlet.getServletConfig(), genericRequest);
238             } else if (requestURI.equals("/updateavatar")) {
239                 memberWebHandler.updateMemberAvatar(genericRequest);
240             } else if (requestURI.equals("/mywatch")) {
241                 watchWebHandler.prepareList(genericRequest);
242             } else if (requestURI.equals("/addwatch")) {
243                 watchWebHandler.prepareAdd(genericRequest);
244             } else if (requestURI.equals("/addwatchprocess")) {
245                 watchWebHandler.processAdd(genericRequest);
246             } else if (requestURI.equals("/deletewatchprocess")) {
247                 watchWebHandler.processDelete(genericRequest);
248
249             } else if (requestURI.equals("/mymessage")) {
250                 messageWebHandler.prepareList(genericRequest);
251             } else if (requestURI.equals("/addmessage")) {
252                 messageWebHandler.prepareAdd(genericRequest, genericResponse);
253             } else if (requestURI.equals("/addmessageprocess")) {
254                 messageWebHandler.processAdd(genericRequest, genericResponse);
255             } else if (requestURI.equals("/viewmessage")) {
256                 messageWebHandler.prepareViewMessage(genericRequest);
257             } else if (requestURI.equals("/sendmessageprocess")) {
258                 messageWebHandler.processSendMessage(genericRequest);
259             } else if (requestURI.equals("/deletemessageprocess")) {
260                 messageWebHandler.processDelete(genericRequest);
261             } else if (requestURI.equals("/processmessage")) {
262                 messageWebHandler.processMessage(genericRequest);
263             } else if (requestURI.equals("/addmessageattachment")) {
264                 pmAttachmentWebHandler.prepareAdd(genericRequest);
265             } else if (requestURI.equals("/addmessageattachmentprocess")) {
266                 pmAttachmentWebHandler.processAdd(genericRequest, genericResponse);
267             } else if (requestURI.equals("/getpmattachment")) {
268                 pmAttachmentWebHandler.downloadAttachment(request, response);
269                 return null;//download attachment, no further process is needed
270

271             } else if (requestURI.equals("/mymessagefolder")) {
272                 messageFolderWebHandler.prepareList(genericRequest);
273             } else if (requestURI.equals("/addmessagefolder")) {
274                 messageFolderWebHandler.prepareAdd(genericRequest);
275             } else if (requestURI.equals("/addmessagefolderprocess")) {
276                 messageFolderWebHandler.processAdd(genericRequest);
277             } else if (requestURI.equals("/deletemessagefolder")) {
278                 messageFolderWebHandler.prepareDelete(genericRequest);
279             } else if (requestURI.equals("/deletemessagefolderprocess")) {
280                 messageFolderWebHandler.processDelete(genericRequest);
281             } else if (requestURI.equals("/updatefolderorder")) {
282                 messageFolderWebHandler.processUpdateOrder(genericRequest);
283
284             } else if (requestURI.equals("/listcompanies")) {
285                 companyWebHandler.prepareListCompanies_forPublic(genericRequest);
286             } else if (requestURI.equals("/companyhomepage")) {
287                 companyWebHandler.prepareView(genericRequest);
288
289             } else if (requestURI.equals("/search")) {
290                 postWebHandler.prepareSearch(genericRequest);
291             } else if (requestURI.equals("/searchprocess")) {
292                 postWebHandler.processSearch(genericRequest, genericResponse);
293             } else if (requestURI.equals("/rsssummary")) {
294                 threadWebHandler.prepareRSSSummary(genericRequest);
295             } else if (requestURI.equals("/atom")) {
296                 threadWebHandler.prepareListRSS(request);
297             } else if (requestURI.equals("/rss")) {
298                 threadWebHandler.prepareListRSS(request);
299             } else if (requestURI.equals("/rss2")) {
300                 threadWebHandler.prepareListRSS(request);
301
302             } else if (requestURI.equals("/getmvncoreimage")) {
303                 MyUtil.writeMvnCoreImage(request, response);
304                 return null;
305             } else if (requestURI.equals("/getmvnforumimage")) {
306                 MyUtil.writeMvnForumImage(request, response);
307                 return null;
308
309             } else if (requestURI.equals("/captchaimage")) {
310                 MVNCaptchaService.getInstance().writeCaptchaImage(request, response);
311                 return null;
312             } else if (requestURI.equals("/iforgotpasswords")) {
313                 memberWebHandler.prepareForgotPassword(genericRequest);//no permission
314
} else if (requestURI.equals("/forgotpasswordprocess")) {
315                 memberWebHandler.forgotPassword(genericRequest);//no permission
316
} else if (requestURI.equals("/resetpasswordprocess")) {
317                 memberWebHandler.resetPassword(genericRequest);//no permission
318

319             } else if (requestURI.equals("/sendactivationcodeprocess")) {
320                 memberWebHandler.sendActivateCode(genericRequest);//no permission
321
} else if (requestURI.equals("/activatememberprocess")) {
322                 memberWebHandler.activateMember(genericRequest);//no permission
323

324             } else if (requestURI.equals("/listonlineusers")) {
325                 //@todo: move to WebHandler
326
if (MVNForumConfig.getEnableOnlineUsers() == false) {
327                     throw new AssertionException("Cannot list online users because ONLINE_USERS feature is disabled by administrator.");
328                 }
329                 // This will ensure removing all time-out users (if there is)
330
onlineUserManager.getOnlineUser(request);
331
332                 // the following 2 lines fix the bug that no online user found in the first time request
333
Action action = new ActionInUserModule(request, requestURI);// may throw MissingURLMapEntryException
334
onlineUserManager.updateOnlineUserAction(request, action);
335
336                 // now set the attribute
337
//request.setAttribute("OnlineUserActions", onlineUserManager.getOnlineUserActions(0/*default*/));// no permission
338
boolean duplicateUsers = MVNForumConfig.getEnableDuplicateOnlineUsers();
339                 request.setAttribute("OnlineUserActions", onlineUserManager.getOnlineUserActions(0/*default*/, duplicateUsers));// no permission
340

341             } else if (requestURI.equals("/loginprocess")) {
342                 if (MVNForumConfig.getEnableLogin() == false) {
343                     throw new AuthenticationException(NotLoginException.LOGIN_DISABLED);
344                 }
345                 onlineUserManager.processLogin(request, response);
346
347                 String JavaDoc url = ParamUtil.getParameter(request, "url");
348                 if (url.length() > 0) {
349                     responseURI = url;
350                 } else {
351                     String JavaDoc originalRequest = ParamUtil.getAttribute(request.getSession(), ORIGINAL_REQUEST);
352                     if (originalRequest.length() > 0) {
353                         request.getSession().setAttribute(ORIGINAL_REQUEST, "");
354                         responseURI = originalRequest;
355                     }
356                 }
357             } else if (requestURI.equals("/logout")) {
358                 onlineUserManager.logout(request, response);
359                 request.setAttribute("Reason", "Logout successfully.");
360             } else if (requestURI.equals("/deletecookieprocess")) {
361                 onlineUserManager.deleteCookie(request, response);
362             } else if (requestURI.equals("/getavatar")) {
363                 memberWebHandler.getAvatar(request, response);
364                 return null;//download attachment, no further process is needed
365
}
366         } catch (AuthenticationException e) {
367             // make sure not from login page, we cannot set original request in this situation
368
// and also make sure the request's method must be GET to set the OriginalRequest
369
boolean shouldSaveOriginalRequest = (e.getReason()==NotLoginException.NOT_LOGIN) || (e.getReason()==NotLoginException.NOT_ENOUGH_RIGHTS);
370             if (shouldSaveOriginalRequest && (request.getMethod().equals("GET"))) {
371                 String JavaDoc url = UserModuleConfig.getUrlPattern() + requestURI + "?" + StringUtil.getEmptyStringIfNull(request.getQueryString());
372                 request.getSession().setAttribute(ORIGINAL_REQUEST, url);
373             }
374             requestURI = MVNForumConfig.getRedirectLoginURL();//"/login";
375
request.setAttribute("Reason", e.getReasonExplanation(onlineUser.getLocale()));
376         } catch (Exception JavaDoc e) {
377             if (e instanceof BadInputException) {
378                 // we log in WARN level if this is the exception from user input
379
log.warn("Exception in UserModuleProcessor e = " + e.getMessage(), e);
380             } else if (e instanceof AssertionException) {
381                 // we log in FATAL level if this is the exception from user input
382
log.fatal("Exception in UserModuleProcessor e = " + e.getMessage(), e);
383             } else {
384                 log.error("Exception in UserModuleProcessor [" + e.getClass().getName() + "] : " + e.getMessage(), e);
385             }
386             requestURI = "/error";
387             String JavaDoc message = StringUtil.getEmptyStringIfNull(e.getMessage());
388             if (message.length() == 0) {
389                 message = e.getClass().getName();
390             }
391             request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(message));
392         }
393
394         // step 2: map the URI (of the CONTROLLER)
395
try {
396             // NOTE 1: there is one situation when responseURI != null (after login successfully for the first time),
397
// but since it will make a NEW request via sendRedirect, so we dont count
398
// NOTE 2: there are 2 situation when requestURI is different from the original requestURI
399
// that is /login and /error, because of this so we must pass the requestURI
400
/* @todo Could below the MapHandler ??? */
401             Action action = new ActionInUserModule(request, requestURI);// may throw MissingURLMapEntryException
402
onlineUserManager.updateOnlineUserAction(request, action);
403
404             // now updateOnlineUserAction is ok, we go ahead
405
if (responseURI == null) {
406                 URLMap map = urlMapHandler.getMap(requestURI, request, onlineUser.getLocaleName());
407                 responseURI = map.getResponse();
408             }// if
409
} catch (MissingURLMapEntryException e) {
410             log.error("Exception: missing urlmap entry in forum module: requestURI = " + requestURI);
411             responseURI = "/mvnplugin/mvnforum/user/error.jsp";
412             request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(e.getMessage()));
413         } catch (Exception JavaDoc e) {
414             // This will catch AuthenticationException, AssertionException, DatabaseException
415
// in the method onlineUserManager.updateOnlineUserAction(request, action)
416
responseURI = "/mvnplugin/mvnforum/user/error.jsp";
417             request.getSession().setAttribute("ErrorMessage", DisableHtmlTagFilter.filter(e.getMessage()));
418         }
419
420         // step 3: forward or dispatch to the VIEW
421
if (log.isDebugEnabled()) {
422             long duration = System.currentTimeMillis() - start;
423             log.debug("UserModuleProcessor : responseURI = " + responseURI + ". (" + duration + " ms)");
424         }
425
426         return responseURI;
427         /*
428         if (responseURI.endsWith(".jsp")) {
429             servletContext.getRequestDispatcher(responseURI).forward(request, response);
430         } else {
431             response.sendRedirect(ParamUtil.getContextPath() + responseURI);
432         }*/

433     }
434 }
435
Popular Tags