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

changeset 124
ed2e7aef2a3e
parent 121
428dca747d6b
child 128
947d0f6a6a83
equal deleted inserted replaced
123:c27eee1259bd 124:ed2e7aef2a3e
280 private void configure(IssueEditView viewModel, Issue issue, DataAccessObjects dao) throws SQLException { 280 private void configure(IssueEditView viewModel, Issue issue, DataAccessObjects dao) throws SQLException {
281 issue.setProject(viewModel.getProjectInfo().getProject()); 281 issue.setProject(viewModel.getProjectInfo().getProject());
282 viewModel.setIssue(issue); 282 viewModel.setIssue(issue);
283 viewModel.configureVersionSelectors(viewModel.getProjectInfo().getVersions()); 283 viewModel.configureVersionSelectors(viewModel.getProjectInfo().getVersions());
284 viewModel.setUsers(dao.getUserDao().list()); 284 viewModel.setUsers(dao.getUserDao().list());
285 if (issue.getId() >= 0) {
286 viewModel.setComments(dao.getIssueDao().listComments(issue));
287 }
285 } 288 }
286 289
287 @RequestMapping(requestPath = "issues/edit", method = HttpMethod.GET) 290 @RequestMapping(requestPath = "issues/edit", method = HttpMethod.GET)
288 public ResponseType editIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException { 291 public ResponseType editIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException {
289 final var viewModel = new IssueEditView(); 292 final var viewModel = new IssueEditView();
293 populate(viewModel, req, dao);
290 294
291 final var issueParam = getParameter(req, Integer.class, "issue"); 295 final var issueParam = getParameter(req, Integer.class, "issue");
292 if (issueParam.isPresent()) { 296 if (issueParam.isPresent()) {
293 final var issueDao = dao.getIssueDao(); 297 final var issueDao = dao.getIssueDao();
294 final var issue = issueDao.find(issueParam.get()); 298 final var issue = issueDao.find(issueParam.get());
295 issueDao.joinVersionInformation(issue); 299 issueDao.joinVersionInformation(issue);
296 req.getSession().setAttribute(SESSION_ATTR_SELECTED_PROJECT, issue.getProject().getId()); 300 req.getSession().setAttribute(SESSION_ATTR_SELECTED_PROJECT, issue.getProject().getId());
297 populate(viewModel, req, dao);
298 configure(viewModel, issue, dao); 301 configure(viewModel, issue, dao);
299 } else { 302 } else {
300 populate(viewModel, req, dao);
301 configure(viewModel, new Issue(-1), dao); 303 configure(viewModel, new Issue(-1), dao);
302 } 304 }
303 305
304 return forwardView(req, viewModel, "issue-form"); 306 return forwardView(req, viewModel, "issue-form");
305 } 307 }
306 308
307 @RequestMapping(requestPath = "issues/commit", method = HttpMethod.POST) 309 @RequestMapping(requestPath = "issues/commit", method = HttpMethod.POST)
308 public ResponseType commitIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException { 310 public ResponseType commitIssue(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
309 Issue issue = new Issue(-1); 311 Issue issue = new Issue(-1);
310 try { 312 try {
311 issue = new Issue(getParameter(req, Integer.class, "id").orElseThrow()); 313 issue = new Issue(getParameter(req, Integer.class, "id").orElseThrow());
312 issue.setProject(new Project(getParameter(req, Integer.class, "pid").orElseThrow())); 314 issue.setProject(new Project(getParameter(req, Integer.class, "pid").orElseThrow()));
313 getParameter(req, String.class, "category").map(IssueCategory::valueOf).ifPresent(issue::setCategory); 315 getParameter(req, String.class, "category").map(IssueCategory::valueOf).ifPresent(issue::setCategory);
333 dao.getIssueDao().saveOrUpdate(issue); 335 dao.getIssueDao().saveOrUpdate(issue);
334 336
335 // specifying the issue parameter keeps the edited issue as menu item 337 // specifying the issue parameter keeps the edited issue as menu item
336 setRedirectLocation(req, "./projects/view?pid=" + issue.getProject().getId()); 338 setRedirectLocation(req, "./projects/view?pid=" + issue.getProject().getId());
337 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); 339 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
340
341 return ResponseType.HTML;
338 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) { 342 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
339 // TODO: set request attribute with error text 343 // TODO: set request attribute with error text
340 LOG.warn("Form validation failure: {}", ex.getMessage()); 344 LOG.warn("Form validation failure: {}", ex.getMessage());
341 LOG.debug("Details:", ex); 345 LOG.debug("Details:", ex);
342 final var viewModel = new IssueEditView(); 346 final var viewModel = new IssueEditView();
347 populate(viewModel, req, dao);
343 configure(viewModel, issue, dao); 348 configure(viewModel, issue, dao);
344 // TODO: set Error Text 349 // TODO: set Error Text
345 return forwardView(req, viewModel, "issue-form"); 350 return forwardView(req, viewModel, "issue-form");
346 } 351 }
347 352 }
348 return ResponseType.HTML; 353
354 @RequestMapping(requestPath = "issues/comment", method = HttpMethod.POST)
355 public ResponseType commentIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException, IOException {
356 final var issueIdParam = getParameter(req, Integer.class, "issueid");
357 if (issueIdParam.isEmpty()) {
358 resp.sendError(HttpServletResponse.SC_FORBIDDEN, "Detected manipulated form.");
359 return ResponseType.NONE;
360 }
361 final var issue = new Issue(issueIdParam.get());
362 try {
363 final var issueComment = new IssueComment(getParameter(req, Integer.class, "commentid").orElse(-1), issue);
364 issueComment.setComment(getParameter(req, String.class, "comment").orElse(""));
365
366 if (issueComment.getComment().isBlank()) {
367 throw new IllegalArgumentException("comment.null");
368 }
369
370 LOG.debug("User {} is commenting on issue #{}", req.getRemoteUser(), issue.getId());
371 if (req.getRemoteUser() != null) {
372 dao.getUserDao().findByUsername(req.getRemoteUser()).ifPresent(issueComment::setAuthor);
373 }
374
375 dao.getIssueDao().saveComment(issueComment);
376
377 // specifying the issue parameter keeps the edited issue as menu item
378 setRedirectLocation(req, "./projects/issues/edit?issue=" + issue.getId());
379 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
380
381 return ResponseType.HTML;
382 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
383 // TODO: set request attribute with error text
384 LOG.warn("Form validation failure: {}", ex.getMessage());
385 LOG.debug("Details:", ex);
386 final var viewModel = new IssueEditView();
387 populate(viewModel, req, dao);
388 configure(viewModel, issue, dao);
389 // TODO: set Error Text
390 return forwardView(req, viewModel, "issue-form");
391 }
349 } 392 }
350 } 393 }

mercurial