📄 dbforumfactory.java
字号:
/** * $RCSfile: DbForumFactory.java,v $ * $Revision: 1.8 $ * $Date: 2000/12/20 02:13:38 $ * * Copyright (C) 2000 CoolServlets.com. All rights reserved. * * =================================================================== * The Apache Software License, Version 1.1 * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by * CoolServlets.com (http://www.coolservlets.com)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Jive" and "CoolServlets.com" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please * contact webmaster@coolservlets.com. * * 5. Products derived from this software may not be called "Jive", * nor may "Jive" appear in their name, without prior written * permission of CoolServlets.com. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of CoolServlets.com. For more information * on CoolServlets.com, please see <http://www.coolservlets.com>. */package com.coolservlets.forum.database;import com.coolservlets.util.*;import com.coolservlets.forum.*;import java.sql.*;import java.util.*;import java.io.*;/** * Database implementation of the ForumFactory interface. */public class DbForumFactory extends ForumFactory { /** DATABASE QUERIES **/ private static final String FORUM_COUNT = "SELECT count(*) FROM jiveForum"; private static final String DELETE_FORUM = "DELETE FROM jiveForum WHERE forumID=?"; private static final String DELETE_FORUM_USER_PERMS = "DELETE FROM jiveUserPerm WHERE forumID=?"; private static final String DELETE_FORUM_GROUP_PERMS = "DELETE FROM jiveGroupPerm WHERE forumID=?"; private static final String DELETE_FORUM_PROPERTIES = "DELETE FROM jiveForumProp WHERE forumID=?"; private static final String GET_USER_PERMS = "SELECT DISTINCT permission FROM jiveUserPerm WHERE forumID=? " + "AND userID=?"; private static final String USERS_WITH_PERM = "SELECT DISTINCT userID FROM jiveUserPerm WHERE forumID=? AND permission=?"; private static final String GET_GROUP_PERMS = "SELECT DISTINCT permission from jiveGroupPerm WHERE forumID=? " + "AND groupID=?"; private static final String GROUPS_WITH_PERM = "SELECT DISTINCT groupID FROM jiveGroupPerm WHERE forumID=? AND permission=?"; private static final String ALL_MESSAGES = "SELECT messageID FROM jiveMessage"; private static final String DELETE_MESSAGE = "DELETE FROM jiveMessage WHERE messageID=?"; protected DbCacheManager cacheManager; /** * The profile manager provides access to users and groups. */ private ProfileManager profileManager; /** * The search indexer periodically runs to index forum content */ private DbSearchIndexer searchIndexer; /** * Creates a new DbForumFactory. */ public DbForumFactory() { cacheManager = new DbCacheManager(); profileManager = new DbProfileManager(this); searchIndexer = new DbSearchIndexer(this); } //FROM THE FORUMFACTORY INTERFACE// public Forum createForum(String name, String description) throws UnauthorizedException, ForumAlreadyExistsException { Forum newForum = null; try { Forum existingForum = getForum(name); //The forum already exists since now exception, so: throw new ForumAlreadyExistsException(); } catch (ForumNotFoundException fnfe) { //The forum doesn't already exist so we can create a new one newForum = new DbForum(name, description, this); } return newForum; } public void deleteForum(Forum forum) throws UnauthorizedException { //First, remove forum from memory. cacheManager.remove(DbCacheManager.FORUM_CACHE, new Integer(forum.getID())); cacheManager.remove(DbCacheManager.USER_PERMS_CACHE, new Integer(forum.getID())); cacheManager.remove(DbCacheManager.FORUM_ID_CACHE, forum.getName()); //Delete all messages and threads in the forum. Iterator threads = forum.threads(); while (threads.hasNext()) { ForumThread thread = (ForumThread)threads.next(); forum.deleteThread(thread); } //Now, delete all filters associated with the forum. We delete in //reverse order since filter indexes will change if we don't delete //the last filter entry. int filterCount = forum.getForumMessageFilters().length; for (int i=filterCount-1; i>=0; i--) { forum.removeForumMessageFilter(i); } //Finally, delete the forum itself and all permissions and properties //associated with it. Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(DELETE_FORUM); pstmt.setInt(1,forum.getID()); pstmt.execute(); pstmt.close(); //User perms pstmt = con.prepareStatement(DELETE_FORUM_USER_PERMS); pstmt.setInt(1,forum.getID()); pstmt.execute(); pstmt.close(); //Group perms pstmt = con.prepareStatement(DELETE_FORUM_GROUP_PERMS); pstmt.setInt(1,forum.getID()); pstmt.execute(); pstmt.close(); //Properties pstmt = con.prepareStatement(DELETE_FORUM_PROPERTIES); pstmt.setInt(1,forum.getID()); pstmt.execute(); } catch( Exception sqle ) { System.err.println("Error in DbForumFactory:deleteForum()-" + sqle); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } public Forum getForum(int forumID) throws ForumNotFoundException, UnauthorizedException { //If cache is not enabled, do a new lookup of object if (!cacheManager.isCacheEnabled()) { return new DbForum(forumID, this); } //Cache is enabled. Integer forumIDInteger = new Integer(forumID); DbForum forum = (DbForum)cacheManager.get(DbCacheManager.FORUM_CACHE, forumIDInteger); if(forum == null) { forum = new DbForum(forumID, this); cacheManager.add(DbCacheManager.FORUM_CACHE, forumIDInteger, forum); } return forum; } public Forum getForum(String name) throws ForumNotFoundException, UnauthorizedException { //If cache is not enabled, do a new lookup of object if (!cacheManager.isCacheEnabled()) { Forum forum = new DbForum(name, this); return forum; } //Cache is enabled. CacheableInteger forumIDInteger = (CacheableInteger)cacheManager.get( DbCacheManager.FORUM_ID_CACHE, name ); //if id wan't found in cache, load it up and put it there. if (forumIDInteger == null) { Forum forum = new DbForum(name, this); forumIDInteger = new CacheableInteger(new Integer(forum.getID())); cacheManager.add(DbCacheManager.FORUM_ID_CACHE, name, forumIDInteger); } return getForum(forumIDInteger.getInteger().intValue()); } public int getForumCount() { int forumCount = 0; Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(FORUM_COUNT); ResultSet rs = pstmt.executeQuery(); rs.next(); forumCount = rs.getInt(1); } catch( SQLException sqle ) { System.err.println("DbForumFactory:getForumCount() failed: " + sqle); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } return forumCount; } public Iterator forums() { return new DbForumFactoryIterator(this); } public ProfileManager getProfileManager() { return profileManager; } public SearchIndexer getSearchIndexer() { return searchIndexer; } public int[] usersWithPermission(int permissionType) throws UnauthorizedException { int [] users = new int[0]; Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(USERS_WITH_PERM); pstmt.setInt(1,-1); pstmt.setInt(2,permissionType); ResultSet rs = pstmt.executeQuery(); ArrayList userList = new ArrayList(); while (rs.next()) { userList.add(new Integer(rs.getInt("userID"))); } users = new int[userList.size()]; for (int i=0; i<users.length; i++) { users[i] = ((Integer)userList.get(i)).intValue(); } } catch( SQLException sqle ) { sqle.printStackTrace(); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } return users; } public int[] groupsWithPermission(int permissionType) throws UnauthorizedException { int [] groups = new int[0]; Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(GROUPS_WITH_PERM); pstmt.setInt(1,-1); pstmt.setInt(2,permissionType); ResultSet rs = pstmt.executeQuery(); ArrayList groupList = new ArrayList(); while (rs.next()) { groupList.add(new Integer(rs.getInt("groupID"))); } groups = new int[groupList.size()]; for (int i=0; i<groups.length; i++) { groups[i] = ((Integer)groupList.get(i)).intValue(); } } catch( SQLException sqle ) { System.err.println("Error in DbForum.groupsWithPermission:" + sqle); sqle.printStackTrace(); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -