You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2015/06/02 04:07:13 UTC

[2/4] airavata git commit: some improvements to experiment-catalog

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
index 6e6d2ee..4619c33 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
@@ -40,12 +40,26 @@ import java.util.List;
 public class JobDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(JobDetailResource.class);
     private String jobId;
-    private TaskDetailResource taskDetailResource;
+    private String taskId;
     private String jobDescription;
     private Timestamp creationTime;
     private String computeResourceConsumed;
     private String jobName;
     private String workingDir;
+    private StatusResource jobStatus;
+    private List<ErrorDetailResource> errors;
+
+    public void setJobStatus(StatusResource jobStatus) {
+        this.jobStatus = jobStatus;
+    }
+
+    public List<ErrorDetailResource> getErrors() {
+        return errors;
+    }
+
+    public void setErrors(List<ErrorDetailResource> errors) {
+        this.errors = errors;
+    }
 
     public String getJobName() {
         return jobName;
@@ -71,12 +85,12 @@ public class JobDetailResource extends AbstractResource {
         this.jobId = jobId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public String getJobDescription() {
@@ -273,16 +287,14 @@ public class JobDetailResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            JobDetail existingJobDetail = em.find(JobDetail.class, new JobDetails_PK(jobId, taskDetailResource.getTaskId()));
+            JobDetail existingJobDetail = em.find(JobDetail.class, new JobDetails_PK(jobId, taskId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             JobDetail jobDetail = new JobDetail();
-            TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
             jobDetail.setJobId(jobId);
-            jobDetail.setTask(taskDetail);
-            jobDetail.setTaskId(taskDetailResource.getTaskId());
+            jobDetail.setTaskId(taskId);
             jobDetail.setCreationTime(creationTime);
             jobDetail.setJobName(jobName);
             jobDetail.setWorkingDir(workingDir);
@@ -292,8 +304,7 @@ public class JobDetailResource extends AbstractResource {
             jobDetail.setComputeResourceConsumed(computeResourceConsumed);
             if (existingJobDetail != null) {
                 existingJobDetail.setJobId(jobId);
-                existingJobDetail.setTask(taskDetail);
-                existingJobDetail.setTaskId(taskDetailResource.getTaskId());
+                existingJobDetail.setTaskId(taskId);
                 existingJobDetail.setCreationTime(creationTime);
                 if (jobDescription != null) {
                     existingJobDetail.setJobDescription(jobDescription.toCharArray());
@@ -320,7 +331,11 @@ public class JobDetailResource extends AbstractResource {
         }
     }
 
-    public StatusResource getJobStatus() throws RegistryException{
+    public StatusResource getJobStatus() {
+        return jobStatus;
+    }
+
+    public StatusResource getJobStatus1() throws RegistryException{
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource jobStatus = (StatusResource) resource;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
index 4efb8a4..4e38472 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
 public class NodeInputResource extends AbstractResource {
 	private static final Logger logger = LoggerFactory.getLogger(NodeInputResource.class);
 
-    private WorkflowNodeDetailResource nodeDetailResource;
+    private String nodeId;
     private String inputKey;
     private String dataType;
     private String metadata;
@@ -99,12 +99,12 @@ public class NodeInputResource extends AbstractResource {
         this.userFriendlyDesc = userFriendlyDesc;
     }
 
-    public WorkflowNodeDetailResource getNodeDetailResource() {
-        return nodeDetailResource;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setNodeDetailResource(WorkflowNodeDetailResource nodeDetailResource) {
-        this.nodeDetailResource = nodeDetailResource;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
     public String getInputKey() {
@@ -175,15 +175,13 @@ public class NodeInputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            NodeInput existingInput = em.find(NodeInput.class, new NodeInput_PK(inputKey, nodeDetailResource.getNodeInstanceId()));
+            NodeInput existingInput = em.find(NodeInput.class, new NodeInput_PK(inputKey, nodeId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             NodeInput nodeInput = new NodeInput();
-            WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, nodeDetailResource.getNodeInstanceId());
-            nodeInput.setNodeDetails(nodeDetail);
-            nodeInput.setNodeId(nodeDetail.getNodeId());
+            nodeInput.setNodeId(nodeId);
             nodeInput.setInputKey(inputKey);
             nodeInput.setDataType(dataType);
             nodeInput.setValue(value);
@@ -197,8 +195,7 @@ public class NodeInputResource extends AbstractResource {
             nodeInput.setDataStaged(dataStaged);
 
             if (existingInput != null){
-                existingInput.setNodeDetails(nodeDetail);
-                existingInput.setNodeId(nodeDetail.getNodeId());
+                existingInput.setNodeId(nodeId);
                 existingInput.setInputKey(inputKey);
                 existingInput.setDataType(dataType);
                 existingInput.setValue(value);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
index ceb323b..24459b0 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
 public class NodeOutputResource extends AbstractResource {
 	private static final Logger logger = LoggerFactory.getLogger(NodeOutputResource.class);
 	
-    private WorkflowNodeDetailResource nodeDetailResource;
+    private String nodeId;
     private String outputKey;
     private String dataType;
     private String value;
@@ -98,12 +98,12 @@ public class NodeOutputResource extends AbstractResource {
         this.dataNameLocation = dataNameLocation;
     }
 
-    public WorkflowNodeDetailResource getNodeDetailResource() {
-        return nodeDetailResource;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setNodeDetailResource(WorkflowNodeDetailResource nodeDetailResource) {
-        this.nodeDetailResource = nodeDetailResource;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
     public String getOutputKey() {
@@ -159,15 +159,13 @@ public class NodeOutputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            NodeOutput existingOutput = em.find(NodeOutput.class, new NodeOutput_PK(outputKey, nodeDetailResource.getNodeInstanceId()));
+            NodeOutput existingOutput = em.find(NodeOutput.class, new NodeOutput_PK(outputKey, nodeId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             NodeOutput nodeOutput = new NodeOutput();
-            WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, nodeDetailResource.getNodeInstanceId());
-            nodeOutput.setNode(nodeDetail);
-            nodeOutput.setNodeId(nodeDetail.getNodeId());
+            nodeOutput.setNodeId(nodeId);
             nodeOutput.setOutputKey(outputKey);
             nodeOutput.setDataType(dataType);
             nodeOutput.setValue(value);
@@ -179,8 +177,7 @@ public class NodeOutputResource extends AbstractResource {
             nodeOutput.setSearchQuery(searchQuery);
 
             if (existingOutput != null) {
-                existingOutput.setNode(nodeDetail);
-                existingOutput.setNodeId(nodeDetail.getNodeId());
+                existingOutput.setNodeId(nodeId);
                 existingOutput.setOutputKey(outputKey);
                 existingOutput.setDataType(dataType);
                 existingOutput.setValue(value);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
index 5ac864f..fc29b13 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
@@ -36,8 +36,8 @@ public class NotificationEmailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(NotificationEmailResource.class);
 
     private int emailId = 0;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
+    private String experimentId;
+    private String taskId;
     private String emailAddress;
 
 
@@ -49,20 +49,20 @@ public class NotificationEmailResource extends AbstractResource {
         this.emailAddress = emailAddress;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public Resource create(ResourceType type) throws RegistryException {
@@ -97,14 +97,8 @@ public class NotificationEmailResource extends AbstractResource {
             }else {
                 notification_email = new Notification_Email();
             }
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            notification_email.setExperiment(experiment);
-            notification_email.setExperiment_id(experiment.getExpId());
-            if (taskDetailResource != null){
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                notification_email.setTaskDetail(taskDetail);
-                notification_email.setTaskId(taskDetail.getTaskId());
-            }
+            notification_email.setExperiment_id(experimentId);
+            notification_email.setTaskId(taskId);
             notification_email.setEmailAddress(emailAddress);
             em.persist(notification_email);
             emailId = notification_email.getEmailId();

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
index 4dc4160..4d73de2 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
@@ -41,7 +41,7 @@ public class ProjectResource extends AbstractResource {
     private final static Logger logger = LoggerFactory.getLogger(ProjectResource.class);
     private String name;
     private String id;
-    private GatewayResource gateway;
+    private String gatewayId;
     private WorkerResource worker;
     private String description;
     private Timestamp creationTime;
@@ -54,27 +54,15 @@ public class ProjectResource extends AbstractResource {
 
     /**
      *
-     * @param worker gateway worker
-     * @param gateway gateway
-     * @param projectId project name
-     */
-    public ProjectResource(WorkerResource worker, GatewayResource gateway, String projectId) {
-        this.setWorker(worker);
-        this.setGateway(gateway);
-        this.id = projectId;
-    }
-
-    /**
-     *
      * @param type child resource type
      * @return child resource
      */
     public Resource create(ResourceType type) throws RegistryException {
         if (type == ResourceType.EXPERIMENT) {
             ExperimentResource experimentResource = new ExperimentResource();
-            experimentResource.setGateway(getGateway());
+            experimentResource.setGatewayId(gatewayId);
             experimentResource.setExecutionUser(worker.getUser());
-            experimentResource.setProject(this);
+            experimentResource.setProjectId(id);
             return experimentResource;
         } else if (type == ResourceType.PROJECT_USER){
             ProjectUserResource pr = new ProjectUserResource();
@@ -348,9 +336,7 @@ public class ProjectResource extends AbstractResource {
             Project project = new Project();
             project.setProject_id(id);
             project.setProject_name(name);
-            Gateway modelGateway = em.find(Gateway.class, gateway.getGatewayId());
-            project.setGateway(modelGateway);
-            project.setGateway_id(modelGateway.getGateway_id());
+            project.setGateway_id(gatewayId);
             Users user = em.find(Users.class, worker.getUser());
             project.setUsers(user);
             project.setUser_name(user.getUser_name());
@@ -359,8 +345,7 @@ public class ProjectResource extends AbstractResource {
 
             if (existingProject != null) {
                 existingProject.setProject_name(name);
-                existingProject.setGateway(modelGateway);
-                existingProject.setGateway_id(modelGateway.getGateway_id());
+                existingProject.setGateway_id(gatewayId);
                 existingProject.setUsers(user);
                 existingProject.setUser_name(user.getUser_name());
                 existingProject.setDescription(description);
@@ -425,21 +410,13 @@ public class ProjectResource extends AbstractResource {
 		this.worker = worker;
 	}
 
-    /**
-     *
-     * @return gateway resource
-     */
-    public GatewayResource getGateway() {
-		return gateway;
-	}
+    public String getGatewayId() {
+        return gatewayId;
+    }
 
-    /**
-     *
-     * @param gateway gateway resource
-     */
-    public void setGateway(GatewayResource gateway) {
-		this.gateway = gateway;
-	}
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
 
     public String getDescription() {
         return description;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
index 6f906cd..f9a8b33 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
@@ -37,8 +37,8 @@ import java.util.List;
 public class QosParamResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(QosParamResource.class);
     private int  qosId;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
+    private String experimentId;
+    private String taskId;
     private String startExecutionAt;
     private String executeBefore;
     private int noOfRetries;
@@ -51,20 +51,20 @@ public class QosParamResource extends AbstractResource {
         this.qosId = qosId;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public String getStartExecutionAt() {
@@ -122,14 +122,8 @@ public class QosParamResource extends AbstractResource {
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             QosParam qosParam = new QosParam();
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            if (taskDetailResource != null) {
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                qosParam.setTaskId(taskDetailResource.getTaskId());
-                qosParam.setTask(taskDetail);
-            }
-            qosParam.setExpId(experimentResource.getExpID());
-            qosParam.setExperiment(experiment);
+            qosParam.setTaskId(taskId);
+            qosParam.setExpId(experimentId);
             qosParam.setStartExecutionAt(startExecutionAt);
             qosParam.setExecuteBefore(executeBefore);
             qosParam.setNoOfRetries(noOfRetries);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
index 169e1c7..cecf925 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
@@ -36,10 +36,10 @@ import java.util.List;
 public class StatusResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(StatusResource.class);
     private int statusId = 0;
-    private ExperimentResource experimentResource;
-    private WorkflowNodeDetailResource workflowNodeDetail;
-    private DataTransferDetailResource dataTransferDetail;
-    private TaskDetailResource taskDetailResource;
+    private String experimentId;
+    private String nodeId;
+    private String transferId;
+    private String taskId;
     private String jobId;
     private String state;
     private Timestamp statusUpdateTime;
@@ -53,36 +53,36 @@ public class StatusResource extends AbstractResource {
         this.statusId = statusId;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public WorkflowNodeDetailResource getWorkflowNodeDetail() {
-        return workflowNodeDetail;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setWorkflowNodeDetail(WorkflowNodeDetailResource workflowNodeDetail) {
-        this.workflowNodeDetail = workflowNodeDetail;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
-    public DataTransferDetailResource getDataTransferDetail() {
-        return dataTransferDetail;
+    public String getTransferId() {
+        return transferId;
     }
 
-    public void setDataTransferDetail(DataTransferDetailResource dataTransferDetail) {
-        this.dataTransferDetail = dataTransferDetail;
+    public void setTransferId(String transferId) {
+        this.transferId = transferId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public String getJobId() {
@@ -154,25 +154,11 @@ public class StatusResource extends AbstractResource {
             } else {
                 status = new Status();
             }
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            if (taskDetailResource != null) {
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                status.setTask(taskDetail);
-                status.setTaskId(taskDetailResource.getTaskId());
-            }
-            if (workflowNodeDetail != null) {
-                WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, workflowNodeDetail.getNodeInstanceId());
-                status.setNode(nodeDetail);
-                status.setNodeId(workflowNodeDetail.getNodeInstanceId());
-            }
-            if (dataTransferDetail != null) {
-                DataTransferDetail transferDetail = em.find(DataTransferDetail.class, dataTransferDetail.getTransferId());
-                status.setTransferDetail(transferDetail);
-                status.setTransferId(dataTransferDetail.getTransferId());
-            }
-            status.setExperiment(experiment);
+            status.setExpId(experimentId);
+            status.setTaskId(taskId);
+            status.setNodeId(nodeId);
+            status.setTransferId(transferId);
             status.setJobId(jobId);
-            status.setExpId(experimentResource.getExpID());
             status.setState(state);
             status.setStatusUpdateTime(statusUpdateTime);
             status.setStatusType(statusType);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
index 791c9f9..995704e 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
@@ -40,12 +40,90 @@ import java.util.List;
 public class TaskDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(TaskDetailResource.class);
     private String taskId;
-    private WorkflowNodeDetailResource workflowNodeDetailResource;
+    private String nodeId;
     private Timestamp creationTime;
     private String applicationId;
     private String applicationVersion;
     private String applicationDeploymentId;
     private boolean enableEmailNotifications;
+    private List<ApplicationInputResource> applicationInputs;
+    private List<ApplicationOutputResource> applicationOutputs;
+    private ComputationSchedulingResource schedulingResource;
+    private AdvanceInputDataHandlingResource inputDataHandlingResource;
+    private AdvancedOutputDataHandlingResource outputDataHandlingResource;
+    private StatusResource taskStatus;
+    private List<JobDetailResource> jobDetailResources;
+    private List<DataTransferDetailResource> transferDetailResourceList;
+    private List<NotificationEmailResource> emailResourceList;
+    private List<ErrorDetailResource> errors;
+
+    public List<JobDetailResource> getJobDetailResources() {
+        return jobDetailResources;
+    }
+
+    public void setJobDetailResources(List<JobDetailResource> jobDetailResources) {
+        this.jobDetailResources = jobDetailResources;
+    }
+
+    public void setApplicationInputs(List<ApplicationInputResource> applicationInputs) {
+        this.applicationInputs = applicationInputs;
+    }
+
+    public void setApplicationOutputs(List<ApplicationOutputResource> applicationOutputs) {
+        this.applicationOutputs = applicationOutputs;
+    }
+
+    public ComputationSchedulingResource getSchedulingResource() {
+        return schedulingResource;
+    }
+
+    public void setSchedulingResource(ComputationSchedulingResource schedulingResource) {
+        this.schedulingResource = schedulingResource;
+    }
+
+    public AdvanceInputDataHandlingResource getInputDataHandlingResource() {
+        return inputDataHandlingResource;
+    }
+
+    public void setInputDataHandlingResource(AdvanceInputDataHandlingResource inputDataHandlingResource) {
+        this.inputDataHandlingResource = inputDataHandlingResource;
+    }
+
+    public AdvancedOutputDataHandlingResource getOutputDataHandlingResource() {
+        return outputDataHandlingResource;
+    }
+
+    public void setOutputDataHandlingResource(AdvancedOutputDataHandlingResource outputDataHandlingResource) {
+        this.outputDataHandlingResource = outputDataHandlingResource;
+    }
+
+    public void setTaskStatus(StatusResource taskStatus) {
+        this.taskStatus = taskStatus;
+    }
+
+    public List<DataTransferDetailResource> getTransferDetailResourceList() {
+        return transferDetailResourceList;
+    }
+
+    public void setTransferDetailResourceList(List<DataTransferDetailResource> transferDetailResourceList) {
+        this.transferDetailResourceList = transferDetailResourceList;
+    }
+
+    public List<NotificationEmailResource> getEmailResourceList() {
+        return emailResourceList;
+    }
+
+    public void setEmailResourceList(List<NotificationEmailResource> emailResourceList) {
+        this.emailResourceList = emailResourceList;
+    }
+
+    public List<ErrorDetailResource> getErrors() {
+        return errors;
+    }
+
+    public void setErrors(List<ErrorDetailResource> errors) {
+        this.errors = errors;
+    }
 
     public boolean isEnableEmailNotifications() {
         return enableEmailNotifications;
@@ -63,12 +141,12 @@ public class TaskDetailResource extends AbstractResource {
         this.taskId = taskId;
     }
 
-    public WorkflowNodeDetailResource getWorkflowNodeDetailResource() {
-        return workflowNodeDetailResource;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setWorkflowNodeDetailResource(WorkflowNodeDetailResource workflowNodeDetailResource) {
-        this.workflowNodeDetailResource = workflowNodeDetailResource;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
     public Timestamp getCreationTime() {
@@ -100,47 +178,47 @@ public class TaskDetailResource extends AbstractResource {
        switch (type){
            case ERROR_DETAIL:
                ErrorDetailResource errorDetailResource = new ErrorDetailResource();
-               errorDetailResource.setTaskDetailResource(this);
+               errorDetailResource.setTaskId(taskId);
                return errorDetailResource;
            case NOTIFICATION_EMAIL:
                NotificationEmailResource emailResource = new NotificationEmailResource();
-               emailResource.setTaskDetailResource(this);
+               emailResource.setTaskId(taskId);
                return emailResource;
            case APPLICATION_INPUT:
                ApplicationInputResource applicationInputResource = new ApplicationInputResource();
-               applicationInputResource.setTaskDetailResource(this);
+               applicationInputResource.setTaskId(taskId);
                return applicationInputResource;
            case APPLICATION_OUTPUT:
                ApplicationOutputResource applicationOutputResource = new ApplicationOutputResource();
-               applicationOutputResource.setTaskDetailResource(this);
+               applicationOutputResource.setTaskId(taskId);
                return applicationOutputResource;
            case JOB_DETAIL:
                JobDetailResource jobDetailResource = new JobDetailResource();
-               jobDetailResource.setTaskDetailResource(this);
+               jobDetailResource.setTaskId(taskId);
                return jobDetailResource;
            case DATA_TRANSFER_DETAIL:
                DataTransferDetailResource dataTransferDetailResource = new DataTransferDetailResource();
-               dataTransferDetailResource.setTaskDetailResource(this);
+               dataTransferDetailResource.setTaskId(taskId);
                return dataTransferDetailResource;
            case STATUS:
                StatusResource statusResource = new StatusResource();
-               statusResource.setTaskDetailResource(this);
+               statusResource.setTaskId(taskId);
                return statusResource;
            case COMPUTATIONAL_RESOURCE_SCHEDULING:
                ComputationSchedulingResource schedulingResource = new ComputationSchedulingResource();
-               schedulingResource.setTaskDetailResource(this);
+               schedulingResource.setTaskId(taskId);
                return schedulingResource;
            case ADVANCE_INPUT_DATA_HANDLING:
                AdvanceInputDataHandlingResource inputDataHandlingResource = new AdvanceInputDataHandlingResource();
-               inputDataHandlingResource.setTaskDetailResource(this);
+               inputDataHandlingResource.setTaskId(taskId);
                return inputDataHandlingResource;
            case ADVANCE_OUTPUT_DATA_HANDLING:
                AdvancedOutputDataHandlingResource outputDataHandlingResource = new AdvancedOutputDataHandlingResource();
-               outputDataHandlingResource.setTaskDetailResource(this);
+               outputDataHandlingResource.setTaskId(taskId);
                return outputDataHandlingResource;
            case QOS_PARAM:
                QosParamResource qosParamResource = new QosParamResource();
-               qosParamResource.setTaskDetailResource(this);
+               qosParamResource.setTaskId(taskId);
                return qosParamResource;
            default:
                logger.error("Unsupported resource type for task detail resource.", new IllegalArgumentException());
@@ -513,13 +591,12 @@ public class TaskDetailResource extends AbstractResource {
             em.close();
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
-            WorkflowNodeDetail workflowNodeDetail = em.find(WorkflowNodeDetail.class, workflowNodeDetailResource.getNodeInstanceId());
             if (taskDetail != null) {
-            	updateTaskDetail(taskDetail, workflowNodeDetail);
+            	updateTaskDetail(taskDetail, nodeId);
                 em.merge(taskDetail);
             } else {
                 taskDetail = new TaskDetail();
-                updateTaskDetail(taskDetail, workflowNodeDetail);                
+                updateTaskDetail(taskDetail, nodeId);
                 em.persist(taskDetail);
             }
             em.getTransaction().commit();
@@ -536,11 +613,9 @@ public class TaskDetailResource extends AbstractResource {
         }
     }
 
-	private void updateTaskDetail(TaskDetail taskDetail,
-			WorkflowNodeDetail workflowNodeDetail) {
+	private void updateTaskDetail(TaskDetail taskDetail, String nodeId) {
 		taskDetail.setTaskId(taskId);
-		taskDetail.setNodeDetail(workflowNodeDetail);
-		taskDetail.setNodeId(workflowNodeDetailResource.getNodeInstanceId());
+		taskDetail.setNodeId(nodeId);
 		taskDetail.setCreationTime(creationTime);
 		taskDetail.setAppId(applicationId);
 		taskDetail.setAppVersion(applicationVersion);
@@ -548,7 +623,15 @@ public class TaskDetailResource extends AbstractResource {
 		taskDetail.setApplicationDeploymentId(getApplicationDeploymentId());
 	}
 
-    public List<ApplicationInputResource> getApplicationInputs() throws RegistryException{
+    public List<ApplicationInputResource> getApplicationInputs() {
+        return applicationInputs;
+    }
+
+    public List<ApplicationOutputResource> getApplicationOutputs() {
+        return applicationOutputs;
+    }
+
+    public List<ApplicationInputResource> getApplicationInputs1() throws RegistryException{
         List<ApplicationInputResource> applicationInputResources = new ArrayList<ApplicationInputResource>();
         List<Resource> resources = get(ResourceType.APPLICATION_INPUT);
         for (Resource resource : resources) {
@@ -558,7 +641,7 @@ public class TaskDetailResource extends AbstractResource {
         return applicationInputResources;
     }
 
-    public List<ApplicationOutputResource> getApplicationOutputs() throws RegistryException{
+    public List<ApplicationOutputResource> getApplicationOutputs1() throws RegistryException{
         List<ApplicationOutputResource> outputResources = new ArrayList<ApplicationOutputResource>();
         List<Resource> resources = get(ResourceType.APPLICATION_OUTPUT);
         for (Resource resource : resources) {
@@ -568,7 +651,11 @@ public class TaskDetailResource extends AbstractResource {
         return outputResources;
     }
 
-    public StatusResource getTaskStatus() throws RegistryException{
+    public StatusResource getTaskStatus() {
+        return taskStatus;
+    }
+
+    public StatusResource getTaskStatus1() throws RegistryException{
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource taskStatus = (StatusResource) resource;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
index 24b4049..ae42089 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
@@ -31,6 +31,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -380,8 +382,7 @@ public class Utils {
         if (o != null){
             projectResource.setId(o.getProject_id());
             projectResource.setName(o.getProject_name());
-            GatewayResource gatewayResource = (GatewayResource)createGateway(o.getGateway());
-            projectResource.setGateway(gatewayResource);
+            projectResource.setGatewayId(o.getGateway_id());
             Gateway_Worker gateway_worker = new Gateway_Worker();
             gateway_worker.setGateway(o.getGateway());
             gateway_worker.setUser(o.getUsers());
@@ -428,11 +429,10 @@ public class Utils {
      */
     private static Resource createGatewayWorker(Gateway_Worker o) {
         if (o != null){
-            GatewayResource gatewayResource = new GatewayResource(o.getGateway().getGateway_id());
-            gatewayResource.setDomain(o.getGateway().getGateway_name());
-            gatewayResource.setDomain(o.getGateway().getDomain());
-            gatewayResource.setEmailAddress(o.getGateway().getEmailAddress());
-            return new WorkerResource(o.getUser_name(), gatewayResource);
+            WorkerResource workerResource = new WorkerResource();
+            workerResource.setGatewayId(o.getGateway_id());
+            workerResource.setUser(o.getUser_name());
+            return workerResource;
         }
         return null;
     }
@@ -459,13 +459,9 @@ public class Utils {
     private static Resource createExperiment(Experiment o) {
         ExperimentResource experimentResource = new ExperimentResource();
         if (o != null){
-            GatewayResource gatewayResource = (GatewayResource)createGateway(o.getGateway());
-            experimentResource.setGateway(gatewayResource);
+            experimentResource.setGatewayId(o.getGatewayId());
             experimentResource.setExecutionUser(o.getExecutionUser());
-            if (o.getProject() != null){
-                ProjectResource projectResource = (ProjectResource)createProject(o.getProject());
-                experimentResource.setProject(projectResource);
-            }
+            experimentResource.setProjectId(o.getProjectID());
             experimentResource.setExpID(o.getExpId());
             experimentResource.setExpName(o.getExpName());
             experimentResource.setCreationTime(o.getCreationTime());
@@ -477,8 +473,39 @@ public class Utils {
             experimentResource.setWorkflowExecutionId(o.getWorkflowExecutionId());
             experimentResource.setEnableEmailNotifications(o.isAllowNotification());
             experimentResource.setGatewayExecutionId(o.getGatewayExecutionId());
-        }
+            if (o.getExperimentInputs() != null && !o.getExperimentInputs().isEmpty()){
+                experimentResource.setExperimentInputResources(getExperimentInputs(o.getExperimentInputs()));
+            }
+            if (o.getExperimentOutputs() != null && !o.getExperimentOutputs().isEmpty()){
+                experimentResource.setExperimentOutputputResources(getExperimentOutputs(o.getExperimentOutputs()));
+            }
+            if (o.getResourceScheduling() != null){
+                experimentResource.setComputationSchedulingResource((ComputationSchedulingResource)createComputationalScheduling(o.getResourceScheduling()));
+            }
+            if (o.getUserConfigurationData() != null){
+                experimentResource.setUserConfigDataResource((ConfigDataResource)createExConfigDataResource(o.getUserConfigurationData()));
+            }
+
+            if (o.getWorkflowNodeDetails() != null && !o.getWorkflowNodeDetails().isEmpty()){
+                experimentResource.setWorkflowNodeDetailResourceList(getWorkflowNodeLit(o.getWorkflowNodeDetails()));
+            }
+
+            if (o.getStateChangeList() != null && !o.getStateChangeList().isEmpty()){
+                experimentResource.setStateChangeList(getStateChangeList(o.getStateChangeList()));
+            }
+
+            if (o.getErrorDetails() != null && !o.getErrorDetails().isEmpty()){
+                experimentResource.setErrorDetailList(getErrorList(o.getErrorDetails()));
+            }
 
+            if (o.getExperimentStatus() != null){
+                experimentResource.setExperimentStatus((StatusResource)createStatusResource(o.getExperimentStatus()));
+            }
+
+            if (o.getNotificationEmails() != null && !o.getNotificationEmails().isEmpty()){
+                experimentResource.setEmailResourceList(getEmailList(o.getNotificationEmails()));
+            }
+        }
         return experimentResource;
     }
 
@@ -493,40 +520,127 @@ public class Utils {
             experimentSummaryResource.setExecutionUser(o.getExecutionUser());
             experimentSummaryResource.setExpID(o.getExpId());
             experimentSummaryResource.setExpName(o.getExpName());
-            experimentSummaryResource.setProjectID(o.getProjectId());
+            experimentSummaryResource.setProjectID(o.getProjectID());
             experimentSummaryResource.setCreationTime(o.getCreationTime());
             experimentSummaryResource.setDescription(o.getExpDesc());
             experimentSummaryResource.setApplicationId(o.getApplicationId());
 
-            Collection<Status> statusList = o.getStatuses();
-            if(statusList != null && statusList.size()>0){
-                Iterator<Status> statusIterator = statusList.iterator();
-                while(statusIterator.hasNext()){
-                    Status status = statusIterator.next();
-                    if(status.getStatusType().equals(StatusType.EXPERIMENT.toString())){
-                        StatusResource statusResource = new StatusResource();
-                        statusResource.setStatusId(status.getStatusId());
-                        statusResource.setJobId(status.getJobId());
-                        statusResource.setState(status.getState());
-                        statusResource.setStatusUpdateTime(status.getStatusUpdateTime());
-                        statusResource.setStatusType(status.getStatusType());
-                        experimentSummaryResource.setStatus(statusResource);
-                        break;
-                    }
-                }
+            Status experimentStatus = o.getExperimentStatus();
+            if(experimentStatus != null) {
+                StatusResource statusResource = new StatusResource();
+                statusResource.setStatusId(experimentStatus.getStatusId());
+                statusResource.setJobId(experimentStatus.getJobId());
+                statusResource.setState(experimentStatus.getState());
+                statusResource.setStatusUpdateTime(experimentStatus.getStatusUpdateTime());
+                statusResource.setStatusType(experimentStatus.getStatusType());
+                experimentSummaryResource.setStatus(statusResource);
             }
         }
 
         return experimentSummaryResource;
     }
 
+    private static List<ExperimentInputResource> getExperimentInputs(List<Experiment_Input> inputs){
+        List<ExperimentInputResource> inputResources = new ArrayList<ExperimentInputResource>();
+        for (Experiment_Input input : inputs){
+            inputResources.add((ExperimentInputResource)createExperimentInput(input));
+        }
+        return inputResources;
+    }
+
+    private static List<ExperimentOutputResource> getExperimentOutputs(List<Experiment_Output> outputs){
+        List<ExperimentOutputResource> outputResources = new ArrayList<>();
+        for (Experiment_Output output : outputs){
+            outputResources.add((ExperimentOutputResource) createExperimentOutput(output));
+        }
+        return outputResources;
+    }
+
+    private static List<NodeInputResource> getNodeInputs(List<NodeInput> inputs){
+        List<NodeInputResource> inputResources = new ArrayList<NodeInputResource>();
+        for (NodeInput input : inputs){
+            inputResources.add((NodeInputResource)createNodeInput(input));
+        }
+        return inputResources;
+    }
+
+    private static List<NodeOutputResource> getNodeOutputs(List<NodeOutput> outputs){
+        List<NodeOutputResource> outputResources = new ArrayList<>();
+        for (NodeOutput output : outputs){
+            outputResources.add((NodeOutputResource) createNodeOutput(output));
+        }
+        return outputResources;
+    }
+
+    private static List<ApplicationInputResource> getApplicationInputs(List<ApplicationInput> inputs){
+        List<ApplicationInputResource> inputResources = new ArrayList<ApplicationInputResource>();
+        for (ApplicationInput input : inputs){
+            inputResources.add((ApplicationInputResource)createApplicationInput(input));
+        }
+        return inputResources;
+    }
+
+    private static List<ApplicationOutputResource> getApplicationOutputs(List<ApplicationOutput> outputs){
+        List<ApplicationOutputResource> outputResources = new ArrayList<>();
+        for (ApplicationOutput output : outputs){
+            outputResources.add((ApplicationOutputResource) createApplicationOutput(output));
+        }
+        return outputResources;
+    }
+
+    private static List<WorkflowNodeDetailResource> getWorkflowNodeLit(List<WorkflowNodeDetail> nodes){
+        List<WorkflowNodeDetailResource> nodeList = new ArrayList<>();
+        for (WorkflowNodeDetail node : nodes){
+            nodeList.add((WorkflowNodeDetailResource) createWorkflowNodeDetail(node));
+        }
+        return nodeList;
+    }
+
+    private static List<StatusResource> getStateChangeList(List<Status> statusList){
+        List<StatusResource> changeList = new ArrayList<>();
+        for (Status status : statusList){
+            changeList.add((StatusResource) createStatusResource(status));
+        }
+        return changeList;
+    }
+
+    private static List<ErrorDetailResource> getErrorList(List<ErrorDetail> errorDetails){
+        List<ErrorDetailResource> errors = new ArrayList<>();
+        for (ErrorDetail error : errorDetails){
+            errors.add((ErrorDetailResource) createErrorDetail(error));
+        }
+        return errors;
+    }
+
+    private static List<JobDetailResource> getJobDetails(List<JobDetail> jobDetails){
+        List<JobDetailResource> resources = new ArrayList<>();
+        for (JobDetail jobDetail : jobDetails){
+            resources.add((JobDetailResource) createJobDetail(jobDetail));
+        }
+        return resources;
+    }
+
+    private static List<DataTransferDetailResource> getDTDetails(List<DataTransferDetail> dataTransferDetails){
+        List<DataTransferDetailResource> resources = new ArrayList<>();
+        for (DataTransferDetail detail : dataTransferDetails){
+            resources.add((DataTransferDetailResource) createDataTransferResource(detail));
+        }
+        return resources;
+    }
+
+    private static List<NotificationEmailResource> getEmailList(List<Notification_Email> emails){
+        List<NotificationEmailResource> emailResources = new ArrayList<>();
+        for (Notification_Email email : emails){
+            emailResources.add((NotificationEmailResource) createNotificationEmail(email));
+        }
+        return emailResources;
+    }
+
     private static Resource createNotificationEmail (Notification_Email o){
         NotificationEmailResource emailResource = new NotificationEmailResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            emailResource.setExperimentResource(experimentResource);
-            TaskDetailResource taskDetailResource =  (TaskDetailResource)createTaskDetail(o.getTaskDetail());
-            emailResource.setTaskDetailResource(taskDetailResource);
+            emailResource.setExperimentId(o.getExperiment_id());
+            emailResource.setTaskId(o.getTaskId());
             emailResource.setEmailAddress(o.getEmailAddress());
         }
         return emailResource;
@@ -535,8 +649,7 @@ public class Utils {
     private static Resource createExperimentInput (Experiment_Input o){
         ExperimentInputResource eInputResource = new ExperimentInputResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            eInputResource.setExperimentResource(experimentResource);
+            eInputResource.setExperimentId(o.getExperiment_id());
             eInputResource.setDataType(o.getDataType());
             eInputResource.setMetadata(o.getMetadata());
             eInputResource.setExperimentKey(o.getEx_key());
@@ -547,11 +660,9 @@ public class Utils {
             eInputResource.setRequired(o.isRequired());
             eInputResource.setRequiredToCMD(o.isRequiredToCMD());
             eInputResource.setDataStaged(o.isDataStaged());
-
             if (o.getValue() != null){
                 eInputResource.setValue(new String(o.getValue()));
             }
-
         }
         return eInputResource;
     }
@@ -559,8 +670,7 @@ public class Utils {
     private static Resource createExperimentOutput (Experiment_Output o){
         ExperimentOutputResource eOutputResource = new ExperimentOutputResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            eOutputResource.setExperimentResource(experimentResource);
+            eOutputResource.setExperimentId(o.getExperiment_id());
             eOutputResource.setExperimentKey(o.getEx_key());
             if (o.getValue() != null){
                 eOutputResource.setValue(new String(o.getValue()));
@@ -579,29 +689,85 @@ public class Utils {
     private static Resource createWorkflowNodeDetail (WorkflowNodeDetail o){
         WorkflowNodeDetailResource nodeDetailResource = new WorkflowNodeDetailResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            nodeDetailResource.setExperimentResource(experimentResource);
+            nodeDetailResource.setExperimentId(o.getExpId());
             nodeDetailResource.setCreationTime(o.getCreationTime());
             nodeDetailResource.setNodeInstanceId(o.getNodeId());
             nodeDetailResource.setNodeName(o.getNodeName());
             nodeDetailResource.setExecutionUnit(o.getExecutionUnit());
             nodeDetailResource.setExecutionUnitData(o.getExecutionUnitData());
+            if (o.getTaskDetails() != null && !o.getErrorDetails().isEmpty()){
+                nodeDetailResource.setTaskDetailResourceList(getTaskDetails(o.getTaskDetails()));
+            }
+
+            if (o.getNodeInputs() != null && !o.getNodeInputs().isEmpty()){
+                nodeDetailResource.setNodeInputs(getNodeInputs(o.getNodeInputs()));
+            }
+
+            if (o.getNodeOutputs() != null && !o.getNodeOutputs().isEmpty()){
+                nodeDetailResource.setNodeOutputs(getNodeOutputs(o.getNodeOutputs()));
+            }
 
+            if (o.getNodeStatus() != null){
+                nodeDetailResource.setNodeStatus((StatusResource) createStatusResource(o.getNodeStatus()));
+            }
+
+            if (o.getErrorDetails() != null && !o.getErrorDetails().isEmpty()){
+                nodeDetailResource.setErros(getErrorList(o.getErrorDetails()));
+            }
         }
         return nodeDetailResource;
     }
 
+    private static List<TaskDetailResource> getTaskDetails (List<TaskDetail> taskDetails){
+        List<TaskDetailResource> tasks = new ArrayList<>();
+        for (TaskDetail detail : taskDetails){
+            tasks.add((TaskDetailResource) createTaskDetail(detail));
+        }
+        return tasks;
+    }
+
     private static Resource createTaskDetail(TaskDetail o){
         TaskDetailResource taskDetailResource = new TaskDetailResource();
         if ( o != null){
-            WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNodeDetail());
-            taskDetailResource.setWorkflowNodeDetailResource(nodeDetailResource);
+            taskDetailResource.setNodeId(o.getNodeId());
             taskDetailResource.setCreationTime(o.getCreationTime());
             taskDetailResource.setTaskId(o.getTaskId());
             taskDetailResource.setApplicationId(o.getAppId());
             taskDetailResource.setApplicationVersion(o.getAppVersion());
             taskDetailResource.setApplicationDeploymentId(o.getApplicationDeploymentId());
             taskDetailResource.setEnableEmailNotifications(o.isAllowNotification());
+            if (o.getApplicationInputs() != null && !o.getApplicationInputs().isEmpty()){
+                taskDetailResource.setApplicationInputs(getApplicationInputs(o.getApplicationInputs()));
+            }
+            if (o.getApplicationOutputs() != null && !o.getApplicationOutputs().isEmpty()){
+                taskDetailResource.setApplicationOutputs(getApplicationOutputs(o.getApplicationOutputs()));
+            }
+            if (o.getResourceScheduling() != null){
+                taskDetailResource.setSchedulingResource((ComputationSchedulingResource) createComputationalScheduling(o.getResourceScheduling()));
+
+            }
+            if (o.getInputDataHandling() != null){
+                taskDetailResource.setInputDataHandlingResource((AdvanceInputDataHandlingResource) createAdvancedInputDataResource(o.getInputDataHandling()));
+            }
+            if (o.getOutputDataHandling() != null){
+                taskDetailResource.setOutputDataHandlingResource((AdvancedOutputDataHandlingResource) createAdvancedOutputDataResource(o.getOutputDataHandling()));
+            }
+            if (o.getErrorDetails() != null && !o.getErrorDetails().isEmpty()){
+                taskDetailResource.setErrors(getErrorList(o.getErrorDetails()));
+            }
+            if (o.getTaskStatus() != null){
+                taskDetailResource.setTaskStatus((StatusResource) createStatusResource(o.getTaskStatus()));
+            }
+            if (o.getNotificationEmails() != null && !o.getNotificationEmails().isEmpty()){
+                taskDetailResource.setEmailResourceList(getEmailList(o.getNotificationEmails()));
+            }
+            if (o.getJobDetails() != null && !o.getJobDetails().isEmpty()){
+                taskDetailResource.setJobDetailResources(getJobDetails(o.getJobDetails()));
+            }
+            if (o.getDataTransferDetails() != null && !o.getDataTransferDetails().isEmpty()){
+                taskDetailResource.setTransferDetailResourceList(getDTDetails(o.getDataTransferDetails()));
+            }
+
         }
         return taskDetailResource;
     }
@@ -609,16 +775,9 @@ public class Utils {
     private static Resource createErrorDetail (ErrorDetail o){
         ErrorDetailResource errorDetailResource = new ErrorDetailResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            errorDetailResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                errorDetailResource.setTaskDetailResource(taskDetailResource);
-            }
-            if (o.getNodeDetails() != null){
-                WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNodeDetails());
-                errorDetailResource.setNodeDetail(nodeDetailResource);
-            }
+            errorDetailResource.setExperimentId(o.getExpId());
+            errorDetailResource.setTaskId(o.getTaskId());
+            errorDetailResource.setNodeId(o.getNodeId());
             errorDetailResource.setErrorId(o.getErrorID());
             errorDetailResource.setJobId(o.getJobId());
             errorDetailResource.setCreationTime(o.getCreationTime());
@@ -638,8 +797,7 @@ public class Utils {
     private static Resource createApplicationInput (ApplicationInput o){
         ApplicationInputResource inputResource = new ApplicationInputResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            inputResource.setTaskDetailResource(taskDetailResource);
+            inputResource.setTaskId(o.getTaskId());
             inputResource.setInputKey(o.getInputKey());
             inputResource.setDataType(o.getDataType());
             inputResource.setAppArgument(o.getAppArgument());
@@ -660,8 +818,7 @@ public class Utils {
     private static Resource createApplicationOutput (ApplicationOutput o){
         ApplicationOutputResource outputResource = new ApplicationOutputResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            outputResource.setTaskDetailResource(taskDetailResource);
+            outputResource.setTaskId(o.getTaskId());
             outputResource.setDataType(o.getDataType());
             outputResource.setOutputKey(o.getOutputKey());
             if (o.getValue() != null){
@@ -680,8 +837,7 @@ public class Utils {
     private static Resource createNodeInput (NodeInput o){
         NodeInputResource inputResource = new NodeInputResource();
         if (o != null){
-            WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNodeDetails());
-            inputResource.setNodeDetailResource(nodeDetailResource);
+            inputResource.setNodeId(o.getNodeId());
             inputResource.setInputKey(o.getInputKey());
             inputResource.setDataType(o.getDataType());
             inputResource.setValue(o.getValue());
@@ -700,8 +856,7 @@ public class Utils {
     private static Resource createNodeOutput (NodeOutput o){
         NodeOutputResource outputResource = new NodeOutputResource();
         if (o != null){
-            WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNode());
-            outputResource.setNodeDetailResource(nodeDetailResource);
+            outputResource.setNodeId(o.getNodeId());
             outputResource.setDataType(o.getDataType());
             outputResource.setOutputKey(o.getOutputKey());
             outputResource.setValue(o.getValue());
@@ -719,8 +874,7 @@ public class Utils {
     private static Resource createJobDetail (JobDetail o){
         JobDetailResource jobDetailResource = new JobDetailResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            jobDetailResource.setTaskDetailResource(taskDetailResource);
+            jobDetailResource.setTaskId(o.getTaskId());
             if (o.getJobDescription() != null){
                 jobDetailResource.setJobDescription(new String(o.getJobDescription()));
             }
@@ -729,7 +883,8 @@ public class Utils {
             jobDetailResource.setComputeResourceConsumed(o.getComputeResourceConsumed());
             jobDetailResource.setJobName(o.getJobName());
             jobDetailResource.setWorkingDir(o.getWorkingDir());
-
+            jobDetailResource.setJobStatus((StatusResource)createStatusResource(o.getJobStatus()));
+            jobDetailResource.setErrors(getErrorList(o.getErrorDetails()));
         }
 
         return jobDetailResource;
@@ -738,14 +893,15 @@ public class Utils {
     private static Resource createDataTransferResource (DataTransferDetail o){
         DataTransferDetailResource transferDetailResource = new DataTransferDetailResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            transferDetailResource.setTaskDetailResource(taskDetailResource);
+            transferDetailResource.setTaskId(o.getTaskId());
             transferDetailResource.setTransferId(o.getTransferId());
             transferDetailResource.setCreationTime(o.getCreationTime());
             if (o.getTransferDesc() != null){
                 transferDetailResource.setTransferDescription(new String(o.getTransferDesc()));
             }
-
+            if (o.getDataTransferStatus() != null){
+                transferDetailResource.setDatatransferStatus((StatusResource)createStatusResource(o.getDataTransferStatus()));
+            }
         }
         return transferDetailResource;
     }
@@ -753,20 +909,10 @@ public class Utils {
     private static Resource createStatusResource (Status o){
         StatusResource statusResource = new StatusResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            statusResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                statusResource.setTaskDetailResource(taskDetailResource);
-            }
-            if (o.getNode() != null){
-                WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNode());
-                statusResource.setWorkflowNodeDetail(nodeDetailResource);
-            }
-            if (o.getTransferDetail() != null){
-                DataTransferDetailResource transferDetailResource = (DataTransferDetailResource)createDataTransferResource(o.getTransferDetail());
-                statusResource.setDataTransferDetail(transferDetailResource);
-            }
+            statusResource.setExperimentId(o.getExpId());
+            statusResource.setTaskId(o.getTaskId());
+            statusResource.setNodeId(o.getNodeId());
+            statusResource.setTransferId(o.getTransferId());
             statusResource.setStatusId(o.getStatusId());
             statusResource.setJobId(o.getJobId());
             statusResource.setState(o.getState());
@@ -780,13 +926,25 @@ public class Utils {
     private static Resource createExConfigDataResource (ExperimentConfigData o){
         ConfigDataResource configDataResource = new ConfigDataResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            configDataResource.setExperimentResource(experimentResource);
+            configDataResource.setExperimentId(o.getExpId());
             configDataResource.setAiravataAutoSchedule(o.isAiravataAutoSchedule());
             configDataResource.setOverrideManualParams(o.isOverrideManualParams());
             configDataResource.setShareExp(o.isShareExp());
             configDataResource.setUserDn(o.getUserDn());
             configDataResource.setGenerateCert(o.isGenerateCert());
+            if (o.getOutputDataHandling() != null){
+                configDataResource.setAdvancedOutputDataHandlingResource((AdvancedOutputDataHandlingResource) createAdvancedOutputDataResource(o.getOutputDataHandling()));
+            }
+            if (o.getInputDataHandling() != null){
+                configDataResource.setAdvanceInputDataHandlingResource((AdvanceInputDataHandlingResource) createAdvancedInputDataResource(o.getInputDataHandling()));
+            }
+            if (o.getResourceScheduling() != null){
+                configDataResource.setComputationSchedulingResource((ComputationSchedulingResource) createComputationalScheduling(o.getResourceScheduling()));
+            }
+            if (o.getQosParam() != null){
+                configDataResource.setQosParamResource((QosParamResource) createQosParamResource(o.getQosParam()));
+            }
+
         }
         return configDataResource;
     }
@@ -794,12 +952,8 @@ public class Utils {
     private static Resource createComputationalScheduling (Computational_Resource_Scheduling o){
         ComputationSchedulingResource schedulingResource = new ComputationSchedulingResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            schedulingResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                schedulingResource.setTaskDetailResource(taskDetailResource);
-            }
+            schedulingResource.setExperimentId(o.getExpId());
+            schedulingResource.setTaskId(o.getTaskId());
             schedulingResource.setSchedulingId(o.getSchedulingId());
             schedulingResource.setResourceHostId(o.getResourceHostId());
             schedulingResource.setCpuCount(o.getCpuCount());
@@ -819,12 +973,8 @@ public class Utils {
     private static Resource createAdvancedInputDataResource (AdvancedInputDataHandling o){
         AdvanceInputDataHandlingResource dataHandlingResource = new AdvanceInputDataHandlingResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            dataHandlingResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                dataHandlingResource.setTaskDetailResource(taskDetailResource);
-            }
+            dataHandlingResource.setExperimentId(o.getExpId());
+            dataHandlingResource.setTaskId(o.getTaskId());
             dataHandlingResource.setDataHandlingId(o.getDataHandlingId());
             dataHandlingResource.setWorkingDirParent(o.getParentWorkingDir());
             dataHandlingResource.setWorkingDir(o.getWorkingDir());
@@ -838,12 +988,8 @@ public class Utils {
     private static Resource createAdvancedOutputDataResource (AdvancedOutputDataHandling o){
         AdvancedOutputDataHandlingResource dataHandlingResource = new AdvancedOutputDataHandlingResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            dataHandlingResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                dataHandlingResource.setTaskDetailResource(taskDetailResource);
-            }
+            dataHandlingResource.setExperimentId(o.getExpId());
+            dataHandlingResource.setTaskId(o.getTaskId());
             dataHandlingResource.setOutputDataHandlingId(o.getOutputDataHandlingId());
             dataHandlingResource.setOutputDataDir(o.getOutputDataDir());
             dataHandlingResource.setDataRegUrl(o.getDataRegUrl());
@@ -855,12 +1001,8 @@ public class Utils {
     private static Resource createQosParamResource (QosParam o){
         QosParamResource qosParamResource = new QosParamResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            qosParamResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                qosParamResource.setTaskDetailResource(taskDetailResource);
-            }
+            qosParamResource.setExperimentId(o.getExpId());
+            qosParamResource.setTaskId(o.getTaskId());
             qosParamResource.setQosId(o.getQosId());
             qosParamResource.setExecuteBefore(o.getExecuteBefore());
             qosParamResource.setStartExecutionAt(o.getStartExecutionAt());

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
index 60b003f..a9f0b38 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
@@ -49,23 +49,23 @@ import java.util.UUID;
 public class WorkerResource extends AbstractResource {
     private final static Logger logger = LoggerFactory.getLogger(WorkerResource.class);
     private String user;
-	private GatewayResource gateway;
+	private String gatewayId;
 
-    /**
-     *
-     */
     public WorkerResource() {
     }
 
-    /**
-     *
-     * @param user username
-     * @param gateway  gatewayResource
-     */
-    public WorkerResource(String user, GatewayResource gateway) {
-		this.setUser(user);
-		this.gateway=gateway;
-	}
+    public WorkerResource(String user, String gatewayId) {
+        this.user = user;
+        this.gatewayId = gatewayId;
+    }
+
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
 
     /**
      * Gateway worker can create child data structures such as projects and user workflows
@@ -78,13 +78,13 @@ public class WorkerResource extends AbstractResource {
 			case PROJECT:
 				ProjectResource projectResource = new ProjectResource();
 				projectResource.setWorker(this);
-				projectResource.setGateway(gateway);
+				projectResource.setGatewayId(gatewayId);
 				result=projectResource;
 				break;
             case EXPERIMENT:
                 ExperimentResource experimentResource = new ExperimentResource();
                 experimentResource.setExecutionUser(user);
-                experimentResource.setGateway(gateway);
+                experimentResource.setGatewayId(gatewayId);
                 result = experimentResource;
                 break;
 			default:
@@ -259,9 +259,11 @@ public class WorkerResource extends AbstractResource {
                 case PROJECT:
                     generator = new QueryGenerator(PROJECT);
                     Users users = em.find(Users.class, getUser());
-                    Gateway gatewayModel = em.find(Gateway.class, gateway.getGatewayId());
+                    Gateway gatewayModel = em.find(Gateway.class, gatewayId);
                     generator.setParameter("users", users);
-                    generator.setParameter("gateway", gatewayModel);
+                    if (gatewayModel != null){
+                        generator.setParameter("gateway", gatewayModel);
+                    }
 
                     //ordering - only supported only by CREATION_TIME
                     if(orderByIdentifier != null && resultOrderType != null
@@ -334,7 +336,7 @@ public class WorkerResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gateway.getGatewayId(), user));
+            Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gatewayId, user));
             em.close();
 
             em = ResourceUtils.getEntityManager();
@@ -343,14 +345,11 @@ public class WorkerResource extends AbstractResource {
             Users existingUser = em.find(Users.class, this.user);
             gatewayWorker.setUser(existingUser);
             gatewayWorker.setUser_name(existingUser.getUser_name());
-            Gateway gatewaymodel = em.find(Gateway.class, gateway.getGatewayId());
-            gatewayWorker.setGateway(gatewaymodel);
-            gatewayWorker.setGateway_id(gatewaymodel.getGateway_id());
+            gatewayWorker.setGateway_id(gatewayId);
             if (existingWorker != null) {
                 existingWorker.setUser_name(existingUser.getUser_name());
                 existingWorker.setUser(existingUser);
-                existingWorker.setGateway(gatewaymodel);
-                existingWorker.setGateway_id(gatewaymodel.getGateway_id());
+                existingWorker.setGateway_id(gatewayId);
                 gatewayWorker = em.merge(existingWorker);
             } else {
                 em.persist(gatewayWorker);
@@ -388,22 +387,6 @@ public class WorkerResource extends AbstractResource {
 
     /**
      *
-     * @return gateway resource
-     */
-    public GatewayResource getGateway() {
-        return gateway;
-    }
-
-    /**
-     *
-     * @param gateway  gateway resource
-     */
-    public void setGateway(GatewayResource gateway) {
-        this.gateway = gateway;
-    }
-
-    /**
-     *
      * @param id  project id
      * @return whether the project is available under the user
      */

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
index 9d2869d..0775f77 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
@@ -39,19 +39,56 @@ import java.util.List;
 
 public class WorkflowNodeDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(WorkflowNodeDetailResource.class);
-    private ExperimentResource experimentResource;
+    private String experimentId;
     private String nodeInstanceId;
     private Timestamp creationTime;
     private String nodeName;
     private String executionUnit;
     private String executionUnitData;
+    private List<TaskDetailResource> taskDetailResourceList;
+    private List<NodeInputResource> nodeInputs;
+    private List<NodeOutputResource> nodeOutputs;
+    private StatusResource nodeStatus;
+    private List<ErrorDetailResource> erros;
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public List<TaskDetailResource> getTaskDetailResourceList() {
+        return taskDetailResourceList;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setTaskDetailResourceList(List<TaskDetailResource> taskDetailResourceList) {
+        this.taskDetailResourceList = taskDetailResourceList;
+    }
+
+    public void setNodeInputs(List<NodeInputResource> nodeInputs) {
+        this.nodeInputs = nodeInputs;
+    }
+
+    public void setNodeOutputs(List<NodeOutputResource> nodeOutputs) {
+        this.nodeOutputs = nodeOutputs;
+    }
+
+    public StatusResource getNodeStatus() {
+        return nodeStatus;
+    }
+
+    public void setNodeStatus(StatusResource nodeStatus) {
+        this.nodeStatus = nodeStatus;
+    }
+
+    public List<ErrorDetailResource> getErros() {
+        return erros;
+    }
+
+    public void setErros(List<ErrorDetailResource> erros) {
+        this.erros = erros;
+    }
+
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
     public String getNodeInstanceId() {
@@ -82,23 +119,23 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         switch (type){
             case TASK_DETAIL:
                 TaskDetailResource taskDetailResource = new TaskDetailResource();
-                taskDetailResource.setWorkflowNodeDetailResource(this);
+                taskDetailResource.setNodeId(nodeInstanceId);
                 return taskDetailResource;
             case ERROR_DETAIL:
                 ErrorDetailResource errorDetailResource = new ErrorDetailResource();
-                errorDetailResource.setNodeDetail(this);
+                errorDetailResource.setNodeId(nodeInstanceId);;
                 return errorDetailResource;
             case NODE_INPUT:
                 NodeInputResource nodeInputResource = new NodeInputResource();
-                nodeInputResource.setNodeDetailResource(this);
+                nodeInputResource.setNodeId(nodeInstanceId);
                 return nodeInputResource;
             case NODE_OUTPUT:
                 NodeOutputResource nodeOutputResource = new NodeOutputResource();
-                nodeOutputResource.setNodeDetailResource(this);
+                nodeOutputResource.setNodeId(nodeInstanceId);
                 return nodeOutputResource;
             case STATUS:
                 StatusResource statusResource = new StatusResource();
-                statusResource.setWorkflowNodeDetail(this);
+                statusResource.setNodeId(nodeInstanceId);
                 return statusResource;
             default:
                 logger.error("Unsupported resource type for workflow node detail resource.", new IllegalArgumentException());
@@ -349,17 +386,14 @@ public class WorkflowNodeDetailResource extends AbstractResource {
             em.getTransaction().begin();
             WorkflowNodeDetail workflowNodeDetail = new WorkflowNodeDetail();
             workflowNodeDetail.setNodeId(nodeInstanceId);
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            workflowNodeDetail.setExperiment(experiment);
-            workflowNodeDetail.setExpId(experimentResource.getExpID());
+            workflowNodeDetail.setExpId(experimentId);
             workflowNodeDetail.setCreationTime(creationTime);
             workflowNodeDetail.setNodeName(nodeName);
             workflowNodeDetail.setExecutionUnit(getExecutionUnit());
             workflowNodeDetail.setExecutionUnitData(getExecutionUnitData());
 
             if (existingNode != null) {
-                existingNode.setExperiment(experiment);
-                existingNode.setExpId(experimentResource.getExpID());
+                existingNode.setExpId(experimentId);
                 existingNode.setCreationTime(creationTime);
                 existingNode.setNodeName(nodeName);
                 existingNode.setExecutionUnit(getExecutionUnit());
@@ -383,7 +417,15 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         }
     }
 
-    public List<NodeInputResource> getNodeInputs() throws RegistryException{
+    public List<NodeInputResource> getNodeInputs() {
+        return nodeInputs;
+    }
+
+    public List<NodeOutputResource> getNodeOutputs() {
+        return nodeOutputs;
+    }
+
+    public List<NodeInputResource> getNodeInputs1() throws RegistryException{
         List<NodeInputResource> nodeInputResourceList = new ArrayList<NodeInputResource>();
         List<Resource> resources = get(ResourceType.NODE_INPUT);
         for (Resource resource : resources) {
@@ -393,7 +435,7 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         return nodeInputResourceList;
     }
 
-    public List<NodeOutputResource> getNodeOutputs() throws RegistryException{
+    public List<NodeOutputResource> getNodeOutputs1() throws RegistryException{
         List<NodeOutputResource> outputResources = new ArrayList<NodeOutputResource>();
         List<Resource> resources = get(ResourceType.NODE_OUTPUT);
         for (Resource resource : resources) {
@@ -421,12 +463,12 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource taskStatus = (StatusResource) resource;
-            if(taskStatus.getStatusType().equals(StatusType.TASK.toString()) && taskStatus.getTaskDetailResource().getTaskId().equals(taskId)){
+            if(taskStatus.getStatusType().equals(StatusType.TASK.toString()) && taskStatus.getTaskId().equals(taskId)){
                 if (taskStatus.getState() == null || taskStatus.getState().equals("") ){
                     taskStatus.setState("UNKNOWN");
                 }
                 return taskStatus;
-            } 
+            }
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
index 53b3919..28c5604 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
@@ -21,6 +21,7 @@
 
 package org.apache.airavata.persistance.registry.jpa.utils;
 
+import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.model.appcatalog.appinterface.DataType;
 import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType;
 import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType;
@@ -84,9 +85,7 @@ public class ThriftDataModelConversion {
     public static Experiment getExperiment(ExperimentResource experimentResource) throws RegistryException {
         if (experimentResource != null){
             Experiment experiment = new Experiment();
-            if (experimentResource.getProject()!= null){
-                experiment.setProjectID(experimentResource.getProject().getId());
-            }
+            experiment.setProjectID(experimentResource.getProjectId());
             experiment.setExperimentID(experimentResource.getExpID());
             experiment.setCreationTime(experimentResource.getCreationTime().getTime());
             experiment.setUserName(experimentResource.getExecutionUser());
@@ -124,9 +123,8 @@ public class ThriftDataModelConversion {
             if (errorDetails!= null && !errorDetails.isEmpty()){
                 experiment.setErrors(getErrorDetailList(errorDetails));
             }
-            String expID = experimentResource.getExpID();
-            if (experimentResource.isExists(ResourceType.CONFIG_DATA, expID)){
-                ConfigDataResource userConfigData = experimentResource.getUserConfigData(expID);
+            if (experimentResource.isExists(ResourceType.CONFIG_DATA, experimentResource.getExpID())){
+                ConfigDataResource userConfigData = experimentResource.getUserConfigData(experimentResource.getExpID());
                 experiment.setUserConfigurationData(getUserConfigData(userConfigData));
             }
             return experiment;
@@ -385,7 +383,11 @@ public class ThriftDataModelConversion {
                 status.setState("UNKNOWN");
             }
             jobStatus.setJobState(JobState.valueOf(status.getState()));
-            jobStatus.setTimeOfStateChange(status.getStatusUpdateTime().getTime());
+            if (status.getStatusUpdateTime() == null){
+                jobStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+            }else {
+                jobStatus.setTimeOfStateChange(status.getStatusUpdateTime().getTime());
+            }
             return jobStatus;
         }
         return null;
@@ -599,8 +601,9 @@ public class ThriftDataModelConversion {
             data.setShareExperimentPublicly(resource.isShareExp());
             data.setUserDN(resource.getUserDn());
             data.setGenerateCert(resource.isGenerateCert());
-            ExperimentResource experimentResource = resource.getExperimentResource();
-            String expID = experimentResource.getExpID();
+            String expID = resource.getExperimentId();
+            ExperimentResource experimentResource = new ExperimentResource();
+            experimentResource.setExpID(expID);
             if (experimentResource.isExists(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, expID)){
                 ComputationSchedulingResource computationScheduling = experimentResource.getComputationScheduling(expID);
                 data.setComputationalResourceScheduling(getComputationalResourceScheduling(computationScheduling));