31 |
31 |
32 import de.uapcore.lightpit.*; |
32 import de.uapcore.lightpit.*; |
33 import de.uapcore.lightpit.dao.DataAccessObjects; |
33 import de.uapcore.lightpit.dao.DataAccessObjects; |
34 import de.uapcore.lightpit.entities.Project; |
34 import de.uapcore.lightpit.entities.Project; |
35 import de.uapcore.lightpit.entities.User; |
35 import de.uapcore.lightpit.entities.User; |
|
36 import de.uapcore.lightpit.entities.Version; |
|
37 import de.uapcore.lightpit.entities.VersionStatus; |
|
38 import org.slf4j.Logger; |
|
39 import org.slf4j.LoggerFactory; |
36 |
40 |
37 import javax.servlet.annotation.WebServlet; |
41 import javax.servlet.annotation.WebServlet; |
38 import javax.servlet.http.HttpServletRequest; |
42 import javax.servlet.http.HttpServletRequest; |
|
43 import javax.servlet.http.HttpServletResponse; |
|
44 import java.io.IOException; |
39 import java.sql.SQLException; |
45 import java.sql.SQLException; |
|
46 import java.util.NoSuchElementException; |
40 import java.util.Optional; |
47 import java.util.Optional; |
41 |
48 |
42 import static de.uapcore.lightpit.Functions.fqn; |
49 import static de.uapcore.lightpit.Functions.fqn; |
43 |
50 |
44 @LightPITModule( |
51 @LightPITModule( |
50 name = "ProjectsModule", |
57 name = "ProjectsModule", |
51 urlPatterns = "/projects/*" |
58 urlPatterns = "/projects/*" |
52 ) |
59 ) |
53 public final class ProjectsModule extends AbstractLightPITServlet { |
60 public final class ProjectsModule extends AbstractLightPITServlet { |
54 |
61 |
|
62 private static final Logger LOG = LoggerFactory.getLogger(ProjectsModule.class); |
|
63 |
55 public static final String SESSION_ATTR_SELECTED_PROJECT = fqn(ProjectsModule.class, "selected-project"); |
64 public static final String SESSION_ATTR_SELECTED_PROJECT = fqn(ProjectsModule.class, "selected-project"); |
56 |
65 |
57 @RequestMapping(method = HttpMethod.GET) |
66 @RequestMapping(method = HttpMethod.GET, menuKey = "menu.index") |
58 public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException { |
67 public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException { |
59 final var projectList = dao.getProjectDao().list(); |
68 final var projectList = dao.getProjectDao().list(); |
60 req.setAttribute("projects", projectList); |
69 req.setAttribute("projects", projectList); |
61 setDynamicFragment(req, "projects"); |
70 setDynamicFragment(req, "projects"); |
62 setStylesheet(req, "projects"); |
71 setStylesheet(req, "projects"); |
113 |
122 |
114 dao.getProjectDao().saveOrUpdate(project); |
123 dao.getProjectDao().saveOrUpdate(project); |
115 |
124 |
116 setRedirectLocation(req, "./projects/"); |
125 setRedirectLocation(req, "./projects/"); |
117 setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL); |
126 setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL); |
118 } catch (NullPointerException | NumberFormatException | SQLException ex) { |
127 LOG.debug("Successfully updated project {}", project.getName()); |
|
128 } catch (NoSuchElementException | NumberFormatException | SQLException ex) { |
119 // TODO: set request attribute with error text |
129 // TODO: set request attribute with error text |
120 req.setAttribute("project", project); |
130 req.setAttribute("project", project); |
121 setDynamicFragment(req, "project-form"); |
131 setDynamicFragment(req, "project-form"); |
122 } |
132 LOG.warn("Form validation failure: {}", ex.getMessage()); |
123 |
133 LOG.debug("Details:", ex); |
124 return ResponseType.HTML; |
134 } |
125 } |
135 |
126 |
136 return ResponseType.HTML; |
|
137 } |
127 |
138 |
128 @RequestMapping(requestPath = "versions", method = HttpMethod.GET, menuKey = "menu.versions") |
139 @RequestMapping(requestPath = "versions", method = HttpMethod.GET, menuKey = "menu.versions") |
129 public ResponseType versions(HttpServletRequest req, DataAccessObjects dao) { |
140 public ResponseType versions(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, SQLException { |
|
141 final var selectedProject = (Project)req.getSession().getAttribute(SESSION_ATTR_SELECTED_PROJECT); |
|
142 if (selectedProject == null) { |
|
143 resp.sendError(HttpServletResponse.SC_FORBIDDEN); |
|
144 return ResponseType.NONE; |
|
145 } |
|
146 |
|
147 req.setAttribute("versions", dao.getVersionDao().list(selectedProject)); |
|
148 setDynamicFragment(req, "versions"); |
|
149 |
|
150 return ResponseType.HTML; |
|
151 } |
|
152 |
|
153 @RequestMapping(requestPath = "versions/edit", method = HttpMethod.GET) |
|
154 public ResponseType editVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException, SQLException { |
|
155 final var selectedProject = (Project)req.getSession().getAttribute(SESSION_ATTR_SELECTED_PROJECT); |
|
156 if (selectedProject == null) { |
|
157 resp.sendError(HttpServletResponse.SC_FORBIDDEN); |
|
158 return ResponseType.NONE; |
|
159 } |
|
160 |
|
161 Optional<Integer> id = getParameter(req, Integer.class, "id"); |
|
162 if (id.isPresent()) { |
|
163 req.setAttribute("version", Optional.ofNullable(dao.getVersionDao().find(id.get())).orElse(new Version(-1, selectedProject))); |
|
164 } else { |
|
165 req.setAttribute("version", new Version(-1, selectedProject)); |
|
166 } |
|
167 req.setAttribute("versionStatusEnum", VersionStatus.values()); |
|
168 |
|
169 setDynamicFragment(req, "version-form"); |
|
170 |
|
171 return ResponseType.HTML; |
|
172 } |
|
173 |
|
174 @RequestMapping(requestPath = "versions/commit", method = HttpMethod.POST) |
|
175 public ResponseType commitVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException { |
|
176 final var selectedProject = (Project)req.getSession().getAttribute(SESSION_ATTR_SELECTED_PROJECT); |
|
177 if (selectedProject == null) { |
|
178 resp.sendError(HttpServletResponse.SC_FORBIDDEN); |
|
179 return ResponseType.NONE; |
|
180 } |
|
181 |
|
182 Version version = new Version(-1, selectedProject); |
|
183 try { |
|
184 version = new Version(getParameter(req, Integer.class, "id").orElseThrow(), selectedProject); |
|
185 version.setName(getParameter(req, String.class, "name").orElseThrow()); |
|
186 getParameter(req, Integer.class, "ordinal").ifPresent(version::setOrdinal); |
|
187 version.setStatus(VersionStatus.valueOf(getParameter(req, String.class, "status").orElseThrow())); |
|
188 dao.getVersionDao().saveOrUpdate(version); |
|
189 |
|
190 setRedirectLocation(req, "./projects/versions/"); |
|
191 setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL); |
|
192 LOG.debug("Successfully updated version {} for project {}", version.getName(), selectedProject.getName()); |
|
193 } catch (NoSuchElementException | NumberFormatException | SQLException ex) { |
|
194 // TODO: set request attribute with error text |
|
195 req.setAttribute("version", version); |
|
196 req.setAttribute("versionStatusEnum", VersionStatus.values()); |
|
197 setDynamicFragment(req, "version-form"); |
|
198 LOG.warn("Form validation failure: {}", ex.getMessage()); |
|
199 LOG.debug("Details:", ex); |
|
200 } |
130 |
201 |
131 return ResponseType.HTML; |
202 return ResponseType.HTML; |
132 } |
203 } |
133 } |
204 } |