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

changeset 109
2e0669e814ff
parent 107
b5f740a87af4
child 110
9d0be0b1580f
--- 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<MenuEntry>();
-
-        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<MenuEntry>();
-                {
-                    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());

mercurial