package net.changwoo.x1wins.web;
import java.sql.Blob;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import net.changwoo.x1wins.entity.Response;
import net.changwoo.x1wins.entity.Signin;
import net.changwoo.x1wins.entity.User;
import net.changwoo.x1wins.service.UserService;
import org.hibernate.Hibernate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
/**
* Handles requests for the application home page.
*/
@Controller
@RequestMapping(value = "/user")
// @SessionAttributes("user")
public class UserController {
private static final Logger logger = LoggerFactory
.getLogger(UserController.class);
@Autowired
private UserService userService;
@RequestMapping(value = "/list.{protocol}", method = RequestMethod.GET)
public String doList(Map model, @PathVariable String protocol, HttpServletRequest request) {
Response response = new Response();
try {
HttpSession session = request.getSession(false);
if(session == null) {
response.setStatus("FAIL");
// response.setResult(resultMap);
} else {
String userid = session.getAttribute("userid").toString();
logger.info("session userid "+userid);
logger.info("session getid() "+session.getId());
List list = userService.findAll();
model.put("list", list);
}
} catch (Exception e) {
logger.debug(e.toString());
response.setStatus("FAIL");
}
return protocol + "View";
}
@RequestMapping(value = "/{usernum}/detail.{protocol}", method = RequestMethod.GET)
public String doDetail(@PathVariable("usernum") int usernum, Map model, @PathVariable String protocol) {
try {
User user = userService.findUser(usernum);
model.put("user", user);
} catch (Exception e) {
logger.debug(e.toString());
}
return protocol + "View";
}
/**
* sign up
*
* @param locale
* @param model
* @return
*/
// Display the form on the get request
@RequestMapping(value = "/signup", method = RequestMethod.GET)
public String showSignUpForm(Map model, HttpServletRequest request) {
String currentUrl = request.getParameter("currentUrl").toString();
logger.debug("currentUrl : "+currentUrl);
User user = new User();
model.put("user", user);
model.put("menu", "signup");
model.put("currentUrl", currentUrl);
return "user/signup.tiles";
}
// Process the form.
@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String processSignUpForm(@Valid User user, BindingResult result
,Map model, @RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
String currentUrl = request.getParameter("currentUrl").toString();
if (result.hasErrors()) {
return "user/signup.tiles";
}
try {
if (userService.isValidSignup(user) == false) {
result.rejectValue("userid", "DuplicationId", "warnning");
return "user/signup.tiles";
}else{
//sign in success and creating session
userService.createSigninSession(request, user.getUserid());
//수정 예정
Blob blob = Hibernate.createBlob(file.getInputStream());
user.setFilename(file.getOriginalFilename());
user.setContent(blob);
user.setContentType(file.getContentType());
// Add the saved validationForm to the model
model.put("user", user);
userService.saveUser(user);
response.sendRedirect(currentUrl);
}
} catch (Exception e) {
// TODO Auto-generated catch block
logger.debug(e.toString());
}
// return "user/signup_success.tiles";
return null;
}
@RequestMapping(value = "/signup.json", method = RequestMethod.POST)
public ModelAndView processSignUpData(@Valid User user, BindingResult result
,Map model, HttpServletRequest request) {
//, @RequestParam("file") MultipartFile file
Map resultMap = new HashMap();
Response response = new Response();
try {
if (userService.isValidSignup(user) == false) {
result.rejectValue("userid", "DuplicationId", "warnning");
response.setStatus("FAIL");
response.setResult(result);
} else {
// sign in success and creating session
userService.createSigninSession(request, user.getUserid());
// 수정 예정
// Blob blob = Hibernate.createBlob(file.getInputStream());
// user.setFilename(file.getOriginalFilename());
// user.setContent(blob);
// user.setContentType(file.getContentType());
userService.saveUser(user);
response.setStatus("SUCCESS");
response.setResult(user);
}
} catch (Exception e) {
// TODO Auto-generated catch block
logger.debug(e.toString());
response.setStatus("FAIL");
response.setResult(e.toString());
}
// return "user/signin_success.tiles";
ModelAndView modelAndView = getModelAndView(response, "json");
return modelAndView;
}
/**
* sign in
*
* @param locale
* @param model
* @return
*/
// Display the form on the get request
@RequestMapping(value = "/signin", method = RequestMethod.GET)
public String showSignInForm(Map model, HttpServletRequest request) {
String currentUrl = request.getParameter("currentUrl").toString();
Signin signin = new Signin();
model.put("signin", signin);
model.put("menu", "signin");
model.put("currentUrl", currentUrl);
return "user/signin.tiles";
}
@RequestMapping(value = "/signin", method = RequestMethod.POST)
public String processSignInForm(@Valid Signin signin, BindingResult result,
Map model, HttpServletRequest request, HttpServletResponse response) {
String currentUrl = request.getParameter("currentUrl").toString();
logger.debug("currentUrl : "+currentUrl);
try {
if (result.hasErrors()) {
return "user/signin.tiles";
}
// Add the saved validationForm to the model
if (userService.isValidSignin(signin) == false) {
result.rejectValue("userid", "WrongIdPw", "warnning");
return "user/signin.tiles";
}else{
//sign in success and creating session
userService.createSigninSession(request, signin.getUserid());
}
model.put("signin", signin);
response.sendRedirect(currentUrl);
} catch (Exception e) {
logger.debug(e.toString());
}
// return "user/signin_success.tiles";
return null;
}
@RequestMapping(value = "/signin.json", method = RequestMethod.POST)
public ModelAndView processSignInData(@Valid Signin signin, BindingResult result,
Map model, HttpServletRequest request) {
Map resultMap = new HashMap();
Response response = new Response();
try {
// Add the saved validationForm to the model
if (userService.isValidSignin(signin) == false) {
result.rejectValue("userid", "WrongIdPw", "warnning");
response.setStatus("FAIL");
response.setResult(result);
}else{
//sign in success and creating session
String sessionId = userService.createSigninSession(request, signin.getUserid());
response.setStatus("SUCCESS");
response.setResult(sessionId);
String userid = signin.getUserid();
String username = userService.findUsernameByUserid(userid).getName();
signin.setUsername(username);
}
model.put("signin", signin);
} catch (Exception e) {
logger.debug(e.toString());
}
// return "user/signin_success.tiles";
ModelAndView modelAndView = getModelAndView(response, "json");
return modelAndView;
}
/**
* sign out
*
* @param locale
* @param model
* @return
*/
@RequestMapping(value = "/signout", method = RequestMethod.GET)
public String doSignOut(Locale locale, Model model, HttpServletRequest request, HttpServletResponse response) {
logger.debug("sign out " + locale.toString());
String currentUrl = request.getParameter("currentUrl").toString();
try{
userService.removeSignOutSession(request);
// response.sendRedirect(request.getContextPath()+"/index");
response.sendRedirect(currentUrl);
}catch (Exception e) {
// TODO: handle exception
logger.debug(e.toString());
}
return null;
// return "redirect:"+currentUrl;
}
/**
* modify sign up
*
* @param locale
* @param model
* @return
*/
// Display the form on the get request
@RequestMapping(value = "/signupModify", method = RequestMethod.GET)
public String showModifySignUpForm(Map model, HttpServletRequest request) {
String currentUrl = request.getParameter("currentUrl").toString();
logger.debug("currentUrl : "+currentUrl);
User user = new User();
model.put("user", user);
model.put("menu", "signup");
model.put("currentUrl", currentUrl);
return "user/signup.tiles";
}
// Process the form.
@RequestMapping(value = "/signupModify", method = RequestMethod.POST)
public String processModifySignUpForm(@Valid User user, BindingResult result
,Map model, @RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
String currentUrl = request.getParameter("currentUrl").toString();
if (result.hasErrors()) {
return "user/signup.tiles";
}
try {
if (userService.isValidSignup(user) == false) {
result.rejectValue("userid", "DuplicationId", "warnning");
return "user/signup.tiles";
}else{
//sign in success and creating session
userService.createSigninSession(request, user.getUserid());
//수정 예정
Blob blob = Hibernate.createBlob(file.getInputStream());
user.setFilename(file.getOriginalFilename());
user.setContent(blob);
user.setContentType(file.getContentType());
// Add the saved validationForm to the model
model.put("user", user);
userService.saveUser(user);
response.sendRedirect(currentUrl);
}
} catch (Exception e) {
// TODO Auto-generated catch block
logger.debug(e.toString());
}
// return "user/signup_success.tiles";
return null;
}
public ModelAndView getModelAndView(Object attributeValue, String type)
{
ModelAndView modelAndView = new ModelAndView();
try{
modelAndView.addObject(attributeValue);
if(!type.equals("json")&&!type.equals("xml")){
type = "json";
}
modelAndView.setViewName(type + "View");
}catch(Exception e){
logger.debug(e.toString());
}
return modelAndView;
}
}