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

Sat, 16 May 2020 15:45:06 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 16 May 2020 15:45:06 +0200
changeset 53
6a8498291606
parent 52
67a02e79b7a1
child 59
c759c60507a2
permissions
-rw-r--r--

fixes bug where displaying an error page for missing data source would also require that data source (error pages don't try to get database connections now)

also improves error pages in general

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

mercurial