44 import java.io.IOException; |
44 import java.io.IOException; |
45 import java.sql.Date; |
45 import java.sql.Date; |
46 import java.sql.SQLException; |
46 import java.sql.SQLException; |
47 import java.util.List; |
47 import java.util.List; |
48 import java.util.NoSuchElementException; |
48 import java.util.NoSuchElementException; |
|
49 import java.util.Optional; |
49 import java.util.stream.Collectors; |
50 import java.util.stream.Collectors; |
50 import java.util.stream.Stream; |
51 import java.util.stream.Stream; |
51 |
52 |
52 @WebServlet( |
53 @WebServlet( |
53 name = "ProjectsModule", |
54 name = "ProjectsModule", |
451 |
452 |
452 @RequestMapping(requestPath = "commit-issue", method = HttpMethod.POST) |
453 @RequestMapping(requestPath = "commit-issue", method = HttpMethod.POST) |
453 public ResponseType commitIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException { |
454 public ResponseType commitIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException { |
454 try { |
455 try { |
455 final var issue = new Issue(getParameter(req, Integer.class, "id").orElseThrow()); |
456 final var issue = new Issue(getParameter(req, Integer.class, "id").orElseThrow()); |
|
457 final var componentId = getParameter(req, Integer.class, "component"); |
|
458 final Component component; |
|
459 if (componentId.isPresent()) { |
|
460 component = dao.getComponentDao().find(componentId.get()); |
|
461 } else { |
|
462 component = null; |
|
463 } |
456 issue.setProject(new Project(getParameter(req, Integer.class, "pid").orElseThrow())); |
464 issue.setProject(new Project(getParameter(req, Integer.class, "pid").orElseThrow())); |
457 getParameter(req, String.class, "category").map(IssueCategory::valueOf).ifPresent(issue::setCategory); |
465 getParameter(req, String.class, "category").map(IssueCategory::valueOf).ifPresent(issue::setCategory); |
458 getParameter(req, String.class, "status").map(IssueStatus::valueOf).ifPresent(issue::setStatus); |
466 getParameter(req, String.class, "status").map(IssueStatus::valueOf).ifPresent(issue::setStatus); |
459 issue.setSubject(getParameter(req, String.class, "subject").orElseThrow()); |
467 issue.setSubject(getParameter(req, String.class, "subject").orElseThrow()); |
460 getParameter(req, Integer.class, "assignee").map( |
468 issue.setComponent(component); |
461 userid -> userid >= 0 ? new User(userid) : null |
469 getParameter(req, Integer.class, "assignee").map(userid -> { |
|
470 if (userid >= 0) { |
|
471 return new User(userid); |
|
472 } else if (userid == -2) { |
|
473 return Optional.ofNullable(component).map(Component::getLead).orElse(null); |
|
474 } else { |
|
475 return null; |
|
476 } |
|
477 } |
462 ).ifPresent(issue::setAssignee); |
478 ).ifPresent(issue::setAssignee); |
463 getParameter(req, Integer.class, "component").map( |
|
464 cid -> cid >= 0 ? new Component(cid) : null |
|
465 ).ifPresent(issue::setComponent); |
|
466 getParameter(req, String.class, "description").ifPresent(issue::setDescription); |
479 getParameter(req, String.class, "description").ifPresent(issue::setDescription); |
467 getParameter(req, Date.class, "eta").ifPresent(issue::setEta); |
480 getParameter(req, Date.class, "eta").ifPresent(issue::setEta); |
468 |
481 |
469 getParameter(req, Integer[].class, "affected") |
482 getParameter(req, Integer[].class, "affected") |
470 .map(Stream::of) |
483 .map(Stream::of) |