KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/user/ForumWebHandler.java,v 1.40 2006/04/14 17:05:27 minhnn Exp $
3  * $Author: minhnn $
4  * $Revision: 1.40 $
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.util.*;
44 import java.sql.Timestamp JavaDoc;
45
46 import javax.servlet.http.HttpServletRequest JavaDoc;
47
48 import net.myvietnam.mvncore.exception.*;
49 import net.myvietnam.mvncore.util.*;
50 import net.myvietnam.mvncore.web.GenericRequest;
51
52 import com.mvnforum.MVNForumConfig;
53 import com.mvnforum.MVNForumResourceBundle;
54 import com.mvnforum.auth.*;
55 import com.mvnforum.common.ActiveThread;
56 import com.mvnforum.db.*;
57
58 public class ForumWebHandler {
59
60     private OnlineUserManager userManager = OnlineUserManager.getInstance();
61
62     public ForumWebHandler() {
63     }
64
65     public void prepareList(GenericRequest request, String JavaDoc requestURI)
66         throws AssertionException, DatabaseException, AuthenticationException, MissingURLMapEntryException {
67
68         Locale locale = I18nUtil.getLocaleInRequest(request);
69
70         // the following 3 lines fix the bug that no online user found in the first time request
71
OnlineUser onlineUser = userManager.getOnlineUser(request);
72
73         if (request.isServletRequest()) {
74             HttpServletRequest JavaDoc req = request.getServletRequest();
75             Action action = new ActionInUserModule(req, requestURI); // may throw MissingURLMapEntryException
76
userManager.updateOnlineUserAction(req, action);
77         }
78
79         MVNForumPermission permission = onlineUser.getPermission();
80
81         // Calculate to get the mosts
82
long now = DateUtil.getCurrentGMTTimestamp().getTime();
83         Timestamp JavaDoc since = new Timestamp JavaDoc(now - DateUtil.WEEK);
84
85         if (MVNForumConfig.getEnableMostActiveMembers()) {
86             Collection mostActiveMembers = PostCache.getInstance().getMostActiveMembers(since, MVNForumConfig.getMaxActiveMembers());
87
88             request.setAttribute("MostActiveMembers", mostActiveMembers);
89         }
90         if (MVNForumConfig.getEnableMostActiveThreads()) {
91             Collection mostActiveThreads = this.getMyMostActiveThreads(permission, since);
92
93             request.setAttribute("MostActiveThreads", mostActiveThreads);
94         }
95
96         if (MVNForumConfig.getEnableSiteStatisticsOverview()) {
97             int numberOfMembers = DAOFactory.getMemberDAO().getNumberOfMembers();
98             Collection memberBeans = DAOFactory.getMemberDAO().getMembers_withSortSupport_limit(0, 1, "MemberID", "DESC");
99             if (memberBeans.size() != 1) {
100                 String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.wrong_size", new Object JavaDoc[] {"MemberBeans", "==",new Integer JavaDoc(memberBeans.size())});
101                 throw new AssertionException(localizedMessage);
102                 //throw new AssertionException("Assertion: MemberBeans size == 1 (but the value = " + memberBeans.size() + ")");
103
}
104             MemberBean memberBean = (MemberBean)memberBeans.iterator().next();
105
106             request.setAttribute("MemberBean", memberBean);
107             request.setAttribute("NumberOfMembers", new Integer JavaDoc(numberOfMembers));
108         }
109
110         // now set the attribute
111
boolean duplicateUsers = MVNForumConfig.getEnableDuplicateOnlineUsers();
112         request.setAttribute("OnlineUserActions", userManager.getOnlineUserActions(0 /*default*/, duplicateUsers)); // no permission
113
}
114
115     public void prepareListIndex(GenericRequest request, String JavaDoc requestURI)
116         throws AssertionException, DatabaseException,
117         AuthenticationException, MissingURLMapEntryException {
118
119         Locale locale = I18nUtil.getLocaleInRequest(request);
120
121         // the following 3 lines fix the bug that no online user found in the first time request
122
OnlineUser onlineUser = userManager.getOnlineUser(request);
123
124         if (request.isServletRequest()) {
125             HttpServletRequest JavaDoc req = request.getServletRequest();
126             Action action = new ActionInUserModule(req, requestURI); // may throw MissingURLMapEntryException
127
userManager.updateOnlineUserAction(req, action);
128         }
129
130         MVNForumPermission permission = onlineUser.getPermission();
131
132         ForumCache forumCache = ForumCache.getInstance();
133         Collection forumBeans = forumCache.getBeans();
134         Collection cTotal = new ArrayList();
135
136         for (Iterator forumIterator = forumBeans.iterator(); forumIterator.hasNext(); ) {
137             ForumBean forumBean = (ForumBean) forumIterator.next();
138
139             Collection cThreadTemp = ThreadCache.getInstance().getNormalEnableThreads_inForum_withSortSupport_limit(forumBean.getForumID(), 0, 1, "ThreadLastPostDate", "DESC");
140             if (cThreadTemp.size() == 0) {
141                 continue;
142             } else if (cThreadTemp.size() > 1) {
143                 String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.wrong_size", new Object JavaDoc[] {"ThreadBeans", "<=",new Integer JavaDoc(cThreadTemp.size())});
144                 throw new AssertionException(localizedMessage);
145                 //throw new AssertionException("Assertion: ThreadBeans size <= 1 (but the value = " + cThreadTemp.size() + ")");
146
}
147             ThreadBean threadBean = (ThreadBean) (cThreadTemp.iterator().next());
148
149             /*
150             Collection cPostTemp = DAOFactory.getPostDAO().getLastEnablePosts_inThread_limit(threadBean.getThreadID(), 1);
151             if (cPostTemp.size() != 1) {
152                 String localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.wrong_size", new Object[] {"PostBeans", "==",new Integer(cPostTemp.size())});
153                 throw new AssertionException(localizedMessage);
154                 //throw new AssertionException("Assertion: PostBeans size == 1 (but the value = " + cPostTemp.size() + ")");
155             }
156             PostBean postBean = (PostBean) (cPostTemp.iterator().next());
157             */

158             PostBean postBean = PostCache.getInstance().getLastEnablePost_inThread(threadBean.getThreadID());
159
160             Collection cGeneralInfo = new ArrayList(2);
161             cGeneralInfo.add(postBean);
162             cGeneralInfo.add(threadBean);
163             cTotal.add(cGeneralInfo);
164         }
165
166         // Calculate to get the mosts
167
long now = DateUtil.getCurrentGMTTimestamp().getTime();
168         Timestamp JavaDoc since = new Timestamp JavaDoc(now - DateUtil.WEEK);
169
170         if (MVNForumConfig.getEnableMostActiveMembers()) {
171             Collection mostActiveMembers = PostCache.getInstance().getMostActiveMembers(since, MVNForumConfig.getMaxActiveMembers());
172
173             request.setAttribute("MostActiveMembers", mostActiveMembers);
174         }
175
176         if (MVNForumConfig.getEnableMostActiveThreads()) {
177             Collection mostActiveThreads = this.getMyMostActiveThreads(permission, since);
178
179             request.setAttribute("MostActiveThreads", mostActiveThreads);
180         }
181
182         if (MVNForumConfig.getEnableSiteStatisticsOverview()) {
183             int numberOfMembers = DAOFactory.getMemberDAO().getNumberOfMembers();
184             Collection memberBeans = DAOFactory.getMemberDAO().getMembers_withSortSupport_limit(0, 1, "MemberID", "DESC");
185             if (memberBeans.size() != 1) {
186                 String JavaDoc localizedMessage = MVNForumResourceBundle.getString(locale, "mvncore.exception.AssertionException.wrong_size", new Object JavaDoc[] {"MemberBeans", "==",new Integer JavaDoc(memberBeans.size())});
187                 throw new AssertionException(localizedMessage);
188                 //throw new AssertionException("Assertion: MemberBeans size == 1 (but the value = " + memberBeans.size() + ")");
189
}
190             MemberBean memberBean = (MemberBean) memberBeans.iterator().next();
191
192             request.setAttribute("MemberBean", memberBean);
193             request.setAttribute("NumberOfMembers", new Integer JavaDoc(numberOfMembers));
194         }
195
196         // now set the attribute
197
boolean duplicateUsers = MVNForumConfig.getEnableDuplicateOnlineUsers();
198         request.setAttribute("OnlineUserActions", userManager.getOnlineUserActions(0 /*default*/, duplicateUsers)); // no permission
199
request.setAttribute("LastPosts", cTotal);
200     }
201
202     private Collection getMyMostActiveThreads(MVNForumPermission permission, Timestamp JavaDoc since)
203         throws DatabaseException {
204
205         // get more than 2 threads in case user doesnt have permission to view previous threads
206
Collection mostActiveThreads = PostCache.getInstance().getMostActiveThreads(since, MVNForumConfig.getMaxActiveThreads() + 2);
207         int remainCount = 0;
208         for (Iterator iter = mostActiveThreads.iterator(); iter.hasNext(); ) {
209             ActiveThread activeThread = (ActiveThread) iter.next();
210             if (permission.canReadPost(activeThread.getForumID()) == false) {
211                 iter.remove();
212             } else if (++remainCount > MVNForumConfig.getMaxActiveThreads()) {
213                 iter.remove();
214             }
215         }
216         return mostActiveThreads;
217     }
218 }
219
Popular Tags