You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2018/10/29 19:32:15 UTC

[airavata] branch develop updated: Supporting serializable task params in task framework

This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/develop by this push:
     new 3cba34f  Supporting serializable task params in task framework
3cba34f is described below

commit 3cba34f343327ee611aa93f475d73591ddcedc7c
Author: Dimuthu Wannipurage <di...@datasprouts.com>
AuthorDate: Mon Oct 29 15:32:03 2018 -0400

    Supporting serializable task params in task framework
---
 .../java/org/apache/airavata/helix/core/AbstractTask.java   |  2 +-
 .../java/org/apache/airavata/helix/core/util/TaskUtil.java  | 13 +++++++++----
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/AbstractTask.java b/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/AbstractTask.java
index 70652a9..e9a6ed0 100644
--- a/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/AbstractTask.java
+++ b/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/AbstractTask.java
@@ -76,7 +76,7 @@ public abstract class AbstractTask extends UserContentStore implements Task {
         super.init(manager, workflowName, jobName, taskName);
         try {
             TaskUtil.deserializeTaskData(this, this.callbackContext.getTaskConfig().getConfigMap());
-        } catch (IllegalAccessException | InstantiationException e) {
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
diff --git a/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/util/TaskUtil.java b/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/util/TaskUtil.java
index 2a05061..539a75d 100644
--- a/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/util/TaskUtil.java
+++ b/modules/airavata-helix/task-core/src/main/java/org/apache/airavata/helix/core/util/TaskUtil.java
@@ -27,7 +27,9 @@ import org.apache.airavata.helix.task.api.annotation.TaskParam;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 
 /**
@@ -85,7 +87,7 @@ public class TaskUtil {
         return result;
     }
 
-    public static <T extends AbstractTask> void deserializeTaskData(T instance, Map<String, String> params) throws IllegalAccessException, InstantiationException {
+    public static <T extends AbstractTask> void deserializeTaskData(T instance, Map<String, String> params) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException {
 
         List<Field> allFields = new ArrayList<>();
         Class genericClass = instance.getClass();
@@ -114,9 +116,12 @@ public class TaskUtil {
                     } else if (classField.getType().isAssignableFrom(Boolean.class) ||
                             classField.getType().isAssignableFrom(Boolean.TYPE)) {
                         classField.set(instance, Boolean.parseBoolean(params.get(param.name())));
-                    } else if (classField.getType().isAssignableFrom(TaskParamType.class)) {
-                        // TODO Fix me
-                        //classField.set(instance, )
+                    } else if (TaskParamType.class.isAssignableFrom(classField.getType())) {
+                        Class<?> clazz = classField.getType();
+                        Constructor<?> ctor = clazz.getConstructor();
+                        Object obj = ctor.newInstance();
+                        ((TaskParamType)obj).deserialize(params.get(param.name()));
+                        classField.set(instance, obj);
                     }
                 }
             }