All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 """
        
        
        
            
                ${
                    handlerInfo
                        .map { it.endpoint }
                        .joinToString("") {
                            """
                            
                            """
                        }
                }
                ${
            wsHandlerInfo.map { (wsHandlerType, path, handler, roles) ->
                """
                    
                    """
            }.joinToString("")
        }
            
Method Path Handler Roles
${it.method} ${it.path} ${it.handler.metaInfo} ${it.metadata(Roles::class.java)?.roles ?: emptySet()}
$wsHandlerType $path ${handler.metaInfo} $roles
""" } @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