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

📄 forumbuilder.java

📁 JiveJdon 3.0 is the application of Jdon Framework 1.4 final.
💻 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.repository;

import org.apache.log4j.Logger;

import com.jdon.jivejdon.dao.AccountDao;
import com.jdon.jivejdon.dao.ForumDao;
import com.jdon.jivejdon.dao.MessageDao;
import com.jdon.jivejdon.dao.MessageQueryDao;
import com.jdon.jivejdon.model.Account;
import com.jdon.jivejdon.model.Forum;
import com.jdon.jivejdon.model.ForumMessage;
import com.jdon.jivejdon.model.ForumState;
import com.jdon.jivejdon.model.ForumThread;
import com.jdon.jivejdon.model.ForumThreadState;

/**
 * Build a full Forum or a ForumMessage or a ForumThread.
 * Embed a Model into a Model 
 * @author <a href="mailto:banqJdon<AT>jdon.com">banq</a>
 *
 */
public class ForumBuilder {
    private final static Logger logger = Logger.getLogger(ForumBuilder.class);
    
    private ForumDao forumDao;
    private MessageDao messageDao;
    private AccountDao accountDao;
    private MessageQueryDao messageQueryDao;
    
    /**
     * @param forumDao
     * @param messageDao
     * @param accountDao
     * @param messageQueryDao
     */
    public ForumBuilder(ForumDao forumDao, MessageDao messageDao, AccountDao accountDao, MessageQueryDao messageQueryDao) {
        this.forumDao = forumDao;
        this.messageDao = messageDao;
        this.accountDao = accountDao;
        this.messageQueryDao = messageQueryDao;
    }
    
    
    public Forum getForum(Long forumId){
        logger.debug(" enter getForum for forumId=" + forumId);
        if (forumId == null) return null;
        Forum forum = forumDao.getForum(forumId);
        if (forum.isEmbedded()) 
            return forum;
         
        loadForumState(forum);
        forum.setEmbedded(true);
        return forum;
    }
    
   
    public ForumMessage getMessage(Long messageId, Forum forum) {
        logger.debug(" enter get a full Message for id=" + messageId);
        ForumMessage forumMessage = null;
		try {
			forumMessage = messageDao.getMessage(messageId);
			if (forumMessage == null){
			    logger.error("no this message in database id=" + messageId);
			    return null;
			}             
			if(forumMessage.isEmbedded()) return forumMessage;
			
			logger.debug("Embed Message ---->  start id=" + messageId);        
			if (forum == null)
			    forum = getForum(forumMessage.getForum().getForumId());
			forumMessage.setForum(forum);
			
			logger.debug("Embed Message ---->  embed thread start");
			Long threadId = forumMessage.getForumThread().getThreadId();
			ForumThread forumThread = getThread(threadId, forum);         
			forumMessage.setForumThread(forumThread);
			logger.debug("Embed Message ---->  embed thread end");
     
			embedAccount(forumMessage);
			forumMessage.setEmbedded(true);
			logger.debug("Embed Message ---->  end id=" + messageId);
		} catch (Exception e) {
			logger.error(e);
		}
        return forumMessage;
    }
    
    private void  embedAccount(ForumMessage forumMessage) {
        logger.debug(" embed getAccount");
        Account account = accountDao.getAccount(forumMessage.getAccount().getUserId());
        //get messageCount of the account;
        int count = messageQueryDao.getMessageCountOfUser(account.getUserIdLong());
        account.setMessageCount(count);        
        forumMessage.setAccount(account);
    }    
    
    
    private ForumMessage getLastPostMessage(Long messageId, ForumThread forumThread) {
        logger.debug(" enter get getLastPostMessage for id=" + messageId + " for threadId=" + forumThread.getThreadId());
        ForumMessage forumMessage = null;
		try {
			if (forumThread == null) {
			    return null;
			}
			forumMessage = messageDao.getMessage(messageId);        
			if(forumMessage.isEmbedded()) return forumMessage;
			
			forumMessage.setForum(forumThread.getForum());
			forumMessage.setForumThread(forumThread);
     
			embedAccount(forumMessage);
			logger.debug("getLastPostMessage  ---->  end id=" + messageId);
		} catch (Exception e) {
			logger.error(e);
		}
        return forumMessage;
    }
  
    
    /**
     * return a full ForumThread
     * one ForumThread has one rootMessage
     * need solve the realtion with Forum rootForumMessage lastPost
     * 
     * @param threadId
     * @return
     */
    public ForumThread getThread(Long threadId, Forum forum) {
        logger.debug("TH----> enter getThread, threadId=" + threadId);
        ForumThread forumThread = null;
		try {
			forumThread = messageDao.getThread(threadId);
			if (forumThread == null) {
			    logger.error("no this forumThread in database threadId=" + threadId);
			    return null;
			}
			if (forumThread.isEmbedded())
			    return forumThread;
			
			logger.debug("<Embed ForumThread---->  start, threadId=" + threadId);
			if (forum == null)
			    forum = getForum(forumThread.getForum().getForumId());
			
			forumThread.setForum(forum);
			
			//2.embed Root ForumMessage
			logger.debug("<Embed ForumThread----> embed the root forummessage start, threadId=" + threadId );
			Long rootmessageId = forumThread.getRootMessage().getMessageId();
			ForumMessage rootforumMessage = messageDao.getMessage(rootmessageId);
			logger.debug("!!!!!!!!!!!!!!1" );
			if (rootforumMessage == null){
				logger.error("not found the root message, transaction error! , messageId=" + rootmessageId);
				return null;
			}
			rootforumMessage.setForum(forum);
			rootforumMessage.setForumThread(forumThread);
			forumThread.setRootMessage(rootforumMessage);
			embedAccount(rootforumMessage);
			logger.debug("<Embed ForumThread----> embed the root forummessage end, threadId=" + threadId);
			
			forumThread.setName(rootforumMessage.getSubject());
			
			loadThreadState(forumThread);
			forumThread.setEmbedded(true);
			logger.debug("<Embed ForumThread---->  end, threadId=" + threadId);
		} catch (Exception e) {
			logger.error(e);
		}
        
        return forumThread;
        
    }
   
    
    public void loadForumState(Forum forum) {        
        
        try {
			ForumState forumState  = forum.getForumState();
			if (forumState != null) return;
			
			logger.debug(" loadForumState for forumId=" + forum.getForumId());
			forumState = forumDao.getForumState(forum.getForumId());
			forum.setForumState(forumState);        
			if (forumState.getLastPost() == null) return;
			
			Long messageId = forumState.getLastPost().getMessageId();
			ForumMessage forumMessage = getMessage(messageId, forum);
			forumState.setLastPost(forumMessage);
		} catch (Exception e) {
			logger.error(e);
		}
    }
    
    
    public void loadThreadState(ForumThread forumThread ) {
        try {
			ForumThreadState forumThreadState = forumThread.getForumThreadState();
			if (forumThreadState != null) return ;
			
			logger.debug(" loadThreadState for forumThread=" + forumThread.getThreadId());
			forumThreadState = messageQueryDao.getForumThreadState(forumThread);
			forumThread.setForumThreadState(forumThreadState);
			if (forumThreadState.getLastPost() == null) return;

			Long messageId = forumThreadState.getLastPost().getMessageId();
			logger.debug("loadThreadState : last post : " + messageId);
			ForumMessage lstForumMessage = getLastPostMessage(messageId, forumThread);
			forumThreadState.setLastPost(lstForumMessage);
			
			//clear the TreeModel
			forumThread.setTreeModel(null);
		} catch (Exception e) {
			logger.error(e);
		}
    }

    /**
     * @return Returns the accountDao.
     */
    public AccountDao getAccountDao() {
        return accountDao;
    }
    /**
     * @return Returns the forumDao.
     */
    public ForumDao getForumDao() {
        return forumDao;
    }
    /**
     * @return Returns the messageDao.
     */
    public MessageDao getMessageDao() {
        return messageDao;
    }
    /**
     * @return Returns the messageQueryDao.
     */
    public MessageQueryDao getMessageQueryDao() {
        return messageQueryDao;
    }
    
   
}

⌨️ 快捷键说明

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