/**
 * ÀÌ ¼Ò½º´Â 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 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();
    }
}
