src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt

changeset 312
b7554a6ef430
parent 311
bf67e0ff7131
child 314
8a8b1c5d168b
equal deleted inserted replaced
311:bf67e0ff7131 312:b7554a6ef430
218 val flagBlocker = "f.2" 218 val flagBlocker = "f.2"
219 219
220 val includeDone: Boolean = evalFlag(http, flagIncludeDone) 220 val includeDone: Boolean = evalFlag(http, flagIncludeDone)
221 val onlyMine: Boolean = evalFlag(http, flagMine) 221 val onlyMine: Boolean = evalFlag(http, flagMine)
222 val onlyBlocker: Boolean = evalFlag(http, flagBlocker) 222 val onlyBlocker: Boolean = evalFlag(http, flagBlocker)
223 val status: List<IssueStatus> = evalEnum(http, "s") 223 val status: List<IssueStatus> = evalEnum(http, "s") { issueStatusOf(IssueStatusPhase(it)) }
224 val category: List<IssueCategory> = evalEnum(http, "c") 224 val category: List<IssueCategory> = evalEnum(http, "c")
225 val assignee: List<Int> = evalInts(http, "u") 225 val assignee: List<Int> = evalInts(http, "u")
226 226
227 val sortPrimary: IssueSorter.Criteria = evalSort(http, "primary", IssueSorter.Criteria(IssueSorter.Field.DONE)) 227 val sortPrimary: IssueSorter.Criteria = evalSort(http, "primary", IssueSorter.Criteria(IssueSorter.Field.DONE))
228 val sortSecondary: IssueSorter.Criteria = evalSort(http, "secondary", IssueSorter.Criteria(IssueSorter.Field.ETA)) 228 val sortSecondary: IssueSorter.Criteria = evalSort(http, "secondary", IssueSorter.Criteria(IssueSorter.Field.ETA))
256 } 256 }
257 } 257 }
258 return http.session.getAttribute(name) != null 258 return http.session.getAttribute(name) != null
259 } 259 }
260 260
261 private inline fun <reified T : Enum<T>> evalEnum(http: HttpRequest, prefix: String): List<T> { 261 private inline fun <reified T : Enum<T>> evalEnum(
262 http: HttpRequest,
263 prefix: String,
264 categorizer: ((Int) -> List<T>) = { emptyList() }
265 ): List<T> {
262 val sattr = "f.${prefix}" 266 val sattr = "f.${prefix}"
263 val param = http.paramArray("filter") 267 val param = http.paramArray("filter")
264 if (param.isNotEmpty()) { 268 if (param.isNotEmpty()) {
265 val list = param.filter { it.startsWith("${prefix}.") } 269 val list = param.filter { it.startsWith("${prefix}.") }
266 .map { it.substring(prefix.length + 1) } 270 .map { it.substring(prefix.length + 1) }
267 .map { 271 .flatMap {
268 try { 272 // try resolving as category
269 // quick and very dirty validation 273 val cat = it.toIntOrNull()
270 enumValueOf<T>(it) 274 if (cat != null) {
271 } catch (_: IllegalArgumentException) { 275 categorizer(cat)
272 // skip 276 } else {
277 try {
278 // quick and very dirty validation
279 listOf(enumValueOf<T>(it))
280 } catch (_: IllegalArgumentException) {
281 // simply skip bogus enums
282 emptyList()
283 }
273 } 284 }
274 } 285 }
275 if (list.isEmpty()) { 286 if (list.isEmpty()) {
276 http.session.removeAttribute(sattr) 287 http.session.removeAttribute(sattr)
277 } else { 288 } else {

mercurial