/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.board.dao;

import java.sql.Types;
import java.util.List;

import javax.sql.DataSource;

import net.javajigi.board.model.Board;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.SqlUpdate;

/**
 * ÁÖ¼®À» ³Ö¾î ÁÖ¼¼¿ä. ¹è°¡ °íÆÄ¿ä.
 * 
 * @author ¹ÚÀç¼º(ÀÚ¹ÙÁö±â, javajigi@gmail.com)
 */
public class SpringJDBCBoardDAO extends JdbcDaoSupport implements BoardDAO {
    private static final String INSERT_SQL = "INSERT INTO BOARD (boardno, title, name, email,"
            + "password, createdate, content) VALUES(?, ?, ?, ?, ?, ?, ?)";

    private static final String INSERT_BOARDFILE_SQL = "INSERT INTO BOARDFILE VALUES(?, ?, ?, ?)";

    private static final String UPDATE_SQL = "UPDATE BOARD SET title=?, name=?, email=?, content=? WHERE boardno=?";

    private static final String DELETE_SQL = "DELETE FROM BOARDFILE WHERE boardno=?";

    private static final String DELETE_BOARDFILE_SQL = "DELETE FROM BOARD WHERE boardno=?";

    private static final String SELECT_BY_BOARDNO = "SELECT title, name, email, password, createdate, content, hitcount FROM BOARD WHERE boardno=?";

    private static final String SELECT_BOARDFILE_BY_BOARDNO = "SELECT fileno, filename, tempfilename FROM BOARDFILE WHERE boardno=?";

    private static final String SELECT_LIST = "SELECT boardno, title, name, email, createdate, hitcount FROM BOARD ORDER BY CREATEDATE DESC";

    private Insert insert;

    protected void initDao() throws Exception {
        super.initDao();

        insert = new Insert(getDataSource());
    }

    /*
     * (non-Javadoc)
     * 
     * @see net.javajigi.board.dao.BoardDAO#create(net.javajigi.board.model.Board)
     */
    public Board insert(Board board) throws DataAccessException {
        Object[] values = { new Integer(board.getBoardNo()), board.getTitle(),
                board.getName(), board.getEmail(), board.getPassword(),
                board.getCreateDate(), board.getContent() };
        insert.update(values);
        
        return board;
    }

    class Insert extends SqlUpdate {
        public Insert(DataSource dataSource) {
            super(dataSource, INSERT_SQL);

            declareParameter(new SqlParameter(Types.INTEGER));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
        }
    }

    public int delete(int boardNo) throws DataAccessException {
        // TODO Auto-generated method stub
        return 0;
    }

    public Board findBoard(int boardNo) throws DataAccessException {
        // TODO Auto-generated method stub
        return null;
    }

    public List findBoardList(int currentPage, int countPerPage)
            throws DataAccessException {
        // TODO Auto-generated method stub
        return null;
    }

    public int getTotalNo() throws DataAccessException {
        // TODO Auto-generated method stub
        return 0;
    }

    public int removeBoardFile(int fileNo) throws DataAccessException {
        // TODO Auto-generated method stub
        return 0;
    }

    public Board update(Board board) throws DataAccessException {
        // TODO Auto-generated method stub
        return null;
    }

    public int updateHitCount(int boardNo) throws DataAccessException {
        // TODO Auto-generated method stub
        return 0;
    }

}
