/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.board.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.javajigi.board.model.Board;
import net.javajigi.board.model.BoardFile;
import net.javajigi.board.service.BoardService;
import net.javajigi.common.propertyeditor.BoardFileMultipartPropertyEditor;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.validation.BindException;
import org.springframework.web.bind.RequestUtils;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class BoardFormController extends SimpleFormController {
	protected static final Log logger = LogFactory
			.getLog(BoardFormController.class);

	private String realUploadPath = null;

	private BoardService boardService = null;

	public void setRealUploadPath(String realUploadPath) {
		this.realUploadPath = realUploadPath;
	}

	public void setBoardService(BoardService boardService) {
		this.boardService = boardService;
	}

	public BoardFormController() {
		setCommandName("board");
		setCommandClass(Board.class);
	}

	protected void initBinder(HttpServletRequest request,
			ServletRequestDataBinder binder) throws Exception {
		binder.registerCustomEditor(BoardFile.class,
				new BoardFileMultipartPropertyEditor(realUploadPath));
	}

	protected Object formBackingObject(HttpServletRequest request)
			throws ServletException {
		if (logger.isDebugEnabled()) {
			logger.debug("entering 'formBackingObject' method...");
		}

		int boardNo = RequestUtils.getIntParameter(request, "boardNo", 0);

		if (logger.isDebugEnabled()) {
			logger.debug("received boardNo : " + boardNo);
		}

		if (boardNo != 0) {
			Board board = boardService.findBoard(boardNo);

			if (board == null) {
				return new Board();
			}

			return board;
		} else {
			return new Board();
		}
	}

	protected ModelAndView onSubmit(HttpServletRequest request,
			HttpServletResponse response, Object command,
			BindException exception) throws Exception {
		if (logger.isDebugEnabled()) {
			logger.debug("entering 'onSubmit' method...");
			logger.debug("Board : " + command);
		}

		Board board = (Board) command;
		board.addBoardFile(board.getFile1());
		board.addBoardFile(board.getFile2());
		board.addBoardFile(board.getFile3());
		
		// List fileList = board.getFile();
		// Iterator fileIter = fileList.iterator();
		// while (fileIter.hasNext()) {
		// MultipartFile multiFile = (MultipartFile) fileIter.next();
		// if (multiFile.getSize() > 0) {
		// board.addBoardFile(FileUploadUtil.uploadFormFile(multiFile,
		// realUploadPath));
		// }
		// }

		if (request.getParameter("add") != null) {
			if (logger.isDebugEnabled()) {
				logger.debug("executing 'add Board' method...");
			}

			boardService.addBoard(board);
		} else {
			if (logger.isDebugEnabled()) {
				logger.debug("executing 'update Board' method...");
			}

			boardService.updateBoard(board);
		}

		return new ModelAndView(getSuccessView());
	}

	// private List getBoardFileList(HttpServletRequest request) {
	// MultipartHttpServletRequest mpRequest = (MultipartHttpServletRequest)
	// request;
	// Iterator fileNameIterator = mpRequest.getFileNames();
	//
	// List boardFileList = new ArrayList();
	// while (fileNameIterator.hasNext()) {
	// MultipartFile multiFile = mpRequest
	// .getFile((String) fileNameIterator.next());
	//
	// if (multiFile.getSize() > 0) {
	// BoardFile boardFile = FileUploadUtil.uploadFormFile(multiFile,
	// realUploadPath);
	// boardFileList.add(boardFile);
	// }
	// }
	//
	// return boardFileList;
	// }
}
