src/main/kotlin/de/uapcore/lightpit/servlet/IssuesServlet.kt

Mon, 05 Aug 2024 18:40:47 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 05 Aug 2024 18:40:47 +0200
changeset 311
bf67e0ff7131
permissions
-rw-r--r--

add new global issues page - fixes #404

311
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 package de.uapcore.lightpit.servlet
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 import de.uapcore.lightpit.AbstractServlet
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 import de.uapcore.lightpit.HttpRequest
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 import de.uapcore.lightpit.dao.DataAccessObject
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 import de.uapcore.lightpit.entities.Issue
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 import de.uapcore.lightpit.logic.*
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 import de.uapcore.lightpit.viewmodel.*
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 import jakarta.servlet.annotation.WebServlet
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 @WebServlet(urlPatterns = ["/issues/*"])
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 class IssuesServlet : AbstractServlet() {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 private val pathInfos = PathInfosOnlyIssues("issues/")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 init {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 get("/", this::issues)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 get("/%issue", this::issue)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 get("/%issue/edit", this::issueForm)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 post("/%issue/comment", this::issueComment)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 post("/%issue/relation", this::issueRelation)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 get("/%issue/removeRelation", this::issueRemoveRelation)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 post("/%issue/commit", this::issueCommit)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 private fun issues(http: HttpRequest, dao: DataAccessObject) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 val filter = IssueFilter(http, dao)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 val needRelationsMap = filter.onlyBlocker
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 val relationsMap = if (needRelationsMap) dao.getIssueRelationMap(filter.includeDone) else emptyMap()
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 val issues = dao.listIssues(filter.includeDone)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 .sortedWith(IssueSorter(filter.sortPrimary, filter.sortSecondary, filter.sortTertiary))
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 .filter(issueFilterFunction(filter, relationsMap, http.remoteUser ?: "<Anonymous>"))
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 with(http) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 pageTitle = i18n("issues")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 view = IssueOverview(issues, filter)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 styleSheets = listOf("projects")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 javascript = "issue-overview"
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 render("issues")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 private fun issue(http: HttpRequest, dao: DataAccessObject) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 if (issue == null) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48 http.response.sendError(404)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 return
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 renderIssueView(http, dao, issue, pathInfos)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 private fun issueForm(http: HttpRequest, dao: DataAccessObject) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 if (issue == null) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 http.response.sendError(404)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 return
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 with(http) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 view = IssueEditView(
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 issue,
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64 dao.listVersions(issue.project),
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 dao.listComponents(issue.project),
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 dao.listUsers(),
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 issue.project
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68 )
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 styleSheets = listOf("projects")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 javascript = "issue-editor"
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71 render("issue-form")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75 private fun issueComment(http: HttpRequest, dao: DataAccessObject) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 commitIssueComment(http, dao, pathInfos)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 private fun issueCommit(http: HttpRequest, dao: DataAccessObject) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80 val reference = http.param("id")?.toIntOrNull()?.let(dao::findIssue)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 if (reference == null) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 logger.warn("Cannot create issues while not in a project context.")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 http.response.sendError(404)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 return
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 val issue = Issue(reference.id, reference.project)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 processIssueForm(issue, reference, http, dao)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 if (http.param("save") != null) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 http.renderCommit("${pathInfos.issuesHref}${issue.id}")
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90 } else {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91 http.renderCommit(pathInfos.issuesHref)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
92 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
93 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
94
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
95 private fun issueRelation(http: HttpRequest, dao: DataAccessObject) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
96 addIssueRelation(http, dao, pathInfos)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
97 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
98
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 private fun issueRemoveRelation(http: HttpRequest, dao: DataAccessObject) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 removeIssueRelation(http, dao, pathInfos)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 }
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102 }

mercurial