enhancement #IBJO4X 建立统一元数据操作类,所有元数据的操作的入口

This commit is contained in:
everywhere.z
2025-01-26 17:56:59 +08:00
parent 9853e3e460
commit 4905acbc54
6 changed files with 46 additions and 4 deletions

View File

@@ -32,6 +32,7 @@ public class ForOperator extends BaseOperator<ForCondition> {
else if (objects[0] instanceof Integer) { else if (objects[0] instanceof Integer) {
Integer forCount = OperatorHelper.convert(objects[0], Integer.class); Integer forCount = OperatorHelper.convert(objects[0], Integer.class);
node = new Node(); node = new Node();
node.setType(NodeTypeEnum.FOR);
NodeForComponent nodeForComponent = new NodeForComponent() { NodeForComponent nodeForComponent = new NodeForComponent() {
@Override @Override
public int processFor() { public int processFor() {
@@ -40,6 +41,7 @@ public class ForOperator extends BaseOperator<ForCondition> {
}; };
nodeForComponent.setSelf(nodeForComponent); nodeForComponent.setSelf(nodeForComponent);
nodeForComponent.setNodeId(StrUtil.format("LOOP_{}", forCount)); nodeForComponent.setNodeId(StrUtil.format("LOOP_{}", forCount));
nodeForComponent.setType(NodeTypeEnum.FOR);
node.setInstance(nodeForComponent); node.setInstance(nodeForComponent);
} }
else { else {

View File

@@ -29,6 +29,7 @@ import com.yomahub.liteflow.flow.element.Node;
import com.yomahub.liteflow.lifecycle.LifeCycleHolder; import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
import com.yomahub.liteflow.log.LFLog; import com.yomahub.liteflow.log.LFLog;
import com.yomahub.liteflow.log.LFLoggerManager; import com.yomahub.liteflow.log.LFLoggerManager;
import com.yomahub.liteflow.meta.LiteflowMetaOperator;
import com.yomahub.liteflow.parser.el.LocalJsonFlowELParser; import com.yomahub.liteflow.parser.el.LocalJsonFlowELParser;
import com.yomahub.liteflow.parser.el.LocalXmlFlowELParser; import com.yomahub.liteflow.parser.el.LocalXmlFlowELParser;
import com.yomahub.liteflow.parser.el.LocalYmlFlowELParser; import com.yomahub.liteflow.parser.el.LocalYmlFlowELParser;
@@ -45,6 +46,7 @@ import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -379,8 +381,12 @@ public class FlowBus {
if (node == null || !node.getType().isScript()) { if (node == null || !node.getType().isScript()) {
return; return;
} }
// 更新脚本 // 更新元数据模版中的脚本
node.setScript(script); node.setScript(script);
// 更新Chain中的Node中的脚本
LiteflowMetaOperator.getNodesInAllChain(nodeId).forEach(n -> n.setScript(script));
ScriptExecutorFactory.loadInstance() ScriptExecutorFactory.loadInstance()
.getScriptExecutor(node.getLanguage()) .getScriptExecutor(node.getLanguage())
.load(nodeId, script); .load(nodeId, script);

View File

@@ -204,6 +204,13 @@ public class Node implements Executable, Cloneable, Rollbackable{
if (e instanceof ChainEndException) { if (e instanceof ChainEndException) {
throw e; throw e;
} }
// 这里再次写一遍的原因是如果抛错了还是要看isEnd这个状态如果为true的话还是要优先处理ChainEndException
if (instance.isEnd()) {
String errorInfo = StrUtil.format("[{}] lead the chain to end", instance.getDisplayName());
throw new ChainEndException(errorInfo);
}
// 如果组件覆盖了isContinueOnError方法返回为true那即便出了异常也会继续流程 // 如果组件覆盖了isContinueOnError方法返回为true那即便出了异常也会继续流程
else if (getIsContinueOnErrorResult() || instance.isContinueOnError()) { else if (getIsContinueOnErrorResult() || instance.isContinueOnError()) {
String errorMsg = StrUtil.format("component[{}] cause error,but flow is still go on", id); String errorMsg = StrUtil.format("component[{}] cause error,but flow is still go on", id);

View File

@@ -8,7 +8,10 @@ import com.yomahub.liteflow.flow.element.Node;
import com.yomahub.liteflow.flow.instanceId.NodeInstanceIdManageSpiHolder; import com.yomahub.liteflow.flow.instanceId.NodeInstanceIdManageSpiHolder;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -30,6 +33,19 @@ public class LiteflowMetaOperator {
return FlowBus.getChain(chainId); return FlowBus.getChain(chainId);
} }
/**
* 找出含有指定nodeId的chain对象
* @param nodeId 节点Id
* @return Chain对象列表
*/
public static List<Chain> getChainsContainsNodeId(String nodeId){
return FlowBus.getChainMap().values().stream().filter(
chain -> getNodes(chain.getChainId()).stream().anyMatch(
node -> node.getId().equals(nodeId)
)
).collect(Collectors.toList());
}
/** /**
* 刷新所有的规则 * 刷新所有的规则
* 可以手动重新从ruleSource指定的数据源进行刷新 * 可以手动重新从ruleSource指定的数据源进行刷新
@@ -147,6 +163,19 @@ public class LiteflowMetaOperator {
return NodeInstanceIdManageSpiHolder.getInstance().getNodeInstanceIdManageSpi().getNodeInstanceIds(chainId, nodeId); return NodeInstanceIdManageSpiHolder.getInstance().getNodeInstanceIdManageSpi().getNodeInstanceIds(chainId, nodeId);
} }
/**
* 通过nodeId找到在所有Chain中存在的Node对象列表
* @param nodeId Node实例id
* @return Node对象列表
*/
public static List<Node> getNodesInAllChain(String nodeId){
return FlowBus.getChainMap().values().stream().flatMap(
(Function<Chain, Stream<Node>>) chain -> Objects.requireNonNull(getNodes(chain.getChainId(), nodeId)).stream().filter(
node -> node.getId().equals(nodeId)
)
).collect(Collectors.toList());
}
/** /**
* 刷新某一个脚本 * 刷新某一个脚本
* @param nodeId 节点Id * @param nodeId 节点Id

View File

@@ -24,8 +24,8 @@
<module>liteflow-script-aviator</module> <module>liteflow-script-aviator</module>
<module>liteflow-script-java</module> <module>liteflow-script-java</module>
<module>liteflow-script-javax</module> <module>liteflow-script-javax</module>
<module>liteflow-script-kotlin</module>
<module>liteflow-script-javax-pro</module> <module>liteflow-script-javax-pro</module>
<module>liteflow-script-kotlin</module>
</modules> </modules>
</project> </project>

View File

@@ -449,9 +449,7 @@
<module>liteflow-solon-plugin</module> <module>liteflow-solon-plugin</module>
<module>liteflow-testcase-el</module> <module>liteflow-testcase-el</module>
<module>liteflow-el-builder</module> <module>liteflow-el-builder</module>
<module>liteflow-script-plugin/liteflow-script-javax</module>
<module>liteflow-benchmark</module> <module>liteflow-benchmark</module>
<module>liteflow-benchmark/liteflow-benchmark-script-javax-pro</module>
</modules> </modules>
<distributionManagement> <distributionManagement>