33 import de.uapcore.lightpit.types.IssueStatus |
33 import de.uapcore.lightpit.types.IssueStatus |
34 import de.uapcore.lightpit.types.VersionStatus |
34 import de.uapcore.lightpit.types.VersionStatus |
35 import de.uapcore.lightpit.types.WebColor |
35 import de.uapcore.lightpit.types.WebColor |
36 import de.uapcore.lightpit.util.AllFilter |
36 import de.uapcore.lightpit.util.AllFilter |
37 import de.uapcore.lightpit.util.IssueFilter |
37 import de.uapcore.lightpit.util.IssueFilter |
|
38 import de.uapcore.lightpit.util.IssueSorter.Companion.DEFAULT_ISSUE_SORTER |
38 import de.uapcore.lightpit.util.SpecificFilter |
39 import de.uapcore.lightpit.util.SpecificFilter |
39 import de.uapcore.lightpit.viewmodel.* |
40 import de.uapcore.lightpit.viewmodel.* |
40 import java.sql.Date |
41 import java.sql.Date |
41 import javax.servlet.annotation.WebServlet |
42 import javax.servlet.annotation.WebServlet |
42 |
43 |
66 post("/%project/issues/%version/%component/%issue/comment", this::issueComment) |
67 post("/%project/issues/%version/%component/%issue/comment", this::issueComment) |
67 get("/%project/issues/%version/%component/-/create", this::issueForm) |
68 get("/%project/issues/%version/%component/-/create", this::issueForm) |
68 post("/%project/issues/%version/%component/-/commit", this::issueCommit) |
69 post("/%project/issues/%version/%component/-/commit", this::issueCommit) |
69 } |
70 } |
70 |
71 |
71 fun projects(http: HttpRequest, dao: DataAccessObject) { |
72 private fun projects(http: HttpRequest, dao: DataAccessObject) { |
72 val projects = dao.listProjects() |
73 val projects = dao.listProjects() |
73 val projectInfos = projects.map { |
74 val projectInfos = projects.map { |
74 ProjectInfo( |
75 ProjectInfo( |
75 project = it, |
76 project = it, |
76 versions = dao.listVersions(it), |
77 versions = dao.listVersions(it), |
179 } |
180 } |
180 |
181 |
181 return PathInfos(projectInfo, version, component) |
182 return PathInfos(projectInfo, version, component) |
182 } |
183 } |
183 |
184 |
184 fun project(http: HttpRequest, dao: DataAccessObject) { |
185 private fun project(http: HttpRequest, dao: DataAccessObject) { |
185 withPathInfo(http, dao)?.run { |
186 withPathInfo(http, dao)?.run { |
|
187 |
186 val issues = dao.listIssues(IssueFilter( |
188 val issues = dao.listIssues(IssueFilter( |
187 project = SpecificFilter(projectInfo.project), |
189 project = SpecificFilter(projectInfo.project), |
188 version = version?.let { SpecificFilter(it) } ?: AllFilter(), |
190 version = version?.let { SpecificFilter(it) } ?: AllFilter(), |
189 component = component?.let { SpecificFilter(it) } ?: AllFilter() |
191 component = component?.let { SpecificFilter(it) } ?: AllFilter() |
190 )) |
192 )).sortedWith(DEFAULT_ISSUE_SORTER) |
191 |
193 |
192 with(http) { |
194 with(http) { |
193 view = ProjectDetails(projectInfo, issues, version, component) |
195 view = ProjectDetails(projectInfo, issues, version, component) |
194 navigationMenu = activeProjectNavMenu( |
196 navigationMenu = activeProjectNavMenu( |
195 dao.listProjects(), |
197 dao.listProjects(), |
201 render("project-details") |
203 render("project-details") |
202 } |
204 } |
203 } |
205 } |
204 } |
206 } |
205 |
207 |
206 fun projectForm(http: HttpRequest, dao: DataAccessObject) { |
208 private fun projectForm(http: HttpRequest, dao: DataAccessObject) { |
207 val projectInfo = obtainProjectInfo(http, dao) |
209 val projectInfo = obtainProjectInfo(http, dao) |
208 if (projectInfo == null) { |
210 if (projectInfo == null) { |
209 http.response.sendError(404) |
211 http.response.sendError(404) |
210 return |
212 return |
211 } |
213 } |
219 styleSheets = listOf("projects") |
221 styleSheets = listOf("projects") |
220 render("project-form") |
222 render("project-form") |
221 } |
223 } |
222 } |
224 } |
223 |
225 |
224 fun projectCommit(http: HttpRequest, dao: DataAccessObject) { |
226 private fun projectCommit(http: HttpRequest, dao: DataAccessObject) { |
225 // TODO: replace defaults with throwing validator exceptions |
227 // TODO: replace defaults with throwing validator exceptions |
226 val project = Project(http.param("id")?.toIntOrNull() ?: -1).apply { |
228 val project = Project(http.param("id")?.toIntOrNull() ?: -1).apply { |
227 name = http.param("name") ?: "" |
229 name = http.param("name") ?: "" |
228 node = http.param("node") ?: "" |
230 node = http.param("node") ?: "" |
229 description = http.param("description") ?: "" |
231 description = http.param("description") ?: "" |
245 } |
247 } |
246 |
248 |
247 http.renderCommit("projects/${project.node}") |
249 http.renderCommit("projects/${project.node}") |
248 } |
250 } |
249 |
251 |
250 fun versions(http: HttpRequest, dao: DataAccessObject) { |
252 private fun versions(http: HttpRequest, dao: DataAccessObject) { |
251 val projectInfo = obtainProjectInfo(http, dao) |
253 val projectInfo = obtainProjectInfo(http, dao) |
252 if (projectInfo == null) { |
254 if (projectInfo == null) { |
253 http.response.sendError(404) |
255 http.response.sendError(404) |
254 return |
256 return |
255 } |
257 } |
266 styleSheets = listOf("projects") |
268 styleSheets = listOf("projects") |
267 render("versions") |
269 render("versions") |
268 } |
270 } |
269 } |
271 } |
270 |
272 |
271 fun versionForm(http: HttpRequest, dao: DataAccessObject) { |
273 private fun versionForm(http: HttpRequest, dao: DataAccessObject) { |
272 val projectInfo = obtainProjectInfo(http, dao) |
274 val projectInfo = obtainProjectInfo(http, dao) |
273 if (projectInfo == null) { |
275 if (projectInfo == null) { |
274 http.response.sendError(404) |
276 http.response.sendError(404) |
275 return |
277 return |
276 } |
278 } |
296 styleSheets = listOf("projects") |
298 styleSheets = listOf("projects") |
297 render("version-form") |
299 render("version-form") |
298 } |
300 } |
299 } |
301 } |
300 |
302 |
301 fun versionCommit(http: HttpRequest, dao: DataAccessObject) { |
303 private fun versionCommit(http: HttpRequest, dao: DataAccessObject) { |
302 val id = http.param("id")?.toIntOrNull() |
304 val id = http.param("id")?.toIntOrNull() |
303 val projectid = http.param("projectid")?.toIntOrNull() ?: -1 |
305 val projectid = http.param("projectid")?.toIntOrNull() ?: -1 |
304 val project = dao.findProject(projectid) |
306 val project = dao.findProject(projectid) |
305 if (id == null || project == null) { |
307 if (id == null || project == null) { |
306 http.response.sendError(400) |
308 http.response.sendError(400) |
326 } |
328 } |
327 |
329 |
328 http.renderCommit("projects/${project.node}/versions/") |
330 http.renderCommit("projects/${project.node}/versions/") |
329 } |
331 } |
330 |
332 |
331 fun components(http: HttpRequest, dao: DataAccessObject) { |
333 private fun components(http: HttpRequest, dao: DataAccessObject) { |
332 val projectInfo = obtainProjectInfo(http, dao) |
334 val projectInfo = obtainProjectInfo(http, dao) |
333 if (projectInfo == null) { |
335 if (projectInfo == null) { |
334 http.response.sendError(404) |
336 http.response.sendError(404) |
335 return |
337 return |
336 } |
338 } |
347 styleSheets = listOf("projects") |
349 styleSheets = listOf("projects") |
348 render("components") |
350 render("components") |
349 } |
351 } |
350 } |
352 } |
351 |
353 |
352 fun componentForm(http: HttpRequest, dao: DataAccessObject) { |
354 private fun componentForm(http: HttpRequest, dao: DataAccessObject) { |
353 val projectInfo = obtainProjectInfo(http, dao) |
355 val projectInfo = obtainProjectInfo(http, dao) |
354 if (projectInfo == null) { |
356 if (projectInfo == null) { |
355 http.response.sendError(404) |
357 http.response.sendError(404) |
356 return |
358 return |
357 } |
359 } |
377 styleSheets = listOf("projects") |
379 styleSheets = listOf("projects") |
378 render("component-form") |
380 render("component-form") |
379 } |
381 } |
380 } |
382 } |
381 |
383 |
382 fun componentCommit(http: HttpRequest, dao: DataAccessObject) { |
384 private fun componentCommit(http: HttpRequest, dao: DataAccessObject) { |
383 val id = http.param("id")?.toIntOrNull() |
385 val id = http.param("id")?.toIntOrNull() |
384 val projectid = http.param("projectid")?.toIntOrNull() ?: -1 |
386 val projectid = http.param("projectid")?.toIntOrNull() ?: -1 |
385 val project = dao.findProject(projectid) |
387 val project = dao.findProject(projectid) |
386 if (id == null || project == null) { |
388 if (id == null || project == null) { |
387 http.response.sendError(400) |
389 http.response.sendError(400) |
411 } |
413 } |
412 |
414 |
413 http.renderCommit("projects/${project.node}/components/") |
415 http.renderCommit("projects/${project.node}/components/") |
414 } |
416 } |
415 |
417 |
416 fun issue(http: HttpRequest, dao: DataAccessObject) { |
418 private fun issue(http: HttpRequest, dao: DataAccessObject) { |
417 withPathInfo(http, dao)?.run { |
419 withPathInfo(http, dao)?.run { |
418 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) |
420 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) |
419 if (issue == null) { |
421 if (issue == null) { |
420 http.response.sendError(404) |
422 http.response.sendError(404) |
421 return |
423 return |
476 render("issue-form") |
478 render("issue-form") |
477 } |
479 } |
478 } |
480 } |
479 } |
481 } |
480 |
482 |
481 fun issueComment(http: HttpRequest, dao: DataAccessObject) { |
483 private fun issueComment(http: HttpRequest, dao: DataAccessObject) { |
482 withPathInfo(http, dao)?.run { |
484 withPathInfo(http, dao)?.run { |
483 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) |
485 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) |
484 if (issue == null) { |
486 if (issue == null) { |
485 http.response.sendError(404) |
487 http.response.sendError(404) |
486 return |
488 return |
496 |
498 |
497 http.renderCommit("${issuesHref}${issue.id}") |
499 http.renderCommit("${issuesHref}${issue.id}") |
498 } |
500 } |
499 } |
501 } |
500 |
502 |
501 fun issueCommit(http: HttpRequest, dao: DataAccessObject) { |
503 private fun issueCommit(http: HttpRequest, dao: DataAccessObject) { |
502 withPathInfo(http, dao)?.run { |
504 withPathInfo(http, dao)?.run { |
503 // TODO: throw validator exception instead of using defaults |
505 // TODO: throw validator exception instead of using defaults |
504 val issue = Issue( |
506 val issue = Issue( |
505 http.param("id")?.toIntOrNull() ?: -1, |
507 http.param("id")?.toIntOrNull() ?: -1, |
506 projectInfo.project |
508 projectInfo.project |