EL表达式组装单测使用validate验证,并修复分号输出、data调用问题。

This commit is contained in:
gezuao
2023-10-16 21:03:48 +08:00
parent e50082b7d6
commit 389804a39a
31 changed files with 738 additions and 641 deletions

View File

@@ -39,40 +39,15 @@ public class AndELWrapper extends ELWrapper {
}
@Override
public AndELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public AndELWrapper data(String dataName, String jsonString) {
// 校验字符串符合Json格式
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public AndELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
protected AndELWrapper maxWaitSeconds(Integer maxWaitSeconds){
public AndELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
return this;
}
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
// 根据depth是否为null决定输出是否格式化
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -39,32 +39,6 @@ public class CatchELWrapper extends ELWrapper {
return this;
}
@Override
public CatchELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public CatchELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public CatchELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public CatchELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -73,6 +47,8 @@ public class CatchELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -1,6 +1,7 @@
package com.yomahub.liteflow.builder.el;
import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.util.JsonUtil;
import java.util.ArrayList;
import java.util.Arrays;
@@ -111,7 +112,11 @@ public abstract class ELWrapper {
* @param object JavaBean
* @return {@link ELWrapper}
*/
protected abstract ELWrapper data(String dataName, Object object);
protected ELWrapper data(String dataName, Object object){
setData("'" + JsonUtil.toJsonString(object) + "'");
setDataName(dataName);
return this;
}
/**
* 设置表达式data属性
@@ -120,7 +125,11 @@ public abstract class ELWrapper {
* @param jsonString JSON格式字符串
* @return {@link ELWrapper}
*/
protected abstract ELWrapper data(String dataName, String jsonString);
protected ELWrapper data(String dataName, String jsonString){
setData(jsonString);
setDataName(dataName);
return this;
}
/**
* 设置data属性
@@ -129,7 +138,12 @@ public abstract class ELWrapper {
* @param jsonMap 键值映射
* @return {@link ELWrapper}
*/
protected abstract ELWrapper data(String dataName, Map<String, Object> jsonMap);
protected ELWrapper data(String dataName, Map<String, Object> jsonMap){
setData("'" + JsonUtil.toJsonString(jsonMap) + "'");
setDataName(dataName);
return this;
}
protected ELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -144,7 +158,7 @@ public abstract class ELWrapper {
public String toEL(){
StringBuilder paramContext = new StringBuilder();
String elContext = toEL(null, paramContext);
return paramContext.append(elContext).toString();
return paramContext.append(elContext).append(";").toString();
}
/**
@@ -161,7 +175,7 @@ public abstract class ELWrapper {
} else {
elContext = toEL(0, paramContext);
}
return paramContext.append(elContext).toString();
return paramContext.append(elContext).append(";").toString();
}
/**
@@ -186,10 +200,6 @@ 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("{} = '{}';\n", this.getDataName(), this.getData()));
}
if(this.getMaxWaitSeconds() != null){
elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds())));
}
@@ -218,4 +228,15 @@ public abstract class ELWrapper {
elContext.append(StrUtil.repeat(ELBus.TAB, depth));
}
}
/**
* 检查子表达式是否有最长等待秒数定义
*/
protected void checkMaxWaitSeconds(){
for(ELWrapper sonElWrapper : this.getElWrapperList()){
if(sonElWrapper != null && sonElWrapper.getMaxWaitSeconds() != null){
throw new IllegalArgumentException("maxWaitSeconds必须定义在完整的语义之后");
}
}
}
}

View File

@@ -31,32 +31,6 @@ public class FinallyELWrapper extends ELWrapper {
return this;
}
@Override
public FinallyELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public FinallyELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public FinallyELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
/**
* 后置组件无法设置maxWaitSeconds属性重载用protected修饰
*
@@ -71,6 +45,8 @@ public class FinallyELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();
@@ -108,9 +84,5 @@ public class FinallyELWrapper extends 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("{} = '{}'\n", this.getDataName(), this.getData()));
}
}
}

View File

@@ -55,32 +55,6 @@ public class ForELWrapper extends LoopELWrapper {
return this;
}
@Override
public ForELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public ForELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public ForELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public ForELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);

View File

@@ -213,32 +213,6 @@ public class IfELWrapper extends ELWrapper {
return this;
}
@Override
public IfELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public IfELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public IfELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public IfELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -247,6 +221,8 @@ public class IfELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -43,32 +43,6 @@ public class IteratorELWrapper extends LoopELWrapper {
return this;
}
@Override
public IteratorELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public IteratorELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public IteratorELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public IteratorELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);

View File

@@ -54,32 +54,6 @@ public abstract class LoopELWrapper extends ELWrapper {
return this;
}
@Override
public LoopELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public LoopELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public LoopELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public LoopELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -88,6 +62,8 @@ public abstract class LoopELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -60,18 +60,18 @@ public class NodeELWrapper extends ELWrapper {
@Override
public NodeELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setData("'" + JsonUtil.toJsonString(object) + "'");
setDataName(dataName);
return this;
}
@Override
public NodeELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
// try {
// JsonUtil.parseObject(jsonString);
// } catch (Exception e){
// throw new RuntimeException("字符串不符合Json格式");
// }
setData(jsonString);
setDataName(dataName);
return this;
@@ -79,7 +79,7 @@ public class NodeELWrapper extends ELWrapper {
@Override
public NodeELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setData("'" + JsonUtil.toJsonString(jsonMap) + "'");
setDataName(dataName);
return this;
}
@@ -114,7 +114,8 @@ public class NodeELWrapper extends ELWrapper {
}
if(this.getData() != null){
elContext.append(StrUtil.format(".data({})", this.getDataName()));
paramContext.append(StrUtil.format("{} = '{}'\n", this.getDataName(), this.getData()));
// paramContext.append(StrUtil.format("{} = '{}'\n", this.getDataName(), this.getData()));
paramContext.append(StrUtil.format("{} = {}", this.getDataName(), this.getData())).append(";\n");
}
if(this.getMaxWaitSeconds() != null){
elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds())));

View File

@@ -30,32 +30,6 @@ public class NotELWrapper extends ELWrapper {
return this;
}
@Override
public NotELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public NotELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public NotELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public NotELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -64,6 +38,8 @@ public class NotELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -38,32 +38,6 @@ public class OrELWrapper extends ELWrapper {
return this;
}
@Override
public OrELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public OrELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public OrELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public OrELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -72,6 +46,8 @@ public class OrELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -30,32 +30,6 @@ public class PreELWrapper extends ELWrapper {
return this;
}
@Override
public PreELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public PreELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public PreELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public PreELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -64,6 +38,8 @@ public class PreELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -50,32 +50,6 @@ public class SwitchELWrapper extends ELWrapper {
return this;
}
@Override
public SwitchELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public SwitchELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public SwitchELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public SwitchELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -84,6 +58,8 @@ public class SwitchELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -76,39 +76,6 @@ public class ThenELWrapper extends ELWrapper {
return this;
}
/**
* data关键字的约束允许以Bean、jsonString、map类型输入数据必须包含dataName参数。
*
* @param dataName data名称
* @param javaBean JavaBean
* @return {@link ThenELWrapper}
*/
@Override
public ThenELWrapper data(String dataName, Object javaBean) {
setData(JsonUtil.toJsonString(javaBean));
setDataName(dataName);
return this;
}
@Override
public ThenELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public ThenELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public ThenELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -117,6 +84,8 @@ public class ThenELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -69,32 +69,6 @@ public class WhenELWrapper extends ELWrapper {
return this;
}
@Override
public WhenELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public WhenELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public WhenELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public WhenELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);
@@ -103,6 +77,8 @@ public class WhenELWrapper extends ELWrapper {
@Override
protected String toEL(Integer depth, StringBuilder paramContext) {
checkMaxWaitSeconds();
Integer sonDepth = depth == null ? null : depth + 1;
StringBuilder sb = new StringBuilder();

View File

@@ -50,32 +50,6 @@ public class WhileELWrapper extends LoopELWrapper {
return this;
}
@Override
public WhileELWrapper data(String dataName, Object object) {
setData(JsonUtil.toJsonString(object));
setDataName(dataName);
return this;
}
@Override
public WhileELWrapper data(String dataName, String jsonString) {
try {
JsonUtil.parseObject(jsonString);
} catch (Exception e){
throw new RuntimeException("字符串不符合Json格式");
}
setData(jsonString);
setDataName(dataName);
return this;
}
@Override
public WhileELWrapper data(String dataName, Map<String, Object> jsonMap) {
setData(JsonUtil.toJsonString(jsonMap));
setDataName(dataName);
return this;
}
@Override
public WhileELWrapper maxWaitSeconds(Integer maxWaitSeconds){
setMaxWaitSeconds(maxWaitSeconds);