mirror of
https://gitee.com/dromara/liteFlow.git
synced 2026-05-14 12:12:08 +08:00
!52 流程构建者提供直接设置类名和设置节点类型编码的方法
Merge pull request !52 from sikadai/v2.6.11
This commit is contained in:
@@ -1,12 +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;
|
||||
|
||||
@@ -60,11 +64,31 @@ 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;
|
||||
}
|
||||
|
||||
// 设置类型的编码
|
||||
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;
|
||||
|
||||
@@ -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<DefaultSlot> response = flowExecutor.execute2Resp("chain1");
|
||||
Assert.assertTrue(response.isSuccess());
|
||||
Assert.assertEquals("a[组件A]==>b[组件B]==>e[组件E]==>c[组件C]==>d[组件D]", response.getSlot().getExecuteStepStr());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 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();
|
||||
|
||||
@@ -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<DefaultSlot> 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();
|
||||
|
||||
Reference in New Issue
Block a user