diff -r 6657dad897ea -r 2e0669e814ff src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java --- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Thu Oct 08 18:28:16 2020 +0200 +++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Thu Oct 08 20:16:47 2020 +0200 @@ -42,7 +42,6 @@ import java.io.IOException; import java.sql.Date; import java.sql.SQLException; -import java.util.ArrayList; import java.util.NoSuchElementException; import java.util.Optional; import java.util.stream.Collectors; @@ -68,73 +67,6 @@ return "localization.projects"; } - private String queryParams(Project p, Version v) { - return String.format("pid=%d&vid=%d", - p == null ? -1 : p.getId(), - v == null ? -1 : v.getId() - ); - } - - /** - * Creates the navigation menu. - * - * @param req the servlet request - * @param viewModel the current view model - */ - private void setNavigationMenu(HttpServletRequest req, ProjectView viewModel) { - final Project selectedProject = Optional.ofNullable(viewModel.getProjectInfo()).map(ProjectInfo::getProject).orElse(null); - - final var navigation = new ArrayList(); - - for (ProjectInfo plistInfo : viewModel.getProjectList()) { - final var proj = plistInfo.getProject(); - final var projEntry = new MenuEntry( - proj.getName(), - "projects/view?" + queryParams(proj, null) - ); - navigation.add(projEntry); - if (proj.equals(selectedProject)) { - final var projInfo = viewModel.getProjectInfo(); - projEntry.setActive(true); - - // **************** - // Versions Section - // **************** - { - final var entry = new MenuEntry(1, - new ResourceKey(getResourceBundleName(), "menu.versions"), - "projects/view?" + queryParams(proj, null) - ); - navigation.add(entry); - } - - final var level2 = new ArrayList(); - { - final var entry = new MenuEntry( - new ResourceKey(getResourceBundleName(), "filter.none"), - "projects/view?" + queryParams(proj, null) - ); - if (viewModel.getVersionFilter() == null) entry.setActive(true); - level2.add(entry); - } - - for (Version version : projInfo.getVersions()) { - final var entry = new MenuEntry( - version.getName(), - "projects/view?" + queryParams(proj, version) - ); - if (version.equals(viewModel.getVersionFilter())) entry.setActive(true); - level2.add(entry); - } - - level2.forEach(e -> e.setLevel(2)); - navigation.addAll(level2); - } - } - - setNavigationMenu(req, navigation); - } - private int syncParamWithSession(HttpServletRequest req, String param, String attr) { final var session = req.getSession(); final var idParam = getParameter(req, Integer.class, param); @@ -179,7 +111,7 @@ setViewModel(req, viewModel); setContentPage(req, name); setStylesheet(req, "projects"); - setNavigationMenu(req, viewModel); + setNavigationMenu(req, "project-navmenu"); return ResponseType.HTML; } @@ -232,7 +164,7 @@ dao.getProjectDao().saveOrUpdate(project); - setRedirectLocation(req, "./projects/view?pid="+project.getId()); + setRedirectLocation(req, "./projects/versions?pid="+project.getId()); setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); LOG.debug("Successfully updated project {}", project.getName()); @@ -270,6 +202,26 @@ return forwardView(req, viewModel, "project-details"); } + @RequestMapping(requestPath = "versions", method = HttpMethod.GET) + public ResponseType versions(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, SQLException { + final var viewModel = new VersionsView(); + populate(viewModel, req, dao); + viewModel.setVersionFilter(null); + + final var projectInfo = viewModel.getProjectInfo(); + if (projectInfo == null) { + resp.sendError(HttpServletResponse.SC_NOT_FOUND, "No project selected."); + return ResponseType.NONE; + } + + final var issueDao = dao.getIssueDao(); + final var issues = issueDao.list(projectInfo.getProject()); + for (var issue : issues) issueDao.joinVersionInformation(issue); + viewModel.update(projectInfo.getVersions(), issues); + + return forwardView(req, viewModel, "versions"); + } + @RequestMapping(requestPath = "versions/edit", method = HttpMethod.GET) public ResponseType editVersion(HttpServletRequest req, DataAccessObjects dao) throws SQLException { final var viewModel = new VersionEditView(); @@ -297,7 +249,7 @@ dao.getVersionDao().saveOrUpdate(version); // specifying the pid parameter will purposely reset the session selected version! - setRedirectLocation(req, "./projects/view?pid=" + version.getProject().getId()); + setRedirectLocation(req, "./projects/versions?pid=" + version.getProject().getId()); setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) { LOG.warn("Form validation failure: {}", ex.getMessage());