📄 dbforumfactory.java
字号:
// Loop through all messages from forum2 and delete from cache, then
// reset entry in the search index.
long[] messageIDArray = messageIDList.toArray();
int i;
for (i = 0; i < messageIDArray.length; i++) {
long messageID = messageIDArray[i];
try {
ForumMessage message = cacheManager.messageCache.get(messageID);
searchManager.removeFromIndex(message);
searchManager.addToIndex(message);
}
catch (Exception e) {
System.err.println("Failed to re-index message " + messageIDArray[i]);
e.printStackTrace();
}
}
}
public Forum getForum(long forumID) throws ForumNotFoundException {
return cacheManager.forumCache.get(forumID);
}
public Forum getForum(String name) throws ForumNotFoundException {
return cacheManager.forumCache.get(name);
}
public int getForumCount() {
if (forumCount != -1) {
return forumCount;
}
Connection con = null;
PreparedStatement pstmt = null;
try {
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(FORUM_COUNT);
ResultSet rs = pstmt.executeQuery();
rs.next();
forumCount = rs.getInt(1);
}
catch (SQLException sqle) {
sqle.printStackTrace();
}
finally {
try {
pstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
try {
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
return forumCount;
}
public Iterator forums() {
if (forums == null) {
LongList forumList = new LongList();
Connection con = null;
PreparedStatement pstmt = null;
try {
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(GET_FORUMS);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
forumList.add(rs.getLong(1));
}
}
catch (SQLException sqle) {
sqle.printStackTrace();
}
finally {
try {
pstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
try {
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
this.forums = forumList.toArray();
}
return new DatabaseObjectIterator(JiveGlobals.FORUM, forums, this);
}
public Query createQuery() {
return null;
// Note, this a fake method only implemented to meet the requirements
// of extending the abstract ForumFactory class. It's not possible to
// directly implement this method since we need authorization
// information to determine which forums a user has READ access for.
// The ForumFactoryProxy instead automatically calls the
// createQuery(Forum []) method with the proper set of forums.
}
public Query createQuery(Forum[] forums) {
return new DbQuery(forums, this);
}
public Iterator popularForums() {
if (popularForums == null) {
LongList popForums = new LongList(popularForumsNumber);
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DAY_OF_YEAR, -popularForumsWindow);
Connection con = null;
PreparedStatement pstmt = null;
try {
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(POPULAR_FORUMS);
pstmt.setString(1, StringUtils.dateToMillis(cal.getTime()));
ResultSet rs = pstmt.executeQuery();
for (int i = 0; i < popularForumsNumber; i++) {
if (!rs.next()) {
break;
}
popForums.add(rs.getLong(1));
}
this.popularForums = popForums.toArray();
}
catch (SQLException sqle) {
sqle.printStackTrace();
}
finally {
try {
pstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
try {
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
return new DatabaseObjectIterator(JiveGlobals.FORUM, popularForums, this);
}
public Iterator popularThreads() {
if (popularThreads == null) {
LongList threadIDs = new LongList(popularThreadsNumber);
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DAY_OF_YEAR, -popularThreadsWindow);
Connection con = null;
PreparedStatement pstmt = null;
try {
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(POPULAR_THREADS);
pstmt.setString(1, StringUtils.dateToMillis(cal.getTime()));
ResultSet rs = pstmt.executeQuery();
for (int i = 0; i < popularThreadsNumber; i++) {
if (!rs.next()) {
break;
}
threadIDs.add(rs.getLong(1));
}
popularThreads = threadIDs.toArray();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
pstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
try {
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
return new DatabaseObjectIterator(JiveGlobals.THREAD, popularThreads, this);
}
public UserManager getUserManager() {
return userManager;
}
public GroupManager getGroupManager() {
return groupManager;
}
public SearchManager getSearchManager() {
return searchManager;
}
public FilterManager getFilterManager() {
return filterManager;
}
public WatchManager getWatchManager() {
return watchManager;
}
public RewardManager getRewardManager() {
return rewardManager;
}
public PermissionsManager getPermissionsManager() {
return permissionsManager;
}
public ForumMessageFilter[] getAvailableFilters() {
return DbFilterManager.getAvailableFilters();
}
public void addFilterClass(String className) throws ClassNotFoundException,
IllegalArgumentException {
DbFilterManager.addFilterClass(className);
}
public ForumPermissions getPermissions(Authorization authorization) {
long userID = authorization.getUserID();
return permissionsManager.getFinalUserPerms( -1, userID);
}
public boolean hasPermission(int type) {
return true;
}
//OTHER METHODS//
/**
* Returns the cache manager object.
*/
public DatabaseCacheManager getCacheManager() {
return cacheManager;
}
/**
* Returns the id of the forum with the specified name.
*
* @param name the name of the forum to lookup.
*/
protected static long getForumID(String name) throws ForumNotFoundException {
Connection con = null;
PreparedStatement pstmt = null;
long forumID = -1;
try {
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(GET_FORUM_ID);
pstmt.setString(1, name);
ResultSet rs = pstmt.executeQuery();
if (!rs.next()) {
throw new ForumNotFoundException("Forum with name " + name +
"does not exist.");
}
forumID = rs.getLong(1);
}
catch (SQLException sqle) {
sqle.printStackTrace();
}
finally {
try {
pstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
try {
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
return forumID;
}
/**
* Returns a thread specified by its id. An exception will be thrown if the
* thread could not be loaded or if the thread is not in the specified
* forum. If cache is turned on, it will be used.
*
* @param threadID the thread to load.
* @param forum the forum that the thread belongs to.
* @throws ForumThreadNotFoundException if the specified thread could not
* be loaded.
*/
protected DbForumThread getThread(long threadID, DbForum forum) throws
ForumThreadNotFoundException {
DbForumThread thread = cacheManager.threadCache.get(threadID);
// Make sure the thread is part of the forum.
if (! (thread.forumID == forum.getID())) {
throw new ForumThreadNotFoundException();
}
return thread;
}
/**
* Returns a message based on its id. An exception will be thrown if the
* message could not be loaded or if the message is not in the specified
* thread. If cache is turned on, it will be used. All filters will be
* applied to the message before it is returned.
*
* @param messageID the ID of the message to get.
* @param threadID the ID of the thread the message belongs to.
* @param forumID the ID of the forum that the message belong to.
* @return the message specified by <tt>messageID</tt> with all filters
* applied.
*/
protected ForumMessage getMessage(long messageID, long threadID, long forumID) throws
ForumMessageNotFoundException {
DbForumMessage message = cacheManager.messageCache.get(messageID);
// Do a security check to make sure the message comes from the thread.
if (message.threadID != threadID) {
throw new ForumMessageNotFoundException();
}
ForumMessage filterMessage = null;
try {
// Apply global filters
filterMessage = filterManager.applyFilters(message);
// Apply spec filters
Forum forum = getForum(forumID);
filterMessage = forum.getFilterManager().applyFilters(filterMessage);
if (message.filteredSubject == null) {
// Now, cache those values.
message.filteredSubject = filterMessage.getSubject();
message.filteredBody = filterMessage.getBody();
Hashtable filteredProperties = new Hashtable();
for (Iterator i = filterMessage.propertyNames(); i.hasNext(); ) {
String name = (String) i.next();
filteredProperties.put(name, filterMessage.getProperty(name));
}
message.filteredProperties = filteredProperties;
}
}
catch (Exception e) {}
return filterMessage;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -