From 11d3347d7819fd140830818560f6f36202f80052 Mon Sep 17 00:00:00 2001 From: tangkc <1016771049@qq.com> Date: Sun, 10 Jul 2022 23:24:58 +0800 Subject: [PATCH 1/4] =?UTF-8?q?enhancement=20#I5GBXI=20=E6=94=AF=E6=8C=81E?= =?UTF-8?q?L=E4=B8=AD=E4=BB=BB=E6=84=8F=E5=9C=B0=E6=96=B9=E7=9A=84?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/parser/helper/ParserHelper.java | 34 ++++++++++++++++++- .../note/LiteflowNodeELSpringbootTest.java | 34 +++++++++++++++++++ .../yomahub/liteflow/test/note/cmp/ACmp.java | 24 +++++++++++++ .../yomahub/liteflow/test/note/cmp/BCmp.java | 26 ++++++++++++++ .../yomahub/liteflow/test/note/cmp/CCmp.java | 26 ++++++++++++++ .../liteflow/test/note/package-info.java | 4 +++ .../resources/note/application.properties | 1 + .../src/test/resources/note/flow.el.xml | 18 ++++++++++ 8 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/application.properties create mode 100644 liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/flow.el.xml diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java index 088bcb46a..d3eafaaee 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java @@ -1,6 +1,7 @@ package com.yomahub.liteflow.parser.helper; import cn.hutool.core.annotation.AnnotationUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; @@ -27,6 +28,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.function.Consumer; +import java.util.regex.Pattern; import static com.yomahub.liteflow.common.ChainConstant.*; @@ -383,8 +385,38 @@ public class ParserHelper { public static void parseOneChainEl(Element e) { //构建chainBuilder String chainName = e.attributeValue(NAME); - String el = e.getTextTrim(); + String text = e.getText(); + String el = Util.replaceNotesAndTrim(text); LiteFlowChainELBuilder chainELBuilder = LiteFlowChainELBuilder.createChain().setChainName(chainName); chainELBuilder.setEL(el).build(); } + + private static class Util{ + // java 注释的正则表达式 + private static String REGEX_NOTE = "/\\*((?!\\*/).|[\\r\\n])*?\\*/|[ \\t]*//.*"; + + /** + * 移除 el 表达式中的注释,支持 java 的注释,包括单行注释、多行注释 + * + * @param elStr el 表达式 + * @return 移除注释后的 el 表达式 + */ + private static String replaceNotesAndTrim(String elStr) { + if (StrUtil.isBlank(elStr)) { + return elStr; + } + + String text = Pattern.compile(REGEX_NOTE) + .matcher(elStr) + // 移除注释 + .replaceAll(CharSequenceUtil.EMPTY) + // 移除字符串中的空格 + .replaceAll(CharSequenceUtil.SPACE, CharSequenceUtil.EMPTY); + + // 移除所有换行符 + return StrUtil.removeAllLineBreaks(text); + } + } + + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java new file mode 100644 index 000000000..6970b49da --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java @@ -0,0 +1,34 @@ +package com.yomahub.liteflow.test.note; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/note/application.properties") +@SpringBootTest(classes = LiteflowNodeELSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.note.cmp"}) +public class LiteflowNodeELSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + // 测试注释 + @Test + public void testAsyncFlow1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "it's a base request"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a==>b==>c==>b",response.getExecuteStepStr()); + } +} \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java new file mode 100644 index 000000000..0d7bd2934 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java @@ -0,0 +1,24 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("a") +@LiteflowCmpDefine +public class ACmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java new file mode 100644 index 000000000..52044a89e --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java @@ -0,0 +1,26 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import cn.hutool.core.thread.ThreadUtil; +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("b") +@LiteflowCmpDefine +public class BCmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java new file mode 100644 index 000000000..f9e1942b3 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java @@ -0,0 +1,26 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import cn.hutool.core.thread.ThreadUtil; +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("c") +@LiteflowCmpDefine +public class CCmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java new file mode 100644 index 000000000..6710dee43 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java @@ -0,0 +1,4 @@ +/** + * 测试注释 + */ +package com.yomahub.liteflow.test.note; \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/application.properties b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/application.properties new file mode 100644 index 000000000..f7a446bb6 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=note/flow.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/flow.el.xml new file mode 100644 index 000000000..0c85be0d5 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/resources/note/flow.el.xml @@ -0,0 +1,18 @@ + + + + // 单行注释 + THEN( + // 单行注释 + a, + b, + WHEN( + /** + * 多行注释 + */ + c, + b + ) + ); + + \ No newline at end of file From 211e58e53192a64b90bf4ea2a7fea58de3a7c05d Mon Sep 17 00:00:00 2001 From: tangkc <1016771049@qq.com> Date: Sun, 10 Jul 2022 23:44:34 +0800 Subject: [PATCH 2/4] =?UTF-8?q?enhancement=20#I5GBXI=20=E6=94=AF=E6=8C=81E?= =?UTF-8?q?L=E4=B8=AD=E4=BB=BB=E6=84=8F=E5=9C=B0=E6=96=B9=E7=9A=84?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/test/note/LiteflowNodeTest.java | 33 ++++++++++++++++++ .../yomahub/liteflow/test/note/cmp/ACmp.java | 18 ++++++++++ .../yomahub/liteflow/test/note/cmp/BCmp.java | 19 +++++++++++ .../yomahub/liteflow/test/note/cmp/CCmp.java | 20 +++++++++++ .../liteflow/test/note/package-info.java | 4 +++ .../src/test/resources/note/flow.el.xml | 24 +++++++++++++ .../note/LiteflowNodeELSpringbootTest.java | 34 +++++++++++++++++++ .../yomahub/liteflow/test/note/cmp/ACmp.java | 24 +++++++++++++ .../yomahub/liteflow/test/note/cmp/BCmp.java | 25 ++++++++++++++ .../yomahub/liteflow/test/note/cmp/CCmp.java | 25 ++++++++++++++ .../liteflow/test/note/package-info.java | 4 +++ .../resources/note/application.properties | 1 + .../src/test/resources/note/flow.el.xml | 18 ++++++++++ .../note/LiteflowNodeELSpringbootTest.java | 28 +++++++++++++++ .../yomahub/liteflow/test/note/cmp/ACmp.java | 21 ++++++++++++ .../yomahub/liteflow/test/note/cmp/BCmp.java | 22 ++++++++++++ .../yomahub/liteflow/test/note/cmp/CCmp.java | 22 ++++++++++++ .../liteflow/test/note/package-info.java | 4 +++ .../src/test/resources/note/application.xml | 23 +++++++++++++ .../src/test/resources/note/flow.el.xml | 18 ++++++++++ 20 files changed, 387 insertions(+) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeTest.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/package-info.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/note/flow.el.xml create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/application.properties create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/flow.el.xml create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/package-info.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/application.xml create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/flow.el.xml diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeTest.java new file mode 100644 index 000000000..4d17c8342 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeTest.java @@ -0,0 +1,33 @@ +package com.yomahub.liteflow.test.note; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.core.FlowExecutorHolder; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * 测试注释 + */ +public class LiteflowNodeTest extends BaseTest { + + private static FlowExecutor flowExecutor; + + @BeforeClass + public static void init(){ + LiteflowConfig config = new LiteflowConfig(); + config.setRuleSource("note/flow.el.xml"); + flowExecutor = FlowExecutorHolder.loadInstance(config); + } + + // 测试注释 + @Test + public void testAsyncFlow1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "it's a base request"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a==>b==>c==>b",response.getExecuteStepStr()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java new file mode 100644 index 000000000..d5b2429a9 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java @@ -0,0 +1,18 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class ACmp extends NodeComponent{ + + @Override + public void process() { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java new file mode 100644 index 000000000..650f735c2 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * + * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java new file mode 100644 index 000000000..82307efbc --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java @@ -0,0 +1,20 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * + * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/package-info.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/package-info.java new file mode 100644 index 000000000..6710dee43 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/note/package-info.java @@ -0,0 +1,4 @@ +/** + * 测试注释 + */ +package com.yomahub.liteflow.test.note; \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/note/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/note/flow.el.xml new file mode 100644 index 000000000..86434e07a --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/resources/note/flow.el.xml @@ -0,0 +1,24 @@ + + + + + + + + + + // 单行注释 + THEN( + // 单行注释 + a, + b, + WHEN( + /** + * 多行注释 + */ + c, + b + ) + ); + + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java new file mode 100644 index 000000000..6970b49da --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java @@ -0,0 +1,34 @@ +package com.yomahub.liteflow.test.note; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/note/application.properties") +@SpringBootTest(classes = LiteflowNodeELSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.note.cmp"}) +public class LiteflowNodeELSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + // 测试注释 + @Test + public void testAsyncFlow1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "it's a base request"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a==>b==>c==>b",response.getExecuteStepStr()); + } +} \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java new file mode 100644 index 000000000..0d7bd2934 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java @@ -0,0 +1,24 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("a") +@LiteflowCmpDefine +public class ACmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java new file mode 100644 index 000000000..3887a0d25 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("b") +@LiteflowCmpDefine +public class BCmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java new file mode 100644 index 000000000..15429fcae --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("c") +@LiteflowCmpDefine +public class CCmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java new file mode 100644 index 000000000..6710dee43 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/note/package-info.java @@ -0,0 +1,4 @@ +/** + * 测试注释 + */ +package com.yomahub.liteflow.test.note; \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/application.properties b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/application.properties new file mode 100644 index 000000000..f7a446bb6 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=note/flow.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/flow.el.xml new file mode 100644 index 000000000..0c85be0d5 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/note/flow.el.xml @@ -0,0 +1,18 @@ + + + + // 单行注释 + THEN( + // 单行注释 + a, + b, + WHEN( + /** + * 多行注释 + */ + c, + b + ) + ); + + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java new file mode 100644 index 000000000..f109c236f --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/LiteflowNodeELSpringbootTest.java @@ -0,0 +1,28 @@ +package com.yomahub.liteflow.test.note; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +@RunWith(SpringRunner.class) +@ContextConfiguration("classpath:/note/application.xml") +public class LiteflowNodeELSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + // 测试注释 + @Test + public void testAsyncFlow1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "it's a base request"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a==>b==>c==>b",response.getExecuteStepStr()); + } +} \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java new file mode 100644 index 000000000..b74b3cde8 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/ACmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("a") +public class ACmp extends NodeComponent{ + + @Override + public void process() { + System.out.println("ACmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java new file mode 100644 index 000000000..a78464b02 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/BCmp.java @@ -0,0 +1,22 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * + * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("b") +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java new file mode 100644 index 000000000..09c2e0c8f --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/cmp/CCmp.java @@ -0,0 +1,22 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * + * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.note.cmp; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("c") +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/package-info.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/package-info.java new file mode 100644 index 000000000..6710dee43 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/note/package-info.java @@ -0,0 +1,4 @@ +/** + * 测试注释 + */ +package com.yomahub.liteflow.test.note; \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/application.xml b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/application.xml new file mode 100644 index 000000000..f71cff206 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/application.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/flow.el.xml new file mode 100644 index 000000000..0c85be0d5 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/resources/note/flow.el.xml @@ -0,0 +1,18 @@ + + + + // 单行注释 + THEN( + // 单行注释 + a, + b, + WHEN( + /** + * 多行注释 + */ + c, + b + ) + ); + + \ No newline at end of file From 7e93fedc62b53616109d8f25f8f26f6c99831297 Mon Sep 17 00:00:00 2001 From: tangkc <1016771049@qq.com> Date: Mon, 11 Jul 2022 22:34:24 +0800 Subject: [PATCH 3/4] =?UTF-8?q?enhancement=20#I5GBXI=20=E6=94=AF=E6=8C=81E?= =?UTF-8?q?L=E4=B8=AD=E4=BB=BB=E6=84=8F=E5=9C=B0=E6=96=B9=E7=9A=84?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/parser/helper/ParserHelper.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java index d3eafaaee..603361808 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java @@ -386,22 +386,23 @@ public class ParserHelper { //构建chainBuilder String chainName = e.attributeValue(NAME); String text = e.getText(); - String el = Util.replaceNotesAndTrim(text); + String el = RegexUtil.removeComments(text); LiteFlowChainELBuilder chainELBuilder = LiteFlowChainELBuilder.createChain().setChainName(chainName); chainELBuilder.setEL(el).build(); } - private static class Util{ + private static class RegexUtil{ // java 注释的正则表达式 - private static String REGEX_NOTE = "/\\*((?!\\*/).|[\\r\\n])*?\\*/|[ \\t]*//.*"; + private static final String REGEX_NOTE = "/\\*((?!\\*/).|[\\r\\n])*?\\*/|[ \\t]*//.*"; /** - * 移除 el 表达式中的注释,支持 java 的注释,包括单行注释、多行注释 + * 移除 el 表达式中的注释,支持 java 的注释,包括单行注释、多行注释, + * 会压缩字符串,移除空格和换行符 * * @param elStr el 表达式 * @return 移除注释后的 el 表达式 */ - private static String replaceNotesAndTrim(String elStr) { + private static String removeComments(String elStr) { if (StrUtil.isBlank(elStr)) { return elStr; } From ab073301b0afad31183ec0a5a553c4fa356e21d1 Mon Sep 17 00:00:00 2001 From: tangkc <1016771049@qq.com> Date: Tue, 12 Jul 2022 09:20:48 +0800 Subject: [PATCH 4/4] =?UTF-8?q?enhancement=20#I5GBXI=20=E6=94=AF=E6=8C=81E?= =?UTF-8?q?L=E4=B8=AD=E4=BB=BB=E6=84=8F=E5=9C=B0=E6=96=B9=E7=9A=84?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yomahub/liteflow/parser/helper/ParserHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java index 603361808..71ad454e2 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java @@ -393,7 +393,7 @@ public class ParserHelper { private static class RegexUtil{ // java 注释的正则表达式 - private static final String REGEX_NOTE = "/\\*((?!\\*/).|[\\r\\n])*?\\*/|[ \\t]*//.*"; + private static final String REGEX_COMMENT = "/\\*((?!\\*/).|[\\r\\n])*?\\*/|[ \\t]*//.*"; /** * 移除 el 表达式中的注释,支持 java 的注释,包括单行注释、多行注释, @@ -407,7 +407,7 @@ public class ParserHelper { return elStr; } - String text = Pattern.compile(REGEX_NOTE) + String text = Pattern.compile(REGEX_COMMENT) .matcher(elStr) // 移除注释 .replaceAll(CharSequenceUtil.EMPTY)