wireup script execution

This commit is contained in:
gowthaman.b
2023-11-11 18:14:57 +05:30
parent f35851d339
commit 1a22043cf2
8 changed files with 55 additions and 15 deletions

View File

@@ -57,7 +57,8 @@ object Entities {
val name = ctx.pathParam("name")
val params = ctx.bodyAsClass<Map<String, Any>>()
ctx.json(
Scripting.execute(name, params)
Scripting.
execute(name, "execute", params, logger)
)
}
@@ -202,6 +203,12 @@ object Entities {
}
}
}
if (!setupEntity.preSaveScript.isNullOrEmpty()) {
val ok = Scripting.preSave(setupEntity.preSaveScript!!, "preSave", this, logger) as Boolean
if (!ok) {
throw BadRequestResponse("PreSave Failed")
}
}
if (setupEntity.approvalLevels > 0) {
@@ -210,7 +217,8 @@ object Entities {
}
}
})
}
)
}
private fun isValidDate(f: String) = try {

View File

@@ -1,17 +1,29 @@
package com.restapi.integ
import com.restapi.config.AppConfig.Companion.appConfig
import com.restapi.domain.DataModel
import com.restapi.domain.Session
import org.slf4j.Logger
import java.io.File
import java.util.concurrent.ConcurrentHashMap
import javax.script.Invocable
import javax.script.ScriptEngineManager
object Scripting {
private val engineMap = ConcurrentHashMap<String, Invocable>()
fun execute(name: String, params: Map<String, Any>): Any {
private fun getEngine(scriptName: String) = engineMap.computeIfAbsent(scriptName) {
val engine = ScriptEngineManager().getEngineByExtension("kts")!!
engine.eval(File(appConfig.scriptsPath(), "$name.kts").reader())
val invocator = engine as Invocable
return invocator.invokeFunction("execute", params)
engine.eval(File(appConfig.scriptsPath(), scriptName).reader())
engine as Invocable
}
fun execute(scriptName: String, fnName: String, params: Map<String, Any>, logger: Logger): Any {
return getEngine(scriptName).invokeFunction(fnName, params, Session.database, logger)
}
fun preSave(scriptName: String, fnName: String, data: DataModel, logger: Logger): Any {
return getEngine(scriptName).invokeFunction(fnName, data, Session.database, logger)
}
}