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

Sat, 16 May 2020 15:11:07 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 16 May 2020 15:11:07 +0200
changeset 52
67a02e79b7a1
parent 51
dd0a45ae25d7
child 59
c759c60507a2
permissions
-rw-r--r--

adds project selection

     1 /*
     2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     3  *
     4  * Copyright 2018 Mike Becker. All rights reserved.
     5  *
     6  * Redistribution and use in source and binary forms, with or without
     7  * modification, are permitted provided that the following conditions are met:
     8  *
     9  *   1. Redistributions of source code must retain the above copyright
    10  *      notice, this list of conditions and the following disclaimer.
    11  *
    12  *   2. Redistributions in binary form must reproduce the above copyright
    13  *      notice, this list of conditions and the following disclaimer in the
    14  *      documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  *
    28  */
    29 package de.uapcore.lightpit.modules;
    32 import de.uapcore.lightpit.*;
    33 import de.uapcore.lightpit.dao.DataAccessObjects;
    34 import de.uapcore.lightpit.entities.Project;
    35 import de.uapcore.lightpit.entities.User;
    37 import javax.servlet.annotation.WebServlet;
    38 import javax.servlet.http.HttpServletRequest;
    39 import java.sql.SQLException;
    40 import java.util.Optional;
    42 import static de.uapcore.lightpit.Functions.fqn;
    44 @LightPITModule(
    45         bundleBaseName = "localization.projects",
    46         modulePath = "projects",
    47         defaultPriority = 20
    48 )
    49 @WebServlet(
    50         name = "ProjectsModule",
    51         urlPatterns = "/projects/*"
    52 )
    53 public final class ProjectsModule extends AbstractLightPITServlet {
    55     public static final String SESSION_ATTR_SELECTED_PROJECT = fqn(ProjectsModule.class, "selected-project");
    57     @RequestMapping(method = HttpMethod.GET)
    58     public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
    59         final var projectList = dao.getProjectDao().list();
    60         req.setAttribute("projects", projectList);
    61         setDynamicFragment(req, "projects");
    62         setStylesheet(req, "projects");
    64         final var session = req.getSession();
    65         final var projectSelection = getParameter(req, Integer.class, "select");
    66         if (projectSelection.isPresent()) {
    67             final var selectedId = projectSelection.get();
    68             for (var proj : projectList) {
    69                 if (proj.getId() == selectedId) {
    70                     session.setAttribute(SESSION_ATTR_SELECTED_PROJECT, proj);
    71                     break;
    72                 }
    73             }
    74         } else {
    75             final var selectedProject = session.getAttribute(SESSION_ATTR_SELECTED_PROJECT);
    76             if (selectedProject == null) {
    77                 projectList.stream().findFirst().ifPresent(proj -> session.setAttribute(SESSION_ATTR_SELECTED_PROJECT, proj));
    78             }
    79         }
    81         return ResponseType.HTML;
    82     }
    84     @RequestMapping(requestPath = "edit", method = HttpMethod.GET)
    85     public ResponseType edit(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
    86         final var projectDao = dao.getProjectDao();
    88         Optional<Integer> id = getParameter(req, Integer.class, "id");
    89         if (id.isPresent()) {
    90             req.setAttribute("project", Optional.ofNullable(projectDao.find(id.get())).orElse(new Project(-1)));
    91         } else {
    92             req.setAttribute("project", new Project(-1));
    93         }
    94         req.setAttribute("users", dao.getUserDao().list());
    96         setDynamicFragment(req, "project-form");
    98         return ResponseType.HTML;
    99     }
   101     @RequestMapping(requestPath = "commit", method = HttpMethod.POST)
   102     public ResponseType commit(HttpServletRequest req, DataAccessObjects dao) {
   104         Project project = new Project(-1);
   105         try {
   106             project = new Project(getParameter(req, Integer.class, "id").orElseThrow());
   107             project.setName(getParameter(req, String.class, "name").orElseThrow());
   108             getParameter(req, String.class, "description").ifPresent(project::setDescription);
   109             getParameter(req, String.class, "repoUrl").ifPresent(project::setRepoUrl);
   110             getParameter(req, Integer.class, "owner").map(
   111                     ownerId -> ownerId >= 0 ? new User(ownerId) : null
   112             ).ifPresent(project::setOwner);
   114             dao.getProjectDao().saveOrUpdate(project);
   116             setRedirectLocation(req, "./projects/");
   117             setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL);
   118         } catch (NullPointerException | NumberFormatException | SQLException ex) {
   119             // TODO: set request attribute with error text
   120             req.setAttribute("project", project);
   121             setDynamicFragment(req, "project-form");
   122         }
   124         return ResponseType.HTML;
   125     }
   128     @RequestMapping(requestPath = "versions", method = HttpMethod.GET, menuKey = "menu.versions")
   129     public ResponseType versions(HttpServletRequest req, DataAccessObjects dao) {
   131         return ResponseType.HTML;
   132     }
   133 }

mercurial