📄 threadwebhelper.java
字号:
/*
* Copyright (C) 2002 by MyVietnam.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* All copyright notices regarding mvnForum
* must remain intact in the scripts and in the outputted HTML
* The "powered by" text/logo with a link back to
* http://www.mvnForum.com and http://www.MyVietnam.net in the footer of the pages MUST
* remain visible when the pages are viewed on the internet or intranet.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Support can be obtained from support forums at:
* http://www.mvnForum.com/mvnforum/index
*
* Correspondence and Marketing Questions can be sent to:
* info@MyVietnam.net
*
* @author: Minh Nguyen minhnn@MyVietnam.net
* @author: Mai Nguyen mai.nh@MyVietnam.net
*/
package net.myvietnam.mvnplugin.mvnforum.user;
import java.sql.*;
import java.util.Collection;
import net.myvietnam.mvncore.db.DBUtils;
import net.myvietnam.mvncore.exception.*;
import net.myvietnam.mvnplugin.mvnforum.db.ThreadBean;
class ThreadWebHelper extends net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper {
// prevent instantiation and inheritance
private ThreadWebHelper() {
}
public static int createThread(int forumID, String memberName, String lastPostMemberName,
String threadTopic, String threadBody, int threadVoteCount,
int threadVoteTotalStars, Timestamp threadCreationDate, Timestamp threadLastPostDate,
int threadType, int threadOption, int threadStatus,
int threadHasPoll, int threadViewCount, int threadReplyCount,
String threadIcon, int threadDuration)
throws AssertionException, CreateException, DatabaseException, ForeignKeyNotFoundException {
net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.create(forumID, memberName, lastPostMemberName, threadTopic, threadBody, threadVoteCount, threadVoteTotalStars, threadCreationDate, threadLastPostDate, threadType, threadOption, threadStatus, threadHasPoll, threadViewCount, threadReplyCount, threadIcon, threadDuration);
int threadID = findThreadID(forumID, memberName, threadCreationDate);
return threadID;
}
public static void updateThreadTopic_Body(int threadID, // primary key
String threadTopic, String threadBody)
throws BadInputException, DatabaseException {
net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.updateTopic_Body(threadID, // primary key
threadTopic, threadBody);
}
public static void updateThreadLastPostDate(int threadID, // primary key
Timestamp threadLastPostDate)
throws BadInputException, DatabaseException, ForeignKeyNotFoundException {
net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.updateLastPostDate(threadID, // primary key
threadLastPostDate);
}
public static ThreadBean getThread(int threadID)
throws BadInputException, DatabaseException {
return net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.getBean(threadID);
}
public static Collection getThreads_limit(int offset, int rowsToReturn)
throws IllegalArgumentException, DatabaseException {
return net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.getBeans_limit(offset, rowsToReturn);
}
public static Collection getThreads_inForum_limit(int forumID, int offset, int rowsToReturn)
throws IllegalArgumentException, DatabaseException {
return net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.getBeans_inForum_limit(forumID, offset, rowsToReturn);
}
public static int getNumberOfThreads_inForum(int forumID)
throws AssertionException, DatabaseException {
return net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.getNumberOfBeans_inForum(forumID);
}
public static int getNumberOfThreads()
throws AssertionException, DatabaseException {
return net.myvietnam.mvnplugin.mvnforum.db.ThreadWebHelper.getNumberOfBeans();
}
/************************************************
* Customized methods come below
************************************************/
/**
* This is a customized method
*/
protected static int findThreadID(int forumID, String memberName, Timestamp threadCreationDate)
throws AssertionException, DatabaseException {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
StringBuffer sql = new StringBuffer(512);
sql.append("SELECT ThreadID");
sql.append(" FROM " + TABLE_NAME);
sql.append(" WHERE ForumID = ? AND MemberName = ? AND ThreadCreationDate = ? ");
try {
connection = DBUtils.getConnection();
statement = connection.prepareStatement(sql.toString());
statement.setInt(1, forumID);
statement.setString(2, memberName);
statement.setTimestamp(3, threadCreationDate);
resultSet = statement.executeQuery();
if(!resultSet.next()) {
throw new AssertionException("Cannot find the ThreadID in table Thread.");
}
return resultSet.getInt("ThreadID");
} catch(SQLException sqle) {
sqle.printStackTrace();
throw new DatabaseException("Error executing SQL in ThreadWebHelper.getBean(pk).");
} finally {
DBUtils.closeResultSet(resultSet);
DBUtils.closeStatement(statement);
DBUtils.closeConnection(connection);
}
}
/*
// @todo: copy this method for derived class
public static void updateThreadLastPostMemberName(int threadID, // primary key
String lastPostMemberName)
throws BadInputException, DatabaseException, ForeignKeyNotFoundException {
net.myvietnam.webplugin.mvnforum.db.ThreadWebHelper.updateLastPostMemberName(threadID, // primary key
lastPostMemberName);
}
*/
/*
* Included columns: LastPostMemberName
* Excluded columns: ThreadID, ForumID, MemberName, ThreadTopic, ThreadBody,
* ThreadVoteCount, ThreadVoteTotalStars, ThreadCreationDate, ThreadLastPostDate, ThreadType,
* ThreadOption, ThreadStatus, ThreadHasPoll, ThreadViewCount, ThreadReplyCount,
* ThreadIcon, ThreadDuration
*/
protected static void updateLastPostMemberName(int threadID, // primary key
String lastPostMemberName)
throws BadInputException, DatabaseException, ForeignKeyNotFoundException {
try {
// @todo: modify the parameter list as needed
// If this method does not change the foreign key columns, you can comment this block of code.
MemberWebHelper.findByAlternateKey_MemberName(lastPostMemberName);
} catch(ObjectNotFoundException e) {
throw new ForeignKeyNotFoundException("Foreign key refers to table 'Member' does not exist. Cannot update table 'Forum'.");
}
Connection connection = null;
PreparedStatement statement = null;
StringBuffer sql = new StringBuffer(512);
sql.append("UPDATE " + TABLE_NAME + " SET LastPostMemberName = ?");
sql.append(" WHERE ThreadID = ?");
try {
connection = DBUtils.getConnection();
statement = connection.prepareStatement(sql.toString());
// // column(s) to update
statement.setString(1, lastPostMemberName);
// primary key column(s)
statement.setInt(2, threadID);
if (statement.executeUpdate() != 1) {
throw new BadInputException("Cannot update table Thread where primary key = (" + threadID + ").");
}
/**@todo: xem lai*/
setDirty(true);
} catch(SQLException sqle) {
sqle.printStackTrace();
throw new DatabaseException("Error executing SQL in ThreadWebHelper.update.");
} finally {
DBUtils.closeStatement(statement);
DBUtils.closeConnection(connection);
}
}
/**
* This method should be call only when we can make sure that threadID is in database
*/
public static void increaseViewCount(int threadID)
throws DatabaseException, BadInputException {
Connection connection = null;
PreparedStatement statement = null;
String sql = "UPDATE " + TABLE_NAME + " SET ThreadViewCount = ThreadViewCount + 1 WHERE ThreadID = ?";
try {
connection = DBUtils.getConnection();
statement = connection.prepareStatement(sql);
statement.setInt(1, threadID);
if (statement.executeUpdate() != 1) {
throw new BadInputException("Cannot update the ThreadViewCount in table Thread. Please contact Web site Administrator.");
}
//@todo: coi lai cho nay
// ATTENTION !!!
setDirty(true);
} catch (SQLException sqle) {
sqle.printStackTrace();
throw new DatabaseException("Error occured when update Thread: column name = ThreadViewCount.");
} finally {
DBUtils.closeStatement(statement);
DBUtils.closeConnection(connection);
}
}
/**
* This method should be call only when we can make sure that threadID is in database
*/
public static void increaseReplyCount(int threadID)
throws DatabaseException, BadInputException {
Connection connection = null;
PreparedStatement statement = null;
String sql = "UPDATE " + TABLE_NAME + " SET ThreadReplyCount = ThreadReplyCount + 1 WHERE ThreadID = ?";
try {
connection = DBUtils.getConnection();
statement = connection.prepareStatement(sql);
statement.setInt(1, threadID);
if (statement.executeUpdate() != 1) {
throw new BadInputException("Cannot update the ThreadReplyCount in table Thread. Please contact Web site Administrator.");
}
//@todo: coi lai cho nay
// ATTENTION !!!
setDirty(true);
} catch (SQLException sqle) {
sqle.printStackTrace();
throw new DatabaseException("Error occured when update Thread: column name = ThreadReplyCount.");
} finally {
DBUtils.closeStatement(statement);
DBUtils.closeConnection(connection);
}
}
public static int getPreviousThread(int forumID, int threadID)
throws DatabaseException, AssertionException {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
String sql = "SELECT MAX(ThreadID) FROM " + TABLE_NAME + " WHERE ThreadID < ? AND ForumID = ?";
try {
connection = DBUtils.getConnection();
statement = connection.prepareStatement(sql);
statement.setInt(1, threadID);
statement.setInt(2, forumID);
resultSet = statement.executeQuery();
if(!resultSet.next()) {
/** @todo I am sure that this will not happen in MySql, should check other DBMS */
throw new AssertionException("Cannot get the previous thread of the thread you requested: ThreadID = " + threadID);
}
return resultSet.getInt(1);
} catch(SQLException e) {
e.printStackTrace();
throw new DatabaseException("There is an error when trying to get a previous thread in 'Thread' table.");
} finally {
DBUtils.closeResultSet(resultSet);
DBUtils.closeStatement(statement);
DBUtils.closeConnection(connection);
}
}
public static int getNextThread(int forumID, int threadID)
throws DatabaseException, AssertionException {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
String sql = "SELECT MIN(ThreadID) FROM " + TABLE_NAME + " WHERE ThreadID > ? AND ForumID = ?";
try {
connection = DBUtils.getConnection();
statement = connection.prepareStatement(sql);
statement.setInt(1, threadID);
statement.setInt(2, forumID);
resultSet = statement.executeQuery();
if(!resultSet.next()) {
/** @todo I am sure that this will not happen in MySql, should check other DBMS */
throw new AssertionException("Cannot get the next thread of the thread you requested: ThreadID = " + threadID);
}
return resultSet.getInt(1);
} catch(SQLException e) {
e.printStackTrace();
throw new DatabaseException("There is an error when trying to get a next thread in 'Thread' table.");
} finally {
DBUtils.closeResultSet(resultSet);
DBUtils.closeStatement(statement);
DBUtils.closeConnection(connection);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -