![JAR search and dependency download from the Maven repository](/logo.png)
io.javalin.plugin.bundled.RouteOverviewUtil.kt Maven / Gradle / Ivy
The newest version!
/*
* Javalin - https://javalin.io
* Copyright 2017 David Åse
* Licensed under Apache 2.0: https://github.com/tipsy/javalin/blob/master/LICENSE
*/
package io.javalin.plugin.bundled
import io.javalin.router.ParsedEndpoint
import io.javalin.security.Roles
import io.javalin.util.implementingClassName
import io.javalin.util.isClass
import io.javalin.util.isJavaAnonymousLambda
import io.javalin.util.isJavaField
import io.javalin.util.isKotlinAnonymousLambda
import io.javalin.util.isKotlinField
import io.javalin.util.isKotlinMethodReference
import io.javalin.util.javaFieldName
import io.javalin.util.kotlinFieldName
import io.javalin.util.parentClass
import io.javalin.util.runMethod
import io.javalin.websocket.WsHandlerEntry
object RouteOverviewUtil {
@JvmStatic
fun createHtmlOverview(handlerInfo: List, wsHandlerInfo: List): String {
return """
Method
Path
Handler
Roles
${
handlerInfo
.map { it.endpoint }
.joinToString("") {
"""
${it.method}
${it.path}
${it.handler.metaInfo}
${it.metadata(Roles::class.java)?.roles ?: emptySet()}
"""
}
}
${
wsHandlerInfo.map { (wsHandlerType, path, handler, roles) ->
"""
$wsHandlerType
$path
${handler.metaInfo}
$roles
"""
}.joinToString("")
}
"""
}
@JvmStatic
fun createJsonOverview(handlerInfo: List, wsHandlerInfo: List): String {
return """
{
"handlers": [
${
handlerInfo.map { it.endpoint }.joinToString(",") {
"""
{
"path": "${it.path}",
"handlerType": "${it.method}",
"metaInfo": "${it.handler.metaInfo}",
"roles": "${it.roles}"
}
"""
}
}
],
"wsHandlers": [
${
wsHandlerInfo.map { (wsHandlerType, path, wsConfig, roles) ->
"""
{
"path": "$path",
"handlerType": "$wsHandlerType",
"metaInfo": "${wsConfig.metaInfo}",
"roles": "$roles"
}
"""
}.joinToString(",")
}
]
}
"""
}
@JvmStatic
val Any.metaInfo: String
get() {
// this is just guesswork...
// every new version of Java or Kotlin seems to break something here
return when {
isClass -> (this as Class<*>).name + ".class"
isKotlinMethodReference -> {
val fieldName = this.javaClass.declaredFields.find { it.name == "function" || it.name == "\$tmp0" }!!.name
val field = this.javaClass.getDeclaredField(fieldName).apply { isAccessible = true }.get(this)
when (fieldName) {
"function" -> field.runMethod("getOwner").runMethod("getJClass").runMethod("getName").toString() + "::" + field.runMethod("getName")
else -> "${field.implementingClassName}::$lambdaSign"
}
}
isKotlinAnonymousLambda -> parentClass.name + "::" + lambdaSign
isKotlinField -> parentClass.name + "." + kotlinFieldName
isJavaField -> parentClass.name + "." + javaFieldName
isJavaAnonymousLambda -> parentClass.name + "::" + lambdaSign
else -> "$implementingClassName.class"
}
}
}
private const val lambdaSign = "??? (anonymous lambda)"
© 2015 - 2025 Weber Informatics LLC | Privacy Policy