📄 threadbuilder.java
字号:
/*
* Copyright 2007 the original author or jdon.com
*
* 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.repository.builder;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import org.apache.log4j.Logger;
import com.jdon.controller.model.ModelIF;
import com.jdon.jivejdon.dao.MessageDao;
import com.jdon.jivejdon.dao.MessageQueryDao;
import com.jdon.jivejdon.model.Forum;
import com.jdon.jivejdon.model.ForumMessage;
import com.jdon.jivejdon.model.ForumThread;
import com.jdon.jivejdon.model.ForumThreadState;
import com.jdon.jivejdon.repository.TagRepository;
import com.jdon.treepatterns.model.TreeModel;
public class ThreadBuilder {
private final static Logger logger = Logger.getLogger(ThreadBuilder.class);
private final MessageDao messageDao;
private final TagRepository tagRepository;
private final MessageQueryDao messageQueryDao;
private ForumAbstractFactory forumAbstractFactory;
public ThreadBuilder(MessageDao messageDao, TagRepository tagRepository, MessageQueryDao messageQueryDao) {
this.messageDao = messageDao;
this.tagRepository = tagRepository;
this.messageQueryDao = messageQueryDao;
}
public void setForumAbstractFactory(ForumAbstractFactory forumAbstractFactory) {
this.forumAbstractFactory = forumAbstractFactory;
}
public ForumThread create(Long threadId) {
return messageDao.getThread(threadId);
}
public void buildRootMessage(ForumThread forumThread, ForumMessage rootForumMessage, Forum forum) throws Exception {
try {
Long rootmessageId = forumThread.getRootMessage().getMessageId();
if ((rootForumMessage == null) || !rootForumMessage.isRoot() || rootForumMessage.getMessageId().longValue() != rootmessageId.longValue()) {
rootForumMessage = forumAbstractFactory.messageDirector.getMessage(rootmessageId, forumThread, forum);
}
forumThread.setRootMessage(rootForumMessage);
rootForumMessage.setForumThread(forumThread);
forumThread.setName(rootForumMessage.getSubject());
rootForumMessage.setTagTitle(tagRepository.getThreadTagTitles(forumThread));
} catch (Exception e) {
String error = e + " buildRootMessage forumThreadId=" + forumThread.getThreadId();
logger.error(error);
throw new Exception(error);
}
}
public void buildForum(ForumThread forumThread, ForumMessage rootForumMessage, Forum forum) throws Exception {
try {
if ((forum == null) || (forum.getForumId().longValue() != forumThread.getForum().getForumId().longValue())){
forum = forumAbstractFactory.forumDirector.getForum(forumThread.getForum().getForumId(), forumThread, rootForumMessage);
}
forumThread.setForum(forum);
} catch (Exception e) {
String error = e + " buildRootMessage forumThreadId=" + forumThread.getThreadId();
logger.error(error);
throw new Exception(error);
}
}
public void buildProperties(ForumThread forumThread) {
forumThread.setTags(tagRepository.getThreadTags(forumThread));
}
/**
* get a state of a thread
* forumThreadState.setTreeModel(treeModel);
* @param forumThread
*/
public void buildTreeModel(final ForumThread forumThread) throws Exception {
try {
FutureTask<TreeModel> ft = new FutureTask(new Callable<TreeModel>() {
public TreeModel call() throws Exception {
return messageQueryDao.getTreeModel(forumThread.getThreadId(), forumThread.getRootMessage().getMessageId());
}
});
ft.run();
ForumThreadState forumThreadState = forumThread.getState();
forumThreadState.setFutureTask(ft);
} catch (Exception e) {
String error = e + " buildInitState forumThreadId=" + forumThread.getThreadId();
logger.error(error);
throw new Exception(error);
}
}
public void buildState(ForumThread forumThread, ForumMessage rootMessage, MessageDirector messageDirector) throws Exception {
try {
ForumThreadState forumThreadState = forumThread.getState();
logger.debug(" buildPartyState for forumThread=" + forumThread.getThreadId());
Long lastMessageId = messageQueryDao.getLastPostMessageId(forumThread.getThreadId());
if (lastMessageId == null) {
logger.warn("maybe first running, not found lastMessageId for forumthreadId: " + forumThread.getThreadId());
return;
}
ForumMessage lastMessage = rootMessage;
if ((rootMessage == null) || (rootMessage.getMessageId().longValue() != lastMessageId.longValue()))
lastMessage = messageDirector.getMessage(lastMessageId, forumThread, forumThread.getForum());
// update a shared object's value the laspost type must be
forumThreadState.setLastPost(lastMessage);
forumThreadState.setModifiedDate(lastMessage.getModifiedDate());
lastMessage.setForumThread(forumThread);
int count = messageQueryDao.getMessageCount(forumThread.getThreadId());
forumThreadState.setMessageCount(count);
logger.debug(" buildPartyState for forumThread=" + forumThread.getThreadId());
} catch (Exception e) {
String error = e + " buildComponentState forumThreadId=" + forumThread.getThreadId();
logger.error(error);
throw new Exception(error);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -