enhancement #I5CTFZ 组装器构建前简单校验,增加友好提示

This commit is contained in:
tangkc
2022-06-17 15:54:23 +08:00
parent 514716f997
commit aa83376ae8
2 changed files with 75 additions and 22 deletions

View File

@@ -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 &&

View File

@@ -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, ",", "[", "]"));
}
}
}