⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 forumthread.java

📁 非常有影响的 j道 论 坛 源码 国外很有明的专家编写的 ....对java爱好者很有参考价值
💻 JAVA
字号:
/*
 * Copyright 2003-2005 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */
package com.jdon.jivejdon.model;

import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.TYPE;

import java.util.ArrayList;
import java.util.Collection;

import com.jdon.annotation.Model;
import com.jdon.treepatterns.model.TreeModel;
import com.jdon.util.StringUtil;

/**
 * 
 * ForumThread is  ValueObject with entity character
 *
 * it is modified when message's CRUD operations happen.
 * 
 * it reload from DB will cost, user will browse all forums by ForumThread collection.
 * so when ForumThread be modified should let all users found that this forum has changed or refreshed.
 * 
 * so ForumThread cann't be prototype clone, should be shared. saved in cache. 
 * 
 * ForumThread's left is equal to Root ForumMessage
 * 
 * ForumThread = Forum Topic = Root ForumMessage
 * ForumThread相当于主题Topic; 
 * 但Topic主要内容放入rootMessage中,可以说相当于所有rootMessage的主题提要,
 * 包括回复rootMessage的最后的一个回帖,包括rootMessage在内的所有帖子数等,
 * 主要服务于显示一个论坛中所有rootMessage集合。
 * ForumThread和Forum之间是N:1关系
 * 
 * @author <a href="mailto:banqiao@jdon.com">banq</a>
 *
 */
@Model
public class ForumThread extends ForumModel {
	private Long threadId;

	/**
	 * the subject of the root message of the thread. This is a
	 * convenience method equivalent to <code>getRootMessage().getSubject()</code>.
	 *
	 * @return the name of the thread, which is the subject of the root message.
	 */
	private String name;

	//same as rootMessage's creationDate
	private String creationDate;

	//contain some abstract properties
	private Collection propertys;

	//same as rooMessage 's tags, but this is Collection
	private Collection tags;

	private volatile Forum forum;

	/**
	 * the root message of a thread. The root message is a special
	 * first message that is intimately tied to the thread for most forumViews.
	 * All other messages in the thread are children of the root message.
	 */
	private volatile ForumMessage rootMessage;

	private volatile ForumThreadState state;

	/**
	 * normal can be cached reused
	 * @param rootMessage
	 */
	public ForumThread(ForumMessage rootMessage) {
		this();
		this.rootMessage = rootMessage;
	}

	/**
	 * temp object
	 */
	public ForumThread() {
		this.tags = new ArrayList();
		this.propertys = new ArrayList();
		this.state = new ForumThreadState(this);
	}

	/**
	 * @return Returns the creationDate.
	 */
	public String getCreationDate() {
		return creationDate;
	}

	/**
	 * @param creationDate The creationDate to set.
	 */
	public void setCreationDate(String creationDate) {
		this.creationDate = creationDate;
	}

	/**
	 * @return Returns the forum.
	 */
	public Forum getForum() {
		try {
			return forum;
		} finally {
		}
	}

	/**
	 * @param forum
	 *            The forum to set.
	 */
	public void setForum(Forum forum) {
		this.forum = forum;
		if (this.rootMessage != null) {
			rootMessage.setForum(forum);
		}
	}

	/**
	 * @return Returns the threadId.
	 */
	public Long getThreadId() {
		return threadId;
	}

	/**
	 * @param threadId The threadId to set.
	 */
	public void setThreadId(Long threadId) {
		this.threadId = threadId;
	}

	/**
	 * @return Returns the name.
	 */
	public String getName() {
		return name;
	}

	public String getShortname() {
		return StringUtil.shorten(name);
	}

	

	/**
	 * @param name The name to set.
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return Returns the propertys.
	 */
	public Collection getPropertys() {
		return propertys;
	}

	/**
	 * @param propertys The propertys to set.
	 */
	public void setPropertys(Collection propertys) {
		this.propertys = propertys;
	}

	/**
	 * @return Returns the rootMessage.
	 */
	public ForumMessage getRootMessage() {
		return rootMessage;
	}

	/**
	 * @param rootMessage The rootMessage to set.
	 */
	public void setRootMessage(ForumMessage rootMessage) {
		this.rootMessage = rootMessage;
		this.rootMessage.setForumThread(this);
	}

	/**
	 * @return Returns the forumThreadState.
	 */
	public ForumThreadState getState() {
		try {
			return state;
		} finally {
		}
	}

	public Collection getTags() {
		return tags;
	}

	public void setTags(Collection tags) {
		this.tags = tags;
	}
	
	public synchronized void addNewMessage(ForumMessageReply forumMessageReply) {
		if (!this.isEmbedded()){
			System.err.print("this thread is not embedded, threadId = " + threadId + " " + this.hashCode());
			return;
		}
		state.addMessageCount();
		state.getTreeModel().addChild(forumMessageReply.getParentMessage().getMessageId(), forumMessageReply.getMessageId());
		state.setLastPost(forumMessageReply);
		state.setModifiedDate(forumMessageReply.getModifiedDate());
		this.forum.addNewMessage(forumMessageReply);
	}
	
	public synchronized void updateMessage(ForumMessage forumMessage){
		state.setLastPost(forumMessage);
		state.setModifiedDate(forumMessage.getModifiedDate());
		this.forum.updateNewMessage(forumMessage);
		
		if (forumMessage.isRoot()){//update a message in this thread
			this.setRootMessage(forumMessage);
		}
	}

	public boolean isLeaf(ForumMessage forumMessage) {
		if (!this.isEmbedded()){
			System.err.print("this thread is not embedded, threadId = " + threadId + " " + this.hashCode());
			return false;
		}
		
		boolean ret = false;
		try {
			TreeModel treeModel = state.getTreeModel();
			ret = treeModel.isLeaf(forumMessage.getMessageId());
		} catch (Exception e) {
			String error = e + " isLeaf forumMessageId=" + forumMessage.getMessageId();
			System.err.print(error);
		}
		return ret;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -