构建者模式提供设置组件class的方法

This commit is contained in:
daiqi
2022-03-12 13:53:21 +08:00
parent b75244b9e5
commit 564d817bb1
2 changed files with 73 additions and 0 deletions

View File

@@ -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<? extends NodeComponent> nodeComponentClass) {
assert nodeComponentClass != null;
setClazz(nodeComponentClass.getName());
return this;
}
public LiteFlowNodeBuilder setType(NodeTypeEnum type) {
this.node.setType(type);
return this;

View File

@@ -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<DefaultSlot> 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();