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

📄 forummessagequeryserviceimp.java

📁 非常有影响的 j道 论 坛 源码 国外很有明的专家编写的 ....对java爱好者很有参考价值
💻 JAVA
字号:
package com.jdon.jivejdon.service.imp.message;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;

import com.jdon.annotation.intercept.Poolable;
import com.jdon.controller.model.PageIterator;
import com.jdon.jivejdon.dao.MessageQueryDao;
import com.jdon.jivejdon.manager.QueryManager;
import com.jdon.jivejdon.manager.TreeManager;
import com.jdon.jivejdon.model.Account;
import com.jdon.jivejdon.model.ForumMessage;
import com.jdon.jivejdon.model.ForumThread;
import com.jdon.jivejdon.model.query.MessageSearchSpec;
import com.jdon.jivejdon.model.query.MultiCriteria;
import com.jdon.jivejdon.model.query.QueryCriteria;
import com.jdon.jivejdon.model.query.ResultSort;
import com.jdon.jivejdon.repository.AccountFactory;
import com.jdon.jivejdon.repository.builder.ForumAbstractFactory;
import com.jdon.jivejdon.service.ForumMessageQueryService;

@Poolable
public class ForumMessageQueryServiceImp implements ForumMessageQueryService {
	private final static Logger logger = Logger.getLogger(ForumMessageQueryServiceImp.class);

	protected MessageQueryDao messageQueryDao;

	protected AccountFactory accountFactory;

	protected QueryManager queryManager;

	protected TreeManager treeManager;

	protected ForumAbstractFactory forumBuilder;

	public ForumMessageQueryServiceImp(MessageQueryDao messageQueryDaoy, AccountFactory accountFactory, QueryManager queryManager, TreeManager treeManager, ForumAbstractFactory forumBuilder) {
		this.accountFactory = accountFactory;
		this.queryManager = queryManager;
		this.messageQueryDao = messageQueryDaoy;
		this.treeManager = treeManager;
		this.forumBuilder = forumBuilder;

	}

	/**
	 * 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");
		logger.debug("enter getRecursiveMessages, start=" + start + " count=" + count);
		ForumMessage forumMessage = forumBuilder.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) {
		logger.debug("enter getMessages");
		if ((threadId == null) || (threadId.longValue() == 0))
			return new PageIterator();
		return messageQueryDao.getMessages(threadId, start, count);
	}

	public PageIterator searchMessages(String query, int start, int count) {
		logger.debug("enter searchMessages");
		PageIterator pi = new PageIterator();
		try {
			List messageSearchSpecs = (List) messageQueryDao.find(query, start, count);
			int allCount = 0;
			if (messageSearchSpecs.size() > 0) {
				logger.debug("enter package  PageIterator");
				Iterator iter = messageSearchSpecs.iterator();
				while (iter.hasNext()) {
					MessageSearchSpec mss = (MessageSearchSpec) iter.next();
					ForumMessage message = forumBuilder.getMessage(mss.getMessageId());
					mss.setMessage(message);
					allCount = mss.getResultAllCount();
				}
				pi = new PageIterator(allCount, messageSearchSpecs.toArray());
				//this will let ModelListAction not call getmessageSearchSpecs method
				pi.setElementsTypeIsKey(false);
			}
		} catch (Exception e) {
			logger.error(e);
		}
		return pi;
	}
	


	public PageIterator searchThreads(String query, int start, int count) {
		logger.debug("enter searchThreads");
		PageIterator pi = new PageIterator();
		try {
			List messageSearchSpecs = (List) messageQueryDao.findThread(query, start, count);
			int allCount = 0;
			if (messageSearchSpecs.size() > 0) {
				logger.debug("enter package  PageIterator");
				Iterator iter = messageSearchSpecs.iterator();
				while (iter.hasNext()) {
					MessageSearchSpec mss = (MessageSearchSpec) iter.next();
					ForumMessage message = forumBuilder.getMessage(mss.getMessageId());
					mss.setMessage(message);
					allCount = mss.getResultAllCount();
				}
				pi = new PageIterator(allCount, messageSearchSpecs.toArray());
				//this will let ModelListAction not call getmessageSearchSpecs method
				pi.setElementsTypeIsKey(false);
			}
		} catch (Exception e) {
			logger.error(e);
		}
		return pi;
	}
	
	
	/**
	 * return query result for FourmMessage, it sorted by modifidate.
	 */
	public PageIterator getMessages(QueryCriteria qc, int start, int count) {
		logger.debug("enter getMessages for QueryCriteria");
		if (qc instanceof MultiCriteria) {
			//transfer msc username to userId;
			MultiCriteria mc = (MultiCriteria) qc;
			String username = mc.getUsername();
			if (username != null) {
				Account accountIn = new Account();
				accountIn.setUsername(username);
				Account account = accountFactory.getFullAccount(accountIn);
				if (account != null)
					mc.setUserID(account.getUserId());
				else
					mc.setUserID(username);
			}
			return messageQueryDao.getMessages(qc, start, count);
		} else {
			logger.error("it is not MultiCriteria");
			return new PageIterator();
		}
	}
	
	public PageIterator getMessageReplys(QueryCriteria qc, int start, int count) {
		logger.debug("enter getMessages for QueryCriteria");
		if (qc instanceof MultiCriteria) {
			//transfer msc username to userId;
			MultiCriteria mc = (MultiCriteria) qc;
			String username = mc.getUsername();
			if (username != null) {
				Account accountIn = new Account();
				accountIn.setUsername(username);
				Account account = accountFactory.getFullAccount(accountIn);
				if (account != null)
					mc.setUserID(account.getUserId());
				else
					mc.setUserID(username);
			}
			return messageQueryDao.getMessageReplys(qc, start, count);
		} else {
			logger.error("it is not MultiCriteria");
			return new PageIterator();
		}
	}
	
	public PageIterator getThreads(QueryCriteria qc, int start, int count) {
		logger.debug("enter getMessages for QueryCriteria");
		if (qc instanceof MultiCriteria) {
			//transfer msc username to userId;
			MultiCriteria mc = (MultiCriteria) qc;
			String username = mc.getUsername();
			if (username != null) {
				Account accountIn = new Account();
				accountIn.setUsername(username);
				Account account = accountFactory.getFullAccount(accountIn);
				if (account != null)
					mc.setUserID(account.getUserId());
				else
					mc.setUserID(username);
			}
			return messageQueryDao.getThreads(qc, start, count);
		} else {
			logger.error("it is not MultiCriteria");
			return new PageIterator();
		}
	}

	/* 
	 * return query result for FourmThread, it sorted by thread modifidate.
	 */
	public PageIterator getThreads(Long forumId, int start, int count, ResultSort resultSort) {
		logger.debug("enter getThreads");
		return messageQueryDao.getThreads(forumId, start, count, resultSort);
	}
	
	public PageIterator getThreads(int start, int count, ResultSort resultSort){
		return messageQueryDao.getThreads(start, count, resultSort);
	}

	private ForumThread getThread(Long threadId) {
		return forumBuilder.getThread(threadId);

	}

	/* (non-Javadoc)
	 * @see com.jdon.jivejdon.service.ForumMessageService#getThreadsPrevNext(java.lang.String, int)
	 */
	public List getThreadsPrevNext(Long currentThreadId) {
		List threads = new ArrayList();
		logger.debug("enter getThreadsPrevNext");
		try {
			ForumThread thread = getThread(currentThreadId);
			if (thread == null) {
				return new ArrayList();
			}
			List resultIds = messageQueryDao.getThreadsPrevNext(thread.getForum().getForumId(), currentThreadId);

			int index = resultIds.indexOf(currentThreadId);
			logger.debug(" found the block ,size:" + resultIds.size() + " the index=" + index);
			if (index == -1)
				return new ArrayList();

			//transfer the forumThread from threadId Collection from the resultIds;

			if (index >= 1) {
				Long prevThreadId = (Long) resultIds.get(index - 1);
				logger.debug(" prevThreadId=" + prevThreadId);
				threads.add(getThread(prevThreadId));
			}
			threads.add(getThread(currentThreadId));
			if (index < (resultIds.size() - 1)) {
				Long nextThreadId = (Long) resultIds.get(index + 1);
				logger.debug(" nextThreadId=" + nextThreadId);
				threads.add(getThread(nextThreadId));
			}
		} catch (Exception e) {
			logger.error(currentThreadId + "" + e);
		}
		return threads;
	}

	/**
	 * return query result for FourmThread, it sorted by message replies.
	 * call from ThreadHotAction
	 * getHotThreads is in object sorted not by SQL.
	 * 
	 */

	public PageIterator getHotThreads(QueryCriteria qc, int start, int count) {
		logger.debug("enter getThreads for QueryCriteria, messageReplyCountWindow =" + qc.getMessageReplyCountWindow());
		return queryManager.getHotThreadPageKeys(qc, start, count);
	}

	/**
	 * call from ThreadPopularAction
	 * this method is simple than getHotThreads, only for one page , no multi pages.
	 * no messageReplyCountWindow, donot need sorted by message replies
	 * popularThreads will get result from SQL.
	 * 
	 */
	public PageIterator popularThreads(int popularThreadsWindow, int count) {
		PageIterator pi = messageQueryDao.popularThreads(getQueryCriteria(popularThreadsWindow), count);
		if (pi.getAllCount() < count) {//reload before 30 days
			pi = messageQueryDao.popularThreads(getQueryCriteria(30), count);// 
		}
		return pi;
	}

	private QueryCriteria getQueryCriteria(int popularThreadsWindow) {
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DAY_OF_YEAR, -popularThreadsWindow);

		QueryCriteria queryCriteria = new QueryCriteria();
		String year = Integer.toString(cal.get(Calendar.YEAR));
		String month = Integer.toString(cal.get(Calendar.MONTH) + 1);
		String day = Integer.toString(cal.get(Calendar.DAY_OF_MONTH));
		queryCriteria.setFromDate(year, month, day);
		return queryCriteria;
	}

}

⌨️ 快捷键说明

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