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 { |