diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java index 831af267c..d02a555d5 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java @@ -1,5 +1,7 @@ package com.yomahub.liteflow.builder.el; +import java.util.Map; + /** * 捕获异常表达式 * Catch(a).do(b) @@ -35,6 +37,30 @@ public class CatchELWrapper extends ELWrapper { return this; } + @Override + public CatchELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public CatchELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public CatchELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public CatchELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public CatchELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java index 57c83ca54..325f7d998 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java @@ -58,22 +58,25 @@ public class CommonNodeELWrapper extends ELWrapper { @Override public CommonNodeELWrapper data(String dataName, Object object) { - setData("'" + JsonUtil.toJsonString(object) + "'"); - setDataName(dataName); + super.data(dataName, object); return this; } @Override public CommonNodeELWrapper data(String dataName, String jsonString) { - setData("'" + jsonString + "'"); - setDataName(dataName); + super.data(dataName, jsonString); return this; } @Override public CommonNodeELWrapper data(String dataName, Map jsonMap) { - setData("'" + JsonUtil.toJsonString(jsonMap) + "'"); - setDataName(dataName); + super.data(dataName, jsonMap); + return this; + } + + @Override + public ELWrapper bind(String key, String value) { + super.bind(key, value); return this; } @@ -102,28 +105,4 @@ public class CommonNodeELWrapper extends ELWrapper { processWrapperProperty(sb, paramContext); return sb.toString(); } - - /** - * Node的公共属性不包括id,对父类方法重载。 - * - * @param elContext EL 上下文 - * @param paramContext 参数上下文 - */ - @Override - protected void processWrapperProperty(StringBuilder elContext, StringBuilder paramContext){ - if(this.getTag() != null){ - elContext.append(StrUtil.format(".tag(\"{}\")", this.getTag())); - } - if(this.getData() != null){ - elContext.append(StrUtil.format(".data({})", this.getDataName())); - paramContext.append(StrUtil.format("{} = {}", this.getDataName(), this.getData())).append(";\n"); - } - if(this.getMaxWaitSeconds() != null){ - elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds()))); - } - if (this.getRetry() != null){ - elContext.append(StrUtil.format(".retry({})", this.getRetry().toString())); - } - } - } diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java index d053e4e08..d141855de 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java @@ -1,13 +1,12 @@ package com.yomahub.liteflow.builder.el; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.builder.el.vo.RetryELVo; import com.yomahub.liteflow.util.JsonUtil; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.function.Consumer; /** * ELWrapper是所有组件的抽象父类 @@ -25,6 +24,7 @@ public abstract class ELWrapper { private String id; private String dataName; private String data; + private final Map bindData = new HashMap<>(); private Integer maxWaitSeconds; private RetryELVo retry; @@ -84,6 +84,18 @@ public abstract class ELWrapper { return this.dataName; } + protected String getBindData(String key) { + return bindData.get(key); + } + + protected void putBindData(String key, String value) { + this.bindData.put(key, value); + } + + protected Map getBindData() { + return bindData; + } + protected void setMaxWaitSeconds(Integer maxWaitSeconds){ this.maxWaitSeconds = maxWaitSeconds; } @@ -161,6 +173,11 @@ public abstract class ELWrapper { return this; } + protected ELWrapper bind(String key, String value){ + putBindData(key, value); + return this; + } + protected ELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); @@ -227,6 +244,13 @@ public abstract class ELWrapper { if(this.getTag() != null){ elContext.append(StrUtil.format(".tag(\"{}\")", this.getTag())); } + if(this.getData() != null){ + elContext.append(StrUtil.format(".data({})", this.getDataName())); + paramContext.append(StrUtil.format("{} = {}", this.getDataName(), this.getData())).append(";\n"); + } + if(MapUtil.isNotEmpty(this.getBindData())){ + this.getBindData().forEach((key, value) -> elContext.append(StrUtil.format(".bind(\"{}\", \"{}\")", key, value))); + } if(this.getMaxWaitSeconds() != null){ elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds()))); } diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java index 3bbe2ecc9..a8dbb4dbc 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java @@ -2,6 +2,8 @@ package com.yomahub.liteflow.builder.el; import cn.hutool.core.util.StrUtil; +import java.util.Map; + /** * 后置表达式 * 只能在THEN组件中调用 @@ -28,6 +30,30 @@ public class FinallyELWrapper extends ELWrapper { return this; } + @Override + public FinallyELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public FinallyELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public FinallyELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public FinallyELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + /** * 后置组件无法设置maxWaitSeconds属性,重载用protected修饰 * diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java index 1c1ebbf01..ecd95e2d6 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java @@ -2,6 +2,7 @@ package com.yomahub.liteflow.builder.el; import cn.hutool.core.util.ObjectUtil; +import java.util.Map; import java.util.Objects; /** @@ -211,6 +212,30 @@ public class IfELWrapper extends ELWrapper { return this; } + @Override + public IfELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public IfELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public IfELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public IfELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public IfELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java index 1413fd1a8..b9cc39115 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java @@ -1,5 +1,7 @@ package com.yomahub.liteflow.builder.el; +import java.util.Map; + /** * FOR、WHILE、ITERATOR循环表达式的公共抽象父类 * @@ -68,6 +70,30 @@ public class LoopELWrapper extends ELWrapper { return this; } + @Override + public LoopELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public LoopELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public LoopELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public LoopELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public LoopELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java index 27b66458d..5cb3dd2ae 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * 并行组件 @@ -70,6 +71,30 @@ public class ParELWrapper extends ELWrapper { return this; } + @Override + public ParELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public ParELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public ParELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public ParELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public ParELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java index b591ae286..03da3cf29 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java @@ -30,6 +30,30 @@ public class PreELWrapper extends ELWrapper { return this; } + @Override + public PreELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public PreELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public PreELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public PreELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public PreELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java index 87c990d3a..a16de2a2c 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 串行组件 @@ -74,6 +75,30 @@ public class SerELWrapper extends ELWrapper { return this; } + @Override + public SerELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public SerELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public SerELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public SerELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public SerELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java index cbed3f486..69a02e79b 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java @@ -2,6 +2,8 @@ package com.yomahub.liteflow.builder.el; import cn.hutool.core.util.StrUtil; +import java.util.Map; + /** * 选择组件 * SWITCH(a).TO(b,c,d...).default(x) @@ -47,6 +49,30 @@ public class SwitchELWrapper extends ELWrapper { return this; } + @Override + public SwitchELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public SwitchELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public SwitchELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public SwitchELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public SwitchELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java index fcf2fc288..ee834b828 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 串行组件 @@ -74,6 +75,30 @@ public class ThenELWrapper extends ELWrapper { return this; } + @Override + public ThenELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public ThenELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public ThenELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public ThenELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public ThenELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java index d09a0bd05..34384e087 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java @@ -68,6 +68,30 @@ public class WhenELWrapper extends ELWrapper { return this; } + @Override + public WhenELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public WhenELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public WhenELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public WhenELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public WhenELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/BindELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/BindELBuilderTest.java new file mode 100644 index 000000000..c7b88d4a7 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/BindELBuilderTest.java @@ -0,0 +1,48 @@ +package com.yomahub.liteflow.test.builder; + +import com.yomahub.liteflow.builder.el.ELBus; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.HashMap; +import java.util.Map; + +@SpringBootTest(classes = BindELBuilderTest.class) +@EnableAutoConfiguration +public class BindELBuilderTest extends BaseTest { + + @Test + public void testBind1(){ + String actualEl = ELBus.then("a", ELBus.element("b").bind("k1", "v1")).toEL(); + String expected = "THEN(a,b.bind(\"k1\", \"v1\"));"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } + + @Test + public void testBind2(){ + String actualEl = ELBus.then("a", "b").bind("k1","v1").toEL(); + String expected = "THEN(a,b).bind(\"k1\", \"v1\");"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } + + @Test + public void testBind3(){ + String actualEl = ELBus.then("a", ELBus.node("b").bind("k1", "v1")).toEL(); + String expected = "THEN(a,node(\"b\").bind(\"k1\", \"v1\"));"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } + + @Test + public void testBind4(){ + String actualEl = ELBus.then("a", ELBus.when("b","c").bind("k1", "v1")).bind("k2","v2").toEL(); + String expected = "THEN(a,WHEN(b,c).bind(\"k1\", \"v1\")).bind(\"k2\", \"v2\");"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } +}