diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBooleanComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBooleanComponentOfMethod.java index 46f16025b..1b6103c57 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBooleanComponentOfMethod.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeBooleanComponentOfMethod.java @@ -13,11 +13,11 @@ import java.lang.reflect.Method; */ public class NodeBooleanComponentOfMethod extends NodeBooleanComponent { - final BeanWrap beanWrap; + private final BeanWrap beanWrap; - final Method method; + private final Method method; - final LiteFlowMethodEnum methodEnum; + private final LiteFlowMethodEnum methodEnum; public NodeBooleanComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { this.beanWrap = beanWrap; 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 6305f8822..782fc90af 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 @@ -14,11 +14,11 @@ import java.lang.reflect.Method; */ public class NodeComponentOfMethod extends NodeComponent { - final BeanWrap beanWrap; + private final BeanWrap beanWrap; - final Method method; + private final Method method; - final LiteFlowMethodEnum methodEnum; + private final LiteFlowMethodEnum methodEnum; public NodeComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { this.beanWrap = beanWrap; 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 index 51883f046..1992e7e91 100644 --- 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 @@ -13,11 +13,11 @@ import java.lang.reflect.Method; */ public class NodeForComponentOfMethod extends NodeForComponent { - final BeanWrap beanWrap; + private final BeanWrap beanWrap; - final Method method; + private final Method method; - final LiteFlowMethodEnum methodEnum; + private final LiteFlowMethodEnum methodEnum; public NodeForComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { this.beanWrap = beanWrap; diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeIteratorComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeIteratorComponentOfMethod.java new file mode 100644 index 000000000..22a38c3c7 --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeIteratorComponentOfMethod.java @@ -0,0 +1,49 @@ +package com.yomahub.liteflow.solon; + +import com.yomahub.liteflow.core.NodeIteratorComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import com.yomahub.liteflow.exception.LiteFlowException; +import org.noear.solon.core.BeanWrap; + +import java.lang.reflect.Method; +import java.util.Iterator; + +/** + * @author noear + */ +public class NodeIteratorComponentOfMethod extends NodeIteratorComponent { + private final BeanWrap beanWrap; + + private final Method method; + + private final LiteFlowMethodEnum methodEnum; + + public NodeIteratorComponentOfMethod(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 LiteFlowException("NodeIfComponent method parameter cannot be more than one: " + methodFullName); + } + + if (method.getReturnType() != Iterator.class) { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new LiteFlowException("NodeIfComponent method returnType can only be iterator: " + methodFullName); + } + } + + private Object exec() throws Exception { + if (method.getParameterCount() == 0) { + return method.invoke(beanWrap.get()); + } else { + return method.invoke(beanWrap.get(), this); + } + } + + @Override + public Iterator processIterator() throws Exception { + return (Iterator) 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 index a39825f43..674ff6788 100644 --- 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 @@ -13,11 +13,11 @@ import java.lang.reflect.Method; */ public class NodeSwitchComponentOfMethod extends NodeSwitchComponent { - final BeanWrap beanWrap; + private final BeanWrap beanWrap; - final Method method; + private final Method method; - final LiteFlowMethodEnum methodEnum; + private final LiteFlowMethodEnum methodEnum; public NodeSwitchComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { this.beanWrap = beanWrap; diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java index 9a3211110..87be1682b 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java @@ -64,6 +64,9 @@ public class XPluginImpl implements Plugin { case PROCESS_FOR: node1 = new NodeForComponentOfMethod(bw, method, anno.value()); break; + case PROCESS_ITERATOR: + node1 = new NodeIteratorComponentOfMethod(bw, method, anno.value()); + break; default: node1 = new NodeComponentOfMethod(bw, method, anno.value()); }