wireup script execution
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1,4 @@
|
||||
insert into tenant_model(name, domain, created_by, modified_by) values ('compegence', 'https://www.compegence.com', 'system', 'system');
|
||||
insert into entity_model(name, tenant_id, created_by, modified_by) values ('vehicle', 'compegence', 'system', 'system');
|
||||
insert into tenant_model(name, domain, created_by, modified_by)
|
||||
values ('compegence', 'https://www.compegence.com', 'system', 'system');
|
||||
insert into entity_model(name, tenant_id, created_by, modified_by, pre_save_script, post_save_script)
|
||||
values ('vehicle', 'compegence', 'system', 'system', 'vehicle.kts', 'vehicle.kts');
|
||||
17
src/main/resources/scripts/vehicle.kts
Normal file
17
src/main/resources/scripts/vehicle.kts
Normal file
@@ -0,0 +1,17 @@
|
||||
import com.restapi.domain.DataModel
|
||||
import io.ebean.Database
|
||||
import org.slf4j.Logger
|
||||
|
||||
fun execute(d: Map<String, Any>, db: Database, logger: Logger): Map<String, Any> {
|
||||
println("execute on $d")
|
||||
return d
|
||||
}
|
||||
|
||||
fun preSave(d: DataModel, db: Database, logger: Logger): Boolean {
|
||||
logger.warn("PreSave $d")
|
||||
return true
|
||||
}
|
||||
|
||||
fun postSave(d: DataModel, db: Database, logger: Logger) {
|
||||
println("PostSave $d")
|
||||
}
|
||||
Reference in New Issue
Block a user