From 78a4d52a9471fa46d9ea9839c169c94569591df0 Mon Sep 17 00:00:00 2001 From: noear Date: Thu, 22 Dec 2022 14:12:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90=20liteflow?= =?UTF-8?q?-solon-plugin=20=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solon/NodeBreakComponentOfMethod.java | 46 +++++++++++++++++ .../liteflow/solon/NodeComponentOfMethod.java | 50 +++++++++++++++---- .../solon/NodeForComponentOfMethod.java | 46 +++++++++++++++++ .../solon/NodeIfComponentOfMethod.java | 46 +++++++++++++++++ .../solon/NodeSwitchComponentOfMethod.java | 46 +++++++++++++++++ .../solon/NodeWhileComponentOfMethod.java | 46 +++++++++++++++++ 6 files changed, 271 insertions(+), 9 deletions(-) create mode 100644 liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBreakComponentOfMethod.java create mode 100644 liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeForComponentOfMethod.java create mode 100644 liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeIfComponentOfMethod.java create mode 100644 liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeSwitchComponentOfMethod.java create mode 100644 liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeWhileComponentOfMethod.java diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBreakComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBreakComponentOfMethod.java new file mode 100644 index 000000000..4184b170a --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBreakComponentOfMethod.java @@ -0,0 +1,46 @@ +package com.yomahub.liteflow.solon; + +import com.yomahub.liteflow.core.NodeBreakComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.noear.solon.core.BeanWrap; + +import java.lang.reflect.Method; + +/** + * @author noear + * @since 1.11 + */ +public class NodeBreakComponentOfMethod extends NodeBreakComponent { + final BeanWrap beanWrap; + final Method method; + final LiteFlowMethodEnum methodEnum; + + public NodeBreakComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { + this.beanWrap = beanWrap; + this.method = method; + this.methodEnum = methodEnum; + + if (method.getParameterCount() > 1) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeBreakComponent method parameter cannot be more than one: " + methodFullName); + } + + if (method.getReturnType() != Boolean.class) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeBreakComponent method returnType can only be boolean: " + methodFullName); + } + } + + private Object exec() throws Exception { + if (method.getParameterCount() == 0) { + return method.invoke(beanWrap.get()); + } else { + return method.invoke(beanWrap.get(), this); + } + } + + @Override + public boolean processBreak() throws Exception { + return (boolean) exec(); + } +} diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeComponentOfMethod.java index 74bc2f1df..c7fb48a02 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeComponentOfMethod.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeComponentOfMethod.java @@ -20,6 +20,24 @@ public class NodeComponentOfMethod extends NodeComponent { this.beanWrap = beanWrap; this.method = method; this.methodEnum = methodEnum; + + if (method.getParameterCount() > 1) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeComponent method parameter cannot be more than one: " + methodFullName); + } + + if (method.getReturnType() != Void.class) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeComponent method returnType can only be void: " + methodFullName); + } + } + + private void exec() throws Exception { + if (method.getParameterCount() == 0) { + method.invoke(beanWrap.get()); + } else { + method.invoke(beanWrap.get(), this); + } } @Override @@ -28,14 +46,7 @@ public class NodeComponentOfMethod extends NodeComponent { return; } - if (method.getParameterCount() == 0) { - method.invoke(beanWrap.get()); - } else if (method.getParameterCount() == 1) { - method.invoke(beanWrap.get(), this); - } else { - String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); - throw new RuntimeException("NodeComponent method parameter cannot be more than one: " + methodFullName); - } + exec(); } @@ -44,13 +55,29 @@ public class NodeComponentOfMethod extends NodeComponent { if(methodEnum != LiteFlowMethodEnum.BEFORE_PROCESS){ return; } + + try { + exec(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } } @Override public void afterProcess(String nodeId, Slot slot) { - if(methodEnum != LiteFlowMethodEnum.AFTER_PROCESS){ + if (methodEnum != LiteFlowMethodEnum.AFTER_PROCESS) { return; } + + try { + exec(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } } @@ -59,6 +86,9 @@ public class NodeComponentOfMethod extends NodeComponent { if(methodEnum != LiteFlowMethodEnum.ON_ERROR){ return; } + + + exec(); } @Override @@ -66,5 +96,7 @@ public class NodeComponentOfMethod extends NodeComponent { if(methodEnum != LiteFlowMethodEnum.ON_SUCCESS){ return; } + + exec(); } } diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeForComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeForComponentOfMethod.java new file mode 100644 index 000000000..fbdb2c8f6 --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeForComponentOfMethod.java @@ -0,0 +1,46 @@ +package com.yomahub.liteflow.solon; + +import com.yomahub.liteflow.core.NodeForComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.noear.solon.core.BeanWrap; + +import java.lang.reflect.Method; + +/** + * @author noear + * @since 1.11 + */ +public class NodeForComponentOfMethod extends NodeForComponent { + final BeanWrap beanWrap; + final Method method; + final LiteFlowMethodEnum methodEnum; + + public NodeForComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { + this.beanWrap = beanWrap; + this.method = method; + this.methodEnum = methodEnum; + + if (method.getParameterCount() > 1) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeForComponent method parameter cannot be more than one: " + methodFullName); + } + + if (method.getReturnType() != Integer.class) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeForComponent method returnType can only be int: " + methodFullName); + } + } + + private Object exec() throws Exception { + if (method.getParameterCount() == 0) { + return method.invoke(beanWrap.get()); + } else { + return method.invoke(beanWrap.get(), this); + } + } + + @Override + public int processFor() throws Exception { + return (int)exec(); + } +} diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeIfComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeIfComponentOfMethod.java new file mode 100644 index 000000000..d7158d8be --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeIfComponentOfMethod.java @@ -0,0 +1,46 @@ +package com.yomahub.liteflow.solon; + +import com.yomahub.liteflow.core.NodeIfComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.noear.solon.core.BeanWrap; + +import java.lang.reflect.Method; + +/** + * @author noear + * @since 1.11 + */ +public class NodeIfComponentOfMethod extends NodeIfComponent { + final BeanWrap beanWrap; + final Method method; + final LiteFlowMethodEnum methodEnum; + + public NodeIfComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { + this.beanWrap = beanWrap; + this.method = method; + this.methodEnum = methodEnum; + + if (method.getParameterCount() > 1) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeIfComponent method parameter cannot be more than one: " + methodFullName); + } + + if (method.getReturnType() != Boolean.class) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeIfComponent method returnType can only be boolean: " + methodFullName); + } + } + + private Object exec() throws Exception { + if (method.getParameterCount() == 0) { + return method.invoke(beanWrap.get()); + } else { + return method.invoke(beanWrap.get(), this); + } + } + + @Override + public boolean processIf() throws Exception { + return (boolean) exec(); + } +} diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeSwitchComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeSwitchComponentOfMethod.java new file mode 100644 index 000000000..be66f92d6 --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeSwitchComponentOfMethod.java @@ -0,0 +1,46 @@ +package com.yomahub.liteflow.solon; + +import com.yomahub.liteflow.core.NodeSwitchComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.noear.solon.core.BeanWrap; + +import java.lang.reflect.Method; + +/** + * @author noear + * @since 1.11 + */ +public class NodeSwitchComponentOfMethod extends NodeSwitchComponent { + final BeanWrap beanWrap; + final Method method; + final LiteFlowMethodEnum methodEnum; + + public NodeSwitchComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { + this.beanWrap = beanWrap; + this.method = method; + this.methodEnum = methodEnum; + + if (method.getParameterCount() > 1) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeSwitchComponent method parameter cannot be more than one: " + methodFullName); + } + + if (method.getReturnType() != String.class) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeSwitchComponent method returnType can only be string: " + methodFullName); + } + } + + private Object exec() throws Exception { + if (method.getParameterCount() == 0) { + return method.invoke(beanWrap.get()); + } else { + return method.invoke(beanWrap.get(), this); + } + } + + @Override + public String processSwitch() throws Exception { + return (String) exec(); + } +} diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeWhileComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeWhileComponentOfMethod.java new file mode 100644 index 000000000..967fa7bb3 --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeWhileComponentOfMethod.java @@ -0,0 +1,46 @@ +package com.yomahub.liteflow.solon; + +import com.yomahub.liteflow.core.NodeWhileComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.noear.solon.core.BeanWrap; + +import java.lang.reflect.Method; + +/** + * @author noear + * @since 1.11 + */ +public class NodeWhileComponentOfMethod extends NodeWhileComponent { + final BeanWrap beanWrap; + final Method method; + final LiteFlowMethodEnum methodEnum; + + public NodeWhileComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { + this.beanWrap = beanWrap; + this.method = method; + this.methodEnum = methodEnum; + + if (method.getParameterCount() > 1) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeWhileComponent method parameter cannot be more than one: " + methodFullName); + } + + if (method.getReturnType() != Boolean.class) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeWhileComponent method returnType can only be boolean: " + methodFullName); + } + } + + private Object exec() throws Exception { + if (method.getParameterCount() == 0) { + return method.invoke(beanWrap.get()); + } else { + return method.invoke(beanWrap.get(), this); + } + } + + @Override + public boolean processWhile() throws Exception { + return (boolean) exec(); + } +}