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

changeset 47
57cfb94ab99f
parent 45
cc7f082c5ef3
child 51
dd0a45ae25d7
--- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java	Wed May 13 21:46:26 2020 +0200
+++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java	Thu May 14 22:48:01 2020 +0200
@@ -31,9 +31,13 @@
 
 import de.uapcore.lightpit.*;
 import de.uapcore.lightpit.dao.DataAccessObjects;
+import de.uapcore.lightpit.entities.Project;
+import de.uapcore.lightpit.entities.User;
 
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServletRequest;
+import java.sql.SQLException;
+import java.util.Optional;
 
 @LightPITModule(
         bundleBaseName = "localization.projects",
@@ -47,12 +51,59 @@
 public final class ProjectsModule extends AbstractLightPITServlet {
 
     @RequestMapping(method = HttpMethod.GET)
-    public ResponseType index(HttpServletRequest req, DataAccessObjects dao) {
+    public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
+        final var projectDao = dao.getProjectDao();
+
+        req.setAttribute("projects", projectDao.list());
+        setDynamicFragment(req, "projects");
+
+        return ResponseType.HTML;
+    }
+
+    @RequestMapping(requestPath = "edit", method = HttpMethod.GET)
+    public ResponseType displayCreateForm(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
+        final var projectDao = dao.getProjectDao();
+
+        Optional<Integer> id = getParameter(req, Integer.class, "id");
+        if (id.isPresent()) {
+            req.setAttribute("project", Optional.ofNullable(projectDao.find(id.get())).orElse(new Project(-1)));
+        } else {
+            req.setAttribute("project", new Project(-1));
+        }
+
+        setDynamicFragment(req, "project-form");
 
         return ResponseType.HTML;
     }
 
-    @RequestMapping(method = HttpMethod.GET, requestPath = "versions", menuKey = "menu.versions")
+    @RequestMapping(requestPath = "commit", method = HttpMethod.POST)
+    public ResponseType commit(HttpServletRequest req, DataAccessObjects dao) {
+
+        Project project = new Project(-1);
+        try {
+            project = new Project(getParameter(req, Integer.class, "id").orElseThrow());
+            project.setName(getParameter(req, String.class, "name").orElseThrow());
+            getParameter(req, String.class, "description").ifPresent(project::setDescription);
+            getParameter(req, String.class, "repoUrl").ifPresent(project::setRepoUrl);
+            getParameter(req, Integer.class, "owner").map(
+                    ownerId -> ownerId >= 0 ? new User(ownerId) : null
+            ).ifPresent(project::setOwner);
+
+            dao.getProjectDao().saveOrUpdate(project);
+
+            setRedirectLocation(req, "./projects/");
+            setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL);
+        } catch (NullPointerException | NumberFormatException | SQLException ex) {
+            // TODO: set request attribute with error text
+            req.setAttribute("project", project);
+            setDynamicFragment(req, "project-form");
+        }
+
+        return ResponseType.HTML;
+    }
+
+
+    @RequestMapping(requestPath = "versions", method = HttpMethod.GET, menuKey = "menu.versions")
     public ResponseType versions(HttpServletRequest req, DataAccessObjects dao) {
 
         return ResponseType.HTML;

mercurial