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

changeset 157
1e6f16fad3a5
parent 152
7761c37c5e61
child 158
4f912cd42876
--- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java	Sat Oct 31 10:54:20 2020 +0100
+++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java	Thu Nov 05 13:37:48 2020 +0100
@@ -38,6 +38,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -115,16 +116,16 @@
         }
     }
 
-    private ResponseType forwardView(HttpServletRequest req, ProjectView viewModel, String name) {
+    private void forwardView(HttpServletRequest req, HttpServletResponse resp, ProjectView viewModel, String name) throws ServletException, IOException {
         setViewModel(req, viewModel);
         setContentPage(req, name);
         setStylesheet(req, "projects");
         setNavigationMenu(req, "project-navmenu");
-        return ResponseType.HTML;
+        renderSite(req, resp);
     }
 
     @RequestMapping(method = HttpMethod.GET)
-    public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
+    public void index(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException, ServletException, IOException {
         final var viewModel = new ProjectView();
         populate(viewModel, null, dao);
 
@@ -136,7 +137,7 @@
             info.setIssueSummary(projectDao.getIssueSummary(info.getProject()));
         }
 
-        return forwardView(req, viewModel, "projects");
+        forwardView(req, resp, viewModel, "projects");
     }
 
     private void configureProjectEditor(ProjectEditView viewModel, Project project, DataAccessObjects dao) throws SQLException {
@@ -145,29 +146,29 @@
     }
 
     @RequestMapping(requestPath = "$project/edit", method = HttpMethod.GET)
-    public ResponseType edit(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParams, DataAccessObjects dao) throws IOException, SQLException {
+    public void edit(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParams, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new ProjectEditView();
         populate(viewModel, pathParams, dao);
 
         if (!viewModel.isProjectInfoPresent()) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         configureProjectEditor(viewModel, viewModel.getProjectInfo().getProject(), dao);
-        return forwardView(req, viewModel, "project-form");
+        forwardView(req, resp, viewModel, "project-form");
     }
 
     @RequestMapping(requestPath = "create", method = HttpMethod.GET)
-    public ResponseType create(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
+    public void create(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException, ServletException, IOException {
         final var viewModel = new ProjectEditView();
         populate(viewModel, null, dao);
         configureProjectEditor(viewModel, new Project(-1), dao);
-        return forwardView(req, viewModel, "project-form");
+        forwardView(req, resp, viewModel, "project-form");
     }
 
     @RequestMapping(requestPath = "commit", method = HttpMethod.POST)
-    public ResponseType commit(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
+    public void commit(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, ServletException {
 
         try {
             final var project = new Project(getParameter(req, Integer.class, "pid").orElseThrow());
@@ -188,22 +189,21 @@
             setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
             LOG.debug("Successfully updated project {}", project.getName());
 
-            return ResponseType.HTML;
+            renderSite(req, resp);
         } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
             resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
             // TODO: implement - fix issue #21
-            return ResponseType.NONE;
         }
     }
 
     @RequestMapping(requestPath = "$project/$component/$version/issues/", method = HttpMethod.GET)
-    public ResponseType issues(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParams, DataAccessObjects dao) throws SQLException, IOException {
+    public void issues(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParams, DataAccessObjects dao) throws SQLException, IOException, ServletException {
         final var viewModel = new ProjectDetailsView();
         populate(viewModel, pathParams, dao);
 
         if (!viewModel.isEveryFilterValid()) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         final var project = viewModel.getProjectInfo().getProject();
@@ -251,18 +251,18 @@
         if (version.getId() > 0)
             viewModel.getProjectDetails().updateVersionInfo(version);
 
-        return forwardView(req, viewModel, "project-details");
+        forwardView(req, resp, viewModel, "project-details");
     }
 
     @RequestMapping(requestPath = "$project/versions/", method = HttpMethod.GET)
-    public ResponseType versions(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void versions(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new VersionsView();
         populate(viewModel, pathParameters, dao);
 
         final var projectInfo = viewModel.getProjectInfo();
         if (projectInfo == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         final var issueDao = dao.getIssueDao();
@@ -270,48 +270,48 @@
         for (var issue : issues) issueDao.joinVersionInformation(issue);
         viewModel.update(projectInfo.getVersions(), issues);
 
-        return forwardView(req, viewModel, "versions");
+        forwardView(req, resp, viewModel, "versions");
     }
 
     @RequestMapping(requestPath = "$project/versions/$version/edit", method = HttpMethod.GET)
-    public ResponseType editVersion(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void editVersion(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new VersionEditView();
         populate(viewModel, pathParameters, dao);
 
         if (viewModel.getProjectInfo() == null || viewModel.getVersionFilter() == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         viewModel.setVersion(viewModel.getVersionFilter());
 
-        return forwardView(req, viewModel, "version-form");
+        forwardView(req, resp, viewModel, "version-form");
     }
 
     @RequestMapping(requestPath = "$project/create-version", method = HttpMethod.GET)
-    public ResponseType createVersion(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void createVersion(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new VersionEditView();
         populate(viewModel, pathParameters, dao);
 
         if (viewModel.getProjectInfo() == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         viewModel.setVersion(new Version(-1));
 
-        return forwardView(req, viewModel, "version-form");
+        forwardView(req, resp, viewModel, "version-form");
     }
 
     @RequestMapping(requestPath = "commit-version", method = HttpMethod.POST)
-    public ResponseType commitVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
+    public void commitVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, ServletException {
 
         try {
             final var project = dao.getProjectDao().find(getParameter(req, Integer.class, "pid").orElseThrow());
             if (project == null) {
                 // TODO: improve error handling, because not found is not correct for this POST request
                 resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-                return ResponseType.NONE;
+                return;
             }
             final var version = new Version(getParameter(req, Integer.class, "id").orElseThrow());
             version.setName(getParameter(req, String.class, "name").orElseThrow());
@@ -325,74 +325,73 @@
 
             setRedirectLocation(req, "./projects/" + project.getNode() + "/versions/");
             setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
+
+            renderSite(req, resp);
         } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
             resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
             // TODO: implement - fix issue #21
-            return ResponseType.NONE;
         }
-
-        return ResponseType.HTML;
     }
 
     @RequestMapping(requestPath = "$project/components/", method = HttpMethod.GET)
-    public ResponseType components(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void components(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new ComponentsView();
         populate(viewModel, pathParameters, dao);
 
         final var projectInfo = viewModel.getProjectInfo();
         if (projectInfo == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         final var issueDao = dao.getIssueDao();
         final var issues = issueDao.list(projectInfo.getProject());
         viewModel.update(projectInfo.getComponents(), issues);
 
-        return forwardView(req, viewModel, "components");
+        forwardView(req, resp, viewModel, "components");
     }
 
     @RequestMapping(requestPath = "$project/components/$component/edit", method = HttpMethod.GET)
-    public ResponseType editComponent(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void editComponent(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new ComponentEditView();
         populate(viewModel, pathParameters, dao);
 
         if (viewModel.getProjectInfo() == null || viewModel.getComponentFilter() == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         viewModel.setComponent(viewModel.getComponentFilter());
         viewModel.setUsers(dao.getUserDao().list());
 
-        return forwardView(req, viewModel, "component-form");
+        forwardView(req, resp, viewModel, "component-form");
     }
 
     @RequestMapping(requestPath = "$project/create-component", method = HttpMethod.GET)
-    public ResponseType createComponent(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void createComponent(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new ComponentEditView();
         populate(viewModel, pathParameters, dao);
 
         if (viewModel.getProjectInfo() == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         viewModel.setComponent(new Component(-1));
         viewModel.setUsers(dao.getUserDao().list());
 
-        return forwardView(req, viewModel, "component-form");
+        forwardView(req, resp, viewModel, "component-form");
     }
 
     @RequestMapping(requestPath = "commit-component", method = HttpMethod.POST)
-    public ResponseType commitComponent(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
+    public void commitComponent(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, ServletException {
 
         try {
             final var project = dao.getProjectDao().find(getParameter(req, Integer.class, "pid").orElseThrow());
             if (project == null) {
                 // TODO: improve error handling, because not found is not correct for this POST request
                 resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-                return ResponseType.NONE;
+                return;
             }
             final var component = new Component(getParameter(req, Integer.class, "id").orElseThrow());
             component.setName(getParameter(req, String.class, "name").orElseThrow());
@@ -411,13 +410,12 @@
 
             setRedirectLocation(req, "./projects/" + project.getNode() + "/components/");
             setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
+
+            renderSite(req, resp);
         } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
             resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
             // TODO: implement - fix issue #21
-            return ResponseType.NONE;
         }
-
-        return ResponseType.HTML;
     }
 
     private void configureIssueEditor(IssueEditView viewModel, Issue issue, DataAccessObjects dao) throws SQLException {
@@ -430,75 +428,75 @@
     }
 
     @RequestMapping(requestPath = "$project/issues/$issue/view", method = HttpMethod.GET)
-    public ResponseType viewIssue(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void viewIssue(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new IssueDetailView();
         populate(viewModel, pathParameters, dao);
 
         final var projectInfo = viewModel.getProjectInfo();
         if (projectInfo == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         final var issueDao = dao.getIssueDao();
         final var issue = issueDao.find(Functions.parseIntOrZero(pathParameters.get("issue")));
         if (issue == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         issueDao.joinVersionInformation(issue);
         viewModel.setIssue(issue);
         viewModel.setComments(issueDao.listComments(issue));
 
-        return forwardView(req, viewModel, "issue-view");
+        forwardView(req, resp, viewModel, "issue-view");
     }
 
     // TODO: why should the issue editor be child of $project?
     @RequestMapping(requestPath = "$project/issues/$issue/edit", method = HttpMethod.GET)
-    public ResponseType editIssue(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void editIssue(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new IssueEditView();
         populate(viewModel, pathParameters, dao);
 
         final var projectInfo = viewModel.getProjectInfo();
         if (projectInfo == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         final var issueDao = dao.getIssueDao();
         final var issue = issueDao.find(Functions.parseIntOrZero(pathParameters.get("issue")));
         if (issue == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         issueDao.joinVersionInformation(issue);
         configureIssueEditor(viewModel, issue, dao);
 
-        return forwardView(req, viewModel, "issue-form");
+        forwardView(req, resp, viewModel, "issue-form");
     }
 
     @RequestMapping(requestPath = "$project/create-issue", method = HttpMethod.GET)
-    public ResponseType createIssue(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException {
+    public void createIssue(HttpServletRequest req, HttpServletResponse resp, PathParameters pathParameters, DataAccessObjects dao) throws IOException, SQLException, ServletException {
         final var viewModel = new IssueEditView();
         populate(viewModel, pathParameters, dao);
 
         final var projectInfo = viewModel.getProjectInfo();
         if (projectInfo == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
 
         final var issue = new Issue(-1);
         issue.setProject(projectInfo.getProject());
         configureIssueEditor(viewModel, issue, dao);
 
-        return forwardView(req, viewModel, "issue-form");
+        forwardView(req, resp, viewModel, "issue-form");
     }
 
     @RequestMapping(requestPath = "commit-issue", method = HttpMethod.POST)
-    public ResponseType commitIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
+    public void commitIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, ServletException {
         try {
             final var issue = new Issue(getParameter(req, Integer.class, "id").orElseThrow());
             final var componentId = getParameter(req, Integer.class, "component");
@@ -512,7 +510,7 @@
             if (project == null) {
                 // TODO: improve error handling, because not found is not correct for this POST request
                 resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-                return ResponseType.NONE;
+                return;
             }
             issue.setProject(project);
             getParameter(req, String.class, "category").map(IssueCategory::valueOf).ifPresent(issue::setCategory);
@@ -549,25 +547,24 @@
             setRedirectLocation(req, "./projects/" + issue.getProject().getNode()+"/issues/"+issue.getId()+"/view");
             setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
 
-            return ResponseType.HTML;
+            renderSite(req, resp);
         } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
             resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
             // TODO: implement - fix issue #21
-            return ResponseType.NONE;
         }
     }
 
     @RequestMapping(requestPath = "commit-issue-comment", method = HttpMethod.POST)
-    public ResponseType commentIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException, IOException {
+    public void commentIssue(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws SQLException, IOException, ServletException {
         final var issueIdParam = getParameter(req, Integer.class, "issueid");
         if (issueIdParam.isEmpty()) {
             resp.sendError(HttpServletResponse.SC_FORBIDDEN, "Detected manipulated form.");
-            return ResponseType.NONE;
+            return;
         }
         final var issue = dao.getIssueDao().find(issueIdParam.get());
         if (issue == null) {
             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return ResponseType.NONE;
+            return;
         }
         try {
             final var issueComment = new IssueComment(getParameter(req, Integer.class, "commentid").orElse(-1));
@@ -588,11 +585,10 @@
             setRedirectLocation(req, "./projects/" + issue.getProject().getNode()+"/issues/"+issue.getId()+"/view");
             setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
 
-            return ResponseType.HTML;
+            renderSite(req, resp);
         } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
             resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
             // TODO: implement - fix issue #21
-            return ResponseType.NONE;
         }
     }
 }

mercurial