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

changeset 324
61b16fc21f4d
parent 315
4fe3f61744cf
equal deleted inserted replaced
323:ba2a1313eb98 324:61b16fc21f4d
75 next.comment.replace("\r", "").split('\n'), 75 next.comment.replace("\r", "").split('\n'),
76 cur.comment.replace("\r", "").split('\n') 76 cur.comment.replace("\r", "").split('\n')
77 ).joinToString("\n", transform = DiffRow::getOldLine) 77 ).joinToString("\n", transform = DiffRow::getOldLine)
78 ) 78 )
79 79
80 private fun fullContent(issue: IssueHistoryEntry) = IssueDiff( 80 private fun fullContent(http: HttpRequest, issue: IssueHistoryEntry) = IssueDiff(
81 issue.issueid, 81 issue.issueid,
82 issue.subject,
83 issue.project, 82 issue.project,
84 issue.component, 83 issue.component,
85 issue.status.name, 84 http.i18n("issue.status."+issue.status.name),
86 issue.category.name, 85 http.i18n("issue.category."+issue.category.name),
87 issue.category.name,
88 issue.subject, 86 issue.subject,
89 issue.description.replace("\r", ""), 87 issue.description.replace("\r", ""),
90 issue.assignee, 88 issue.assignee,
91 issue.eta?.let { SimpleDateFormat("dd.MM.yyyy").format(it) } ?: "", 89 issue.eta?.let { SimpleDateFormat("dd.MM.yyyy").format(it) } ?: "",
92 issue.affected, 90 issue.affected,
93 issue.resolved 91 issue.resolved
94 ) 92 )
95 93
96 private fun diffContent(cur: IssueHistoryEntry, next: IssueHistoryEntry): IssueDiff { 94 private fun diffContent(http: HttpRequest, cur: IssueHistoryEntry, next: IssueHistoryEntry): IssueDiff {
97 val prev = fullContent(next) 95 val prev = fullContent(http, next)
98 val diff = fullContent(cur) 96 val diff = fullContent(http, cur)
99 val result = diffGenerator.generateDiffRows( 97 val result = diffGenerator.generateDiffRows(
100 listOf( 98 listOf(
101 prev.subject, prev.component, prev.status, 99 prev.subject, prev.component, prev.status,
102 prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved 100 prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved
103 ), 101 ),
127 /** 125 /**
128 * Generates the feed entries. 126 * Generates the feed entries.
129 * Assumes that [issueEntries] and [commentEntries] are already sorted by timestamp (descending). 127 * Assumes that [issueEntries] and [commentEntries] are already sorted by timestamp (descending).
130 */ 128 */
131 private fun generateFeedEntries( 129 private fun generateFeedEntries(
130 http: HttpRequest,
132 issueEntries: List<IssueHistoryEntry>, 131 issueEntries: List<IssueHistoryEntry>,
133 commentEntries: List<IssueCommentHistoryEntry> 132 commentEntries: List<IssueCommentHistoryEntry>
134 ): List<IssueFeedEntry> = 133 ): List<IssueFeedEntry> =
135 (generateIssueFeedEntries(issueEntries) + generateCommentFeedEntries(commentEntries)).sortedByDescending { it.time } 134 (generateIssueFeedEntries(http, issueEntries) + generateCommentFeedEntries(commentEntries)).sortedByDescending { it.time }
136 135
137 private fun generateIssueFeedEntries(entries: List<IssueHistoryEntry>): List<IssueFeedEntry> = 136 private fun generateIssueFeedEntries(http: HttpRequest, entries: List<IssueHistoryEntry>): List<IssueFeedEntry> =
138 if (entries.isEmpty()) { 137 if (entries.isEmpty()) {
139 emptyList() 138 emptyList()
140 } else { 139 } else {
141 entries.groupBy { it.issueid }.mapValues { (_, history) -> 140 entries.groupBy { it.issueid }.mapValues { (_, history) ->
142 history.zipWithNext().map { (cur, next) -> 141 history.zipWithNext().map { (cur, next) ->
143 IssueFeedEntry( 142 IssueFeedEntry(
144 cur.time, cur.type, issue = diffContent(cur, next) 143 cur.time, cur.type, issue = diffContent(http, cur, next)
145 ) 144 )
146 }.plus( 145 }.plus(
147 history.last().let { IssueFeedEntry(it.time, it.type, issue = fullContent(it)) } 146 history.last().let { IssueFeedEntry(it.time, it.type, issue = fullContent(http, it)) }
148 ) 147 )
149 }.flatMap { it.value } 148 }.flatMap { it.value }
150 } 149 }
151 150
152 private fun generateCommentFeedEntries(entries: List<IssueCommentHistoryEntry>): List<IssueFeedEntry> = 151 private fun generateCommentFeedEntries(entries: List<IssueCommentHistoryEntry>): List<IssueFeedEntry> =
190 "all" -> commentsFromDb 189 "all" -> commentsFromDb
191 "new" -> commentsFromDb.filter { it.type == IssueHistoryType.NewComment } 190 "new" -> commentsFromDb.filter { it.type == IssueHistoryType.NewComment }
192 else -> emptyList() 191 else -> emptyList()
193 } 192 }
194 193
195 http.view = IssueFeed(project, generateFeedEntries(issueHistory, commentHistory)) 194 http.view = IssueFeed(project, generateFeedEntries(http, issueHistory, commentHistory))
196 http.renderFeed("issues-feed") 195 http.renderFeed("issues-feed")
197 } 196 }
198 } 197 }

mercurial