ソースを参照

完善 solon 适配的 LiteflowMethod 处理

noear 9 ヶ月 前
コミット
17697fcc12

+ 3 - 3
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;

+ 3 - 3
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;

+ 3 - 3
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;

+ 49 - 0
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();
+    }
+}

+ 3 - 3
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;

+ 3 - 0
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());
 			}