1.1 --- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Wed May 13 21:46:26 2020 +0200 1.2 +++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Thu May 14 22:48:01 2020 +0200 1.3 @@ -31,9 +31,13 @@ 1.4 1.5 import de.uapcore.lightpit.*; 1.6 import de.uapcore.lightpit.dao.DataAccessObjects; 1.7 +import de.uapcore.lightpit.entities.Project; 1.8 +import de.uapcore.lightpit.entities.User; 1.9 1.10 import javax.servlet.annotation.WebServlet; 1.11 import javax.servlet.http.HttpServletRequest; 1.12 +import java.sql.SQLException; 1.13 +import java.util.Optional; 1.14 1.15 @LightPITModule( 1.16 bundleBaseName = "localization.projects", 1.17 @@ -47,12 +51,59 @@ 1.18 public final class ProjectsModule extends AbstractLightPITServlet { 1.19 1.20 @RequestMapping(method = HttpMethod.GET) 1.21 - public ResponseType index(HttpServletRequest req, DataAccessObjects dao) { 1.22 + public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException { 1.23 + final var projectDao = dao.getProjectDao(); 1.24 + 1.25 + req.setAttribute("projects", projectDao.list()); 1.26 + setDynamicFragment(req, "projects"); 1.27 1.28 return ResponseType.HTML; 1.29 } 1.30 1.31 - @RequestMapping(method = HttpMethod.GET, requestPath = "versions", menuKey = "menu.versions") 1.32 + @RequestMapping(requestPath = "edit", method = HttpMethod.GET) 1.33 + public ResponseType displayCreateForm(HttpServletRequest req, DataAccessObjects dao) throws SQLException { 1.34 + final var projectDao = dao.getProjectDao(); 1.35 + 1.36 + Optional<Integer> id = getParameter(req, Integer.class, "id"); 1.37 + if (id.isPresent()) { 1.38 + req.setAttribute("project", Optional.ofNullable(projectDao.find(id.get())).orElse(new Project(-1))); 1.39 + } else { 1.40 + req.setAttribute("project", new Project(-1)); 1.41 + } 1.42 + 1.43 + setDynamicFragment(req, "project-form"); 1.44 + 1.45 + return ResponseType.HTML; 1.46 + } 1.47 + 1.48 + @RequestMapping(requestPath = "commit", method = HttpMethod.POST) 1.49 + public ResponseType commit(HttpServletRequest req, DataAccessObjects dao) { 1.50 + 1.51 + Project project = new Project(-1); 1.52 + try { 1.53 + project = new Project(getParameter(req, Integer.class, "id").orElseThrow()); 1.54 + project.setName(getParameter(req, String.class, "name").orElseThrow()); 1.55 + getParameter(req, String.class, "description").ifPresent(project::setDescription); 1.56 + getParameter(req, String.class, "repoUrl").ifPresent(project::setRepoUrl); 1.57 + getParameter(req, Integer.class, "owner").map( 1.58 + ownerId -> ownerId >= 0 ? new User(ownerId) : null 1.59 + ).ifPresent(project::setOwner); 1.60 + 1.61 + dao.getProjectDao().saveOrUpdate(project); 1.62 + 1.63 + setRedirectLocation(req, "./projects/"); 1.64 + setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL); 1.65 + } catch (NullPointerException | NumberFormatException | SQLException ex) { 1.66 + // TODO: set request attribute with error text 1.67 + req.setAttribute("project", project); 1.68 + setDynamicFragment(req, "project-form"); 1.69 + } 1.70 + 1.71 + return ResponseType.HTML; 1.72 + } 1.73 + 1.74 + 1.75 + @RequestMapping(requestPath = "versions", method = HttpMethod.GET, menuKey = "menu.versions") 1.76 public ResponseType versions(HttpServletRequest req, DataAccessObjects dao) { 1.77 1.78 return ResponseType.HTML;