Mon, 05 Aug 2024 19:38:47 +0200
fix removing filter not working
fixes #407
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 | } |