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

changeset 47
57cfb94ab99f
parent 45
cc7f082c5ef3
child 51
dd0a45ae25d7
     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;

mercurial