From 88c2521b6b5f0110fc339108bf4753ce5dc876c4 Mon Sep 17 00:00:00 2001 From: zendwang Date: Wed, 30 Nov 2022 14:05:41 +0800 Subject: [PATCH] =?UTF-8?q?enhancement=20#I61EMZ=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=AA=8C=E8=AF=81EL=E8=A7=84=E5=88=99=E7=9A=84api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builder/el/LiteFlowChainELBuilder.java | 38 ++++++++++--------- .../liteflow/test/builder/BuilderTest.java | 23 +++++++++++ .../test/exception/Exception1Test.java | 26 ------------- 3 files changed, 44 insertions(+), 43 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java index 2de2c2f35..3595e6446 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/LiteFlowChainELBuilder.java @@ -14,12 +14,12 @@ import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.flow.element.Chain; import com.yomahub.liteflow.flow.element.Executable; import com.yomahub.liteflow.flow.element.condition.*; -import com.yomahub.liteflow.script.ScriptBeanManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.function.BiConsumer; /** * Chain基于代码形式的组装器 @@ -30,12 +30,10 @@ import java.util.function.BiConsumer; */ public class LiteFlowChainELBuilder { - private Chain chain; + private static final Logger LOG = LoggerFactory.getLogger(LiteFlowChainELBuilder.class); - /** - * 是否只需要验证EL表达式 - */ - private Boolean onlyValidate; + + private Chain chain; /** * //这是主体的Condition,不包含前置和后置 @@ -92,7 +90,6 @@ public class LiteFlowChainELBuilder { public LiteFlowChainELBuilder() { chain = new Chain(); - onlyValidate = Boolean.FALSE; conditionList = new ArrayList<>(); preConditionList = new ArrayList<>(); finallyConditionList = new ArrayList<>(); @@ -124,11 +121,6 @@ public class LiteFlowChainELBuilder { return this; } - public LiteFlowChainELBuilder setOnlyValidate() { - this.onlyValidate = Boolean.TRUE; - return this; - } - public LiteFlowChainELBuilder setEL(String elStr) { if (StrUtil.isBlank(elStr)) { String errMsg = StrUtil.format("no content in this chain[{}]", chain.getChainId()); @@ -180,6 +172,21 @@ public class LiteFlowChainELBuilder { } } + /** + * EL表达式校验 + * @param elStr EL表达式 + * @return true 校验成功 false 校验失败 + */ + public Boolean validate(String elStr) { + try { + this.setEL(elStr); + return Boolean.TRUE; + } catch (ELParseException e) { + LOG.error(e.getMessage()); + } + return Boolean.FALSE; + } + public void build() { this.chain.setConditionList(this.conditionList); this.chain.setPreConditionList(this.preConditionList); @@ -187,10 +194,7 @@ public class LiteFlowChainELBuilder { checkBuild(); - // 仅校验EL表达式格式是否正确时,当前生成的chain 不加入元数据 - if (!this.onlyValidate) { - FlowBus.addChain(this.chain); - } + FlowBus.addChain(this.chain); } /** diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java index 71e413034..ee4177f3a 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java @@ -5,6 +5,7 @@ import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.core.FlowExecutorHolder; import com.yomahub.liteflow.enums.NodeTypeEnum; +import com.yomahub.liteflow.exception.ELParseException; import com.yomahub.liteflow.flow.LiteflowResponse; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.test.BaseTest; @@ -160,4 +161,26 @@ public class BuilderTest extends BaseTest { Assert.assertTrue(response.isSuccess()); Assert.assertEquals("a1[组件A1]==>c2[组件C2]==>a2[组件A2]==>c1[组件C1]", response.getExecuteStepStr()); } + + @Test + public void testChainELExpressValidate() { + LiteFlowNodeBuilder.createNode().setId("a") + .setName("组件A") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp.ACmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("b") + .setName("组件B") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp.BCmp") + .build(); + LiteFlowNodeBuilder.createNode().setId("c") + .setName("组件C") + .setType(NodeTypeEnum.COMMON) + .setClazz("com.yomahub.liteflow.test.builder.cmp.CCmp") + .build(); + Boolean res = LiteFlowChainELBuilder.createChain().validate("THEN(a, b, h)"); + Assert.assertFalse(res); + Assert.assertTrue(LiteFlowChainELBuilder.createChain().validate("THEN(a, b, c)")); + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/exception/Exception1Test.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/exception/Exception1Test.java index 4c9d36799..a6ff7ac91 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/exception/Exception1Test.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/exception/Exception1Test.java @@ -56,30 +56,4 @@ public class Exception1Test extends BaseTest { config.setRuleSource("error/flow.txt"); flowExecutor.reloadRule(); } - - @Test - public void testChainElBuilderOnlyValidate() { - LiteFlowNodeBuilder.createNode().setId("a") - .setName("组件A") - .setType(NodeTypeEnum.COMMON) - .setClazz("com.yomahub.liteflow.test.builder.cmp.ACmp") - .build(); - LiteFlowNodeBuilder.createNode().setId("b") - .setName("组件B") - .setType(NodeTypeEnum.COMMON) - .setClazz("com.yomahub.liteflow.test.builder.cmp.BCmp") - .build(); - LiteFlowNodeBuilder.createNode().setId("c") - .setName("组件C") - .setType(NodeTypeEnum.COMMON) - .setClazz("com.yomahub.liteflow.test.builder.cmp.CCmp") - .build(); - try { - LiteFlowChainELBuilder.createChain().setChainId("chain3").setEL( - "THEN(a, b, d)" - ).setOnlyValidate().build(); - } catch ( Exception ex) { - Assert.assertTrue(ex instanceof ELParseException); - } - } }