From aabe2ccb9b8b542c98550c414853b3b7688bf0a8 Mon Sep 17 00:00:00 2001 From: "meng.li" <53835420> Date: Sat, 3 Apr 2021 21:19:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?JSON=20YML=20=E8=A7=A3=E6=9E=90=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=96=B0=20=20when=20condition=20=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=90=88=E5=B9=B6=20=E5=B9=B6=E4=BF=AE=E5=A4=8D=20JSO?= =?UTF-8?q?N=20=E8=A7=A3=E6=9E=90=E5=99=A8=20FLOWBUS=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=20chain=E7=9A=84=E4=BD=8D=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/entity/flow/Condition.java | 22 ++++++++++---- .../liteflow/entity/flow/ThenCondition.java | 7 +++++ .../liteflow/entity/flow/WhenCondition.java | 7 +++++ .../liteflow/enums/ConditionTypeEnum.java | 30 +++++++++++++++++++ .../yomahub/liteflow/parser/FlowParser.java | 25 ++++++++++++++++ .../liteflow/parser/JsonFlowParser.java | 26 +++++++++++----- .../liteflow/parser/XmlFlowParser.java | 29 +++++++----------- 7 files changed, 115 insertions(+), 31 deletions(-) create mode 100644 liteflow-core/src/main/java/com/yomahub/liteflow/enums/ConditionTypeEnum.java diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java index f8e576fea..1c3b58eeb 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java @@ -19,13 +19,17 @@ public class Condition { // 增加errorResume属性,以区分当when调用链调用失败时是否继续往下执行 默认true继续执行 private boolean errorResume = true; // 增加groupId属性,用于不同node进行同组合并 - private String groupId = LocalDefaultFlowConstant.DEFAULT; + private String group = LocalDefaultFlowConstant.DEFAULT; + // condition 类型 参数:ConditionTypeEnum 包含:then when + private String conditionType; private List nodeList; public Condition(List nodeList) { this.nodeList = nodeList; } + public Condition() { + } public List getNodeList() { return nodeList; @@ -43,11 +47,19 @@ public class Condition { this.errorResume = errorResume; } - public String getGroupId() { - return groupId; + public String getGroup() { + return group; } - public void setGroupId(String groupId) { - this.groupId = groupId; + public void setGroup(String group) { + this.group = group; + } + + public String getConditionType() { + return conditionType; + } + + public void setConditionType(String conditionType) { + this.conditionType = conditionType; } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java index d32251c50..600d965a5 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java @@ -19,4 +19,11 @@ public class ThenCondition extends Condition { super(nodeList); } + public ThenCondition(Condition condition){ + super(condition.getNodeList()); + super.setConditionType(condition.getConditionType()); + super.setGroupId(condition.getGroupId()); + super.setErrorResume(condition.isErrorResume()); + } + } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java index 214626b7c..5ad041096 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java @@ -26,4 +26,11 @@ public class WhenCondition extends Condition{ super.setErrorResume(errorResume); } + public WhenCondition(Condition condition) { + super(condition.getNodeList()); + super.setConditionType(condition.getConditionType()); + super.setGroupId(condition.getGroupId()); + super.setErrorResume(condition.isErrorResume()); + } + } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ConditionTypeEnum.java b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ConditionTypeEnum.java new file mode 100644 index 000000000..3cae6d104 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ConditionTypeEnum.java @@ -0,0 +1,30 @@ +package com.yomahub.liteflow.enums; + +public enum ConditionTypeEnum { + TYPE_THEN("then","then"), + TYPE_WHEN("when","when") + ; + private String type; + private String name; + + ConditionTypeEnum(String type, String name) { + this.type = type; + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java index e5eaeb605..4060a33b4 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java @@ -1,5 +1,11 @@ package com.yomahub.liteflow.parser; +import cn.hutool.core.collection.CollectionUtil; +import com.yomahub.liteflow.entity.flow.Condition; +import com.yomahub.liteflow.entity.flow.ThenCondition; +import com.yomahub.liteflow.entity.flow.WhenCondition; +import com.yomahub.liteflow.enums.ConditionTypeEnum; + import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; @@ -35,4 +41,23 @@ public abstract class FlowParser { return regexEntity; } + protected void buildBaseFlowConditions(List conditionList,Condition condition){ + if (condition.getConditionType().equals(ConditionTypeEnum.TYPE_THEN.getType())) { + if (conditionList.size() > 1 && + CollectionUtil.getLast(conditionList) instanceof ThenCondition) { + CollectionUtil.getLast(conditionList).getNodeList().addAll(condition.getNodeList()); + } else { + conditionList.add(new ThenCondition(condition)); + } + } else if (condition.getConditionType().equals(ConditionTypeEnum.TYPE_WHEN.getType())) { + if (conditionList.size() > 1 && + CollectionUtil.getLast(conditionList) instanceof WhenCondition && + CollectionUtil.getLast(conditionList).getGroup().equals(condition.getGroup())) { + CollectionUtil.getLast(conditionList).getNodeList().addAll(condition.getNodeList()); + } else { + conditionList.add(new WhenCondition(condition)); + } + } + } + } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java index 652f06100..ab95ac0df 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.Feature; +import com.yomahub.liteflow.common.LocalDefaultFlowConstant; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.flow.*; import com.yomahub.liteflow.exception.ExecutableItemNotFoundException; @@ -103,6 +104,9 @@ public abstract class JsonFlowParser extends FlowParser{ String[] condArray; List chainNodeList; List conditionList; + String group; + String errorResume; + Condition condition; String chainName = chainObject.getString("name"); JSONArray chainTopoArray = chainObject.getJSONArray("condition"); conditionList = new ArrayList<>(); @@ -110,9 +114,18 @@ public abstract class JsonFlowParser extends FlowParser{ JSONObject condObject = (JSONObject) iterator.next(); String condType = condObject.getString("type"); condArrayStr = condObject.getString("value"); + group = condObject.getString("group"); + errorResume = condObject.getString("errorResume"); if (StrUtil.isBlank(condType) || StrUtil.isBlank(condArrayStr)) { continue; } + if (StrUtil.isBlank(group)) { + group = LocalDefaultFlowConstant.DEFAULT; + } + if (StrUtil.isBlank(errorResume)) { + errorResume = Boolean.TRUE.toString(); + } + condition = new Condition(); chainNodeList = new ArrayList<>(); condArray = condArrayStr.split(","); RegexEntity regexEntity; @@ -147,14 +160,13 @@ public abstract class JsonFlowParser extends FlowParser{ throw new ExecutableItemNotFoundException(errorMsg); } } - if (condType.equals("then")) { - conditionList.add(new ThenCondition(chainNodeList)); - } else if (condType.equals("when")) { - conditionList.add(new WhenCondition(chainNodeList)); - } - FlowBus.addChain(chainName, new Chain(chainName,conditionList)); + condition.setErrorResume(errorResume.equals(Boolean.TRUE.toString())); + condition.setGroup(group); + condition.setConditionType(condType); + condition.setNodeList(chainNodeList); + super.buildBaseFlowConditions(conditionList,condition); } - + FlowBus.addChain(chainName, new Chain(chainName,conditionList)); } /** diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java index e35510875..7c8304367 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.PatternPool; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Lists; import com.yomahub.liteflow.common.LocalDefaultFlowConstant; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.flow.Chain; @@ -103,13 +104,15 @@ public abstract class XmlFlowParser extends FlowParser{ String[] condArray; String group; String errorResume; + Condition condition; + Element condE; List chainNodeList; List conditionList; String chainName = e.attributeValue("name"); conditionList = new ArrayList<>(); for (Iterator it = e.elementIterator(); it.hasNext();) { - Element condE = it.next(); + condE = it.next(); condArrayStr = condE.attributeValue("value"); errorResume = e.attributeValue("errorResume"); group = e.attributeValue("group"); @@ -122,6 +125,7 @@ public abstract class XmlFlowParser extends FlowParser{ if (StrUtil.isBlank(errorResume)) { errorResume = Boolean.TRUE.toString(); } + condition = new Condition(); chainNodeList = new ArrayList<>(); condArray = condArrayStr.split(","); RegexEntity regexEntity; @@ -155,24 +159,11 @@ public abstract class XmlFlowParser extends FlowParser{ throw new ExecutableItemNotFoundException(errorMsg); } } - - - if (condE.getName().equals("then")) { - if (conditionList.size() > 1 && - CollectionUtil.getLast(conditionList) instanceof ThenCondition ) { - CollectionUtil.getLast(conditionList).getNodeList().addAll(chainNodeList); - } else { - conditionList.add(new ThenCondition(chainNodeList)); - } - } else if (condE.getName().equals("when")) { - if (conditionList.size() > 1 && - CollectionUtil.getLast(conditionList) instanceof WhenCondition && - CollectionUtil.getLast(conditionList).getGroupId().equals(group)) { - CollectionUtil.getLast(conditionList).getNodeList().addAll(chainNodeList); - } else { - conditionList.add(new WhenCondition(chainNodeList, errorResume.equals(Boolean.TRUE.toString()))); - } - } + condition.setErrorResume(errorResume.equals(Boolean.TRUE.toString())); + condition.setGroup(group); + condition.setConditionType(condE.getName()); + condition.setNodeList(chainNodeList); + super.buildBaseFlowConditions(conditionList,condition); } FlowBus.addChain(chainName, new Chain(chainName,conditionList)); } From b04ee255a35ffe8dbd67c4c6578fdacfe340da37 Mon Sep 17 00:00:00 2001 From: "meng.li" <53835420> Date: Sun, 4 Apr 2021 19:35:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?JSON=20YML=20=E8=A7=A3=E6=9E=90=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=96=B0=20=20when=20condition=20=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=90=88=E5=B9=B6=20=E5=B9=B6=E4=BF=AE=E5=A4=8D=20JSO?= =?UTF-8?q?N=20=E8=A7=A3=E6=9E=90=E5=99=A8=20FLOWBUS=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=20chain=E7=9A=84=E4=BD=8D=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yomahub/liteflow/entity/flow/ThenCondition.java | 2 +- .../java/com/yomahub/liteflow/entity/flow/WhenCondition.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java index 600d965a5..2ccd3cfbf 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java @@ -22,7 +22,7 @@ public class ThenCondition extends Condition { public ThenCondition(Condition condition){ super(condition.getNodeList()); super.setConditionType(condition.getConditionType()); - super.setGroupId(condition.getGroupId()); + super.setGroup(condition.getGroup()); super.setErrorResume(condition.isErrorResume()); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java index 5ad041096..2ce2615b4 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java @@ -29,7 +29,7 @@ public class WhenCondition extends Condition{ public WhenCondition(Condition condition) { super(condition.getNodeList()); super.setConditionType(condition.getConditionType()); - super.setGroupId(condition.getGroupId()); + super.setGroup(condition.getGroup()); super.setErrorResume(condition.isErrorResume()); }