package net.changwoo.x1wins.web; 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.Bbs; import net.changwoo.x1wins.entity.Reply; import net.changwoo.x1wins.entity.Response; import net.changwoo.x1wins.service.BbsService; import net.changwoo.x1wins.service.FileService; import net.changwoo.x1wins.service.ReplyService; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; 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.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; /** * Handles requests for the application home page. */ @Controller @RequestMapping(value = "/bbs") public class BbsController { private static final Logger logger = LoggerFactory.getLogger(BbsController.class); private static int perPage = 10; private static String errorPage = "error.tiles"; private static String menu = "bbs"; private static String classname = "bbs"; @Autowired private BbsService bbsService; @Autowired private FileService fileService; @Autowired private ReplyService replyService; @RequestMapping(value = "/{bbsnum}/form", method = RequestMethod.GET) public String showForm(@PathVariable("bbsnum") int bbsnum, Map model, HttpServletRequest request) { model.put("menu", menu); try { Bbs bbs = new Bbs(); model.put("bbs", bbs); model.put("bbsnum", bbsnum); model.put("menu", menu); bbsService.validWrite(bbsnum, request); } catch (Exception e) { logger.debug(e.toString()); model.put("message", e.toString()); return errorPage; } return "bbs/form.tiles"; } @RequestMapping(value = "/{bbsnum}/form", method = RequestMethod.POST) public String processForm(@PathVariable("bbsnum") int bbsnum, @Valid Bbs bbs, BindingResult result, Map model, @RequestParam("file") MultipartFile mFiles[], HttpServletRequest request) { model.put("menu", menu); try { logger.info(bbs.getClass()+"result.getAllErrors()"+result.getAllErrors()); if (result.hasErrors()) { return "bbs/form.tiles"; } bbsService.validWrite(bbsnum, request); // bbs.setBbsnum(bbsnum); bbsService.saveBbs(bbs, bbsnum, request); int snum = bbs.getNum(); fileService.saveFiles(mFiles, snum, classname, request); } catch (Exception e) { logger.debug(e.toString()); model.put("message", e.toString()); return errorPage; } return "redirect:/bbs/"+bbsnum+"/list/1"; } @RequestMapping(value = "/{bbsnum}/updateform/{num}", method = RequestMethod.GET) public String showUpdateForm(@PathVariable("bbsnum") int bbsnum, @PathVariable("num") int num, Locale locale, Map model, HttpServletRequest request) { model.put("menu", menu); Bbs bbs; try { bbsService.validOwn(num, request); bbs = bbsService.findDetail(num); model.put("bbs", bbs); int snum = num; List fileList = fileService.findFileList(classname, bbsnum, snum, request); model.put("filelist", fileList); } catch (Exception e) { // TODO Auto-generated catch block logger.debug(e.toString()); model.put("message", e.toString()); return errorPage; } model.put("bbsnum", bbsnum); return "bbs/updateform.tiles"; } @RequestMapping(value = "/{bbsnum}/updateform/{num}", method = RequestMethod.POST) public String processUpdateForm(@PathVariable("bbsnum") int bbsnum, @PathVariable("num") int num, @Valid Bbs bbs, BindingResult result, Map model, @RequestParam("file") MultipartFile mFiles[], HttpServletRequest request) { model.put("menu", menu); try { if (result.hasErrors()) { return "bbs/updateform.tiles"; } bbsService.validOwn(num, request); logger.info(bbs.getClass()+"result.getAllErrors()"+result.getAllErrors()); bbsService.updateBbs(bbs, bbsnum, request); int snum = bbs.getNum(); fileService.saveFiles(mFiles, snum, classname, request); } catch (Exception e) { logger.debug(e.toString()); model.put("message", e.toString()); return errorPage; } return "redirect:/bbs/"+bbsnum+"/list/1"; } @RequestMapping(value = "/{bbsnum}/delete/{num}", method = RequestMethod.GET) public String delete(@PathVariable("bbsnum") int bbsnum, @PathVariable("num") int num, Locale locale, Map model, HttpServletRequest request, HttpServletResponse response) { model.put("menu", menu); try { bbsService.validOwn(num, request); bbsService.delete(bbsnum, num); // int snum = bbs.getNum(); // fileService.saveFiles(mFiles, snum, classname); // response.sendRedirect(request.getContextPath()+"/index"); } catch (Exception e) { logger.debug(e.toString()); model.put("message", e.toString()); return errorPage; } return "redirect:/bbs/"+bbsnum+"/list/1"; } @RequestMapping(value = "/{bbsnum}/list/{pagenum}", method = RequestMethod.GET) public String showBbsList(@PathVariable("bbsnum") int bbsnum, @PathVariable("pagenum") int pageNum, Locale locale, Map model, HttpServletRequest request) { model.put("menu", menu); try { if (bbsService.validRead(bbsnum, request)) { bbsService.findListAndPaging(bbsnum,pageNum, perPage , model, request); } // else{ // throw new Exception("Exception ------ can't read bbs list"); // } } catch (Exception e) { logger.debug(e.toString()); model.put("message", e.toString()); return errorPage; } return "bbs/list.tiles"; } @RequestMapping(value = "/data/{bbsnum}/list/{pagenum}.{type}", method = RequestMethod.GET) public ModelAndView showBbsListData(@PathVariable("bbsnum") int bbsnum, @PathVariable("pagenum") int pageNum, @PathVariable("type") String type, Locale locale, HttpServletRequest request) { Map resultMap = new HashMap(); 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()); bbsService.findListAndPaging(bbsnum,pageNum, perPage , resultMap, request); response.setStatus("SUCCESS"); response.setResult(resultMap); // } } catch (Exception e) { logger.debug(e.toString()); response.setStatus("FAIL"); } ModelAndView modelAndView = getModelAndView(response, type); return modelAndView; } @RequestMapping(value = "/{bbsnum}/detail/{num}", method = RequestMethod.GET) public String showBbsDetail(@PathVariable("bbsnum") int bbsnum, @PathVariable("num") int num, Locale locale, Map model, HttpServletRequest request) { model.put("menu", menu); Bbs detail = null; try { bbsService.validRead(bbsnum, request); detail = bbsService.findDetail(num); int snum = num; List fileList = fileService.findFileList(classname, bbsnum, snum, request); model.put("detail", detail); model.put("bbsnum", bbsnum); model.put("filelist", fileList); Reply reply = new Reply(); model.put("reply", reply); } catch (Exception e) { logger.debug(e.toString()); model.put("message", e.toString()); return errorPage; } return "bbs/detail.tiles"; } @RequestMapping(value = "/data/detail/{num}.{type}", method = RequestMethod.GET) public ModelAndView showBbsDetailData(@PathVariable("num") int num, @PathVariable("type") String type) { Bbs bbs = null; Map resultMap = new HashMap(); try { bbs = bbsService.findDetail(num); resultMap.put("bbs", bbs); } catch (Exception e) { // TODO Auto-generated catch block logger.debug(e.toString()); } ModelAndView modelAndView = getModelAndView(resultMap, type); return modelAndView; } @RequestMapping(value = "/detail/{num}/reply/add", method = RequestMethod.POST) public @ResponseBody String addReply(@PathVariable("num") int num, @Valid Reply reply, BindingResult result, Map model, HttpServletRequest request) { String status =""; model.put("menu", menu); try { logger.info(reply.getClass()+"result.getAllErrors()"+result.getAllErrors()); Response response = new Response(); if (result.hasErrors()) { status = "FAIL"; response.setResult(result); }else{ status = "SUCCESS"; replyService.saveReply(reply, num, request); response.setResult(reply); } response.setStatus(status); } catch (Exception e) { logger.debug(e.toString()); model.put("message", e.toString()); status = e.toString(); // return errorPage; } return status; } //http://www.raistudies.com/spring/spring-mvc/ajax-form-validation-using-spring-mvc-and-jquery/ // @RequestMapping(value="/AddUser.htm",method=RequestMethod.POST) // public @ResponseBody JsonResponse addUser(@ModelAttribute(value="user") User user, BindingResult result ){ // JsonResponse res = new JsonResponse(); // ValidationUtils.rejectIfEmpty(result, "name", "Name can not be empty."); // ValidationUtils.rejectIfEmpty(result, "education", "Educatioan not be empty"); // if(!result.hasErrors()){ // userList.add(user); // res.setStatus("SUCCESS"); // res.setResult(userList); // }else{ // res.setStatus("FAIL"); // res.setResult(result.getAllErrors()); // } // // return res; // } @RequestMapping(value = "/data/{bbsnum}/reply/list.{type}", method = RequestMethod.GET) public ModelAndView showReplyData(@PathVariable("bbsnum") int bbsnum, @PathVariable("type") String type) { List<Reply> list = null; try { list = replyService.findReplyList(bbsnum); logger.debug("size : "+list.size()); logger.debug("list : "+list); } catch (Exception e) { // TODO Auto-generated catch block logger.debug(e.toString()); } // JSONArray jsonArray = JSONArray.fromObject(list); // // JSONObject result = new JSONObject(); // result.put("list", jsonArray); ModelAndView modelAndView = getModelAndView(list, type); return modelAndView; // HttpHeaders responseHeaders = new HttpHeaders(); // responseHeaders.add("Content-Type", "text/html; charset=UTF-8"); // return new ResponseEntity<String>(JSONObject.fromObject(result) // .toString(), responseHeaders, HttpStatus.CREATED); } @RequestMapping(value = "/test", method = RequestMethod.GET) public @ResponseBody ResponseEntity<String> TEST() { JSONArray jsonArray = new JSONArray(); jsonArray.add("1"); jsonArray.add("2"); for (Object name : jsonArray) { System.out.println(name + "������123"); } JSONObject result = new JSONObject(); result.put("list", jsonArray); Map<String, String> map = new HashMap<String, String>(); map.put("firstname", "��"); map.put("secondname", "��������"); result.put("map", map); // return JSONObject.fromObject(result).toString(); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.add("Content-Type", "text/html; charset=UTF-8"); return new ResponseEntity<String>(JSONObject.fromObject(result) .toString(), responseHeaders, HttpStatus.CREATED); } @RequestMapping(value = "/test2/{num}.{type}", method = RequestMethod.GET) public ModelAndView TEST2(@PathVariable("num") int num, @PathVariable("type") String type) { Bbs bbs = null; try { bbs = bbsService.findDetail(num); } catch (Exception e) { // TODO Auto-generated catch block logger.debug(e.toString()); } Map resultMap = new HashMap(); resultMap.put("bbs", bbs); ModelAndView modelAndView = new ModelAndView(); modelAndView.addAllObjects(resultMap); modelAndView.setViewName(type+"View"); return modelAndView; // return "jsonView"; } /** * * @param resultMap * @param type * @return ModelAndView * @throws Exception */ public ModelAndView getModelAndView(Map resultMap, String type) { ModelAndView modelAndView = new ModelAndView(); try{ modelAndView.addAllObjects(resultMap); if(!type.equals("json")&&!type.equals("xml")){ type = "json"; } modelAndView.setViewName(type + "View"); }catch(Exception e){ logger.debug(e.toString()); } return modelAndView; } 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; } }