in src/main/kotlin/jetbrains/buildServer/server/querylang/ui/SearchAdminPage.kt [52:106]
override fun fillModel(model: MutableMap<String, Any>, request: HttpServletRequest) {
val form = FormUtil.getOrCreateForm(
request,
SearchAdminForm::class.java
) { SearchAdminForm() }!!
FormUtil.bindFromRequest(request, form)
var limit = TeamCityProperties.getInteger(RESULTS_CNT_LIMIT_NAME, RESULTS_CNT_DEFAULT)
request.getParameter("limit")?.let {
limit = it.toIntOrNull() ?: limit
}
val bean = SearchAdminBean(form, projectManager, pluginDescriptor)
val executor = executorServices.normalExecutorService
var task: Future<QueryResult?>? = null
try {
val result = bean.getQuery()?.let {
val queryTimelimit = TeamCityProperties.getIntervalMilliseconds(TIMELIMIT_PARAM_NAME, DEFAULT_TIMELIMIT)
val authHolder = securityContext.authorityHolder
task = executor.submit<QueryResult?> {
val res = try {
securityContext.runAs<QueryResult>(authHolder) { return@runAs requestClient.process(it, limit) }
} catch (e: InterruptedException) {
null
}
return@submit res
}
task!!.get(queryTimelimit, TimeUnit.MILLISECONDS)
}
bean.buildResultList(result)
} catch (e: TimeoutException) {
bean.setWrongQueryMessage("Timeout")
} catch (e: ExecutionException) {
val innere = e.cause
if (innere is ParsingException) {
bean.setWrongQueryMessage("Wrong query: ${innere.message}")
} else {
bean.setWrongQueryMessage("Java ${e.javaClass.name} exception: ${innere?.message}")
}
}
catch (e: Exception) {
bean.setWrongQueryMessage("Java exception: ${e.message}")
}
finally {
try {
task?.cancel(true)
}
catch (e: Exception) {}
}
model["searchForm"] = bean
CameFromSupport.setupCameFromUrl(model, request)
}