mirror of
https://gitee.com/dromara/liteFlow.git
synced 2026-05-14 20:22:07 +08:00
@@ -1,16 +1,22 @@
|
||||
package com.yomahub.liteflow.builder;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.yomahub.liteflow.enums.ConditionTypeEnum;
|
||||
import com.yomahub.liteflow.flow.FlowBus;
|
||||
import com.yomahub.liteflow.flow.element.Chain;
|
||||
import com.yomahub.liteflow.flow.element.condition.*;
|
||||
import com.yomahub.liteflow.flow.element.condition.Condition;
|
||||
import com.yomahub.liteflow.flow.element.condition.ThenCondition;
|
||||
import com.yomahub.liteflow.flow.element.condition.WhenCondition;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Chain基于代码形式的组装器
|
||||
*
|
||||
* @author Bryan.Zhang
|
||||
* @since 2.6.8
|
||||
*/
|
||||
@@ -30,11 +36,11 @@ public class LiteFlowChainBuilder {
|
||||
//后置处理Condition,用来区别主体的Condition
|
||||
private final List<Condition> finallyConditionList;
|
||||
|
||||
public static LiteFlowChainBuilder createChain(){
|
||||
public static LiteFlowChainBuilder createChain() {
|
||||
return new LiteFlowChainBuilder();
|
||||
}
|
||||
|
||||
public LiteFlowChainBuilder(){
|
||||
public LiteFlowChainBuilder() {
|
||||
chain = new Chain();
|
||||
conditionList = new ArrayList<>();
|
||||
preConditionList = new ArrayList<>();
|
||||
@@ -44,35 +50,54 @@ public class LiteFlowChainBuilder {
|
||||
//在parser中chain的build是2段式的,因为涉及到依赖问题,以前是递归parser
|
||||
//2.6.8之后取消了递归的模式,两段式组装,先把带有chainName的chain对象放进去,第二段再组装chain里面的condition
|
||||
//所以这里setChainName的时候需要判断下
|
||||
public LiteFlowChainBuilder setChainName(String chainName){
|
||||
if (FlowBus.containChain(chainName)){
|
||||
public LiteFlowChainBuilder setChainName(String chainName) {
|
||||
if (FlowBus.containChain(chainName)) {
|
||||
this.chain = FlowBus.getChain(chainName);
|
||||
}else{
|
||||
} else {
|
||||
this.chain.setChainName(chainName);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public LiteFlowChainBuilder setCondition(Condition condition){
|
||||
public LiteFlowChainBuilder setCondition(Condition condition) {
|
||||
//这里把condition组装进conditionList,
|
||||
buildConditions(condition);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void build(){
|
||||
public void build() {
|
||||
this.chain.setConditionList(this.conditionList);
|
||||
this.chain.setPreConditionList(this.preConditionList);
|
||||
this.chain.setFinallyConditionList(this.finallyConditionList);
|
||||
|
||||
checkBuild();
|
||||
|
||||
FlowBus.addChain(this.chain);
|
||||
}
|
||||
|
||||
/**
|
||||
* build 前简单校验
|
||||
*/
|
||||
private void checkBuild() {
|
||||
List<String> errorList = Lists.newArrayList();
|
||||
if (StrUtil.isBlank(this.chain.getChainName())) {
|
||||
errorList.add("name is blank");
|
||||
}
|
||||
if (CollUtil.isEmpty(this.chain.getConditionList())) {
|
||||
errorList.add("conditionList is empty");
|
||||
}
|
||||
if (CollUtil.isNotEmpty(errorList)) {
|
||||
throw new RuntimeException(CollUtil.join(errorList, ",", "[", "]"));
|
||||
}
|
||||
}
|
||||
|
||||
private void buildConditions(Condition condition) {
|
||||
//这里进行合并逻辑
|
||||
//对于then来说,相邻的2个then会合并成一个condition
|
||||
//对于when来说,相同组的when会合并成一个condition,不同组的when还是会拆开
|
||||
if (condition.getConditionType().equals(ConditionTypeEnum.TYPE_PRE)) {
|
||||
this.preConditionList.add(condition);
|
||||
}else if(condition.getConditionType().equals(ConditionTypeEnum.TYPE_FINALLY)) {
|
||||
} else if (condition.getConditionType().equals(ConditionTypeEnum.TYPE_FINALLY)) {
|
||||
this.finallyConditionList.add(condition);
|
||||
} else if (condition.getConditionType().equals(ConditionTypeEnum.TYPE_THEN)) {
|
||||
if (this.conditionList.size() >= 1 &&
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
package com.yomahub.liteflow.builder;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.io.resource.ResourceUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
import com.yomahub.liteflow.flow.element.Node;
|
||||
import com.yomahub.liteflow.enums.NodeTypeEnum;
|
||||
import com.yomahub.liteflow.exception.NodeBuildException;
|
||||
import com.yomahub.liteflow.exception.NullParamException;
|
||||
import com.yomahub.liteflow.flow.FlowBus;
|
||||
import com.yomahub.liteflow.flow.element.Node;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class LiteFlowNodeBuilder {
|
||||
|
||||
private final Logger LOG = LoggerFactory.getLogger(this.getClass());
|
||||
@@ -23,19 +28,19 @@ public class LiteFlowNodeBuilder {
|
||||
return new LiteFlowNodeBuilder();
|
||||
}
|
||||
|
||||
public static LiteFlowNodeBuilder createCommonNode(){
|
||||
public static LiteFlowNodeBuilder createCommonNode() {
|
||||
return new LiteFlowNodeBuilder(NodeTypeEnum.COMMON);
|
||||
}
|
||||
|
||||
public static LiteFlowNodeBuilder createCommonCondNode(){
|
||||
public static LiteFlowNodeBuilder createCommonCondNode() {
|
||||
return new LiteFlowNodeBuilder(NodeTypeEnum.COMMON);
|
||||
}
|
||||
|
||||
public static LiteFlowNodeBuilder createScriptNode(){
|
||||
public static LiteFlowNodeBuilder createScriptNode() {
|
||||
return new LiteFlowNodeBuilder(NodeTypeEnum.SCRIPT);
|
||||
}
|
||||
|
||||
public static LiteFlowNodeBuilder createScriptCondNode(){
|
||||
public static LiteFlowNodeBuilder createScriptCondNode() {
|
||||
return new LiteFlowNodeBuilder(NodeTypeEnum.COND_SCRIPT);
|
||||
}
|
||||
|
||||
@@ -49,7 +54,7 @@ public class LiteFlowNodeBuilder {
|
||||
}
|
||||
|
||||
public LiteFlowNodeBuilder setId(String nodeId) {
|
||||
if (StrUtil.isBlank(nodeId)){
|
||||
if (StrUtil.isBlank(nodeId)) {
|
||||
return this;
|
||||
}
|
||||
this.node.setId(nodeId.trim());
|
||||
@@ -57,7 +62,7 @@ public class LiteFlowNodeBuilder {
|
||||
}
|
||||
|
||||
public LiteFlowNodeBuilder setName(String name) {
|
||||
if (StrUtil.isBlank(name)){
|
||||
if (StrUtil.isBlank(name)) {
|
||||
return this;
|
||||
}
|
||||
this.node.setName(name.trim());
|
||||
@@ -65,14 +70,14 @@ public class LiteFlowNodeBuilder {
|
||||
}
|
||||
|
||||
public LiteFlowNodeBuilder setClazz(String clazz) {
|
||||
if (StrUtil.isBlank(clazz)){
|
||||
if (StrUtil.isBlank(clazz)) {
|
||||
return this;
|
||||
}
|
||||
this.node.setClazz(clazz.trim());
|
||||
return this;
|
||||
}
|
||||
|
||||
public LiteFlowNodeBuilder setClazz(Class<?> clazz){
|
||||
public LiteFlowNodeBuilder setClazz(Class<?> clazz) {
|
||||
assert clazz != null;
|
||||
setClazz(clazz.getName());
|
||||
return this;
|
||||
@@ -92,7 +97,7 @@ public class LiteFlowNodeBuilder {
|
||||
|
||||
// 设置类型的编码
|
||||
public LiteFlowNodeBuilder setTypeCode(String nodeTypeCode) {
|
||||
if (StringUtils.isBlank(nodeTypeCode)) {
|
||||
if (StringUtils.isBlank(nodeTypeCode)) {
|
||||
throw new NullParamException("nodeTypeCode is blank");
|
||||
}
|
||||
NodeTypeEnum nodeTypeEnum = NodeTypeEnum.getEnumByCode(nodeTypeCode);
|
||||
@@ -109,7 +114,7 @@ public class LiteFlowNodeBuilder {
|
||||
}
|
||||
|
||||
public LiteFlowNodeBuilder setFile(String filePath) {
|
||||
if (StrUtil.isBlank(filePath)){
|
||||
if (StrUtil.isBlank(filePath)) {
|
||||
return this;
|
||||
}
|
||||
String script = ResourceUtil.readUtf8Str(StrUtil.format("classpath: {}", filePath.trim()));
|
||||
@@ -117,12 +122,13 @@ public class LiteFlowNodeBuilder {
|
||||
}
|
||||
|
||||
public void build() {
|
||||
checkBuild();
|
||||
try {
|
||||
if (this.node.getType().equals(NodeTypeEnum.COMMON)) {
|
||||
FlowBus.addCommonNode(this.node.getId(), this.node.getName(), this.node.getClazz());
|
||||
} else if (this.node.getType().equals(NodeTypeEnum.SCRIPT)){
|
||||
} else if (this.node.getType().equals(NodeTypeEnum.SCRIPT)) {
|
||||
FlowBus.addCommonScriptNode(this.node.getId(), this.node.getName(), this.node.getScript());
|
||||
} else if (this.node.getType().equals(NodeTypeEnum.COND_SCRIPT)){
|
||||
} else if (this.node.getType().equals(NodeTypeEnum.COND_SCRIPT)) {
|
||||
FlowBus.addCondScriptNode(this.node.getId(), this.node.getName(), this.node.getScript());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -131,4 +137,26 @@ public class LiteFlowNodeBuilder {
|
||||
throw new NodeBuildException(errMsg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* build 前简单校验
|
||||
*/
|
||||
private void checkBuild() {
|
||||
List<String> errorList = Lists.newArrayList();
|
||||
if (StrUtil.isBlank(this.node.getId())) {
|
||||
errorList.add("id is blank");
|
||||
}
|
||||
if (StrUtil.isBlank(this.node.getName())) {
|
||||
errorList.add("name is blank");
|
||||
}
|
||||
if (Objects.isNull(this.node.getType())) {
|
||||
errorList.add("type is null");
|
||||
}
|
||||
if (StrUtil.isBlank(this.node.getClazz())) {
|
||||
errorList.add("clazz is blank");
|
||||
}
|
||||
if (CollUtil.isNotEmpty(errorList)) {
|
||||
throw new NodeBuildException(CollUtil.join(errorList, ",", "[", "]"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user