/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.user.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.javajigi.user.model.User;
import net.javajigi.user.service.UserService;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.RequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class UserController extends MultiActionController {
	protected static final Log logger = LogFactory.getLog(UserController.class);

	private UserService userService = null;

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public ModelAndView view(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		if (logger.isDebugEnabled()) {
			logger.debug("entering 'view' method...");
		}

		String userId = RequestUtils.getRequiredStringParameter(request,
				"userId");

		return new ModelAndView("user/view", "user", userService
				.findUser(userId));
	}

	public ModelAndView list(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		if (logger.isDebugEnabled()) {
			logger.debug("entering 'list' method...");
		}

		return new ModelAndView("user/list", "userList", userService
				.findUserList());
	}

	public ModelAndView add(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		User command = new User();
		bind(request, command);

		userService.addUser(command);

		return dispatchView(request, response);
	}

	public ModelAndView update(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		User command = new User();
		bind(request, command);

		userService.updateUser(command);

		return dispatchView(request, response);
	}

	public ModelAndView updateForm(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String userId = RequestUtils.getRequiredStringParameter(request,
				"userId");

		return new ModelAndView("user/edit", "user", userService
				.findUser(userId));
	}

	public ModelAndView remove(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String userId = RequestUtils.getRequiredStringParameter(request,
				"userId");

		userService.removeUser(userId);

		return list(request, response);
	}

	private ModelAndView dispatchView(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		HttpSession session = request.getSession();

		if (session.getAttribute("loginUser") != null) {
			User loginUser = (User) session.getAttribute("loginUser");
			if (loginUser.isAdmin()) {
				return list(request, response);
			}
		}

		return new ModelAndView("redirect:/index.html");
	}
}
