src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java

changeset 124
ed2e7aef2a3e
parent 121
428dca747d6b
child 128
947d0f6a6a83
--- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java	Fri Oct 09 19:06:51 2020 +0200
+++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java	Fri Oct 09 19:07:05 2020 +0200
@@ -282,11 +282,15 @@
         viewModel.setIssue(issue);
         viewModel.configureVersionSelectors(viewModel.getProjectInfo().getVersions());
         viewModel.setUsers(dao.getUserDao().list());
+        if (issue.getId() >= 0) {
+            viewModel.setComments(dao.getIssueDao().listComments(issue));
+        }
     }
 
     @RequestMapping(requestPath = "issues/edit", method = HttpMethod.GET)
     public ResponseType editIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException {
         final var viewModel = new IssueEditView();
+        populate(viewModel, req, dao);
 
         final var issueParam = getParameter(req, Integer.class, "issue");
         if (issueParam.isPresent()) {
@@ -294,10 +298,8 @@
             final var issue = issueDao.find(issueParam.get());
             issueDao.joinVersionInformation(issue);
             req.getSession().setAttribute(SESSION_ATTR_SELECTED_PROJECT, issue.getProject().getId());
-            populate(viewModel, req, dao);
             configure(viewModel, issue, dao);
         } else {
-            populate(viewModel, req, dao);
             configure(viewModel, new Issue(-1), dao);
         }
 
@@ -305,7 +307,7 @@
     }
 
     @RequestMapping(requestPath = "issues/commit", method = HttpMethod.POST)
-    public ResponseType commitIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException {
+    public ResponseType commitIssue(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
         Issue issue = new Issue(-1);
         try {
             issue = new Issue(getParameter(req, Integer.class, "id").orElseThrow());
@@ -335,16 +337,57 @@
             // specifying the issue parameter keeps the edited issue as menu item
             setRedirectLocation(req, "./projects/view?pid=" + issue.getProject().getId());
             setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
+
+            return ResponseType.HTML;
         } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
             // TODO: set request attribute with error text
             LOG.warn("Form validation failure: {}", ex.getMessage());
             LOG.debug("Details:", ex);
             final var viewModel = new IssueEditView();
+            populate(viewModel, req, dao);
             configure(viewModel, issue, dao);
             // TODO: set Error Text
             return forwardView(req, viewModel, "issue-form");
         }
+    }
 
-        return ResponseType.HTML;
+    @RequestMapping(requestPath = "issues/comment", method = HttpMethod.POST)
+    public ResponseType commentIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException, IOException {
+        final var issueIdParam = getParameter(req, Integer.class, "issueid");
+        if (issueIdParam.isEmpty()) {
+            resp.sendError(HttpServletResponse.SC_FORBIDDEN, "Detected manipulated form.");
+            return ResponseType.NONE;
+        }
+        final var issue = new Issue(issueIdParam.get());
+        try {
+            final var issueComment = new IssueComment(getParameter(req, Integer.class, "commentid").orElse(-1), issue);
+            issueComment.setComment(getParameter(req, String.class, "comment").orElse(""));
+
+            if (issueComment.getComment().isBlank()) {
+                throw new IllegalArgumentException("comment.null");
+            }
+
+            LOG.debug("User {} is commenting on issue #{}", req.getRemoteUser(), issue.getId());
+            if (req.getRemoteUser() != null) {
+                dao.getUserDao().findByUsername(req.getRemoteUser()).ifPresent(issueComment::setAuthor);
+            }
+
+            dao.getIssueDao().saveComment(issueComment);
+
+            // specifying the issue parameter keeps the edited issue as menu item
+            setRedirectLocation(req, "./projects/issues/edit?issue=" + issue.getId());
+            setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
+
+            return ResponseType.HTML;
+        } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
+            // TODO: set request attribute with error text
+            LOG.warn("Form validation failure: {}", ex.getMessage());
+            LOG.debug("Details:", ex);
+            final var viewModel = new IssueEditView();
+            populate(viewModel, req, dao);
+            configure(viewModel, issue, dao);
+            // TODO: set Error Text
+            return forwardView(req, viewModel, "issue-form");
+        }
     }
 }

mercurial