/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.board.service;

import java.util.List;

import net.javajigi.board.dao.BoardDAO;
import net.javajigi.board.dao.BoardFileDAO;
import net.javajigi.board.model.Board;
import net.javajigi.board.model.BoardFile;
import net.javajigi.common.util.DateTimeUtil;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * ÁÖ¼®À» ³Ö¾î ÁÖ¼¼¿ä. ¹è°¡ °íÆÄ¿ä.
 * 
 * @author ¹ÚÀç¼º(ÀÚ¹ÙÁö±â, javajigi@gmail.com)
 */
public class BoardServiceImpl implements BoardService {
	protected final Log logger = LogFactory.getLog(getClass());

	private BoardDAO boardDAO = null;

	private BoardFileDAO boardFileDAO = null;

	public void setBoardDAO(BoardDAO newBoardDAO) {
		this.boardDAO = newBoardDAO;
	}

	public void setBoardFileDAO(BoardFileDAO newBoardFileDAO) {
		this.boardFileDAO = newBoardFileDAO;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#create(net.javajigi.board.model.Board)
	 */
	public Board addBoard(Board board) {
		board
				.setCreateDate(DateTimeUtil
						.getDateTimeByPattern("yyyyMMddHHmmss"));
		Board result = boardDAO.insert(board);

		if (logger.isDebugEnabled()) {
			logger.debug("added new board!!. New Board ID : "
					+ result.getBoardNo());
		}

		boardFileDAO.insert(result.getBoardNo(), board.getBoardFiles());

		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#update(net.javajigi.board.model.Board)
	 */
	public Board updateBoard(Board board) {
		board
				.setCreateDate(DateTimeUtil
						.getDateTimeByPattern("yyyyMMddHHmmss"));
		Board result = boardDAO.update(board);
		if (logger.isDebugEnabled()) {
			logger.debug("updated board!!. Update Board ID : "
					+ result.getBoardNo());
		}

		boardFileDAO.insert(result.getBoardNo(), board.getBoardFiles());

		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#remove(int)
	 */
	public int removeBoard(int boardNo) {
		boardFileDAO.deleteByBoardNo(boardNo);
		return boardDAO.delete(boardNo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#findBoard(int)
	 */
	public Board findBoard(int boardNo) {
		Board board = boardDAO.findBoard(boardNo);
		board.setBoardFiles(boardFileDAO.findBoardFileList(boardNo));

		return board;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#findBoardWithView(int)
	 */
	public Board findBoardWithView(int boardNo) {
		boardDAO.updateHitCount(boardNo);

		return findBoard(boardNo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#findBoardFile(int)
	 */
	public BoardFile findBoardFile(int boardFileNo) {
		return boardFileDAO.findBoardFile(boardFileNo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#findBoardList(int, int)
	 */
	public List findBoardList(int currentPage, int countPerPage) {
		return boardDAO.findBoardList(currentPage, countPerPage);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#updateHitCount(int)
	 */
	public int updateHitCount(int boardNo) {
		return boardDAO.updateHitCount(boardNo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#removeBoardFile(int)
	 */
	public int removeBoardFile(int fileNo) {
		return boardFileDAO.deleteByBoardFileNo(fileNo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see net.javajigi.board.service.BoardService#getTotalNo()
	 */
	public int getBoardTotalCount() {
		return boardDAO.getTotalNo();
	}
}
