From aa83376ae807c5bf4a4a538d2c53a5005d8e5427 Mon Sep 17 00:00:00 2001 From: tangkc Date: Fri, 17 Jun 2022 15:54:23 +0800 Subject: [PATCH] =?UTF-8?q?enhancement=20#I5CTFZ=20=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E5=99=A8=E6=9E=84=E5=BB=BA=E5=89=8D=E7=AE=80=E5=8D=95=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=8F=8B=E5=A5=BD=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builder/LiteFlowChainBuilder.java | 43 +++++++++++---- .../liteflow/builder/LiteFlowNodeBuilder.java | 54 ++++++++++++++----- 2 files changed, 75 insertions(+), 22 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowChainBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowChainBuilder.java index ed904adcd..81d4d2cf7 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowChainBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowChainBuilder.java @@ -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 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 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 && diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java index f4fc745ae..369cdf619 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowNodeBuilder.java @@ -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 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, ",", "[", "]")); + } + } }