From 2921694314304e42e72212b8eeb3d4b349deaa95 Mon Sep 17 00:00:00 2001 From: zendwang Date: Tue, 29 Nov 2022 18:36:31 +0800 Subject: [PATCH 1/2] =?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=EF=BC=8C?= =?UTF-8?q?=E4=BE=9B=E6=A3=80=E6=9F=A5=E4=B9=8B=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builder/el/LiteFlowChainELBuilder.java | 16 +++++++++- .../test/exception/Exception1Test.java | 31 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) 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 c52e3b0b1..2de2c2f35 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 @@ -32,6 +32,11 @@ public class LiteFlowChainELBuilder { private Chain chain; + /** + * 是否只需要验证EL表达式 + */ + private Boolean onlyValidate; + /** * //这是主体的Condition,不包含前置和后置 * //声明这个变量,而不是用chain.getConditionList的目的,是为了辅助平滑加载 @@ -87,6 +92,7 @@ public class LiteFlowChainELBuilder { public LiteFlowChainELBuilder() { chain = new Chain(); + onlyValidate = Boolean.FALSE; conditionList = new ArrayList<>(); preConditionList = new ArrayList<>(); finallyConditionList = new ArrayList<>(); @@ -118,6 +124,11 @@ 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()); @@ -176,7 +187,10 @@ public class LiteFlowChainELBuilder { checkBuild(); - FlowBus.addChain(this.chain); + // 仅校验EL表达式格式是否正确时,当前生成的chain 不加入元数据 + if (!this.onlyValidate) { + FlowBus.addChain(this.chain); + } } /** 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 e5ba075ea..4c9d36799 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 @@ -1,13 +1,18 @@ package com.yomahub.liteflow.test.exception; +import com.yomahub.liteflow.builder.LiteFlowNodeBuilder; +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.ChainDuplicateException; import com.yomahub.liteflow.exception.ConfigErrorException; +import com.yomahub.liteflow.exception.ELParseException; import com.yomahub.liteflow.exception.FlowExecutorNotInitException; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -51,4 +56,30 @@ 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); + } + } } From 88c2521b6b5f0110fc339108bf4753ce5dc876c4 Mon Sep 17 00:00:00 2001 From: zendwang Date: Wed, 30 Nov 2022 14:05:41 +0800 Subject: [PATCH 2/2] =?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); - } - } }