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

Sun, 28 Jul 2024 13:09:32 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 28 Jul 2024 13:09:32 +0200
changeset 305
26e7f895f0f8
parent 260
fb2ae2d63a56
child 311
bf67e0ff7131
permissions
-rw-r--r--

add new save button to issue editor - fixes #398

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
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
35 import de.uapcore.lightpit.types.IssueHistoryType
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
36 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
37 import de.uapcore.lightpit.viewmodel.IssueDiff
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 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
39 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
40 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
41 import java.text.SimpleDateFormat
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
43
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 @WebServlet(urlPatterns = ["/feed/*"])
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 class FeedServlet : AbstractServlet() {
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 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
48 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
49 }
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
50
260
fb2ae2d63a56 some minor style fixes
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
51 private val diffGenerator: DiffRowGenerator by lazyOf(DiffRowGenerator.create()
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
52 .showInlineDiffs(true)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
53 .mergeOriginalRevised(true)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
54 .inlineDiffByWord(true)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
55 .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
56 .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
57 .build()
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
58 )
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 private fun fullContent(data: IssueCommentHistoryEntry) =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
61 CommentDiff(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
62 data.issueid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
63 data.commentid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
64 data.subject,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
65 data.comment.replace("\r", "")
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
66 )
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 private fun diffContent(cur: IssueCommentHistoryEntry, next: IssueCommentHistoryEntry) =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
69 CommentDiff(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
70 cur.issueid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
71 cur.commentid,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
72 cur.subject,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
73 diffGenerator.generateDiffRows(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
74 next.comment.replace("\r", "").split('\n'),
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
75 cur.comment.replace("\r", "").split('\n')
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
76 ).joinToString("\n", transform = DiffRow::getOldLine)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
77 )
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 private fun fullContent(issue: IssueHistoryEntry) = IssueDiff(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
80 issue.issueid,
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
81 issue.subject,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
82 issue.component,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
83 issue.status.name,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
84 issue.category.name,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
85 issue.subject,
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
86 issue.description.replace("\r", ""),
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
87 issue.assignee,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
88 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
89 issue.affected,
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
90 issue.resolved
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
91 )
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
92
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
93 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
94 val prev = fullContent(next)
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
95 val diff = fullContent(cur)
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
96 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
97 listOf(
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
98 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
99 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
100 ),
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
101 listOf(
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
102 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
103 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
104 )
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
105 )
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
106
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
107 diff.subject = result[0].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
108 diff.component = result[1].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
109 diff.status = result[2].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
110 diff.category = result[3].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
111 diff.assignee = result[4].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
112 diff.eta = result[5].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
113 diff.affected = result[6].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
114 diff.resolved = result[7].oldLine
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
115
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
116 diff.description = diffGenerator.generateDiffRows(
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
117 prev.description.split('\n'),
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
118 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
119 ).joinToString("\n", transform = DiffRow::getOldLine)
236
819c5178b6fe add diffs to RSS feed
Mike Becker <universe@uap-core.de>
parents: 235
diff changeset
120
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
121 return diff
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
122 }
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
123
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 * Generates the feed entries.
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
126 * 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
127 */
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
128 private fun generateFeedEntries(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
129 issueEntries: List<IssueHistoryEntry>,
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
130 commentEntries: List<IssueCommentHistoryEntry>
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
131 ): List<IssueFeedEntry> =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
132 (generateIssueFeedEntries(issueEntries) + generateCommentFeedEntries(commentEntries)).sortedByDescending { it.time }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
133
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
134 private fun generateIssueFeedEntries(entries: List<IssueHistoryEntry>): List<IssueFeedEntry> =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
135 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
136 emptyList()
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
137 } else {
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
138 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
139 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
140 IssueFeedEntry(
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
141 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
142 )
1d48b38ca349 fix diff generated between feed entries with different issue IDs
Mike Becker <universe@uap-core.de>
parents: 236
diff changeset
143 }.plus(
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
144 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
145 )
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
146 }.flatMap { it.value }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
147 }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
148
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
149 private fun generateCommentFeedEntries(entries: List<IssueCommentHistoryEntry>): List<IssueFeedEntry> =
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
150 if (entries.isEmpty()) {
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
151 emptyList()
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
152 } else {
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
153 entries.groupBy { it.commentid }.mapValues { (_, history) ->
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
154 history.zipWithNext().map { (cur, next) ->
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
155 IssueFeedEntry(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
156 cur.time, cur.type, comment = diffContent(cur, next)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
157 )
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
158 }.plus(
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
159 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
160 )
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
161 }.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
162 }
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
163
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
164 private fun issues(http: HttpRequest, dao: DataAccessObject) {
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
165 val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) }
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
166 if (project == null) {
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
167 http.response.sendError(404)
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
168 return
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
169 }
239
9365c7fb0240 #109 add assignee filter to rss feed
Mike Becker <universe@uap-core.de>
parents: 238
diff changeset
170 val assignees = http.param("assignee")?.split(',')
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
171 val comments = http.param("comments") ?: "all"
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
172
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
173 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
174
239
9365c7fb0240 #109 add assignee filter to rss feed
Mike Becker <universe@uap-core.de>
parents: 238
diff changeset
175 val issuesFromDb = dao.listIssueHistory(project.id, days)
9365c7fb0240 #109 add assignee filter to rss feed
Mike Becker <universe@uap-core.de>
parents: 238
diff changeset
176 val issueHistory = if (assignees == null) issuesFromDb else
241
1ca4f27cefe8 #109 changes assignee filter
Mike Becker <universe@uap-core.de>
parents: 240
diff changeset
177 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
178
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
179 val commentsFromDb = dao.listIssueCommentHistory(project.id, days)
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
180 val commentHistory = when (comments) {
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
181 "all" -> commentsFromDb
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
182 "new" -> commentsFromDb.filter { it.type == IssueHistoryType.NewComment }
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
183 else -> emptyList()
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
184 }
235
4258b9e010ae change rss feed to display the issue history
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
185
242
b7f3e972b13c #109 add comment history
Mike Becker <universe@uap-core.de>
parents: 241
diff changeset
186 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
187 http.renderFeed("issues-feed")
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
188 }
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents:
diff changeset
189 }

mercurial