package com.qianwen.core.tool.script.engine.common;
|
|
import java.util.HashMap;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
import javax.script.Bindings;
|
import javax.script.Compilable;
|
import javax.script.CompiledScript;
|
import javax.script.ScriptEngineManager;
|
import javax.script.ScriptException;
|
import javax.script.SimpleScriptContext;
|
import org.apache.commons.codec.digest.DigestUtils;
|
import javax.script.ScriptEngine;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.qianwen.core.tool.script.engine.ExecuteResult;
|
import com.qianwen.core.tool.script.engine.ListenerSupportEngine;
|
import com.qianwen.core.tool.script.engine.ScriptContext;
|
import com.qianwen.core.tool.script.engine.ScriptListener;
|
|
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/script/engine/common/CommonScriptEngine.class */
|
public abstract class CommonScriptEngine extends ListenerSupportEngine {
|
protected Compilable compilable;
|
protected Bindings utilBindings;
|
protected List<ScriptListener> scriptListeners;
|
protected final Logger logger = LoggerFactory.getLogger(getClass());
|
protected Map<String, CommonScriptContext> scriptBase = new ConcurrentHashMap();
|
|
public abstract String getScriptName();
|
|
@Override // org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public boolean compiled(String id) {
|
return this.scriptBase.containsKey(id);
|
}
|
|
@Override // org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public boolean remove(String id) {
|
return this.scriptBase.remove(id) != null;
|
}
|
|
public CommonScriptEngine() {
|
try {
|
init(new String[0]);
|
} catch (Exception e) {
|
this.logger.warn("init {} error", getScriptName());
|
}
|
}
|
|
@Override // org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public void init(String... contents) throws Exception {
|
ScriptEngineManager manager = new ScriptEngineManager();
|
//Compilable engineByName = manager.getEngineByName(getScriptName());
|
ScriptEngine engine = manager.getEngineByName(getScriptName());
|
this.compilable = (Compilable)engine;
|
//this.compilable = engineByName;
|
this.utilBindings = engine.createBindings();
|
for (String content : contents) {
|
CompiledScript script = this.compilable.compile(content);
|
script.eval(this.utilBindings);
|
}
|
}
|
|
@Override // org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public ScriptContext getContext(String id) {
|
return this.scriptBase.get(id);
|
}
|
|
@Override // org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public boolean compile(String id, String code) throws Exception {
|
if (this.logger.isDebugEnabled()) {
|
this.logger.debug("compile {} {} : {}", new Object[]{getScriptName(), id, code});
|
}
|
if (this.compilable == null) {
|
init(new String[0]);
|
}
|
CompiledScript compiledScript = this.compilable.compile(code);
|
CommonScriptContext scriptContext = new CommonScriptContext(id, DigestUtils.md5Hex(code), compiledScript);
|
this.scriptBase.put(id, scriptContext);
|
return true;
|
}
|
|
@Override // org.springblade.core.tool.script.engine.ListenerSupportEngine, org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public void addListener(ScriptListener scriptListener) {
|
if (this.scriptListeners == null) {
|
this.scriptListeners = new LinkedList();
|
}
|
this.scriptListeners.add(scriptListener);
|
}
|
|
@Override // org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public ExecuteResult execute(String id) {
|
return execute(id, new HashMap());
|
}
|
|
@Override // org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public ExecuteResult execute(String id, Map<String, Object> param) {
|
long startTime = System.currentTimeMillis();
|
if (this.logger.isDebugEnabled()) {
|
this.logger.debug("execute {} {} : {}", getScriptName(), id);
|
}
|
ExecuteResult result = new ExecuteResult();
|
CommonScriptContext scriptContext = this.scriptBase.get(id);
|
try {
|
if (scriptContext != null) {
|
doListenerBefore(scriptContext);
|
SimpleScriptContext simpleScriptContext = new SimpleScriptContext();
|
simpleScriptContext.setBindings(this.utilBindings, 200);
|
for (Map.Entry<String, Object> entry : param.entrySet()) {
|
simpleScriptContext.setAttribute(entry.getKey(), entry.getValue(), 100);
|
}
|
result.setResult(scriptContext.getScript().eval(simpleScriptContext));
|
result.setSuccess(true);
|
} else {
|
result.setSuccess(false);
|
result.setResult(null);
|
result.setMessage(String.format("script(%s): %s not found!", getScriptName(), id));
|
}
|
} catch (ScriptException e) {
|
result.setException(e);
|
}
|
result.setUseTime(System.currentTimeMillis() - startTime);
|
doListenerAfter(scriptContext, result);
|
return result;
|
}
|
|
@Override // org.springblade.core.tool.script.engine.ListenerSupportEngine, org.springblade.core.tool.script.engine.DynamicScriptEngine
|
public void addGlobalVariable(Map<String, Object> vars) {
|
this.utilBindings.putAll(vars);
|
}
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/script/engine/common/CommonScriptEngine$CommonScriptContext.class */
|
public class CommonScriptContext extends ScriptContext {
|
private CompiledScript script;
|
|
public CommonScriptContext(String id, String md5, CompiledScript script) {
|
super(id, md5);
|
this.script = script;
|
}
|
|
public CompiledScript getScript() {
|
return this.script;
|
}
|
}
|
|
public Bindings getUtilBindings() {
|
return this.utilBindings;
|
}
|
|
public void setUtilBindings(Bindings utilBindings) {
|
this.utilBindings = utilBindings;
|
}
|
}
|