From 096f9610b2fde5f81d390c8194fb5f4272b93cc5 Mon Sep 17 00:00:00 2001 From: Dale Lee <1658850308@qq.com> Date: Sat, 23 Dec 2023 21:28:06 +0800 Subject: [PATCH] =?UTF-8?q?feature=20#I8MW6Q=20=E6=94=AF=E6=8C=81=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E5=8D=B8=E8=BD=BD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yomahub/liteflow/flow/FlowBus.java | 19 +++++++++++++++++++ .../liteflow/script/ScriptExecutor.java | 8 ++++++++ .../script/jsr223/JSR223ScriptExecutor.java | 12 ++++++++++++ .../graaljs/GraalJavaScriptExecutor.java | 15 +++++++++++++++ .../qlexpress/QLExpressScriptExecutor.java | 11 +++++++++++ 5 files changed, 65 insertions(+) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index c7ea30335..7047fb52b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -9,6 +9,7 @@ package com.yomahub.liteflow.flow; import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.annotation.FallbackCmp; import com.yomahub.liteflow.annotation.util.AnnoUtil; @@ -297,6 +298,24 @@ public class FlowBus { Arrays.stream(chainIds).forEach(FlowBus::removeChain); } + // 移除节点 + public static boolean removeNode(String nodeId) { + Node node = getNode(nodeId); + // node 不存在或不是脚本节点 + if (ObjectUtil.isNull(node)) { + return false; + } + // 移除 node + nodeMap.remove(nodeId); + // 如果是脚本节点,移除脚本 + if (node.getType().isScript()) { + ScriptExecutorFactory.loadInstance() + .getScriptExecutor(node.getLanguage()) + .unLoad(nodeId); + } + return true; + } + // 判断是否是降级组件,如果是则添加到 fallbackNodeMap private static void addFallbackNode(Node node) { NodeComponent nodeComponent = node.getInstance(); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java index 0f4be12dd..0baf37eac 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java @@ -7,9 +7,11 @@ import com.yomahub.liteflow.annotation.util.AnnoUtil; import com.yomahub.liteflow.context.ContextBean; import com.yomahub.liteflow.enums.ScriptTypeEnum; import com.yomahub.liteflow.exception.LiteFlowException; +import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.slot.DataBus; import com.yomahub.liteflow.slot.Slot; +import java.util.List; import java.util.Map; import java.util.function.BiConsumer; @@ -27,6 +29,12 @@ public abstract class ScriptExecutor { public abstract void load(String nodeId, String script); + // 卸载脚本(不包含 node) + public abstract void unLoad(String nodeId); + + // 获取该执行器下的所有 nodeId + public abstract List getNodeIds(); + public Object execute(ScriptExecuteWrap wrap) throws Exception{ try { return executeScript(wrap); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java index 0bb20d921..515837633 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java @@ -8,6 +8,8 @@ import com.yomahub.liteflow.script.ScriptExecutor; import com.yomahub.liteflow.script.exception.ScriptLoadException; import com.yomahub.liteflow.util.CopyOnWriteHashMap; import javax.script.*; +import java.util.ArrayList; +import java.util.List; import java.util.Map; /** @@ -48,6 +50,16 @@ public abstract class JSR223ScriptExecutor extends ScriptExecutor { } + @Override + public void unLoad(String nodeId) { + compiledScriptMap.remove(nodeId); + } + + @Override + public List getNodeIds() { + return new ArrayList<>(compiledScriptMap.keySet()); + } + @Override public Object executeScript(ScriptExecuteWrap wrap) throws Exception { if (!compiledScriptMap.containsKey(wrap.getNodeId())) { diff --git a/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java b/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java index e6b194a9d..24260e630 100644 --- a/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java +++ b/liteflow-script-plugin/liteflow-script-graaljs/src/main/java/com/yomahub/liteflow/script/graaljs/GraalJavaScriptExecutor.java @@ -1,7 +1,9 @@ package com.yomahub.liteflow.script.graaljs; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.enums.ScriptTypeEnum; +import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.script.ScriptExecuteWrap; import com.yomahub.liteflow.script.ScriptExecutor; import com.yomahub.liteflow.script.exception.ScriptLoadException; @@ -10,6 +12,9 @@ import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Engine; import org.graalvm.polyglot.Source; import org.graalvm.polyglot.Value; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; /** @@ -42,6 +47,16 @@ public class GraalJavaScriptExecutor extends ScriptExecutor { } } + @Override + public void unLoad(String nodeId) { + scriptMap.remove(nodeId); + } + + @Override + public List getNodeIds() { + return new ArrayList<>(scriptMap.keySet()); + } + @Override public Object executeScript(ScriptExecuteWrap wrap) { if (!scriptMap.containsKey(wrap.getNodeId())) { diff --git a/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java b/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java index f83a4833e..f18522389 100644 --- a/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java +++ b/liteflow-script-plugin/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java @@ -14,6 +14,7 @@ import com.yomahub.liteflow.util.CopyOnWriteHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -49,6 +50,16 @@ public class QLExpressScriptExecutor extends ScriptExecutor { } } + @Override + public void unLoad(String nodeId) { + compiledScriptMap.remove(nodeId); + } + + @Override + public List getNodeIds() { + return new ArrayList<>(compiledScriptMap.keySet()); + } + @Override public Object executeScript(ScriptExecuteWrap wrap) throws Exception { List errorList = new ArrayList<>();