Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.local.ask.controller.spring; import com.local.ask.exception.UrlException; import com.local.ask.form.AnswerForm; import com.local.ask.form.PollChoiceForm; import com.local.ask.form.QuestionForm; import com.local.ask.model.Answer; import com.local.ask.model.PollVote; import com.local.ask.model.Question; import com.local.ask.model.User; import javax.validation.Valid; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresUser; import org.apache.shiro.session.Session; 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; /** * * @author Olayinka */ @Controller public class PostController extends BaseController { @RequestMapping(value = "/post/question/{id}", method = RequestMethod.GET) public String loadQuestion(@PathVariable int id, Model m) throws UrlException { if (!SecurityUtils.getSubject().hasRole("user")) { SecurityUtils.getSubject().getSession().setAttribute("fallBack", "/post/question/" + id); } Question q = dbHelper.getQuestion(id); if (q == null || !q.isQuestion()) { throw new UrlException("This question doesn't exist"); } m.addAttribute("question", q); m.addAttribute("tags", q.getTagUseds()); Session session = SecurityUtils.getSubject().getSession(); if (session.getAttribute("seen_" + q.getId()) == null) { q.setViewCount(q.getViewCount() + 1); dbHelper.updateQuestion(q); session.setAttribute("seen_" + q.getId(), true); } if (session.getAttribute("answerForm" + id) == null) { m.addAttribute("answerForm", new AnswerForm()); } else { m.addAttribute("answerForm", session.getAttribute("answerForm" + id)); } m.addAttribute("qtag", true); m.addAttribute("isUsersQuestion", false); if (SecurityUtils.getSubject().hasRole("user")) { User currentUser = dbHelper.getCurrentUser(); if (currentUser != null && currentUser.getId().equals(q.getUser().getId())) { m.addAttribute("isUsersQuestion", true); } } return "question_page"; } @RequestMapping(value = "/post/poll/{id}", method = RequestMethod.GET) public String loadPoll(@PathVariable int id, Model m) throws UrlException { if (!SecurityUtils.getSubject().hasRole("user")) { SecurityUtils.getSubject().getSession().setAttribute("fallBack", "/post/question/" + id); } Question q = dbHelper.getQuestion(id); if (q == null || q.isQuestion()) { throw new UrlException("This question doesn't exist"); } Session session = SecurityUtils.getSubject().getSession(); if (session.getAttribute("seen_" + q.getId()) == null) { q.setViewCount(q.getViewCount() + 1); session.setAttribute("seen_" + q.getId(), true); dbHelper.updateQuestion(q); } PollVote pollVote = dbHelper.getUserPollVote(q); if (pollVote != null) { m.addAttribute("hasVoted", true); } else { m.addAttribute("hasVoted", false); } m.addAttribute("question", q); m.addAttribute("tags", q.getTagUseds()); m.addAttribute("pollChoiceForm", new PollChoiceForm()); m.addAttribute("qtag", true); return "question_page"; } @RequestMapping(value = "/post/question/{id}", method = RequestMethod.POST) public String submitAnswerForm(@PathVariable int id, @Valid AnswerForm answerForm, BindingResult result, Model m) throws UrlException { if (!SecurityUtils.getSubject().hasRole("user")) { SecurityUtils.getSubject().getSession().setAttribute("fallBack", "/post/question/" + id); SecurityUtils.getSubject().getSession().setAttribute("answerForm", answerForm); return REDIRECT + "/login"; } if (result.hasErrors()) { SecurityUtils.getSubject().getSession().setAttribute("answerForm" + id, answerForm); System.out.println(answerForm.toString()); } dbHelper.addAnswer(id, answerForm.getBody()); return loadQuestion(id, m); } @RequiresUser @RequestMapping(value = "/post/poll/{id}", method = RequestMethod.POST) public String submitPollForm(@PathVariable int id, PollChoiceForm pollChoiceForm, BindingResult result, Model m) throws UrlException { dbHelper.castPollVote(pollChoiceForm.getChoice()); return loadPoll(id, m); } @RequestMapping(value = "/ask", method = RequestMethod.GET) public String loadAskForm(Model m) { return "ask_question"; } @RequiresUser @RequestMapping(value = "/ask", method = RequestMethod.POST) public String loadAskForm(@Valid QuestionForm questionForm, BindingResult result, Model m) { if (result.hasErrors()) { return "ask_question"; } else { dbHelper.addPost(questionForm); return REDIRECT_HOME; } } @RequiresUser @RequestMapping(value = "accept/{qId}/{aId}") public String acceptAnswer(@PathVariable Integer qId, @PathVariable Integer aId, Model m) { User user = dbHelper.getCurrentUser(); Question question = dbHelper.getQuestion(qId); Answer answer = dbHelper.getAnswer(aId); if (answer != null && question != null && user.getId().equals(question.getUser().getId()) && question.getId().equals(answer.getQuestion().getId()) && !question.isSolved()) { answer.setStatus(Integer.valueOf(-1).byteValue()); question.setStatus("SOLVED"); dbHelper.updateAnswer(answer); dbHelper.updateQuestion(question); } return REDIRECT + "/post/question/" + qId; } }