diff -r 1574965c7dc7 -r 57cfb94ab99f src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java --- 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 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;