40 import javax.servlet.http.HttpServletResponse; |
40 import javax.servlet.http.HttpServletResponse; |
41 import javax.servlet.http.HttpSession; |
41 import javax.servlet.http.HttpSession; |
42 import java.io.IOException; |
42 import java.io.IOException; |
43 import java.sql.Date; |
43 import java.sql.Date; |
44 import java.sql.SQLException; |
44 import java.sql.SQLException; |
45 import java.util.ArrayList; |
45 import java.util.*; |
46 import java.util.List; |
46 import java.util.stream.Collectors; |
47 import java.util.NoSuchElementException; |
47 import java.util.stream.Stream; |
48 import java.util.Objects; |
|
49 |
48 |
50 import static de.uapcore.lightpit.Functions.fqn; |
49 import static de.uapcore.lightpit.Functions.fqn; |
51 |
50 |
52 @WebServlet( |
51 @WebServlet( |
53 name = "ProjectsModule", |
52 name = "ProjectsModule", |
107 } |
106 } |
108 updateAttributes(); |
107 updateAttributes(); |
109 } |
108 } |
110 |
109 |
111 void selectVersion(Version version) { |
110 void selectVersion(Version version) { |
112 if (!Objects.equals(project, version.getProject())) throw new AssertionError("Nice, you implemented a bug!"); |
111 this.project = version.getProject(); |
113 this.version = version; |
112 this.version = version; |
114 this.issue = null; |
113 this.issue = null; |
115 updateAttributes(); |
114 updateAttributes(); |
116 } |
115 } |
117 |
116 |
118 void selectIssue(Issue issue) { |
117 void selectIssue(Issue issue) { |
119 if (!Objects.equals(issue.getProject(), project)) throw new AssertionError("Nice, you implemented a bug!"); |
118 this.project = issue.getProject(); |
120 this.issue = issue; |
119 this.issue = issue; |
121 this.version = null; |
120 this.version = null; |
122 updateAttributes(); |
121 updateAttributes(); |
123 } |
122 } |
124 |
123 |
373 |
372 |
374 return ResponseType.HTML; |
373 return ResponseType.HTML; |
375 } |
374 } |
376 |
375 |
377 private void configureEditIssueForm(HttpServletRequest req, DataAccessObjects dao, SessionSelection selection) throws SQLException { |
376 private void configureEditIssueForm(HttpServletRequest req, DataAccessObjects dao, SessionSelection selection) throws SQLException { |
378 req.setAttribute("projects", dao.getProjectDao().list()); |
377 |
|
378 if (selection.issue.getProject() == null || selection.issue.getProject().getId() < 0) { |
|
379 req.setAttribute("projects", dao.getProjectDao().list()); |
|
380 req.setAttribute("versions", Collections.<Version>emptyList()); |
|
381 } else { |
|
382 req.setAttribute("projects", Collections.<Project>emptyList()); |
|
383 req.setAttribute("versions", dao.getVersionDao().list(selection.issue.getProject())); |
|
384 } |
|
385 |
|
386 dao.getIssueDao().joinVersionInformation(selection.issue); |
379 req.setAttribute("issue", selection.issue); |
387 req.setAttribute("issue", selection.issue); |
380 req.setAttribute("issueStatusEnum", IssueStatus.values()); |
388 req.setAttribute("issueStatusEnum", IssueStatus.values()); |
381 req.setAttribute("issueCategoryEnum", IssueCategory.values()); |
389 req.setAttribute("issueCategoryEnum", IssueCategory.values()); |
382 req.setAttribute("users", dao.getUserDao().list()); |
390 req.setAttribute("users", dao.getUserDao().list()); |
383 |
391 |
426 getParameter(req, Integer.class, "assignee").map( |
434 getParameter(req, Integer.class, "assignee").map( |
427 userid -> userid >= 0 ? new User(userid) : null |
435 userid -> userid >= 0 ? new User(userid) : null |
428 ).ifPresent(issue::setAssignee); |
436 ).ifPresent(issue::setAssignee); |
429 getParameter(req, String.class, "description").ifPresent(issue::setDescription); |
437 getParameter(req, String.class, "description").ifPresent(issue::setDescription); |
430 getParameter(req, Date.class, "eta").ifPresent(issue::setEta); |
438 getParameter(req, Date.class, "eta").ifPresent(issue::setEta); |
|
439 |
|
440 getParameter(req, Integer[].class, "affected") |
|
441 .map(Stream::of) |
|
442 .map(stream -> |
|
443 stream.map(id -> new Version(id, sessionSelection.project)).collect(Collectors.toList()) |
|
444 ).ifPresent(issue::setAffectedVersions); |
|
445 getParameter(req, Integer[].class, "scheduled") |
|
446 .map(Stream::of) |
|
447 .map(stream -> |
|
448 stream.map(id -> new Version(id, sessionSelection.project)).collect(Collectors.toList()) |
|
449 ).ifPresent(issue::setScheduledVersions); |
|
450 getParameter(req, Integer[].class, "resolved") |
|
451 .map(Stream::of) |
|
452 .map(stream -> |
|
453 stream.map(id -> new Version(id, sessionSelection.project)).collect(Collectors.toList()) |
|
454 ).ifPresent(issue::setResolvedVersions); |
|
455 |
431 dao.getIssueDao().saveOrUpdate(issue); |
456 dao.getIssueDao().saveOrUpdate(issue); |
432 |
457 |
433 // specifying the issue parameter keeps the edited issue as breadcrumb |
458 // specifying the issue parameter keeps the edited issue as breadcrumb |
434 setRedirectLocation(req, "./projects/issues/?issue="+issue.getId()); |
459 setRedirectLocation(req, "./projects/issues/?issue="+issue.getId()); |
435 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); |
460 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); |