diff -r 4ec7f2600c83 -r 24a3596b8f98 src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java --- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Sat May 30 15:28:27 2020 +0200 +++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Sat May 30 18:05:06 2020 +0200 @@ -42,10 +42,9 @@ import java.io.IOException; import java.sql.Date; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static de.uapcore.lightpit.Functions.fqn; @@ -109,14 +108,14 @@ } void selectVersion(Version version) { - if (!Objects.equals(project, version.getProject())) throw new AssertionError("Nice, you implemented a bug!"); + this.project = version.getProject(); this.version = version; this.issue = null; updateAttributes(); } void selectIssue(Issue issue) { - if (!Objects.equals(issue.getProject(), project)) throw new AssertionError("Nice, you implemented a bug!"); + this.project = issue.getProject(); this.issue = issue; this.version = null; updateAttributes(); @@ -375,7 +374,16 @@ } private void configureEditIssueForm(HttpServletRequest req, DataAccessObjects dao, SessionSelection selection) throws SQLException { - req.setAttribute("projects", dao.getProjectDao().list()); + + if (selection.issue.getProject() == null || selection.issue.getProject().getId() < 0) { + req.setAttribute("projects", dao.getProjectDao().list()); + req.setAttribute("versions", Collections.emptyList()); + } else { + req.setAttribute("projects", Collections.emptyList()); + req.setAttribute("versions", dao.getVersionDao().list(selection.issue.getProject())); + } + + dao.getIssueDao().joinVersionInformation(selection.issue); req.setAttribute("issue", selection.issue); req.setAttribute("issueStatusEnum", IssueStatus.values()); req.setAttribute("issueCategoryEnum", IssueCategory.values()); @@ -428,6 +436,23 @@ ).ifPresent(issue::setAssignee); getParameter(req, String.class, "description").ifPresent(issue::setDescription); getParameter(req, Date.class, "eta").ifPresent(issue::setEta); + + getParameter(req, Integer[].class, "affected") + .map(Stream::of) + .map(stream -> + stream.map(id -> new Version(id, sessionSelection.project)).collect(Collectors.toList()) + ).ifPresent(issue::setAffectedVersions); + getParameter(req, Integer[].class, "scheduled") + .map(Stream::of) + .map(stream -> + stream.map(id -> new Version(id, sessionSelection.project)).collect(Collectors.toList()) + ).ifPresent(issue::setScheduledVersions); + getParameter(req, Integer[].class, "resolved") + .map(Stream::of) + .map(stream -> + stream.map(id -> new Version(id, sessionSelection.project)).collect(Collectors.toList()) + ).ifPresent(issue::setResolvedVersions); + dao.getIssueDao().saveOrUpdate(issue); // specifying the issue parameter keeps the edited issue as breadcrumb