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

📄 messagetransactionpersistence.java

📁 jive论坛使得不时地好的不好的jive论坛使得不时地好的不好的
💻 JAVA
字号:
package com.jdon.jivejdon.service.imp.message;

import javax.transaction.TransactionManager;

import org.apache.log4j.Logger;

import com.jdon.controller.events.EventModel;
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.repository.MessageRepository;
import com.jdon.jivejdon.repository.TagRepository;
import com.jdon.jivejdon.repository.builder.ForumAbstractFactory;
import com.jdon.jivejdon.service.util.JtaTransactionUtil;

public class MessageTransactionPersistence {
	private final static Logger logger = Logger.getLogger(MessageTransactionPersistence.class);

	protected JtaTransactionUtil jtaTransactionUtil;
	protected MessageRepository messageRepository;
	protected TagRepository tagRepository;
	protected ForumAbstractFactory forumAbstractFactory;
	
	public MessageTransactionPersistence(JtaTransactionUtil jtaTransactionUtil, MessageRepository messageRepository, TagRepository tagRepository,
			ForumAbstractFactory forumAbstractFactory) {
		super();
		this.jtaTransactionUtil = jtaTransactionUtil;
		this.messageRepository = messageRepository;
		this.tagRepository = tagRepository;
		this.forumAbstractFactory = forumAbstractFactory;
	}

	public void insertTopicMessage(EventModel em) throws Exception {
		logger.debug("enter createTopicMessage");
		ForumMessage forumMessage = (ForumMessage) em.getModelIF();
		TransactionManager tx = jtaTransactionUtil.getTransactionManager();
		try {
			tx.begin();
			messageRepository.createTopicMessage(forumMessage);
			logger.debug("createTopicMessage ok!");
			tx.commit();
		} catch (Exception e) {
			jtaTransactionUtil.rollback(tx);
			String error = e + " createTopicMessage forumMessageId=" + forumMessage.getMessageId();
			logger.error(error);
			throw new Exception(error);
		}
	}

	public void insertReplyMessage(EventModel em) throws Exception {
		logger.debug("enter createReplyMessage");
		ForumMessageReply forumMessageReply = (ForumMessageReply) em.getModelIF();
		if ((forumMessageReply.getParentMessage() == null) || (forumMessageReply.getParentMessage().getMessageId() == null)) {
			logger.error("parentMessage is null, this is not reply message!");
			return;
		}
		TransactionManager tx = jtaTransactionUtil.getTransactionManager();
		try {
			tx.begin();
			messageRepository.createReplyMessage(forumMessageReply);
			logger.debug("createReplyMessage ok!");
			tx.commit();
		} catch (Exception e) {
			jtaTransactionUtil.rollback(tx);
			String error = e + " createTopicMessage forumMessageId=" + forumMessageReply.getParentMessage().getMessageId();
			logger.error(error);
			throw new Exception(error);
		}

	}

	public void updateMessage(EventModel em) throws Exception {

		logger.debug("enter updateMessage");
		ForumMessage newForumMessageInputparamter = (ForumMessage) em.getModelIF();
		TransactionManager tx = jtaTransactionUtil.getTransactionManager();
		try {
			// merge
			tx.begin();
			messageRepository.updateMessage(newForumMessageInputparamter);

			ForumMessage forumMessage = this.forumAbstractFactory.getMessage(newForumMessageInputparamter.getMessageId());

			Long newforumId = newForumMessageInputparamter.getForum().getForumId();
			this.moveMessage(forumMessage, newforumId);

			// update the forumThread's updatetime
			messageRepository.updateThread(forumMessage.getForumThread());

			String[] tagTitles = newForumMessageInputparamter.getMessageVO().getTagTitle();
			tagRepository.mergeTagTitle(forumMessage.getForumThread(), tagTitles);

			tx.commit();
		} catch (Exception e) {
			jtaTransactionUtil.rollback(tx);
			String error = e + " updateMessage forumMessageId=" + newForumMessageInputparamter.getMessageId();
			logger.error(error);
			throw new Exception(error);
		}

	}
	
	private void moveMessage(ForumMessage forumMessage, Long forumId) throws Exception{
		// update moving a forum , when it is root message and has no reply.
		if ((forumMessage.getForumThread().isRoot(forumMessage)) && (forumMessage.isLeaf())) {
			if (forumId != null && forumId.intValue() != 0 && forumMessage.getForum().getForumId() != forumId) {
				// the message has been moved to a new forum
				Forum newForum = this.forumAbstractFactory.getForum(forumId);
				if (newForum != null){
					Long messageId = forumMessage.getMessageId();
					Long threadId = forumMessage.getForumThread().getThreadId();
					messageRepository.getMessageDaoFacade().getMessageDao().updateMovingForum(messageId, threadId, forumId);					
				}
					
			}						
			
		}
	}
	
	public void deleteMessage(ForumMessage delforumMessage) throws Exception {
		logger.debug("enter deleteMessage");
		TransactionManager tx = jtaTransactionUtil.getTransactionManager();
		try {
			tx.begin();
			this.messageRepository.deleteMessageComposite(delforumMessage);
			
			// if the root message was deleted, the thread that it be in
			// will all be deleted
			if (delforumMessage.getMessageId().longValue() == delforumMessage.getForumThread().getRootMessage().getMessageId().longValue()) {
				logger.debug("1. it is a root message, delete the forumThread");
				tagRepository.deleteTagTitle(delforumMessage.getForumThread());
				messageRepository.deleteThread(delforumMessage.getForumThread());
			}

			tx.commit();
			
		} catch (Exception e) {
			jtaTransactionUtil.rollback(tx);
			String error = e + " deleteMessage forumMessageId=" + delforumMessage.getMessageId();
			logger.error(error);
			throw new Exception(error);

		}
	}


}

⌨️ 快捷键说明

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