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

Sun, 17 May 2020 16:23:39 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 17 May 2020 16:23:39 +0200
changeset 59
c759c60507a2
parent 52
67a02e79b7a1
child 61
3e287f361c7a
permissions
-rw-r--r--

adds version management

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;
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
36 import de.uapcore.lightpit.entities.Version;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
37 import de.uapcore.lightpit.entities.VersionStatus;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
38 import org.slf4j.Logger;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
39 import org.slf4j.LoggerFactory;
41
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 import javax.servlet.annotation.WebServlet;
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 import javax.servlet.http.HttpServletRequest;
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
43 import javax.servlet.http.HttpServletResponse;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
44 import java.io.IOException;
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
45 import java.sql.SQLException;
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
46 import java.util.NoSuchElementException;
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
47 import java.util.Optional;
41
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48
52
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
49 import static de.uapcore.lightpit.Functions.fqn;
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
50
41
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 @LightPITModule(
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 bundleBaseName = "localization.projects",
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 modulePath = "projects",
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 defaultPriority = 20
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 )
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 @WebServlet(
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 name = "ProjectsModule",
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 urlPatterns = "/projects/*"
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 )
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 public final class ProjectsModule extends AbstractLightPITServlet {
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
62 private static final Logger LOG = LoggerFactory.getLogger(ProjectsModule.class);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
63
52
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
64 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
65
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
66 @RequestMapping(method = HttpMethod.GET, menuKey = "menu.index")
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
67 public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException {
52
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
68 final var projectList = dao.getProjectDao().list();
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
69 req.setAttribute("projects", projectList);
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
70 setDynamicFragment(req, "projects");
52
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
71 setStylesheet(req, "projects");
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 final var session = req.getSession();
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
74 final var projectSelection = getParameter(req, Integer.class, "select");
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
75 if (projectSelection.isPresent()) {
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
76 final var selectedId = projectSelection.get();
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
77 for (var proj : projectList) {
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
78 if (proj.getId() == selectedId) {
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
79 session.setAttribute(SESSION_ATTR_SELECTED_PROJECT, proj);
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
80 break;
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
81 }
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
82 }
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
83 } else {
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
84 final var selectedProject = session.getAttribute(SESSION_ATTR_SELECTED_PROJECT);
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
85 if (selectedProject == null) {
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
86 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
87 }
67a02e79b7a1 adds project selection
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
88 }
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
89
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
90 return ResponseType.HTML;
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
91 }
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
92
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
93 @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
94 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
95 final var projectDao = dao.getProjectDao();
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
96
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
97 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
98 if (id.isPresent()) {
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
99 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
100 } else {
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
101 req.setAttribute("project", new Project(-1));
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
102 }
51
dd0a45ae25d7 adds the possibility to add users / developers
Mike Becker <universe@uap-core.de>
parents: 47
diff changeset
103 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
104
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
105 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
106
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
107 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
108 }
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
109
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
110 @RequestMapping(requestPath = "commit", method = HttpMethod.POST)
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
111 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
112
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
113 Project project = new Project(-1);
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
114 try {
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
115 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
116 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
117 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
118 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
119 getParameter(req, Integer.class, "owner").map(
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
120 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
121 ).ifPresent(project::setOwner);
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 dao.getProjectDao().saveOrUpdate(project);
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
124
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
125 setRedirectLocation(req, "./projects/");
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
126 setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL);
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
127 LOG.debug("Successfully updated project {}", project.getName());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
128 } catch (NoSuchElementException | NumberFormatException | SQLException ex) {
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
129 // 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
130 req.setAttribute("project", project);
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
131 setDynamicFragment(req, "project-form");
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
132 LOG.warn("Form validation failure: {}", ex.getMessage());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
133 LOG.debug("Details:", ex);
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
134 }
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
135
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
136 return ResponseType.HTML;
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
137 }
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
138
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
139 @RequestMapping(requestPath = "versions", method = HttpMethod.GET, menuKey = "menu.versions")
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
140 public ResponseType versions(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, SQLException {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
141 final var selectedProject = (Project)req.getSession().getAttribute(SESSION_ATTR_SELECTED_PROJECT);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
142 if (selectedProject == null) {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
143 resp.sendError(HttpServletResponse.SC_FORBIDDEN);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
144 return ResponseType.NONE;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
145 }
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
146
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
147 req.setAttribute("versions", dao.getVersionDao().list(selectedProject));
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
148 setDynamicFragment(req, "versions");
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
149
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
150 return ResponseType.HTML;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
151 }
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
152
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
153 @RequestMapping(requestPath = "versions/edit", method = HttpMethod.GET)
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
154 public ResponseType editVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, SQLException {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
155 final var selectedProject = (Project)req.getSession().getAttribute(SESSION_ATTR_SELECTED_PROJECT);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
156 if (selectedProject == null) {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
157 resp.sendError(HttpServletResponse.SC_FORBIDDEN);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
158 return ResponseType.NONE;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
159 }
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
160
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
161 Optional<Integer> id = getParameter(req, Integer.class, "id");
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
162 if (id.isPresent()) {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
163 req.setAttribute("version", Optional.ofNullable(dao.getVersionDao().find(id.get())).orElse(new Version(-1, selectedProject)));
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
164 } else {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
165 req.setAttribute("version", new Version(-1, selectedProject));
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
166 }
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
167 req.setAttribute("versionStatusEnum", VersionStatus.values());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
168
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
169 setDynamicFragment(req, "version-form");
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
170
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
171 return ResponseType.HTML;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
172 }
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
173
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
174 @RequestMapping(requestPath = "versions/commit", method = HttpMethod.POST)
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
175 public ResponseType commitVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
176 final var selectedProject = (Project)req.getSession().getAttribute(SESSION_ATTR_SELECTED_PROJECT);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
177 if (selectedProject == null) {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
178 resp.sendError(HttpServletResponse.SC_FORBIDDEN);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
179 return ResponseType.NONE;
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
180 }
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
181
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
182 Version version = new Version(-1, selectedProject);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
183 try {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
184 version = new Version(getParameter(req, Integer.class, "id").orElseThrow(), selectedProject);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
185 version.setName(getParameter(req, String.class, "name").orElseThrow());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
186 getParameter(req, Integer.class, "ordinal").ifPresent(version::setOrdinal);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
187 version.setStatus(VersionStatus.valueOf(getParameter(req, String.class, "status").orElseThrow()));
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
188 dao.getVersionDao().saveOrUpdate(version);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
189
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
190 setRedirectLocation(req, "./projects/versions/");
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
191 setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
192 LOG.debug("Successfully updated version {} for project {}", version.getName(), selectedProject.getName());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
193 } catch (NoSuchElementException | NumberFormatException | SQLException ex) {
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
194 // TODO: set request attribute with error text
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
195 req.setAttribute("version", version);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
196 req.setAttribute("versionStatusEnum", VersionStatus.values());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
197 setDynamicFragment(req, "version-form");
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
198 LOG.warn("Form validation failure: {}", ex.getMessage());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
199 LOG.debug("Details:", ex);
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 52
diff changeset
200 }
41
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
201
43
9abf0bf44c7b renames some crappy constants
Mike Becker <universe@uap-core.de>
parents: 42
diff changeset
202 return ResponseType.HTML;
41
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
203 }
4f1c026a8aab adds files for ProjectsModule
Mike Becker <universe@uap-core.de>
parents:
diff changeset
204 }

mercurial