yangys
2024-04-01 86cdd920b68274185233383f69ddb974052b6b6f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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;
    }
}