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

📄 messagerepository.java

📁 JiveJdon 3.0 is the application of Jdon Framework 1.4 final.
💻 JAVA
字号:
/*
 * Copyright 2003-2006 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 java.sql.SQLException;
import java.util.List;

import org.apache.log4j.Logger;

import com.jdon.controller.events.EventModel;
import com.jdon.controller.model.PageIterator;
import com.jdon.jivejdon.Constants;
import com.jdon.jivejdon.dao.MessageDaoFacade;
import com.jdon.jivejdon.dao.util.ToolsUtil;
import com.jdon.jivejdon.manager.TreeManager;
import com.jdon.jivejdon.manager.message.MessagePropsManager;
import com.jdon.jivejdon.model.Forum;
import com.jdon.jivejdon.model.ForumMessage;
import com.jdon.jivejdon.model.ForumMessageReply;
import com.jdon.jivejdon.model.ForumThread;
import com.jdon.jivejdon.model.query.HotMessageCriteria;
import com.jdon.jivejdon.model.query.MultiCriteria;
import com.jdon.jivejdon.model.query.QueryCriteria;

/**
 * Kernel of Message business operations
 * 
 * @author banq(http://www.jdon.com)
 *
 */
public class MessageRepository  extends ThreadRepository{
    private final static Logger logger = Logger.getLogger(MessageRepository.class);
    
    protected MessageDaoFacade messageDaoFacade;
    protected ForumBuilder forumBuilder;
    protected TreeManager treeManager;
    protected MessagePropsManager messagePropsManager;
    
    public MessageRepository(MessageDaoFacade messageDaoFacade,
            ForumBuilder forumBuilder, 
            TreeManager treeManager,
            MessagePropsManager messagePropsManager){
    	super(messageDaoFacade, forumBuilder, treeManager, messagePropsManager);
        this.messageDaoFacade = messageDaoFacade;
        this.forumBuilder = forumBuilder;
        this.treeManager = treeManager;
        this.messagePropsManager = messagePropsManager;
    }
    
    /**
     * get the full forum in forumMessage, and return it.
     */
    public ForumMessage initMessage(EventModel em) {
        logger.debug(" enter service: initMessage ");
        ForumMessage forumMessage = (ForumMessage) em.getModelIF();
        try {
            if (forumMessage.getForum() == null) {
                logger.error(" no Forum in this ForumMessage");
                return forumMessage;
            }
            Long forumId = forumMessage.getForum().getForumId();
            logger.debug(" paremter forumId =" + forumId);
            Forum forum = forumBuilder.getForum(forumId);
            forumMessage.setForum(forum);
        } catch (Exception e) {
            logger.error(e);
        }
        return forumMessage;
    }
    
    public ForumMessage initReplyMessage(EventModel em) {
        logger.debug(" enter service: initReplyMessage ");
        ForumMessageReply forumMessageReply = (ForumMessageReply)initMessage(em);
        try {
            Long pmessageId= forumMessageReply.getParentMessage().getMessageId();
            if (pmessageId == null){
                logger.error(" no the parentMessage.messageId parameter");
                return null;
            }
            ForumMessage pMessage = forumBuilder.getMessage(pmessageId, forumMessageReply.getForum());
            forumMessageReply.setParentMessage(pMessage);
            forumMessageReply.setSubject("回复:" + pMessage.getSubject());
        } catch (Exception e) {
            logger.error(e);
        }
        return forumMessageReply;
    }    
  
    /*
     * return a full ForumMessage need solve the relations with Forum
     * ForumThread parentMessage
     */
    public ForumMessage getMessage(Long messageId) {
       return forumBuilder.getMessage(messageId, null);
    }
    
    /*
     * create the topic message
     */
    public void createTopicMessage(EventModel em) throws Exception {
    	super.createTopicMessage(em);
        logger.debug(" enter service: createMessage ");
        ForumMessage forumMessage = (ForumMessage)em.getModelIF();
        Forum forum = forumBuilder.getForum(forumMessage.getForum().getForumId());
        if (forum == null){
            logger.error(" no this forum, forumId = " + forumMessage.getForum().getForumId());
            em.setErrors(Constants.ERRORS);
            return;            
        }
        forumMessage.setForum(forum);
        try {
            ForumThread forumThread = super.createThread(forumMessage);
            forumMessage.setForumThread(forumThread);
            messageDaoFacade.getMessageDao().createMessage(forumMessage);
        } catch (Exception e) {
            logger.error(e);
            throw new Exception(e);
           
        }
    }
    
    
    /**
     * the relation about creating reply forumMessage only need a parameter : parent message.
     * we can get the Forum or ForumThread from the parent message.
     * the hypelink parameter in jsp must be a paremeter: the Id of parent message.
     * 
     */
    public void createReplyMessage(EventModel em) throws Exception {      
    	super.createReplyMessage(em);
        try {
            ForumMessage forumReplyMessage = (ForumMessage)em.getModelIF();
            logger.debug(" enter service: createReplyMessage ...." );
            ForumMessageReply forumMessage = (ForumMessageReply)forumReplyMessage;
            if ((forumMessage.getParentMessage() == null) || (forumMessage.getParentMessage().getMessageId() == null)){
                logger.error("parentMessage is null, this is not reply message!");
                em.setErrors(Constants.ERRORS);
                return;
            }
            //verify the parentMessageId existed.
            ForumMessage pforumMessage = messageDaoFacade.getMessageDao().getMessage(forumMessage.getParentMessage().getMessageId());
            if (pforumMessage == null){
                logger.error("not this parent Message: " + forumMessage.getParentMessage().getMessageId());
                em.setErrors(Constants.ERRORS);
                return;                
            }
            forumMessage.setForum(pforumMessage.getForum());
            forumMessage.setForumThread(pforumMessage.getForumThread());
            
            //update thread
            forumMessage.getForumThread().setModifiedDate(forumMessage.getModifiedDate());
            super.updateThread(forumMessage.getForumThread());
                  
            //create
            messageDaoFacade.getMessageDao().createMessageReply(forumMessage);
            
                         
            
        } catch (Exception e) {
            logger.error(e);
            throw new Exception(e);
        }
    }
  
    
    /* 
     * update the message, 
     * update the message's subject and body
     * we must mark the message that has been updated.
     * there are two kinds of parameters: the primary key /new entity data 
     * in DTO ForumMessage of the method patameter   
     * 
     */
    public void updateMessage(EventModel em) throws Exception {
    	super.updateMessage(em);
        ForumMessage modForumMessage = (ForumMessage)em.getModelIF();
        logger.debug(" enter updateMessage id =" + modForumMessage.getMessageId());
        ForumMessage forumMessage = getMessage(modForumMessage.getMessageId());
        if (forumMessage == null) return;
       
        try {            
            forumMessage.setBody(modForumMessage.getBody());
            forumMessage.setSubject(modForumMessage.getSubject());       
            messageDaoFacade.getMessageDao().updateMessage(forumMessage);
            
            //update the forumThread
            forumMessage.getForumThread().setModifiedDate(forumMessage.getModifiedDate());
            super.updateThread(forumMessage.getForumThread());
            
        } catch (Exception e) {
            logger.error(e);
            throw new Exception(e);
        }
        em.setModelIF(forumMessage);
    }
    
    /*
     * delete a message and not inlcude its childern
     */
    public void deleteMessage(EventModel em) throws Exception {        
        ForumMessage delforumMessage = (ForumMessage)em.getModelIF();
        if ((delforumMessage == null) || (delforumMessage.getMessageId() == null))
            return;
        
        delforumMessage = getMessage(delforumMessage.getMessageId());
        if (delforumMessage == null){
            logger.equals("the messageId that will be deleted don't existed: "+ delforumMessage.getMessageId());
            return;
        }
        em.setModelIF(delforumMessage);
        try {
        	messageDaoFacade.getMessageDao().deleteMessage(delforumMessage.getMessageId());
              
            ForumThread forumThread = delforumMessage.getForumThread();
            //if the root message was deleted, the thread that it be in
            //will all be deleted
            if (delforumMessage.getMessageId().longValue() == 
                forumThread.getRootMessage().getMessageId().longValue()){
                logger.debug("1. it is a root message, delete the forumThread");
                super.deleteThread(forumThread);
            } 
          
        } catch (Exception e) {
            logger.error(e);
            throw new Exception(e);
        }
    }
    
    /**
     * delete a message and inlcude its childern
     * @throws Exception TODO
     */
    public void deleteRecursiveMessage(EventModel em) throws Exception{
        ForumMessage delforumMessage = (ForumMessage)em.getModelIF();
        if ((delforumMessage == null) || (delforumMessage.getMessageId() == null))
            return;
     
        delforumMessage = getMessage(delforumMessage.getMessageId());
        if (delforumMessage == null){
            logger.error("the messageId that will be deleted don't existed: "+ delforumMessage.getMessageId());
            return;
        }
        em.setModelIF(delforumMessage);
        try {
            logger.debug("1. delete the node and its childern");       
            treeManager.deleteForumMessageNode(delforumMessage);
                  
            ForumThread forumThread = delforumMessage.getForumThread();
            //if the root message was deleted, the thread that it be in
            //will all be deleted
            if (delforumMessage.getMessageId().longValue() == 
                forumThread.getRootMessage().getMessageId().longValue()){
                logger.debug("1. it is a root message, delete the forumThread");
                super.deleteThread(forumThread);
            }
           
        } catch (Exception e) {
            logger.error(e);
            throw new Exception(e);
        } 

    }
 
   
    
    /**
     * get a message Collection of the parentMessage.
     * we use TreeModel implements it .
     */
    public PageIterator getRecursiveMessages(Long messageId, int start, int count){
        logger.debug("enter getRecursiveMessages, start=" + start + " count=" + count);
        ForumMessage forumMessage = getMessage(messageId);
        if (forumMessage == null){
            logger.error("the messageId  don't existed: "+ messageId);
            return new PageIterator();
        }
        int allCount = 0;
        List sublist = null;
        try {          
            List childernList = treeManager.getRecursiveChildren(forumMessage);               
            //2. get a sub list from the all List by start and count
            logger.debug(" get the sub-collection for start=" + start + " childernList size" + childernList.size());
            int end = start + count;
            sublist = childernList.subList(start, (end < childernList.size())?end:childernList.size());
            return new PageIterator(childernList.size(), sublist.toArray());
        } catch (Exception e) {
            logger.error(e);
        }
        return new PageIterator();
    }

    
    /* (non-Javadoc)
     * @see com.jdon.jivejdon.service.ForumMessageService#getMessages(java.lang.String, int, int)
     */
    public PageIterator getMessages(Long threadId, int start, int count) {
        if ((threadId == null) || (threadId.longValue() == 0))
            return new PageIterator();
        return messageDaoFacade.getMessageQueryDao().getMessages(threadId, start, count);
    }
    
    public PageIterator getThreads(QueryCriteria msc, int start, int count) {
    	return messageDaoFacade.getMessageQueryDao().getThreads(msc, start, count);
    }
    
    public  Long getNextId(int idType) throws Exception{
        Long mIDInt = new Long(0);
        try {
            mIDInt = messageDaoFacade.getSequenceDao().getNextId(Constants.MESSAGE);
        } catch (SQLException e) {
            logger.error(e);
            throw new Exception(e);
        }
        return mIDInt;
    }
    
  
    /**
     * @return Returns the forumBuilder.
     */
    public ForumBuilder getForumBuilder() {
        return forumBuilder;
    }
    /**
     * @return Returns the messageDaoFacade.
     */
    public MessageDaoFacade getMessageDaoFacade() {
        return messageDaoFacade;
    }
    /**
     * @return Returns the treeManager.
     */
    public TreeManager getTreeManager() {
        return treeManager;
    }
}

⌨️ 快捷键说明

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