src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.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
parent 260
fb2ae2d63a56
child 315
4fe3f61744cf
permissions
-rw-r--r--

add new global issues page - fixes #404

195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * Copyright 2021 Mike Becker. All rights reserved.
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Redistribution and use in source and binary forms, with or without
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * modification, are permitted provided that the following conditions are met:
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 *
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * 1. Redistributions of source code must retain the above copyright
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * notice, this list of conditions and the following disclaimer.
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 *
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * 2. Redistributions in binary form must reproduce the above copyright
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer in the
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * documentation and/or other materials provided with the distribution.
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 *
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 */
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 package de.uapcore.lightpit.servlet
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
28 import com.github.difflib.text.DiffRow
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
29 import com.github.difflib.text.DiffRowGenerator
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 import de.uapcore.lightpit.AbstractServlet
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 import de.uapcore.lightpit.HttpRequest
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 import de.uapcore.lightpit.dao.DataAccessObject
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
33 import de.uapcore.lightpit.entities.IssueCommentHistoryEntry
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
34 import de.uapcore.lightpit.entities.IssueHistoryEntry
311
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
35 import de.uapcore.lightpit.entities.Project
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
36 import de.uapcore.lightpit.types.IssueHistoryType
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
37 import de.uapcore.lightpit.viewmodel.CommentDiff
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
38 import de.uapcore.lightpit.viewmodel.IssueDiff
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 import de.uapcore.lightpit.viewmodel.IssueFeed
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
40 import de.uapcore.lightpit.viewmodel.IssueFeedEntry
254
55ca6cafc3dd #233 migrate to Jakarta EE and update dependencies
Mike Becker <universe@uap-core.de>
parents: 242
diff changeset
41 import jakarta.servlet.annotation.WebServlet
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
42 import java.text.SimpleDateFormat
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
44
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 @WebServlet(urlPatterns = ["/feed/*"])
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 class FeedServlet : AbstractServlet() {
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48 init {
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
49 get("/%project/issues.rss", this::issues)
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
50 }
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
51
260
fb2ae2d63a56 some minor style fixes
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
52 private val diffGenerator: DiffRowGenerator by lazyOf(DiffRowGenerator.create()
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
53 .showInlineDiffs(true)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
54 .mergeOriginalRevised(true)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
55 .inlineDiffByWord(true)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
56 .oldTag { start -> if (start) "<strike style=\"color:red\">" else "</strike>" }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
57 .newTag { start -> if (start) "<i style=\"color: green\">" else "</i>" }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
58 .build()
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
59 )
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
60
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
61 private fun fullContent(data: IssueCommentHistoryEntry) =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
62 CommentDiff(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
63 data.issueid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
64 data.commentid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
65 data.subject,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
66 data.comment.replace("\r", "")
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
67 )
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
68
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
69 private fun diffContent(cur: IssueCommentHistoryEntry, next: IssueCommentHistoryEntry) =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
70 CommentDiff(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
71 cur.issueid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
72 cur.commentid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
73 cur.subject,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
74 diffGenerator.generateDiffRows(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
75 next.comment.replace("\r", "").split('\n'),
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
76 cur.comment.replace("\r", "").split('\n')
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
77 ).joinToString("\n", transform = DiffRow::getOldLine)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
78 )
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
79
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
80 private fun fullContent(issue: IssueHistoryEntry) = IssueDiff(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
81 issue.issueid,
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
82 issue.subject,
311
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
83 issue.project,
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
84 issue.component,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
85 issue.status.name,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
86 issue.category.name,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
87 issue.subject,
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
88 issue.description.replace("\r", ""),
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
89 issue.assignee,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
90 issue.eta?.let { SimpleDateFormat("dd.MM.yyyy").format(it) } ?: "",
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
91 issue.affected,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
92 issue.resolved
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
93 )
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
94
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
95 private fun diffContent(cur: IssueHistoryEntry, next: IssueHistoryEntry): IssueDiff {
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
96 val prev = fullContent(next)
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
97 val diff = fullContent(cur)
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
98 val result = diffGenerator.generateDiffRows(
238
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
99 listOf(
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
100 prev.subject, prev.component, prev.status,
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
101 prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
102 ),
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
103 listOf(
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
104 diff.subject, diff.component, diff.status,
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
105 diff.category, diff.assignee, diff.eta, diff.affected, diff.resolved
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
106 )
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
107 )
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
108
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
109 diff.subject = result[0].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
110 diff.component = result[1].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
111 diff.status = result[2].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
112 diff.category = result[3].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
113 diff.assignee = result[4].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
114 diff.eta = result[5].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
115 diff.affected = result[6].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
116 diff.resolved = result[7].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
117
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
118 diff.description = diffGenerator.generateDiffRows(
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
119 prev.description.split('\n'),
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
120 diff.description.split('\n')
240
7303812a4424 use pre-warp instead of <br> for RSS feed
Mike Becker <universe@uap-core.de>
parents: 239
diff changeset
121 ).joinToString("\n", transform = DiffRow::getOldLine)
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
122
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
123 return diff
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
124 }
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
125
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
126 /**
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
127 * Generates the feed entries.
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
128 * Assumes that [issueEntries] and [commentEntries] are already sorted by timestamp (descending).
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
129 */
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
130 private fun generateFeedEntries(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
131 issueEntries: List<IssueHistoryEntry>,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
132 commentEntries: List<IssueCommentHistoryEntry>
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
133 ): List<IssueFeedEntry> =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
134 (generateIssueFeedEntries(issueEntries) + generateCommentFeedEntries(commentEntries)).sortedByDescending { it.time }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
135
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
136 private fun generateIssueFeedEntries(entries: List<IssueHistoryEntry>): List<IssueFeedEntry> =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
137 if (entries.isEmpty()) {
238
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
138 emptyList()
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
139 } else {
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
140 entries.groupBy { it.issueid }.mapValues { (_, history) ->
238
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
141 history.zipWithNext().map { (cur, next) ->
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
142 IssueFeedEntry(
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
143 cur.time, cur.type, issue = diffContent(cur, next)
238
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
144 )
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
145 }.plus(
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
146 history.last().let { IssueFeedEntry(it.time, it.type, issue = fullContent(it)) }
238
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
147 )
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
148 }.flatMap { it.value }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
149 }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
150
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
151 private fun generateCommentFeedEntries(entries: List<IssueCommentHistoryEntry>): List<IssueFeedEntry> =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
152 if (entries.isEmpty()) {
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
153 emptyList()
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
154 } else {
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
155 entries.groupBy { it.commentid }.mapValues { (_, history) ->
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
156 history.zipWithNext().map { (cur, next) ->
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
157 IssueFeedEntry(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
158 cur.time, cur.type, comment = diffContent(cur, next)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
159 )
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
160 }.plus(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
161 history.last().let { IssueFeedEntry(it.time, it.type, comment = fullContent(it)) }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
162 )
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
163 }.flatMap { it.value }
238
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
164 }
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
165
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
166 private fun issues(http: HttpRequest, dao: DataAccessObject) {
311
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
167 val projectNode = http.pathParams["project"].orEmpty()
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
168 val project: Project?
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
169 if (projectNode == "-") {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
170 project = null
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
171 } else {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
172 project = dao.findProjectByNode(projectNode)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
173 if (project == null) {
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
174 http.response.sendError(404)
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
175 return
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
176 }
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
177 }
239
9365c7fb0240 #109 add assignee filter to rss feed
Mike Becker <universe@uap-core.de>
parents: 238
diff changeset
178 val assignees = http.param("assignee")?.split(',')
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
179 val comments = http.param("comments") ?: "all"
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
180
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
181 val days = http.param("days")?.toIntOrNull() ?: 30
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
182
311
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
183 val issuesFromDb = dao.listIssueHistory(project, days)
239
9365c7fb0240 #109 add assignee filter to rss feed
Mike Becker <universe@uap-core.de>
parents: 238
diff changeset
184 val issueHistory = if (assignees == null) issuesFromDb else
241
1ca4f27cefe8 #109 changes assignee filter
Mike Becker <universe@uap-core.de>
parents: 240
diff changeset
185 issuesFromDb.filter { assignees.contains(it.currentAssignee) }
239
9365c7fb0240 #109 add assignee filter to rss feed
Mike Becker <universe@uap-core.de>
parents: 238
diff changeset
186
311
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
187 val commentsFromDb = dao.listIssueCommentHistory(project, days)
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
188 val commentHistory = when (comments) {
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
189 "all" -> commentsFromDb
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
190 "new" -> commentsFromDb.filter { it.type == IssueHistoryType.NewComment }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
191 else -> emptyList()
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
192 }
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
193
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
194 http.view = IssueFeed(project, generateFeedEntries(issueHistory, commentHistory))
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
195 http.renderFeed("issues-feed")
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
196 }
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
197 }

mercurial