From 564d817bb1bbe28d362210b6a91136a372d46b6a Mon Sep 17 00:00:00 2001 From: daiqi <466608943@qq.com> Date: Sat, 12 Mar 2022 13:53:21 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9E=84=E5=BB=BA=E8=80=85=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=8F=90=E4=BE=9B=E8=AE=BE=E7=BD=AE=E7=BB=84=E4=BB=B6?= =?UTF-8?q?class=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/builder/LiteFlowNodeBuilder.java | 8 +++ .../test/builder/BuilderSpringbootTest1.java | 65 +++++++++++++++++++ 2 files changed, 73 insertions(+) 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 1e9d908f2..84966b48b 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 @@ -2,6 +2,7 @@ package com.yomahub.liteflow.builder; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.flow.Node; import com.yomahub.liteflow.enums.NodeTypeEnum; @@ -60,6 +61,13 @@ public class LiteFlowNodeBuilder { return this; } + // 设置节点组件的class + public LiteFlowNodeBuilder setNodeComponentClazz(Class nodeComponentClass) { + assert nodeComponentClass != null; + setClazz(nodeComponentClass.getName()); + return this; + } + public LiteFlowNodeBuilder setType(NodeTypeEnum type) { this.node.setType(type); return this; diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java index df5d4a65a..8daab25ec 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java @@ -8,6 +8,13 @@ import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.LiteflowResponse; import com.yomahub.liteflow.enums.NodeTypeEnum; import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.builder.cmp1.ACmp; +import com.yomahub.liteflow.test.builder.cmp1.BCmp; +import com.yomahub.liteflow.test.builder.cmp1.CCmp; +import com.yomahub.liteflow.test.builder.cmp1.DCmp; +import com.yomahub.liteflow.test.builder.cmp1.ECmp; +import com.yomahub.liteflow.test.builder.cmp1.FCmp; +import com.yomahub.liteflow.test.builder.cmp1.GCmp; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -68,6 +75,64 @@ public class BuilderSpringbootTest1 extends BaseTest { .build(); + LiteFlowChainBuilder.createChain().setChainName("chain2").setCondition( + LiteFlowConditionBuilder.createThenCondition().setValue("c,d").build() + ).build(); + + LiteFlowChainBuilder.createChain().setChainName("chain1").setCondition( + LiteFlowConditionBuilder + .createThenCondition() + .setValue("a,b").build() + ).setCondition( + LiteFlowConditionBuilder.createWhenCondition() + .setValue("e(f|g|chain2)").build() + ).build(); + + LiteflowResponse response = flowExecutor.execute2Resp("chain1"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a[组件A]==>b[组件B]==>e[组件E]==>c[组件C]==>d[组件D]", response.getSlot().getExecuteStepStr()); + } + + //基于普通组件的builder模式测试 + @Test + public void testBuilderForClass() throws Exception { + LiteFlowNodeBuilder.createNode().setId("a") + .setName("组件A") + .setType(NodeTypeEnum.COMMON) + .setNodeComponentClazz(ACmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("b") + .setName("组件B") + .setType(NodeTypeEnum.COMMON) + .setNodeComponentClazz(BCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("c") + .setName("组件C") + .setType(NodeTypeEnum.COMMON) + .setNodeComponentClazz(CCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("d") + .setName("组件D") + .setType(NodeTypeEnum.COMMON) + .setNodeComponentClazz(DCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("e") + .setName("组件E") + .setType(NodeTypeEnum.COMMON) + .setNodeComponentClazz(ECmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("f") + .setName("组件F") + .setType(NodeTypeEnum.COMMON) + .setNodeComponentClazz(FCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("g") + .setName("组件G") + .setType(NodeTypeEnum.COMMON) + .setNodeComponentClazz(GCmp.class) + .build(); + + LiteFlowChainBuilder.createChain().setChainName("chain2").setCondition( LiteFlowConditionBuilder.createThenCondition().setValue("c,d").build() ).build(); From 65f2b663c8dde840480b57b86c2340c5387ef121 Mon Sep 17 00:00:00 2001 From: daiqi <466608943@qq.com> Date: Sat, 12 Mar 2022 14:04:36 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BE=9BtypeCode=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E8=BF=9B=E8=A1=8C=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/builder/LiteFlowNodeBuilder.java | 16 ++++++++++++++++ .../test/builder/BuilderSpringbootTest1.java | 16 ++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) 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 84966b48b..b580d9950 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,13 +1,16 @@ package com.yomahub.liteflow.builder; import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.flow.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 org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,6 +76,19 @@ public class LiteFlowNodeBuilder { return this; } + // 设置类型的编码 + public LiteFlowNodeBuilder setTypeCode(String nodeTypeCode) { + if (StringUtils.isBlank(nodeTypeCode)) { + throw new NullParamException("nodeTypeCode is blank"); + } + NodeTypeEnum nodeTypeEnum = NodeTypeEnum.getEnumByCode(nodeTypeCode); + if (ObjectUtil.isNull(nodeTypeEnum)) { + throw new NullParamException(StrUtil.format("nodeTypeCode[{}] is error", nodeTypeCode)); + } + setType(nodeTypeEnum); + return this; + } + public LiteFlowNodeBuilder setScript(String script) { this.node.setScript(script); return this; diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java index 8daab25ec..57fd896bc 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringbootTest1.java @@ -95,40 +95,40 @@ public class BuilderSpringbootTest1 extends BaseTest { //基于普通组件的builder模式测试 @Test - public void testBuilderForClass() throws Exception { + public void testBuilderForClassAndCode() throws Exception { LiteFlowNodeBuilder.createNode().setId("a") .setName("组件A") - .setType(NodeTypeEnum.COMMON) + .setTypeCode(NodeTypeEnum.COMMON.getCode()) .setNodeComponentClazz(ACmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("b") .setName("组件B") - .setType(NodeTypeEnum.COMMON) + .setTypeCode(NodeTypeEnum.COMMON.getCode()) .setNodeComponentClazz(BCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("c") .setName("组件C") - .setType(NodeTypeEnum.COMMON) + .setTypeCode(NodeTypeEnum.COMMON.getCode()) .setNodeComponentClazz(CCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("d") .setName("组件D") - .setType(NodeTypeEnum.COMMON) + .setTypeCode(NodeTypeEnum.COMMON.getCode()) .setNodeComponentClazz(DCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("e") .setName("组件E") - .setType(NodeTypeEnum.COMMON) + .setTypeCode(NodeTypeEnum.COMMON.getCode()) .setNodeComponentClazz(ECmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("f") .setName("组件F") - .setType(NodeTypeEnum.COMMON) + .setTypeCode(NodeTypeEnum.COMMON.getCode()) .setNodeComponentClazz(FCmp.class) .build(); LiteFlowNodeBuilder.createNode().setId("g") .setName("组件G") - .setType(NodeTypeEnum.COMMON) + .setTypeCode(NodeTypeEnum.COMMON.getCode()) .setNodeComponentClazz(GCmp.class) .build(); From fcf123062193987af4723c981da373b11db0dfa8 Mon Sep 17 00:00:00 2001 From: daiqi <466608943@qq.com> Date: Sat, 12 Mar 2022 22:55:29 +0800 Subject: [PATCH 3/3] =?UTF-8?q?spring=E5=92=8Cnospring=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/test/builder/BuilderTest.java | 64 +++++++++++++++++++ .../test/builder/BuilderSpringTest1.java | 59 +++++++++++++++++ 2 files changed, 123 insertions(+) diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java index d9c72be1d..739935f9c 100644 --- a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/builder/BuilderTest.java @@ -10,6 +10,13 @@ import com.yomahub.liteflow.entity.data.LiteflowResponse; import com.yomahub.liteflow.enums.NodeTypeEnum; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.builder.cmp.ACmp; +import com.yomahub.liteflow.test.builder.cmp.BCmp; +import com.yomahub.liteflow.test.builder.cmp.CCmp; +import com.yomahub.liteflow.test.builder.cmp.DCmp; +import com.yomahub.liteflow.test.builder.cmp.ECmp; +import com.yomahub.liteflow.test.builder.cmp.FCmp; +import com.yomahub.liteflow.test.builder.cmp.GCmp; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -81,4 +88,61 @@ public class BuilderTest extends BaseTest { Assert.assertTrue(response.isSuccess()); Assert.assertEquals("a[组件A]==>b[组件B]==>e[组件E]==>c[组件C]==>d[组件D]", response.getSlot().getExecuteStepStr()); } + + //基于普通组件的builder模式测试 + @Test + public void testBuilderForClassAndCode() throws Exception { + LiteFlowNodeBuilder.createNode().setId("a") + .setName("组件A") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(ACmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("b") + .setName("组件B") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(BCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("c") + .setName("组件C") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(CCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("d") + .setName("组件D") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(DCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("e") + .setName("组件E") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(ECmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("f") + .setName("组件F") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(FCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("g") + .setName("组件G") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(GCmp.class) + .build(); + + LiteFlowChainBuilder.createChain().setChainName("chain2").setCondition( + LiteFlowConditionBuilder.createWhenCondition().setValue("c,d").build() + ).build(); + + LiteFlowChainBuilder.createChain().setChainName("chain1").setCondition( + LiteFlowConditionBuilder + .createThenCondition() + .setValue("a,b").build() + ).setCondition( + LiteFlowConditionBuilder.createWhenCondition() + .setValue("e(f|g|chain2)").build() + ).build(); + + LiteflowResponse response = flowExecutor.execute2Resp("chain1"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("a[组件A]==>b[组件B]==>e[组件E]==>c[组件C]==>d[组件D]", response.getSlot().getExecuteStepStr()); + } } diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java index ca5beefa8..2ea2cf458 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/builder/BuilderSpringTest1.java @@ -8,6 +8,7 @@ import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.LiteflowResponse; import com.yomahub.liteflow.enums.NodeTypeEnum; import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.builder.cmp1.*; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -65,6 +66,64 @@ public class BuilderSpringTest1 extends BaseTest { .build(); + LiteFlowChainBuilder.createChain().setChainName("chain2").setCondition( + LiteFlowConditionBuilder.createThenCondition().setValue("c,d").build() + ).build(); + + LiteFlowChainBuilder.createChain().setChainName("chain1").setCondition( + LiteFlowConditionBuilder + .createWhenCondition() + .setValue("a,b").build() + ).setCondition( + LiteFlowConditionBuilder.createWhenCondition() + .setValue("e(f|g|chain2)").build() + ).build(); + + LiteflowResponse response = flowExecutor.execute2Resp("chain1"); + Assert.assertTrue(response.isSuccess()); + } + + + //基于普通组件的builder模式测试 + @Test + public void testBuilderForClassAndCode() throws Exception { + LiteFlowNodeBuilder.createNode().setId("a") + .setName("组件A") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(ACmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("b") + .setName("组件B") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(BCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("c") + .setName("组件C") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(CCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("d") + .setName("组件D") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(DCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("e") + .setName("组件E") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(ECmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("f") + .setName("组件F") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(FCmp.class) + .build(); + LiteFlowNodeBuilder.createNode().setId("g") + .setName("组件G") + .setTypeCode(NodeTypeEnum.COMMON.getCode()) + .setNodeComponentClazz(GCmp.class) + .build(); + + LiteFlowChainBuilder.createChain().setChainName("chain2").setCondition( LiteFlowConditionBuilder.createThenCondition().setValue("c,d").build() ).build();