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/04/22 22:38:45 UTC

[1/2] airavata git commit: fixing AIRAVATA-1687

Repository: airavata
Updated Branches:
  refs/heads/master 0f8269da3 -> 9cadde8ef


http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/airavata-api/thrift-interface-descriptions/experimentModel.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/experimentModel.thrift b/airavata-api/thrift-interface-descriptions/experimentModel.thrift
index 2cd82d3..552475f 100644
--- a/airavata-api/thrift-interface-descriptions/experimentModel.thrift
+++ b/airavata-api/thrift-interface-descriptions/experimentModel.thrift
@@ -273,7 +273,8 @@ struct JobDetails {
     5: optional ApplicationStatus applicationStatus,
     6: optional list<ErrorDetails> errors,
     7: optional string computeResourceConsumed,
-    8: optional string jobName
+    8: optional string jobName,
+    9: optional string workingDir
 }
 
 struct DataTransferDetails {
@@ -378,16 +379,17 @@ struct Experiment {
     8: optional string applicationVersion,
     9: optional string workflowTemplateId,
     10: optional string workflowTemplateVersion,
-    11: optional bool enableEmailNotification,
-    12: optional list<string> emailAddresses,
-    13: optional UserConfigurationData userConfigurationData,
-    14: optional string workflowExecutionInstanceId,
-    15: optional list<applicationInterfaceModel.InputDataObjectType> experimentInputs,
-    16: optional list<applicationInterfaceModel.OutputDataObjectType> experimentOutputs,
-    17: optional ExperimentStatus experimentStatus,
-    18: optional list<WorkflowNodeStatus> stateChangeList,
-    19: optional list<WorkflowNodeDetails> workflowNodeDetailsList,
-    20: optional list<ErrorDetails> errors
+    11: optional string gatewayExecutionId,
+    12: optional bool enableEmailNotification,
+    13: optional list<string> emailAddresses,
+    14: optional UserConfigurationData userConfigurationData,
+    15: optional string workflowExecutionInstanceId,
+    16: optional list<applicationInterfaceModel.InputDataObjectType> experimentInputs,
+    17: optional list<applicationInterfaceModel.OutputDataObjectType> experimentOutputs,
+    18: optional ExperimentStatus experimentStatus,
+    19: optional list<WorkflowNodeStatus> stateChangeList,
+    20: optional list<WorkflowNodeDetails> workflowNodeDetailsList,
+    21: optional list<ErrorDetails> errors
 }
 
 struct ExperimentSummary {

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
index ec2c081..4ac7ad0 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
@@ -71,6 +71,7 @@ public class ExperimentRegistry {
             experimentResource.setExecutionUser(experiment.getUserName());
             GatewayResource gateway = (GatewayResource)ResourceUtils.getGateway(gatewayId);
             experimentResource.setGateway(gateway);
+            experimentResource.setGatewayExecutionId(experiment.getGatewayExecutionId());
             experimentResource.setEnableEmailNotifications(experiment.isEnableEmailNotification());
             if (!workerResource.isProjectExists(experiment.getProjectID())) {
                 logger.error("Project does not exist in the system..");
@@ -1190,6 +1191,8 @@ public class ExperimentRegistry {
             jobDetail.setJobDescription(jobDetails.getJobDescription());
             jobDetail.setCreationTime(AiravataUtils.getTime(jobDetails.getCreationTime()));
             jobDetail.setComputeResourceConsumed(jobDetails.getComputeResourceConsumed());
+            jobDetail.setWorkingDir(jobDetails.getWorkingDir());
+            jobDetail.setJobName(jobDetails.getJobName());
             jobDetail.save();
             JobStatus jobStatus = jobDetails.getJobStatus();
             if (jobStatus != null) {
@@ -1235,6 +1238,8 @@ public class ExperimentRegistry {
             jobDetail.setJobDescription(jobDetails.getJobDescription());
             jobDetail.setCreationTime(AiravataUtils.getTime(jobDetails.getCreationTime()));
             jobDetail.setComputeResourceConsumed(jobDetails.getComputeResourceConsumed());
+            jobDetail.setJobName(jobDetails.getJobName());
+            jobDetail.setWorkingDir(jobDetails.getWorkingDir());
             jobDetail.save();
             JobStatus jobStatus = jobDetails.getJobStatus();
             if (jobStatus != null) {
@@ -1620,6 +1625,7 @@ public class ExperimentRegistry {
             existingExperiment.setExpName(experiment.getName());
             existingExperiment.setExecutionUser(experiment.getUserName());
             existingExperiment.setGateway(gatewayResource);
+            existingExperiment.setGatewayExecutionId(experiment.getGatewayExecutionId());
             if (!workerResource.isProjectExists(experiment.getProjectID())) {
                 logger.error("Project does not exist in the system..");
                 throw new Exception("Project does not exist in the system, Please create the project first...");

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
index 042dfbe..1c2d430 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
@@ -58,6 +58,8 @@ public class Experiment implements Serializable {
     private String workflowExecutionId;
     @Column(name = "ALLOW_NOTIFICATION")
     private boolean allowNotification;
+    @Column(name = "GATEWAY_EXECUTION_ID")
+    private String gatewayExecutionId;
 
     @ManyToOne(cascade=CascadeType.MERGE)
     @JoinColumn(name = "GATEWAY_ID")
@@ -198,4 +200,12 @@ public class Experiment implements Serializable {
     public void setAllowNotification(boolean allowNotification) {
         this.allowNotification = allowNotification;
     }
+
+    public String getGatewayExecutionId() {
+        return gatewayExecutionId;
+    }
+
+    public void setGatewayExecutionId(String gatewayExecutionId) {
+        this.gatewayExecutionId = gatewayExecutionId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
index c13fa2f..36f12f8 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
@@ -45,7 +45,10 @@ public class JobDetail implements Serializable {
     private Timestamp creationTime;
     @Column(name = "COMPUTE_RESOURCE_CONSUMED")
     private String computeResourceConsumed;
-
+    @Column(name = "JOBNAME")
+    private String jobName;
+    @Column(name = "WORKING_DIR")
+    private String workingDir;
 
     @ManyToOne(cascade= CascadeType.MERGE)
     @JoinColumn(name = "TASK_ID")
@@ -98,4 +101,20 @@ public class JobDetail implements Serializable {
     public void setComputeResourceConsumed(String computeResourceConsumed) {
         this.computeResourceConsumed = computeResourceConsumed;
     }
+
+    public String getJobName() {
+        return jobName;
+    }
+
+    public void setJobName(String jobName) {
+        this.jobName = jobName;
+    }
+
+    public String getWorkingDir() {
+        return workingDir;
+    }
+
+    public void setWorkingDir(String workingDir) {
+        this.workingDir = workingDir;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
index 845f513..1d7b58c 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
@@ -53,6 +53,7 @@ public class ExperimentResource extends AbstractResource {
     private String workflowTemplateVersion;
     private String workflowExecutionId;
     private boolean enableEmailNotifications;
+    private String gatewayExecutionId;
 
     /**
      *
@@ -134,6 +135,14 @@ public class ExperimentResource extends AbstractResource {
         this.enableEmailNotifications = enableEmailNotifications;
     }
 
+    public String getGatewayExecutionId() {
+        return gatewayExecutionId;
+    }
+
+    public void setGatewayExecutionId(String gatewayExecutionId) {
+        this.gatewayExecutionId = gatewayExecutionId;
+    }
+
     /**
      * Since experiments are at the leaf level, this method is not
      * valid for an experiment
@@ -583,6 +592,7 @@ public class ExperimentResource extends AbstractResource {
             experiment.setWorkflowTemplateVersion(workflowTemplateVersion);
             experiment.setWorkflowExecutionId(workflowExecutionId);
             experiment.setAllowNotification(enableEmailNotifications);
+            experiment.setGatewayExecutionId(gatewayExecutionId);
             if (existingExp != null) {
                 existingExp.setGateway(gateway);
                 existingExp.setGatewayId(gateway.getGateway_id());
@@ -599,6 +609,7 @@ public class ExperimentResource extends AbstractResource {
                 existingExp.setWorkflowTemplateVersion(workflowTemplateVersion);
                 existingExp.setWorkflowExecutionId(workflowExecutionId);
                 existingExp.setAllowNotification(enableEmailNotifications);
+                existingExp.setGatewayExecutionId(gatewayExecutionId);
                 experiment = em.merge(existingExp);
             } else {
                 em.persist(experiment);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/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 ded0991..6e6d2ee 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
@@ -44,6 +44,24 @@ public class JobDetailResource extends AbstractResource {
     private String jobDescription;
     private Timestamp creationTime;
     private String computeResourceConsumed;
+    private String jobName;
+    private String workingDir;
+
+    public String getJobName() {
+        return jobName;
+    }
+
+    public void setJobName(String jobName) {
+        this.jobName = jobName;
+    }
+
+    public String getWorkingDir() {
+        return workingDir;
+    }
+
+    public void setWorkingDir(String workingDir) {
+        this.workingDir = workingDir;
+    }
 
     public String getJobId() {
         return jobId;
@@ -266,6 +284,8 @@ public class JobDetailResource extends AbstractResource {
             jobDetail.setTask(taskDetail);
             jobDetail.setTaskId(taskDetailResource.getTaskId());
             jobDetail.setCreationTime(creationTime);
+            jobDetail.setJobName(jobName);
+            jobDetail.setWorkingDir(workingDir);
             if (jobDescription != null) {
                 jobDetail.setJobDescription(jobDescription.toCharArray());
             }
@@ -279,6 +299,8 @@ public class JobDetailResource extends AbstractResource {
                     existingJobDetail.setJobDescription(jobDescription.toCharArray());
                 }
                 existingJobDetail.setComputeResourceConsumed(computeResourceConsumed);
+                existingJobDetail.setJobName(jobName);
+                existingJobDetail.setWorkingDir(workingDir);
                 jobDetail = em.merge(existingJobDetail);
             } else {
                 em.persist(jobDetail);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/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 a9e4a62..eda703a 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
@@ -457,6 +457,7 @@ public class Utils {
             experimentResource.setWorkflowTemplateVersion(o.getWorkflowTemplateVersion());
             experimentResource.setWorkflowExecutionId(o.getWorkflowExecutionId());
             experimentResource.setEnableEmailNotifications(o.isAllowNotification());
+            experimentResource.setGatewayExecutionId(o.getGatewayExecutionId());
         }
 
         return experimentResource;
@@ -669,6 +670,9 @@ public class Utils {
             jobDetailResource.setJobId(o.getJobId());
             jobDetailResource.setCreationTime(o.getCreationTime());
             jobDetailResource.setComputeResourceConsumed(o.getComputeResourceConsumed());
+            jobDetailResource.setJobName(o.getJobName());
+            jobDetailResource.setWorkingDir(o.getWorkingDir());
+
         }
 
         return jobDetailResource;

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/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 101f98f..8f385e8 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
@@ -121,6 +121,7 @@ public class ThriftDataModelConversion {
             experiment.setApplicationVersion(experimentResource.getApplicationVersion());
             experiment.setWorkflowTemplateId(experimentResource.getWorkflowTemplateId());
             experiment.setEnableEmailNotification(experimentResource.isEnableEmailNotifications());
+            experiment.setGatewayExecutionId(experimentResource.getGatewayExecutionId());
             if (experiment.isEnableEmailNotification()){
                 List<NotificationEmailResource> notificationEmails = experimentResource.getNotificationEmails();
                 experiment.setEmailAddresses(getEmailAddresses(notificationEmails));
@@ -560,6 +561,8 @@ public class ThriftDataModelConversion {
             jobDetails.setCreationTime(jobDetailResource.getCreationTime().getTime());
             StatusResource jobStatus = jobDetailResource.getJobStatus();
             jobDetails.setJobStatus(getJobStatus(jobStatus));
+            jobDetails.setJobName(jobDetailResource.getJobName());
+            jobDetails.setWorkingDir(jobDetailResource.getWorkingDir());
             StatusResource applicationStatus = jobDetailResource.getApplicationStatus();
             jobDetails.setApplicationStatus(getApplicationStatus(applicationStatus));
             List<ErrorDetailResource> errorDetails = jobDetailResource.getErrorDetails();

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql b/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
index 9ea8c37..7ab3755 100644
--- a/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
+++ b/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
@@ -91,6 +91,7 @@ CREATE TABLE EXPERIMENT
         WORKFLOW_TEMPLATE_VERSION VARCHAR(255),
         WORKFLOW_EXECUTION_ID VARCHAR(255),
         ALLOW_NOTIFICATION SMALLINT,
+        GATEWAY_EXECUTION_ID VARCHAR(255),
         PRIMARY KEY(EXPERIMENT_ID),
         FOREIGN KEY (GATEWAY_ID) REFERENCES GATEWAY(GATEWAY_ID) ON DELETE CASCADE,
         FOREIGN KEY (EXECUTION_USER) REFERENCES USERS(USER_NAME) ON DELETE CASCADE,
@@ -263,6 +264,8 @@ CREATE TABLE JOB_DETAIL
         JOB_DESCRIPTION CLOB NOT NULL,
         CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
         COMPUTE_RESOURCE_CONSUMED VARCHAR(255),
+        JOBNAME VARCHAR (255),
+        WORKING_DIR VARCHAR(255),
         PRIMARY KEY (TASK_ID, JOB_ID),
         FOREIGN KEY (TASK_ID) REFERENCES TASK_DETAIL(TASK_ID) ON DELETE CASCADE
 );

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql b/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
index 33db1d5..14d7fc8 100644
--- a/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
+++ b/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
@@ -91,6 +91,7 @@ CREATE TABLE EXPERIMENT
         WORKFLOW_TEMPLATE_VERSION VARCHAR(255),
         WORKFLOW_EXECUTION_ID VARCHAR(255),
         ALLOW_NOTIFICATION SMALLINT,
+        GATEWAY_EXECUTION_ID VARCHAR(255),
         PRIMARY KEY(EXPERIMENT_ID),
         FOREIGN KEY (GATEWAY_ID) REFERENCES GATEWAY(GATEWAY_ID) ON DELETE CASCADE,
         FOREIGN KEY (EXECUTION_USER) REFERENCES USERS(USER_NAME) ON DELETE CASCADE,
@@ -242,6 +243,8 @@ CREATE TABLE JOB_DETAIL
         JOB_DESCRIPTION LONGTEXT NOT NULL,
         CREATION_TIME TIMESTAMP DEFAULT NOW(),
         COMPUTE_RESOURCE_CONSUMED VARCHAR(255),
+        JOBNAME VARCHAR (255),
+        WORKING_DIR VARCHAR(255),
         PRIMARY KEY (TASK_ID, JOB_ID),
         FOREIGN KEY (TASK_ID) REFERENCES TASK_DETAIL(TASK_ID) ON DELETE CASCADE
 );

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql b/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
index 9ea8c37..7ab3755 100644
--- a/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
+++ b/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
@@ -91,6 +91,7 @@ CREATE TABLE EXPERIMENT
         WORKFLOW_TEMPLATE_VERSION VARCHAR(255),
         WORKFLOW_EXECUTION_ID VARCHAR(255),
         ALLOW_NOTIFICATION SMALLINT,
+        GATEWAY_EXECUTION_ID VARCHAR(255),
         PRIMARY KEY(EXPERIMENT_ID),
         FOREIGN KEY (GATEWAY_ID) REFERENCES GATEWAY(GATEWAY_ID) ON DELETE CASCADE,
         FOREIGN KEY (EXECUTION_USER) REFERENCES USERS(USER_NAME) ON DELETE CASCADE,
@@ -263,6 +264,8 @@ CREATE TABLE JOB_DETAIL
         JOB_DESCRIPTION CLOB NOT NULL,
         CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
         COMPUTE_RESOURCE_CONSUMED VARCHAR(255),
+        JOBNAME VARCHAR (255),
+        WORKING_DIR VARCHAR(255),
         PRIMARY KEY (TASK_ID, JOB_ID),
         FOREIGN KEY (TASK_ID) REFERENCES TASK_DETAIL(TASK_ID) ON DELETE CASCADE
 );


[2/2] airavata git commit: fixing AIRAVATA-1687

Posted by ch...@apache.org.
fixing AIRAVATA-1687


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/9cadde8e
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/9cadde8e
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/9cadde8e

Branch: refs/heads/master
Commit: 9cadde8ef901faa567a2e22e1ed3a44450d4d58b
Parents: 0f8269d
Author: Chathuri Wimalasena <ka...@gmail.com>
Authored: Wed Apr 22 16:38:36 2015 -0400
Committer: Chathuri Wimalasena <ka...@gmail.com>
Committed: Wed Apr 22 16:38:36 2015 -0400

----------------------------------------------------------------------
 .../lib/airavata/experimentModel_types.cpp      |  82 ++++---
 .../lib/airavata/experimentModel_types.h        |  46 +++-
 .../Model/Workspace/Experiment/Types.php        |  96 +++++---
 .../model/workspace/experiment/ttypes.py        |  86 ++++---
 .../model/workspace/experiment/Experiment.java  | 225 ++++++++++++++-----
 .../model/workspace/experiment/JobDetails.java  | 109 ++++++++-
 .../experimentModel.thrift                      |  24 +-
 .../registry/jpa/impl/ExperimentRegistry.java   |   6 +
 .../registry/jpa/model/Experiment.java          |  10 +
 .../registry/jpa/model/JobDetail.java           |  21 +-
 .../jpa/resources/ExperimentResource.java       |  11 +
 .../jpa/resources/JobDetailResource.java        |  22 ++
 .../registry/jpa/resources/Utils.java           |   4 +
 .../jpa/utils/ThriftDataModelConversion.java    |   3 +
 .../src/main/resources/registry-derby.sql       |   3 +
 .../src/main/resources/registry-mysql.sql       |   3 +
 .../src/test/resources/registry-derby.sql       |   3 +
 17 files changed, 578 insertions(+), 176 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
index fe7890f..34e4aa6 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
@@ -1591,8 +1591,8 @@ void swap(ErrorDetails &a, ErrorDetails &b) {
   swap(a.__isset, b.__isset);
 }
 
-const char* JobDetails::ascii_fingerprint = "827E1049FA5B4D33C335B59DE49B8F88";
-const uint8_t JobDetails::binary_fingerprint[16] = {0x82,0x7E,0x10,0x49,0xFA,0x5B,0x4D,0x33,0xC3,0x35,0xB5,0x9D,0xE4,0x9B,0x8F,0x88};
+const char* JobDetails::ascii_fingerprint = "114EFEA8CA07DC82CC947D9F47547394";
+const uint8_t JobDetails::binary_fingerprint[16] = {0x11,0x4E,0xFE,0xA8,0xCA,0x07,0xDC,0x82,0xCC,0x94,0x7D,0x9F,0x47,0x54,0x73,0x94};
 
 uint32_t JobDetails::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -1692,6 +1692,14 @@ uint32_t JobDetails::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
+      case 9:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->workingDir);
+          this->__isset.workingDir = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -1758,6 +1766,11 @@ uint32_t JobDetails::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeString(this->jobName);
     xfer += oprot->writeFieldEnd();
   }
+  if (this->__isset.workingDir) {
+    xfer += oprot->writeFieldBegin("workingDir", ::apache::thrift::protocol::T_STRING, 9);
+    xfer += oprot->writeString(this->workingDir);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -1773,6 +1786,7 @@ void swap(JobDetails &a, JobDetails &b) {
   swap(a.errors, b.errors);
   swap(a.computeResourceConsumed, b.computeResourceConsumed);
   swap(a.jobName, b.jobName);
+  swap(a.workingDir, b.workingDir);
   swap(a.__isset, b.__isset);
 }
 
@@ -1885,8 +1899,8 @@ void swap(DataTransferDetails &a, DataTransferDetails &b) {
   swap(a.__isset, b.__isset);
 }
 
-const char* TaskDetails::ascii_fingerprint = "88276CFCC9B30CA0B93A5931F93CACC4";
-const uint8_t TaskDetails::binary_fingerprint[16] = {0x88,0x27,0x6C,0xFC,0xC9,0xB3,0x0C,0xA0,0xB9,0x3A,0x59,0x31,0xF9,0x3C,0xAC,0xC4};
+const char* TaskDetails::ascii_fingerprint = "B7529305C4CBCDA0A164DA14865F0E67";
+const uint8_t TaskDetails::binary_fingerprint[16] = {0xB7,0x52,0x93,0x05,0xC4,0xCB,0xCD,0xA0,0xA1,0x64,0xDA,0x14,0x86,0x5F,0x0E,0x67};
 
 uint32_t TaskDetails::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -2280,8 +2294,8 @@ void swap(TaskDetails &a, TaskDetails &b) {
   swap(a.__isset, b.__isset);
 }
 
-const char* WorkflowNodeDetails::ascii_fingerprint = "940AB958A2909A83261C2016BD466838";
-const uint8_t WorkflowNodeDetails::binary_fingerprint[16] = {0x94,0x0A,0xB9,0x58,0xA2,0x90,0x9A,0x83,0x26,0x1C,0x20,0x16,0xBD,0x46,0x68,0x38};
+const char* WorkflowNodeDetails::ascii_fingerprint = "EB2D51CB4EF4984664FB9C47591EFA8D";
+const uint8_t WorkflowNodeDetails::binary_fingerprint[16] = {0xEB,0x2D,0x51,0xCB,0x4E,0xF4,0x98,0x46,0x64,0xFB,0x9C,0x47,0x59,0x1E,0xFA,0x8D};
 
 uint32_t WorkflowNodeDetails::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -2736,8 +2750,8 @@ void swap(ValidationResults &a, ValidationResults &b) {
   swap(a.validationResultList, b.validationResultList);
 }
 
-const char* Experiment::ascii_fingerprint = "AAB7BCD0F1CB7A0198FEF5DB532788A8";
-const uint8_t Experiment::binary_fingerprint[16] = {0xAA,0xB7,0xBC,0xD0,0xF1,0xCB,0x7A,0x01,0x98,0xFE,0xF5,0xDB,0x53,0x27,0x88,0xA8};
+const char* Experiment::ascii_fingerprint = "2826868ECEA08F4F71C71DEAD5A3270F";
+const uint8_t Experiment::binary_fingerprint[16] = {0x28,0x26,0x86,0x8E,0xCE,0xA0,0x8F,0x4F,0x71,0xC7,0x1D,0xEA,0xD5,0xA3,0x27,0x0F};
 
 uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -2844,6 +2858,14 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
         }
         break;
       case 11:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->gatewayExecutionId);
+          this->__isset.gatewayExecutionId = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 12:
         if (ftype == ::apache::thrift::protocol::T_BOOL) {
           xfer += iprot->readBool(this->enableEmailNotification);
           this->__isset.enableEmailNotification = true;
@@ -2851,7 +2873,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 12:
+      case 13:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->emailAddresses.clear();
@@ -2871,7 +2893,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 13:
+      case 14:
         if (ftype == ::apache::thrift::protocol::T_STRUCT) {
           xfer += this->userConfigurationData.read(iprot);
           this->__isset.userConfigurationData = true;
@@ -2879,7 +2901,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 14:
+      case 15:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->workflowExecutionInstanceId);
           this->__isset.workflowExecutionInstanceId = true;
@@ -2887,7 +2909,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 15:
+      case 16:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->experimentInputs.clear();
@@ -2907,7 +2929,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 16:
+      case 17:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->experimentOutputs.clear();
@@ -2927,7 +2949,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 17:
+      case 18:
         if (ftype == ::apache::thrift::protocol::T_STRUCT) {
           xfer += this->experimentStatus.read(iprot);
           this->__isset.experimentStatus = true;
@@ -2935,7 +2957,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 18:
+      case 19:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->stateChangeList.clear();
@@ -2955,7 +2977,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 19:
+      case 20:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->workflowNodeDetailsList.clear();
@@ -2975,7 +2997,7 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 20:
+      case 21:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->errors.clear();
@@ -3065,13 +3087,18 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeString(this->workflowTemplateVersion);
     xfer += oprot->writeFieldEnd();
   }
+  if (this->__isset.gatewayExecutionId) {
+    xfer += oprot->writeFieldBegin("gatewayExecutionId", ::apache::thrift::protocol::T_STRING, 11);
+    xfer += oprot->writeString(this->gatewayExecutionId);
+    xfer += oprot->writeFieldEnd();
+  }
   if (this->__isset.enableEmailNotification) {
-    xfer += oprot->writeFieldBegin("enableEmailNotification", ::apache::thrift::protocol::T_BOOL, 11);
+    xfer += oprot->writeFieldBegin("enableEmailNotification", ::apache::thrift::protocol::T_BOOL, 12);
     xfer += oprot->writeBool(this->enableEmailNotification);
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.emailAddresses) {
-    xfer += oprot->writeFieldBegin("emailAddresses", ::apache::thrift::protocol::T_LIST, 12);
+    xfer += oprot->writeFieldBegin("emailAddresses", ::apache::thrift::protocol::T_LIST, 13);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->emailAddresses.size()));
       std::vector<std::string> ::const_iterator _iter117;
@@ -3084,17 +3111,17 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.userConfigurationData) {
-    xfer += oprot->writeFieldBegin("userConfigurationData", ::apache::thrift::protocol::T_STRUCT, 13);
+    xfer += oprot->writeFieldBegin("userConfigurationData", ::apache::thrift::protocol::T_STRUCT, 14);
     xfer += this->userConfigurationData.write(oprot);
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.workflowExecutionInstanceId) {
-    xfer += oprot->writeFieldBegin("workflowExecutionInstanceId", ::apache::thrift::protocol::T_STRING, 14);
+    xfer += oprot->writeFieldBegin("workflowExecutionInstanceId", ::apache::thrift::protocol::T_STRING, 15);
     xfer += oprot->writeString(this->workflowExecutionInstanceId);
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.experimentInputs) {
-    xfer += oprot->writeFieldBegin("experimentInputs", ::apache::thrift::protocol::T_LIST, 15);
+    xfer += oprot->writeFieldBegin("experimentInputs", ::apache::thrift::protocol::T_LIST, 16);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->experimentInputs.size()));
       std::vector< ::apache::airavata::model::appcatalog::appinterface::InputDataObjectType> ::const_iterator _iter118;
@@ -3107,7 +3134,7 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.experimentOutputs) {
-    xfer += oprot->writeFieldBegin("experimentOutputs", ::apache::thrift::protocol::T_LIST, 16);
+    xfer += oprot->writeFieldBegin("experimentOutputs", ::apache::thrift::protocol::T_LIST, 17);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->experimentOutputs.size()));
       std::vector< ::apache::airavata::model::appcatalog::appinterface::OutputDataObjectType> ::const_iterator _iter119;
@@ -3120,12 +3147,12 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.experimentStatus) {
-    xfer += oprot->writeFieldBegin("experimentStatus", ::apache::thrift::protocol::T_STRUCT, 17);
+    xfer += oprot->writeFieldBegin("experimentStatus", ::apache::thrift::protocol::T_STRUCT, 18);
     xfer += this->experimentStatus.write(oprot);
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.stateChangeList) {
-    xfer += oprot->writeFieldBegin("stateChangeList", ::apache::thrift::protocol::T_LIST, 18);
+    xfer += oprot->writeFieldBegin("stateChangeList", ::apache::thrift::protocol::T_LIST, 19);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->stateChangeList.size()));
       std::vector<WorkflowNodeStatus> ::const_iterator _iter120;
@@ -3138,7 +3165,7 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.workflowNodeDetailsList) {
-    xfer += oprot->writeFieldBegin("workflowNodeDetailsList", ::apache::thrift::protocol::T_LIST, 19);
+    xfer += oprot->writeFieldBegin("workflowNodeDetailsList", ::apache::thrift::protocol::T_LIST, 20);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->workflowNodeDetailsList.size()));
       std::vector<WorkflowNodeDetails> ::const_iterator _iter121;
@@ -3151,7 +3178,7 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.errors) {
-    xfer += oprot->writeFieldBegin("errors", ::apache::thrift::protocol::T_LIST, 20);
+    xfer += oprot->writeFieldBegin("errors", ::apache::thrift::protocol::T_LIST, 21);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->errors.size()));
       std::vector<ErrorDetails> ::const_iterator _iter122;
@@ -3180,6 +3207,7 @@ void swap(Experiment &a, Experiment &b) {
   swap(a.applicationVersion, b.applicationVersion);
   swap(a.workflowTemplateId, b.workflowTemplateId);
   swap(a.workflowTemplateVersion, b.workflowTemplateVersion);
+  swap(a.gatewayExecutionId, b.gatewayExecutionId);
   swap(a.enableEmailNotification, b.enableEmailNotification);
   swap(a.emailAddresses, b.emailAddresses);
   swap(a.userConfigurationData, b.userConfigurationData);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
index b09c480..3f7f2b7 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
@@ -1122,22 +1122,23 @@ class ErrorDetails {
 void swap(ErrorDetails &a, ErrorDetails &b);
 
 typedef struct _JobDetails__isset {
-  _JobDetails__isset() : creationTime(false), jobStatus(false), applicationStatus(false), errors(false), computeResourceConsumed(false), jobName(false) {}
+  _JobDetails__isset() : creationTime(false), jobStatus(false), applicationStatus(false), errors(false), computeResourceConsumed(false), jobName(false), workingDir(false) {}
   bool creationTime;
   bool jobStatus;
   bool applicationStatus;
   bool errors;
   bool computeResourceConsumed;
   bool jobName;
+  bool workingDir;
 } _JobDetails__isset;
 
 class JobDetails {
  public:
 
-  static const char* ascii_fingerprint; // = "827E1049FA5B4D33C335B59DE49B8F88";
-  static const uint8_t binary_fingerprint[16]; // = {0x82,0x7E,0x10,0x49,0xFA,0x5B,0x4D,0x33,0xC3,0x35,0xB5,0x9D,0xE4,0x9B,0x8F,0x88};
+  static const char* ascii_fingerprint; // = "114EFEA8CA07DC82CC947D9F47547394";
+  static const uint8_t binary_fingerprint[16]; // = {0x11,0x4E,0xFE,0xA8,0xCA,0x07,0xDC,0x82,0xCC,0x94,0x7D,0x9F,0x47,0x54,0x73,0x94};
 
-  JobDetails() : jobID("DO_NOT_SET_AT_CLIENTS"), jobDescription(), creationTime(0), computeResourceConsumed(), jobName() {
+  JobDetails() : jobID("DO_NOT_SET_AT_CLIENTS"), jobDescription(), creationTime(0), computeResourceConsumed(), jobName(), workingDir() {
   }
 
   virtual ~JobDetails() throw() {}
@@ -1150,6 +1151,7 @@ class JobDetails {
   std::vector<ErrorDetails>  errors;
   std::string computeResourceConsumed;
   std::string jobName;
+  std::string workingDir;
 
   _JobDetails__isset __isset;
 
@@ -1191,6 +1193,11 @@ class JobDetails {
     __isset.jobName = true;
   }
 
+  void __set_workingDir(const std::string& val) {
+    workingDir = val;
+    __isset.workingDir = true;
+  }
+
   bool operator == (const JobDetails & rhs) const
   {
     if (!(jobID == rhs.jobID))
@@ -1221,6 +1228,10 @@ class JobDetails {
       return false;
     else if (__isset.jobName && !(jobName == rhs.jobName))
       return false;
+    if (__isset.workingDir != rhs.__isset.workingDir)
+      return false;
+    else if (__isset.workingDir && !(workingDir == rhs.workingDir))
+      return false;
     return true;
   }
   bool operator != (const JobDetails &rhs) const {
@@ -1329,8 +1340,8 @@ typedef struct _TaskDetails__isset {
 class TaskDetails {
  public:
 
-  static const char* ascii_fingerprint; // = "88276CFCC9B30CA0B93A5931F93CACC4";
-  static const uint8_t binary_fingerprint[16]; // = {0x88,0x27,0x6C,0xFC,0xC9,0xB3,0x0C,0xA0,0xB9,0x3A,0x59,0x31,0xF9,0x3C,0xAC,0xC4};
+  static const char* ascii_fingerprint; // = "B7529305C4CBCDA0A164DA14865F0E67";
+  static const uint8_t binary_fingerprint[16]; // = {0xB7,0x52,0x93,0x05,0xC4,0xCB,0xCD,0xA0,0xA1,0x64,0xDA,0x14,0x86,0x5F,0x0E,0x67};
 
   TaskDetails() : taskID("DO_NOT_SET_AT_CLIENTS"), creationTime(0), applicationId(), applicationVersion(), applicationDeploymentId(), enableEmailNotification(0) {
   }
@@ -1528,8 +1539,8 @@ typedef struct _WorkflowNodeDetails__isset {
 class WorkflowNodeDetails {
  public:
 
-  static const char* ascii_fingerprint; // = "940AB958A2909A83261C2016BD466838";
-  static const uint8_t binary_fingerprint[16]; // = {0x94,0x0A,0xB9,0x58,0xA2,0x90,0x9A,0x83,0x26,0x1C,0x20,0x16,0xBD,0x46,0x68,0x38};
+  static const char* ascii_fingerprint; // = "EB2D51CB4EF4984664FB9C47591EFA8D";
+  static const uint8_t binary_fingerprint[16]; // = {0xEB,0x2D,0x51,0xCB,0x4E,0xF4,0x98,0x46,0x64,0xFB,0x9C,0x47,0x59,0x1E,0xFA,0x8D};
 
   WorkflowNodeDetails() : nodeInstanceId("DO_NOT_SET_AT_CLIENTS"), creationTime(0), nodeName("SINGLE_APP_NODE"), executionUnit((ExecutionUnit::type)1), executionUnitData() {
     executionUnit = (ExecutionUnit::type)1;
@@ -1747,13 +1758,14 @@ class ValidationResults {
 void swap(ValidationResults &a, ValidationResults &b);
 
 typedef struct _Experiment__isset {
-  _Experiment__isset() : creationTime(false), description(false), applicationId(false), applicationVersion(false), workflowTemplateId(false), workflowTemplateVersion(false), enableEmailNotification(false), emailAddresses(false), userConfigurationData(false), workflowExecutionInstanceId(false), experimentInputs(false), experimentOutputs(false), experimentStatus(false), stateChangeList(false), workflowNodeDetailsList(false), errors(false) {}
+  _Experiment__isset() : creationTime(false), description(false), applicationId(false), applicationVersion(false), workflowTemplateId(false), workflowTemplateVersion(false), gatewayExecutionId(false), enableEmailNotification(false), emailAddresses(false), userConfigurationData(false), workflowExecutionInstanceId(false), experimentInputs(false), experimentOutputs(false), experimentStatus(false), stateChangeList(false), workflowNodeDetailsList(false), errors(false) {}
   bool creationTime;
   bool description;
   bool applicationId;
   bool applicationVersion;
   bool workflowTemplateId;
   bool workflowTemplateVersion;
+  bool gatewayExecutionId;
   bool enableEmailNotification;
   bool emailAddresses;
   bool userConfigurationData;
@@ -1769,10 +1781,10 @@ typedef struct _Experiment__isset {
 class Experiment {
  public:
 
-  static const char* ascii_fingerprint; // = "AAB7BCD0F1CB7A0198FEF5DB532788A8";
-  static const uint8_t binary_fingerprint[16]; // = {0xAA,0xB7,0xBC,0xD0,0xF1,0xCB,0x7A,0x01,0x98,0xFE,0xF5,0xDB,0x53,0x27,0x88,0xA8};
+  static const char* ascii_fingerprint; // = "2826868ECEA08F4F71C71DEAD5A3270F";
+  static const uint8_t binary_fingerprint[16]; // = {0x28,0x26,0x86,0x8E,0xCE,0xA0,0x8F,0x4F,0x71,0xC7,0x1D,0xEA,0xD5,0xA3,0x27,0x0F};
 
-  Experiment() : experimentID("DO_NOT_SET_AT_CLIENTS"), projectID("DEFAULT"), creationTime(0), userName(), name(), description(), applicationId(), applicationVersion(), workflowTemplateId(), workflowTemplateVersion(), enableEmailNotification(0), workflowExecutionInstanceId() {
+  Experiment() : experimentID("DO_NOT_SET_AT_CLIENTS"), projectID("DEFAULT"), creationTime(0), userName(), name(), description(), applicationId(), applicationVersion(), workflowTemplateId(), workflowTemplateVersion(), gatewayExecutionId(), enableEmailNotification(0), workflowExecutionInstanceId() {
   }
 
   virtual ~Experiment() throw() {}
@@ -1787,6 +1799,7 @@ class Experiment {
   std::string applicationVersion;
   std::string workflowTemplateId;
   std::string workflowTemplateVersion;
+  std::string gatewayExecutionId;
   bool enableEmailNotification;
   std::vector<std::string>  emailAddresses;
   UserConfigurationData userConfigurationData;
@@ -1846,6 +1859,11 @@ class Experiment {
     __isset.workflowTemplateVersion = true;
   }
 
+  void __set_gatewayExecutionId(const std::string& val) {
+    gatewayExecutionId = val;
+    __isset.gatewayExecutionId = true;
+  }
+
   void __set_enableEmailNotification(const bool val) {
     enableEmailNotification = val;
     __isset.enableEmailNotification = true;
@@ -1930,6 +1948,10 @@ class Experiment {
       return false;
     else if (__isset.workflowTemplateVersion && !(workflowTemplateVersion == rhs.workflowTemplateVersion))
       return false;
+    if (__isset.gatewayExecutionId != rhs.__isset.gatewayExecutionId)
+      return false;
+    else if (__isset.gatewayExecutionId && !(gatewayExecutionId == rhs.gatewayExecutionId))
+      return false;
     if (__isset.enableEmailNotification != rhs.__isset.enableEmailNotification)
       return false;
     else if (__isset.enableEmailNotification && !(enableEmailNotification == rhs.enableEmailNotification))

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
index 6ad1be0..753dc13 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
@@ -1917,6 +1917,7 @@ class JobDetails {
   public $errors = null;
   public $computeResourceConsumed = null;
   public $jobName = null;
+  public $workingDir = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -1960,6 +1961,10 @@ class JobDetails {
           'var' => 'jobName',
           'type' => TType::STRING,
           ),
+        9 => array(
+          'var' => 'workingDir',
+          'type' => TType::STRING,
+          ),
         );
     }
     if (is_array($vals)) {
@@ -1987,6 +1992,9 @@ class JobDetails {
       if (isset($vals['jobName'])) {
         $this->jobName = $vals['jobName'];
       }
+      if (isset($vals['workingDir'])) {
+        $this->workingDir = $vals['workingDir'];
+      }
     }
   }
 
@@ -2078,6 +2086,13 @@ class JobDetails {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 9:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workingDir);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -2149,6 +2164,11 @@ class JobDetails {
       $xfer += $output->writeString($this->jobName);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->workingDir !== null) {
+      $xfer += $output->writeFieldBegin('workingDir', TType::STRING, 9);
+      $xfer += $output->writeString($this->workingDir);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
@@ -3445,6 +3465,7 @@ class Experiment {
   public $applicationVersion = null;
   public $workflowTemplateId = null;
   public $workflowTemplateVersion = null;
+  public $gatewayExecutionId = null;
   public $enableEmailNotification = null;
   public $emailAddresses = null;
   public $userConfigurationData = null;
@@ -3500,10 +3521,14 @@ class Experiment {
           'type' => TType::STRING,
           ),
         11 => array(
+          'var' => 'gatewayExecutionId',
+          'type' => TType::STRING,
+          ),
+        12 => array(
           'var' => 'enableEmailNotification',
           'type' => TType::BOOL,
           ),
-        12 => array(
+        13 => array(
           'var' => 'emailAddresses',
           'type' => TType::LST,
           'etype' => TType::STRING,
@@ -3511,16 +3536,16 @@ class Experiment {
             'type' => TType::STRING,
             ),
           ),
-        13 => array(
+        14 => array(
           'var' => 'userConfigurationData',
           'type' => TType::STRUCT,
           'class' => '\Airavata\Model\Workspace\Experiment\UserConfigurationData',
           ),
-        14 => array(
+        15 => array(
           'var' => 'workflowExecutionInstanceId',
           'type' => TType::STRING,
           ),
-        15 => array(
+        16 => array(
           'var' => 'experimentInputs',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3529,7 +3554,7 @@ class Experiment {
             'class' => '\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType',
             ),
           ),
-        16 => array(
+        17 => array(
           'var' => 'experimentOutputs',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3538,12 +3563,12 @@ class Experiment {
             'class' => '\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType',
             ),
           ),
-        17 => array(
+        18 => array(
           'var' => 'experimentStatus',
           'type' => TType::STRUCT,
           'class' => '\Airavata\Model\Workspace\Experiment\ExperimentStatus',
           ),
-        18 => array(
+        19 => array(
           'var' => 'stateChangeList',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3552,7 +3577,7 @@ class Experiment {
             'class' => '\Airavata\Model\Workspace\Experiment\WorkflowNodeStatus',
             ),
           ),
-        19 => array(
+        20 => array(
           'var' => 'workflowNodeDetailsList',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3561,7 +3586,7 @@ class Experiment {
             'class' => '\Airavata\Model\Workspace\Experiment\WorkflowNodeDetails',
             ),
           ),
-        20 => array(
+        21 => array(
           'var' => 'errors',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3603,6 +3628,9 @@ class Experiment {
       if (isset($vals['workflowTemplateVersion'])) {
         $this->workflowTemplateVersion = $vals['workflowTemplateVersion'];
       }
+      if (isset($vals['gatewayExecutionId'])) {
+        $this->gatewayExecutionId = $vals['gatewayExecutionId'];
+      }
       if (isset($vals['enableEmailNotification'])) {
         $this->enableEmailNotification = $vals['enableEmailNotification'];
       }
@@ -3726,13 +3754,20 @@ class Experiment {
           }
           break;
         case 11:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayExecutionId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 12:
           if ($ftype == TType::BOOL) {
             $xfer += $input->readBool($this->enableEmailNotification);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 12:
+        case 13:
           if ($ftype == TType::LST) {
             $this->emailAddresses = array();
             $_size91 = 0;
@@ -3749,7 +3784,7 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 13:
+        case 14:
           if ($ftype == TType::STRUCT) {
             $this->userConfigurationData = new \Airavata\Model\Workspace\Experiment\UserConfigurationData();
             $xfer += $this->userConfigurationData->read($input);
@@ -3757,14 +3792,14 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 14:
+        case 15:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->workflowExecutionInstanceId);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 15:
+        case 16:
           if ($ftype == TType::LST) {
             $this->experimentInputs = array();
             $_size97 = 0;
@@ -3782,7 +3817,7 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 16:
+        case 17:
           if ($ftype == TType::LST) {
             $this->experimentOutputs = array();
             $_size103 = 0;
@@ -3800,7 +3835,7 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 17:
+        case 18:
           if ($ftype == TType::STRUCT) {
             $this->experimentStatus = new \Airavata\Model\Workspace\Experiment\ExperimentStatus();
             $xfer += $this->experimentStatus->read($input);
@@ -3808,7 +3843,7 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 18:
+        case 19:
           if ($ftype == TType::LST) {
             $this->stateChangeList = array();
             $_size109 = 0;
@@ -3826,7 +3861,7 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 19:
+        case 20:
           if ($ftype == TType::LST) {
             $this->workflowNodeDetailsList = array();
             $_size115 = 0;
@@ -3844,7 +3879,7 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 20:
+        case 21:
           if ($ftype == TType::LST) {
             $this->errors = array();
             $_size121 = 0;
@@ -3925,8 +3960,13 @@ class Experiment {
       $xfer += $output->writeString($this->workflowTemplateVersion);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->gatewayExecutionId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayExecutionId', TType::STRING, 11);
+      $xfer += $output->writeString($this->gatewayExecutionId);
+      $xfer += $output->writeFieldEnd();
+    }
     if ($this->enableEmailNotification !== null) {
-      $xfer += $output->writeFieldBegin('enableEmailNotification', TType::BOOL, 11);
+      $xfer += $output->writeFieldBegin('enableEmailNotification', TType::BOOL, 12);
       $xfer += $output->writeBool($this->enableEmailNotification);
       $xfer += $output->writeFieldEnd();
     }
@@ -3934,7 +3974,7 @@ class Experiment {
       if (!is_array($this->emailAddresses)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('emailAddresses', TType::LST, 12);
+      $xfer += $output->writeFieldBegin('emailAddresses', TType::LST, 13);
       {
         $output->writeListBegin(TType::STRING, count($this->emailAddresses));
         {
@@ -3951,12 +3991,12 @@ class Experiment {
       if (!is_object($this->userConfigurationData)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('userConfigurationData', TType::STRUCT, 13);
+      $xfer += $output->writeFieldBegin('userConfigurationData', TType::STRUCT, 14);
       $xfer += $this->userConfigurationData->write($output);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->workflowExecutionInstanceId !== null) {
-      $xfer += $output->writeFieldBegin('workflowExecutionInstanceId', TType::STRING, 14);
+      $xfer += $output->writeFieldBegin('workflowExecutionInstanceId', TType::STRING, 15);
       $xfer += $output->writeString($this->workflowExecutionInstanceId);
       $xfer += $output->writeFieldEnd();
     }
@@ -3964,7 +4004,7 @@ class Experiment {
       if (!is_array($this->experimentInputs)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('experimentInputs', TType::LST, 15);
+      $xfer += $output->writeFieldBegin('experimentInputs', TType::LST, 16);
       {
         $output->writeListBegin(TType::STRUCT, count($this->experimentInputs));
         {
@@ -3981,7 +4021,7 @@ class Experiment {
       if (!is_array($this->experimentOutputs)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('experimentOutputs', TType::LST, 16);
+      $xfer += $output->writeFieldBegin('experimentOutputs', TType::LST, 17);
       {
         $output->writeListBegin(TType::STRUCT, count($this->experimentOutputs));
         {
@@ -3998,7 +4038,7 @@ class Experiment {
       if (!is_object($this->experimentStatus)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('experimentStatus', TType::STRUCT, 17);
+      $xfer += $output->writeFieldBegin('experimentStatus', TType::STRUCT, 18);
       $xfer += $this->experimentStatus->write($output);
       $xfer += $output->writeFieldEnd();
     }
@@ -4006,7 +4046,7 @@ class Experiment {
       if (!is_array($this->stateChangeList)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('stateChangeList', TType::LST, 18);
+      $xfer += $output->writeFieldBegin('stateChangeList', TType::LST, 19);
       {
         $output->writeListBegin(TType::STRUCT, count($this->stateChangeList));
         {
@@ -4023,7 +4063,7 @@ class Experiment {
       if (!is_array($this->workflowNodeDetailsList)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('workflowNodeDetailsList', TType::LST, 19);
+      $xfer += $output->writeFieldBegin('workflowNodeDetailsList', TType::LST, 20);
       {
         $output->writeListBegin(TType::STRUCT, count($this->workflowNodeDetailsList));
         {
@@ -4040,7 +4080,7 @@ class Experiment {
       if (!is_array($this->errors)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('errors', TType::LST, 20);
+      $xfer += $output->writeFieldBegin('errors', TType::LST, 21);
       {
         $output->writeListBegin(TType::STRUCT, count($this->errors));
         {

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/workspace/experiment/ttypes.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/workspace/experiment/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/workspace/experiment/ttypes.py
index 794722e..3ffe2b2 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/workspace/experiment/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/workspace/experiment/ttypes.py
@@ -1569,6 +1569,7 @@ class JobDetails:
    - errors
    - computeResourceConsumed
    - jobName
+   - workingDir
   """
 
   thrift_spec = (
@@ -1581,9 +1582,10 @@ class JobDetails:
     (6, TType.LIST, 'errors', (TType.STRUCT,(ErrorDetails, ErrorDetails.thrift_spec)), None, ), # 6
     (7, TType.STRING, 'computeResourceConsumed', None, None, ), # 7
     (8, TType.STRING, 'jobName', None, None, ), # 8
+    (9, TType.STRING, 'workingDir', None, None, ), # 9
   )
 
-  def __init__(self, jobID=thrift_spec[1][4], jobDescription=None, creationTime=None, jobStatus=None, applicationStatus=None, errors=None, computeResourceConsumed=None, jobName=None,):
+  def __init__(self, jobID=thrift_spec[1][4], jobDescription=None, creationTime=None, jobStatus=None, applicationStatus=None, errors=None, computeResourceConsumed=None, jobName=None, workingDir=None,):
     self.jobID = jobID
     self.jobDescription = jobDescription
     self.creationTime = creationTime
@@ -1592,6 +1594,7 @@ class JobDetails:
     self.errors = errors
     self.computeResourceConsumed = computeResourceConsumed
     self.jobName = jobName
+    self.workingDir = workingDir
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
@@ -1650,6 +1653,11 @@ class JobDetails:
           self.jobName = iprot.readString();
         else:
           iprot.skip(ftype)
+      elif fid == 9:
+        if ftype == TType.STRING:
+          self.workingDir = iprot.readString();
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -1695,6 +1703,10 @@ class JobDetails:
       oprot.writeFieldBegin('jobName', TType.STRING, 8)
       oprot.writeString(self.jobName)
       oprot.writeFieldEnd()
+    if self.workingDir is not None:
+      oprot.writeFieldBegin('workingDir', TType.STRING, 9)
+      oprot.writeString(self.workingDir)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -2529,6 +2541,7 @@ class Experiment:
    - applicationVersion
    - workflowTemplateId
    - workflowTemplateVersion
+   - gatewayExecutionId
    - enableEmailNotification
    - emailAddresses
    - userConfigurationData
@@ -2553,19 +2566,20 @@ class Experiment:
     (8, TType.STRING, 'applicationVersion', None, None, ), # 8
     (9, TType.STRING, 'workflowTemplateId', None, None, ), # 9
     (10, TType.STRING, 'workflowTemplateVersion', None, None, ), # 10
-    (11, TType.BOOL, 'enableEmailNotification', None, None, ), # 11
-    (12, TType.LIST, 'emailAddresses', (TType.STRING,None), None, ), # 12
-    (13, TType.STRUCT, 'userConfigurationData', (UserConfigurationData, UserConfigurationData.thrift_spec), None, ), # 13
-    (14, TType.STRING, 'workflowExecutionInstanceId', None, None, ), # 14
-    (15, TType.LIST, 'experimentInputs', (TType.STRUCT,(apache.airavata.model.appcatalog.appinterface.ttypes.InputDataObjectType, apache.airavata.model.appcatalog.appinterface.ttypes.InputDataObjectType.thrift_spec)), None, ), # 15
-    (16, TType.LIST, 'experimentOutputs', (TType.STRUCT,(apache.airavata.model.appcatalog.appinterface.ttypes.OutputDataObjectType, apache.airavata.model.appcatalog.appinterface.ttypes.OutputDataObjectType.thrift_spec)), None, ), # 16
-    (17, TType.STRUCT, 'experimentStatus', (ExperimentStatus, ExperimentStatus.thrift_spec), None, ), # 17
-    (18, TType.LIST, 'stateChangeList', (TType.STRUCT,(WorkflowNodeStatus, WorkflowNodeStatus.thrift_spec)), None, ), # 18
-    (19, TType.LIST, 'workflowNodeDetailsList', (TType.STRUCT,(WorkflowNodeDetails, WorkflowNodeDetails.thrift_spec)), None, ), # 19
-    (20, TType.LIST, 'errors', (TType.STRUCT,(ErrorDetails, ErrorDetails.thrift_spec)), None, ), # 20
+    (11, TType.STRING, 'gatewayExecutionId', None, None, ), # 11
+    (12, TType.BOOL, 'enableEmailNotification', None, None, ), # 12
+    (13, TType.LIST, 'emailAddresses', (TType.STRING,None), None, ), # 13
+    (14, TType.STRUCT, 'userConfigurationData', (UserConfigurationData, UserConfigurationData.thrift_spec), None, ), # 14
+    (15, TType.STRING, 'workflowExecutionInstanceId', None, None, ), # 15
+    (16, TType.LIST, 'experimentInputs', (TType.STRUCT,(apache.airavata.model.appcatalog.appinterface.ttypes.InputDataObjectType, apache.airavata.model.appcatalog.appinterface.ttypes.InputDataObjectType.thrift_spec)), None, ), # 16
+    (17, TType.LIST, 'experimentOutputs', (TType.STRUCT,(apache.airavata.model.appcatalog.appinterface.ttypes.OutputDataObjectType, apache.airavata.model.appcatalog.appinterface.ttypes.OutputDataObjectType.thrift_spec)), None, ), # 17
+    (18, TType.STRUCT, 'experimentStatus', (ExperimentStatus, ExperimentStatus.thrift_spec), None, ), # 18
+    (19, TType.LIST, 'stateChangeList', (TType.STRUCT,(WorkflowNodeStatus, WorkflowNodeStatus.thrift_spec)), None, ), # 19
+    (20, TType.LIST, 'workflowNodeDetailsList', (TType.STRUCT,(WorkflowNodeDetails, WorkflowNodeDetails.thrift_spec)), None, ), # 20
+    (21, TType.LIST, 'errors', (TType.STRUCT,(ErrorDetails, ErrorDetails.thrift_spec)), None, ), # 21
   )
 
-  def __init__(self, experimentID=thrift_spec[1][4], projectID=thrift_spec[2][4], creationTime=None, userName=None, name=None, description=None, applicationId=None, applicationVersion=None, workflowTemplateId=None, workflowTemplateVersion=None, enableEmailNotification=None, emailAddresses=None, userConfigurationData=None, workflowExecutionInstanceId=None, experimentInputs=None, experimentOutputs=None, experimentStatus=None, stateChangeList=None, workflowNodeDetailsList=None, errors=None,):
+  def __init__(self, experimentID=thrift_spec[1][4], projectID=thrift_spec[2][4], creationTime=None, userName=None, name=None, description=None, applicationId=None, applicationVersion=None, workflowTemplateId=None, workflowTemplateVersion=None, gatewayExecutionId=None, enableEmailNotification=None, emailAddresses=None, userConfigurationData=None, workflowExecutionInstanceId=None, experimentInputs=None, experimentOutputs=None, experimentStatus=None, stateChangeList=None, workflowNodeDetailsList=None, errors=None,):
     self.experimentID = experimentID
     self.projectID = projectID
     self.creationTime = creationTime
@@ -2576,6 +2590,7 @@ class Experiment:
     self.applicationVersion = applicationVersion
     self.workflowTemplateId = workflowTemplateId
     self.workflowTemplateVersion = workflowTemplateVersion
+    self.gatewayExecutionId = gatewayExecutionId
     self.enableEmailNotification = enableEmailNotification
     self.emailAddresses = emailAddresses
     self.userConfigurationData = userConfigurationData
@@ -2647,11 +2662,16 @@ class Experiment:
         else:
           iprot.skip(ftype)
       elif fid == 11:
+        if ftype == TType.STRING:
+          self.gatewayExecutionId = iprot.readString();
+        else:
+          iprot.skip(ftype)
+      elif fid == 12:
         if ftype == TType.BOOL:
           self.enableEmailNotification = iprot.readBool();
         else:
           iprot.skip(ftype)
-      elif fid == 12:
+      elif fid == 13:
         if ftype == TType.LIST:
           self.emailAddresses = []
           (_etype94, _size91) = iprot.readListBegin()
@@ -2661,18 +2681,18 @@ class Experiment:
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
-      elif fid == 13:
+      elif fid == 14:
         if ftype == TType.STRUCT:
           self.userConfigurationData = UserConfigurationData()
           self.userConfigurationData.read(iprot)
         else:
           iprot.skip(ftype)
-      elif fid == 14:
+      elif fid == 15:
         if ftype == TType.STRING:
           self.workflowExecutionInstanceId = iprot.readString();
         else:
           iprot.skip(ftype)
-      elif fid == 15:
+      elif fid == 16:
         if ftype == TType.LIST:
           self.experimentInputs = []
           (_etype100, _size97) = iprot.readListBegin()
@@ -2683,7 +2703,7 @@ class Experiment:
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
-      elif fid == 16:
+      elif fid == 17:
         if ftype == TType.LIST:
           self.experimentOutputs = []
           (_etype106, _size103) = iprot.readListBegin()
@@ -2694,13 +2714,13 @@ class Experiment:
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
-      elif fid == 17:
+      elif fid == 18:
         if ftype == TType.STRUCT:
           self.experimentStatus = ExperimentStatus()
           self.experimentStatus.read(iprot)
         else:
           iprot.skip(ftype)
-      elif fid == 18:
+      elif fid == 19:
         if ftype == TType.LIST:
           self.stateChangeList = []
           (_etype112, _size109) = iprot.readListBegin()
@@ -2711,7 +2731,7 @@ class Experiment:
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
-      elif fid == 19:
+      elif fid == 20:
         if ftype == TType.LIST:
           self.workflowNodeDetailsList = []
           (_etype118, _size115) = iprot.readListBegin()
@@ -2722,7 +2742,7 @@ class Experiment:
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
-      elif fid == 20:
+      elif fid == 21:
         if ftype == TType.LIST:
           self.errors = []
           (_etype124, _size121) = iprot.readListBegin()
@@ -2783,59 +2803,63 @@ class Experiment:
       oprot.writeFieldBegin('workflowTemplateVersion', TType.STRING, 10)
       oprot.writeString(self.workflowTemplateVersion)
       oprot.writeFieldEnd()
+    if self.gatewayExecutionId is not None:
+      oprot.writeFieldBegin('gatewayExecutionId', TType.STRING, 11)
+      oprot.writeString(self.gatewayExecutionId)
+      oprot.writeFieldEnd()
     if self.enableEmailNotification is not None:
-      oprot.writeFieldBegin('enableEmailNotification', TType.BOOL, 11)
+      oprot.writeFieldBegin('enableEmailNotification', TType.BOOL, 12)
       oprot.writeBool(self.enableEmailNotification)
       oprot.writeFieldEnd()
     if self.emailAddresses is not None:
-      oprot.writeFieldBegin('emailAddresses', TType.LIST, 12)
+      oprot.writeFieldBegin('emailAddresses', TType.LIST, 13)
       oprot.writeListBegin(TType.STRING, len(self.emailAddresses))
       for iter127 in self.emailAddresses:
         oprot.writeString(iter127)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.userConfigurationData is not None:
-      oprot.writeFieldBegin('userConfigurationData', TType.STRUCT, 13)
+      oprot.writeFieldBegin('userConfigurationData', TType.STRUCT, 14)
       self.userConfigurationData.write(oprot)
       oprot.writeFieldEnd()
     if self.workflowExecutionInstanceId is not None:
-      oprot.writeFieldBegin('workflowExecutionInstanceId', TType.STRING, 14)
+      oprot.writeFieldBegin('workflowExecutionInstanceId', TType.STRING, 15)
       oprot.writeString(self.workflowExecutionInstanceId)
       oprot.writeFieldEnd()
     if self.experimentInputs is not None:
-      oprot.writeFieldBegin('experimentInputs', TType.LIST, 15)
+      oprot.writeFieldBegin('experimentInputs', TType.LIST, 16)
       oprot.writeListBegin(TType.STRUCT, len(self.experimentInputs))
       for iter128 in self.experimentInputs:
         iter128.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.experimentOutputs is not None:
-      oprot.writeFieldBegin('experimentOutputs', TType.LIST, 16)
+      oprot.writeFieldBegin('experimentOutputs', TType.LIST, 17)
       oprot.writeListBegin(TType.STRUCT, len(self.experimentOutputs))
       for iter129 in self.experimentOutputs:
         iter129.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.experimentStatus is not None:
-      oprot.writeFieldBegin('experimentStatus', TType.STRUCT, 17)
+      oprot.writeFieldBegin('experimentStatus', TType.STRUCT, 18)
       self.experimentStatus.write(oprot)
       oprot.writeFieldEnd()
     if self.stateChangeList is not None:
-      oprot.writeFieldBegin('stateChangeList', TType.LIST, 18)
+      oprot.writeFieldBegin('stateChangeList', TType.LIST, 19)
       oprot.writeListBegin(TType.STRUCT, len(self.stateChangeList))
       for iter130 in self.stateChangeList:
         iter130.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.workflowNodeDetailsList is not None:
-      oprot.writeFieldBegin('workflowNodeDetailsList', TType.LIST, 19)
+      oprot.writeFieldBegin('workflowNodeDetailsList', TType.LIST, 20)
       oprot.writeListBegin(TType.STRUCT, len(self.workflowNodeDetailsList))
       for iter131 in self.workflowNodeDetailsList:
         iter131.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.errors is not None:
-      oprot.writeFieldBegin('errors', TType.LIST, 20)
+      oprot.writeFieldBegin('errors', TType.LIST, 21)
       oprot.writeListBegin(TType.STRUCT, len(self.errors))
       for iter132 in self.errors:
         iter132.write(oprot)

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java
index 25417ec..60d6b32 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java
@@ -78,16 +78,17 @@ import org.slf4j.LoggerFactory;
   private static final org.apache.thrift.protocol.TField APPLICATION_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("applicationVersion", org.apache.thrift.protocol.TType.STRING, (short)8);
   private static final org.apache.thrift.protocol.TField WORKFLOW_TEMPLATE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowTemplateId", org.apache.thrift.protocol.TType.STRING, (short)9);
   private static final org.apache.thrift.protocol.TField WORKFLOW_TEMPLATE_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowTemplateVersion", org.apache.thrift.protocol.TType.STRING, (short)10);
-  private static final org.apache.thrift.protocol.TField ENABLE_EMAIL_NOTIFICATION_FIELD_DESC = new org.apache.thrift.protocol.TField("enableEmailNotification", org.apache.thrift.protocol.TType.BOOL, (short)11);
-  private static final org.apache.thrift.protocol.TField EMAIL_ADDRESSES_FIELD_DESC = new org.apache.thrift.protocol.TField("emailAddresses", org.apache.thrift.protocol.TType.LIST, (short)12);
-  private static final org.apache.thrift.protocol.TField USER_CONFIGURATION_DATA_FIELD_DESC = new org.apache.thrift.protocol.TField("userConfigurationData", org.apache.thrift.protocol.TType.STRUCT, (short)13);
-  private static final org.apache.thrift.protocol.TField WORKFLOW_EXECUTION_INSTANCE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowExecutionInstanceId", org.apache.thrift.protocol.TType.STRING, (short)14);
-  private static final org.apache.thrift.protocol.TField EXPERIMENT_INPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentInputs", org.apache.thrift.protocol.TType.LIST, (short)15);
-  private static final org.apache.thrift.protocol.TField EXPERIMENT_OUTPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentOutputs", org.apache.thrift.protocol.TType.LIST, (short)16);
-  private static final org.apache.thrift.protocol.TField EXPERIMENT_STATUS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentStatus", org.apache.thrift.protocol.TType.STRUCT, (short)17);
-  private static final org.apache.thrift.protocol.TField STATE_CHANGE_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("stateChangeList", org.apache.thrift.protocol.TType.LIST, (short)18);
-  private static final org.apache.thrift.protocol.TField WORKFLOW_NODE_DETAILS_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowNodeDetailsList", org.apache.thrift.protocol.TType.LIST, (short)19);
-  private static final org.apache.thrift.protocol.TField ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("errors", org.apache.thrift.protocol.TType.LIST, (short)20);
+  private static final org.apache.thrift.protocol.TField GATEWAY_EXECUTION_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayExecutionId", org.apache.thrift.protocol.TType.STRING, (short)11);
+  private static final org.apache.thrift.protocol.TField ENABLE_EMAIL_NOTIFICATION_FIELD_DESC = new org.apache.thrift.protocol.TField("enableEmailNotification", org.apache.thrift.protocol.TType.BOOL, (short)12);
+  private static final org.apache.thrift.protocol.TField EMAIL_ADDRESSES_FIELD_DESC = new org.apache.thrift.protocol.TField("emailAddresses", org.apache.thrift.protocol.TType.LIST, (short)13);
+  private static final org.apache.thrift.protocol.TField USER_CONFIGURATION_DATA_FIELD_DESC = new org.apache.thrift.protocol.TField("userConfigurationData", org.apache.thrift.protocol.TType.STRUCT, (short)14);
+  private static final org.apache.thrift.protocol.TField WORKFLOW_EXECUTION_INSTANCE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowExecutionInstanceId", org.apache.thrift.protocol.TType.STRING, (short)15);
+  private static final org.apache.thrift.protocol.TField EXPERIMENT_INPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentInputs", org.apache.thrift.protocol.TType.LIST, (short)16);
+  private static final org.apache.thrift.protocol.TField EXPERIMENT_OUTPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentOutputs", org.apache.thrift.protocol.TType.LIST, (short)17);
+  private static final org.apache.thrift.protocol.TField EXPERIMENT_STATUS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentStatus", org.apache.thrift.protocol.TType.STRUCT, (short)18);
+  private static final org.apache.thrift.protocol.TField STATE_CHANGE_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("stateChangeList", org.apache.thrift.protocol.TType.LIST, (short)19);
+  private static final org.apache.thrift.protocol.TField WORKFLOW_NODE_DETAILS_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowNodeDetailsList", org.apache.thrift.protocol.TType.LIST, (short)20);
+  private static final org.apache.thrift.protocol.TField ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("errors", org.apache.thrift.protocol.TType.LIST, (short)21);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -105,6 +106,7 @@ import org.slf4j.LoggerFactory;
   private String applicationVersion; // optional
   private String workflowTemplateId; // optional
   private String workflowTemplateVersion; // optional
+  private String gatewayExecutionId; // optional
   private boolean enableEmailNotification; // optional
   private List<String> emailAddresses; // optional
   private UserConfigurationData userConfigurationData; // optional
@@ -128,16 +130,17 @@ import org.slf4j.LoggerFactory;
     APPLICATION_VERSION((short)8, "applicationVersion"),
     WORKFLOW_TEMPLATE_ID((short)9, "workflowTemplateId"),
     WORKFLOW_TEMPLATE_VERSION((short)10, "workflowTemplateVersion"),
-    ENABLE_EMAIL_NOTIFICATION((short)11, "enableEmailNotification"),
-    EMAIL_ADDRESSES((short)12, "emailAddresses"),
-    USER_CONFIGURATION_DATA((short)13, "userConfigurationData"),
-    WORKFLOW_EXECUTION_INSTANCE_ID((short)14, "workflowExecutionInstanceId"),
-    EXPERIMENT_INPUTS((short)15, "experimentInputs"),
-    EXPERIMENT_OUTPUTS((short)16, "experimentOutputs"),
-    EXPERIMENT_STATUS((short)17, "experimentStatus"),
-    STATE_CHANGE_LIST((short)18, "stateChangeList"),
-    WORKFLOW_NODE_DETAILS_LIST((short)19, "workflowNodeDetailsList"),
-    ERRORS((short)20, "errors");
+    GATEWAY_EXECUTION_ID((short)11, "gatewayExecutionId"),
+    ENABLE_EMAIL_NOTIFICATION((short)12, "enableEmailNotification"),
+    EMAIL_ADDRESSES((short)13, "emailAddresses"),
+    USER_CONFIGURATION_DATA((short)14, "userConfigurationData"),
+    WORKFLOW_EXECUTION_INSTANCE_ID((short)15, "workflowExecutionInstanceId"),
+    EXPERIMENT_INPUTS((short)16, "experimentInputs"),
+    EXPERIMENT_OUTPUTS((short)17, "experimentOutputs"),
+    EXPERIMENT_STATUS((short)18, "experimentStatus"),
+    STATE_CHANGE_LIST((short)19, "stateChangeList"),
+    WORKFLOW_NODE_DETAILS_LIST((short)20, "workflowNodeDetailsList"),
+    ERRORS((short)21, "errors");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -172,25 +175,27 @@ import org.slf4j.LoggerFactory;
           return WORKFLOW_TEMPLATE_ID;
         case 10: // WORKFLOW_TEMPLATE_VERSION
           return WORKFLOW_TEMPLATE_VERSION;
-        case 11: // ENABLE_EMAIL_NOTIFICATION
+        case 11: // GATEWAY_EXECUTION_ID
+          return GATEWAY_EXECUTION_ID;
+        case 12: // ENABLE_EMAIL_NOTIFICATION
           return ENABLE_EMAIL_NOTIFICATION;
-        case 12: // EMAIL_ADDRESSES
+        case 13: // EMAIL_ADDRESSES
           return EMAIL_ADDRESSES;
-        case 13: // USER_CONFIGURATION_DATA
+        case 14: // USER_CONFIGURATION_DATA
           return USER_CONFIGURATION_DATA;
-        case 14: // WORKFLOW_EXECUTION_INSTANCE_ID
+        case 15: // WORKFLOW_EXECUTION_INSTANCE_ID
           return WORKFLOW_EXECUTION_INSTANCE_ID;
-        case 15: // EXPERIMENT_INPUTS
+        case 16: // EXPERIMENT_INPUTS
           return EXPERIMENT_INPUTS;
-        case 16: // EXPERIMENT_OUTPUTS
+        case 17: // EXPERIMENT_OUTPUTS
           return EXPERIMENT_OUTPUTS;
-        case 17: // EXPERIMENT_STATUS
+        case 18: // EXPERIMENT_STATUS
           return EXPERIMENT_STATUS;
-        case 18: // STATE_CHANGE_LIST
+        case 19: // STATE_CHANGE_LIST
           return STATE_CHANGE_LIST;
-        case 19: // WORKFLOW_NODE_DETAILS_LIST
+        case 20: // WORKFLOW_NODE_DETAILS_LIST
           return WORKFLOW_NODE_DETAILS_LIST;
-        case 20: // ERRORS
+        case 21: // ERRORS
           return ERRORS;
         default:
           return null;
@@ -235,7 +240,7 @@ import org.slf4j.LoggerFactory;
   private static final int __CREATIONTIME_ISSET_ID = 0;
   private static final int __ENABLEEMAILNOTIFICATION_ISSET_ID = 1;
   private byte __isset_bitfield = 0;
-  private _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.DESCRIPTION,_Fields.APPLICATION_ID,_Fields.APPLICATION_VERSION,_Fields.WORKFLOW_TEMPLATE_ID,_Fields.WORKFLOW_TEMPLATE_VERSION,_Fields.ENABLE_EMAIL_NOTIFICATION,_Fields.EMAIL_ADDRESSES,_Fields.USER_CONFIGURATION_DATA,_Fields.WORKFLOW_EXECUTION_INSTANCE_ID,_Fields.EXPERIMENT_INPUTS,_Fields.EXPERIMENT_OUTPUTS,_Fields.EXPERIMENT_STATUS,_Fields.STATE_CHANGE_LIST,_Fields.WORKFLOW_NODE_DETAILS_LIST,_Fields.ERRORS};
+  private _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.DESCRIPTION,_Fields.APPLICATION_ID,_Fields.APPLICATION_VERSION,_Fields.WORKFLOW_TEMPLATE_ID,_Fields.WORKFLOW_TEMPLATE_VERSION,_Fields.GATEWAY_EXECUTION_ID,_Fields.ENABLE_EMAIL_NOTIFICATION,_Fields.EMAIL_ADDRESSES,_Fields.USER_CONFIGURATION_DATA,_Fields.WORKFLOW_EXECUTION_INSTANCE_ID,_Fields.EXPERIMENT_INPUTS,_Fields.EXPERIMENT_OUTPUTS,_Fields.EXPERIMENT_STATUS,_Fields.STATE_CHANGE_LIST,_Fields.WORKFLOW_NODE_DETAILS_LIST,_Fields.ERRORS};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -259,6 +264,8 @@ import org.slf4j.LoggerFactory;
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.WORKFLOW_TEMPLATE_VERSION, new org.apache.thrift.meta_data.FieldMetaData("workflowTemplateVersion", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.GATEWAY_EXECUTION_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayExecutionId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.ENABLE_EMAIL_NOTIFICATION, new org.apache.thrift.meta_data.FieldMetaData("enableEmailNotification", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
     tmpMap.put(_Fields.EMAIL_ADDRESSES, new org.apache.thrift.meta_data.FieldMetaData("emailAddresses", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
@@ -342,6 +349,9 @@ import org.slf4j.LoggerFactory;
     if (other.isSetWorkflowTemplateVersion()) {
       this.workflowTemplateVersion = other.workflowTemplateVersion;
     }
+    if (other.isSetGatewayExecutionId()) {
+      this.gatewayExecutionId = other.gatewayExecutionId;
+    }
     this.enableEmailNotification = other.enableEmailNotification;
     if (other.isSetEmailAddresses()) {
       List<String> __this__emailAddresses = new ArrayList<String>(other.emailAddresses);
@@ -412,6 +422,7 @@ import org.slf4j.LoggerFactory;
     this.applicationVersion = null;
     this.workflowTemplateId = null;
     this.workflowTemplateVersion = null;
+    this.gatewayExecutionId = null;
     setEnableEmailNotificationIsSet(false);
     this.enableEmailNotification = false;
     this.emailAddresses = null;
@@ -654,6 +665,29 @@ import org.slf4j.LoggerFactory;
     }
   }
 
+  public String getGatewayExecutionId() {
+    return this.gatewayExecutionId;
+  }
+
+  public void setGatewayExecutionId(String gatewayExecutionId) {
+    this.gatewayExecutionId = gatewayExecutionId;
+  }
+
+  public void unsetGatewayExecutionId() {
+    this.gatewayExecutionId = null;
+  }
+
+  /** Returns true if field gatewayExecutionId is set (has been assigned a value) and false otherwise */
+  public boolean isSetGatewayExecutionId() {
+    return this.gatewayExecutionId != null;
+  }
+
+  public void setGatewayExecutionIdIsSet(boolean value) {
+    if (!value) {
+      this.gatewayExecutionId = null;
+    }
+  }
+
   public boolean isEnableEmailNotification() {
     return this.enableEmailNotification;
   }
@@ -1055,6 +1089,14 @@ import org.slf4j.LoggerFactory;
       }
       break;
 
+    case GATEWAY_EXECUTION_ID:
+      if (value == null) {
+        unsetGatewayExecutionId();
+      } else {
+        setGatewayExecutionId((String)value);
+      }
+      break;
+
     case ENABLE_EMAIL_NOTIFICATION:
       if (value == null) {
         unsetEnableEmailNotification();
@@ -1170,6 +1212,9 @@ import org.slf4j.LoggerFactory;
     case WORKFLOW_TEMPLATE_VERSION:
       return getWorkflowTemplateVersion();
 
+    case GATEWAY_EXECUTION_ID:
+      return getGatewayExecutionId();
+
     case ENABLE_EMAIL_NOTIFICATION:
       return Boolean.valueOf(isEnableEmailNotification());
 
@@ -1231,6 +1276,8 @@ import org.slf4j.LoggerFactory;
       return isSetWorkflowTemplateId();
     case WORKFLOW_TEMPLATE_VERSION:
       return isSetWorkflowTemplateVersion();
+    case GATEWAY_EXECUTION_ID:
+      return isSetGatewayExecutionId();
     case ENABLE_EMAIL_NOTIFICATION:
       return isSetEnableEmailNotification();
     case EMAIL_ADDRESSES:
@@ -1358,6 +1405,15 @@ import org.slf4j.LoggerFactory;
         return false;
     }
 
+    boolean this_present_gatewayExecutionId = true && this.isSetGatewayExecutionId();
+    boolean that_present_gatewayExecutionId = true && that.isSetGatewayExecutionId();
+    if (this_present_gatewayExecutionId || that_present_gatewayExecutionId) {
+      if (!(this_present_gatewayExecutionId && that_present_gatewayExecutionId))
+        return false;
+      if (!this.gatewayExecutionId.equals(that.gatewayExecutionId))
+        return false;
+    }
+
     boolean this_present_enableEmailNotification = true && this.isSetEnableEmailNotification();
     boolean that_present_enableEmailNotification = true && that.isSetEnableEmailNotification();
     if (this_present_enableEmailNotification || that_present_enableEmailNotification) {
@@ -1564,6 +1620,16 @@ import org.slf4j.LoggerFactory;
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetGatewayExecutionId()).compareTo(other.isSetGatewayExecutionId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetGatewayExecutionId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gatewayExecutionId, other.gatewayExecutionId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     lastComparison = Boolean.valueOf(isSetEnableEmailNotification()).compareTo(other.isSetEnableEmailNotification());
     if (lastComparison != 0) {
       return lastComparison;
@@ -1771,6 +1837,16 @@ import org.slf4j.LoggerFactory;
       }
       first = false;
     }
+    if (isSetGatewayExecutionId()) {
+      if (!first) sb.append(", ");
+      sb.append("gatewayExecutionId:");
+      if (this.gatewayExecutionId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.gatewayExecutionId);
+      }
+      first = false;
+    }
     if (isSetEnableEmailNotification()) {
       if (!first) sb.append(", ");
       sb.append("enableEmailNotification:");
@@ -2014,7 +2090,15 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 11: // ENABLE_EMAIL_NOTIFICATION
+          case 11: // GATEWAY_EXECUTION_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.gatewayExecutionId = iprot.readString();
+              struct.setGatewayExecutionIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 12: // ENABLE_EMAIL_NOTIFICATION
             if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
               struct.enableEmailNotification = iprot.readBool();
               struct.setEnableEmailNotificationIsSet(true);
@@ -2022,7 +2106,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 12: // EMAIL_ADDRESSES
+          case 13: // EMAIL_ADDRESSES
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list104 = iprot.readListBegin();
@@ -2040,7 +2124,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 13: // USER_CONFIGURATION_DATA
+          case 14: // USER_CONFIGURATION_DATA
             if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
               struct.userConfigurationData = new UserConfigurationData();
               struct.userConfigurationData.read(iprot);
@@ -2049,7 +2133,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 14: // WORKFLOW_EXECUTION_INSTANCE_ID
+          case 15: // WORKFLOW_EXECUTION_INSTANCE_ID
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
               struct.workflowExecutionInstanceId = iprot.readString();
               struct.setWorkflowExecutionInstanceIdIsSet(true);
@@ -2057,7 +2141,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 15: // EXPERIMENT_INPUTS
+          case 16: // EXPERIMENT_INPUTS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list107 = iprot.readListBegin();
@@ -2076,7 +2160,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 16: // EXPERIMENT_OUTPUTS
+          case 17: // EXPERIMENT_OUTPUTS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list110 = iprot.readListBegin();
@@ -2095,7 +2179,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 17: // EXPERIMENT_STATUS
+          case 18: // EXPERIMENT_STATUS
             if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
               struct.experimentStatus = new ExperimentStatus();
               struct.experimentStatus.read(iprot);
@@ -2104,7 +2188,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 18: // STATE_CHANGE_LIST
+          case 19: // STATE_CHANGE_LIST
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list113 = iprot.readListBegin();
@@ -2123,7 +2207,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 19: // WORKFLOW_NODE_DETAILS_LIST
+          case 20: // WORKFLOW_NODE_DETAILS_LIST
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list116 = iprot.readListBegin();
@@ -2142,7 +2226,7 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 20: // ERRORS
+          case 21: // ERRORS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list119 = iprot.readListBegin();
@@ -2234,6 +2318,13 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldEnd();
         }
       }
+      if (struct.gatewayExecutionId != null) {
+        if (struct.isSetGatewayExecutionId()) {
+          oprot.writeFieldBegin(GATEWAY_EXECUTION_ID_FIELD_DESC);
+          oprot.writeString(struct.gatewayExecutionId);
+          oprot.writeFieldEnd();
+        }
+      }
       if (struct.isSetEnableEmailNotification()) {
         oprot.writeFieldBegin(ENABLE_EMAIL_NOTIFICATION_FIELD_DESC);
         oprot.writeBool(struct.enableEmailNotification);
@@ -2384,37 +2475,40 @@ import org.slf4j.LoggerFactory;
       if (struct.isSetWorkflowTemplateVersion()) {
         optionals.set(5);
       }
-      if (struct.isSetEnableEmailNotification()) {
+      if (struct.isSetGatewayExecutionId()) {
         optionals.set(6);
       }
-      if (struct.isSetEmailAddresses()) {
+      if (struct.isSetEnableEmailNotification()) {
         optionals.set(7);
       }
-      if (struct.isSetUserConfigurationData()) {
+      if (struct.isSetEmailAddresses()) {
         optionals.set(8);
       }
-      if (struct.isSetWorkflowExecutionInstanceId()) {
+      if (struct.isSetUserConfigurationData()) {
         optionals.set(9);
       }
-      if (struct.isSetExperimentInputs()) {
+      if (struct.isSetWorkflowExecutionInstanceId()) {
         optionals.set(10);
       }
-      if (struct.isSetExperimentOutputs()) {
+      if (struct.isSetExperimentInputs()) {
         optionals.set(11);
       }
-      if (struct.isSetExperimentStatus()) {
+      if (struct.isSetExperimentOutputs()) {
         optionals.set(12);
       }
-      if (struct.isSetStateChangeList()) {
+      if (struct.isSetExperimentStatus()) {
         optionals.set(13);
       }
-      if (struct.isSetWorkflowNodeDetailsList()) {
+      if (struct.isSetStateChangeList()) {
         optionals.set(14);
       }
-      if (struct.isSetErrors()) {
+      if (struct.isSetWorkflowNodeDetailsList()) {
         optionals.set(15);
       }
-      oprot.writeBitSet(optionals, 16);
+      if (struct.isSetErrors()) {
+        optionals.set(16);
+      }
+      oprot.writeBitSet(optionals, 17);
       if (struct.isSetCreationTime()) {
         oprot.writeI64(struct.creationTime);
       }
@@ -2433,6 +2527,9 @@ import org.slf4j.LoggerFactory;
       if (struct.isSetWorkflowTemplateVersion()) {
         oprot.writeString(struct.workflowTemplateVersion);
       }
+      if (struct.isSetGatewayExecutionId()) {
+        oprot.writeString(struct.gatewayExecutionId);
+      }
       if (struct.isSetEnableEmailNotification()) {
         oprot.writeBool(struct.enableEmailNotification);
       }
@@ -2512,7 +2609,7 @@ import org.slf4j.LoggerFactory;
       struct.setUserNameIsSet(true);
       struct.name = iprot.readString();
       struct.setNameIsSet(true);
-      BitSet incoming = iprot.readBitSet(16);
+      BitSet incoming = iprot.readBitSet(17);
       if (incoming.get(0)) {
         struct.creationTime = iprot.readI64();
         struct.setCreationTimeIsSet(true);
@@ -2538,10 +2635,14 @@ import org.slf4j.LoggerFactory;
         struct.setWorkflowTemplateVersionIsSet(true);
       }
       if (incoming.get(6)) {
+        struct.gatewayExecutionId = iprot.readString();
+        struct.setGatewayExecutionIdIsSet(true);
+      }
+      if (incoming.get(7)) {
         struct.enableEmailNotification = iprot.readBool();
         struct.setEnableEmailNotificationIsSet(true);
       }
-      if (incoming.get(7)) {
+      if (incoming.get(8)) {
         {
           org.apache.thrift.protocol.TList _list134 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
           struct.emailAddresses = new ArrayList<String>(_list134.size);
@@ -2554,16 +2655,16 @@ import org.slf4j.LoggerFactory;
         }
         struct.setEmailAddressesIsSet(true);
       }
-      if (incoming.get(8)) {
+      if (incoming.get(9)) {
         struct.userConfigurationData = new UserConfigurationData();
         struct.userConfigurationData.read(iprot);
         struct.setUserConfigurationDataIsSet(true);
       }
-      if (incoming.get(9)) {
+      if (incoming.get(10)) {
         struct.workflowExecutionInstanceId = iprot.readString();
         struct.setWorkflowExecutionInstanceIdIsSet(true);
       }
-      if (incoming.get(10)) {
+      if (incoming.get(11)) {
         {
           org.apache.thrift.protocol.TList _list137 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
           struct.experimentInputs = new ArrayList<org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType>(_list137.size);
@@ -2577,7 +2678,7 @@ import org.slf4j.LoggerFactory;
         }
         struct.setExperimentInputsIsSet(true);
       }
-      if (incoming.get(11)) {
+      if (incoming.get(12)) {
         {
           org.apache.thrift.protocol.TList _list140 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
           struct.experimentOutputs = new ArrayList<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>(_list140.size);
@@ -2591,12 +2692,12 @@ import org.slf4j.LoggerFactory;
         }
         struct.setExperimentOutputsIsSet(true);
       }
-      if (incoming.get(12)) {
+      if (incoming.get(13)) {
         struct.experimentStatus = new ExperimentStatus();
         struct.experimentStatus.read(iprot);
         struct.setExperimentStatusIsSet(true);
       }
-      if (incoming.get(13)) {
+      if (incoming.get(14)) {
         {
           org.apache.thrift.protocol.TList _list143 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
           struct.stateChangeList = new ArrayList<WorkflowNodeStatus>(_list143.size);
@@ -2610,7 +2711,7 @@ import org.slf4j.LoggerFactory;
         }
         struct.setStateChangeListIsSet(true);
       }
-      if (incoming.get(14)) {
+      if (incoming.get(15)) {
         {
           org.apache.thrift.protocol.TList _list146 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
           struct.workflowNodeDetailsList = new ArrayList<WorkflowNodeDetails>(_list146.size);
@@ -2624,7 +2725,7 @@ import org.slf4j.LoggerFactory;
         }
         struct.setWorkflowNodeDetailsListIsSet(true);
       }
-      if (incoming.get(15)) {
+      if (incoming.get(16)) {
         {
           org.apache.thrift.protocol.TList _list149 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
           struct.errors = new ArrayList<ErrorDetails>(_list149.size);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9cadde8e/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/JobDetails.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/JobDetails.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/JobDetails.java
index d1cbe5e..10c70fe 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/JobDetails.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/JobDetails.java
@@ -60,6 +60,7 @@ import org.slf4j.LoggerFactory;
   private static final org.apache.thrift.protocol.TField ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("errors", org.apache.thrift.protocol.TType.LIST, (short)6);
   private static final org.apache.thrift.protocol.TField COMPUTE_RESOURCE_CONSUMED_FIELD_DESC = new org.apache.thrift.protocol.TField("computeResourceConsumed", org.apache.thrift.protocol.TType.STRING, (short)7);
   private static final org.apache.thrift.protocol.TField JOB_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("jobName", org.apache.thrift.protocol.TType.STRING, (short)8);
+  private static final org.apache.thrift.protocol.TField WORKING_DIR_FIELD_DESC = new org.apache.thrift.protocol.TField("workingDir", org.apache.thrift.protocol.TType.STRING, (short)9);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -75,6 +76,7 @@ import org.slf4j.LoggerFactory;
   private List<ErrorDetails> errors; // optional
   private String computeResourceConsumed; // optional
   private String jobName; // optional
+  private String workingDir; // optional
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   @SuppressWarnings("all") public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -85,7 +87,8 @@ import org.slf4j.LoggerFactory;
     APPLICATION_STATUS((short)5, "applicationStatus"),
     ERRORS((short)6, "errors"),
     COMPUTE_RESOURCE_CONSUMED((short)7, "computeResourceConsumed"),
-    JOB_NAME((short)8, "jobName");
+    JOB_NAME((short)8, "jobName"),
+    WORKING_DIR((short)9, "workingDir");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -116,6 +119,8 @@ import org.slf4j.LoggerFactory;
           return COMPUTE_RESOURCE_CONSUMED;
         case 8: // JOB_NAME
           return JOB_NAME;
+        case 9: // WORKING_DIR
+          return WORKING_DIR;
         default:
           return null;
       }
@@ -158,7 +163,7 @@ import org.slf4j.LoggerFactory;
   // isset id assignments
   private static final int __CREATIONTIME_ISSET_ID = 0;
   private byte __isset_bitfield = 0;
-  private _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.JOB_STATUS,_Fields.APPLICATION_STATUS,_Fields.ERRORS,_Fields.COMPUTE_RESOURCE_CONSUMED,_Fields.JOB_NAME};
+  private _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.JOB_STATUS,_Fields.APPLICATION_STATUS,_Fields.ERRORS,_Fields.COMPUTE_RESOURCE_CONSUMED,_Fields.JOB_NAME,_Fields.WORKING_DIR};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -179,6 +184,8 @@ import org.slf4j.LoggerFactory;
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.JOB_NAME, new org.apache.thrift.meta_data.FieldMetaData("jobName", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.WORKING_DIR, new org.apache.thrift.meta_data.FieldMetaData("workingDir", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(JobDetails.class, metaDataMap);
   }
@@ -228,6 +235,9 @@ import org.slf4j.LoggerFactory;
     if (other.isSetJobName()) {
       this.jobName = other.jobName;
     }
+    if (other.isSetWorkingDir()) {
+      this.workingDir = other.workingDir;
+    }
   }
 
   public JobDetails deepCopy() {
@@ -246,6 +256,7 @@ import org.slf4j.LoggerFactory;
     this.errors = null;
     this.computeResourceConsumed = null;
     this.jobName = null;
+    this.workingDir = null;
   }
 
   public String getJobID() {
@@ -446,6 +457,29 @@ import org.slf4j.LoggerFactory;
     }
   }
 
+  public String getWorkingDir() {
+    return this.workingDir;
+  }
+
+  public void setWorkingDir(String workingDir) {
+    this.workingDir = workingDir;
+  }
+
+  public void unsetWorkingDir() {
+    this.workingDir = null;
+  }
+
+  /** Returns true if field workingDir is set (has been assigned a value) and false otherwise */
+  public boolean isSetWorkingDir() {
+    return this.workingDir != null;
+  }
+
+  public void setWorkingDirIsSet(boolean value) {
+    if (!value) {
+      this.workingDir = null;
+    }
+  }
+
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
     case JOB_ID:
@@ -512,6 +546,14 @@ import org.slf4j.LoggerFactory;
       }
       break;
 
+    case WORKING_DIR:
+      if (value == null) {
+        unsetWorkingDir();
+      } else {
+        setWorkingDir((String)value);
+      }
+      break;
+
     }
   }
 
@@ -541,6 +583,9 @@ import org.slf4j.LoggerFactory;
     case JOB_NAME:
       return getJobName();
 
+    case WORKING_DIR:
+      return getWorkingDir();
+
     }
     throw new IllegalStateException();
   }
@@ -568,6 +613,8 @@ import org.slf4j.LoggerFactory;
       return isSetComputeResourceConsumed();
     case JOB_NAME:
       return isSetJobName();
+    case WORKING_DIR:
+      return isSetWorkingDir();
     }
     throw new IllegalStateException();
   }
@@ -657,6 +704,15 @@ import org.slf4j.LoggerFactory;
         return false;
     }
 
+    boolean this_present_workingDir = true && this.isSetWorkingDir();
+    boolean that_present_workingDir = true && that.isSetWorkingDir();
+    if (this_present_workingDir || that_present_workingDir) {
+      if (!(this_present_workingDir && that_present_workingDir))
+        return false;
+      if (!this.workingDir.equals(that.workingDir))
+        return false;
+    }
+
     return true;
   }
 
@@ -753,6 +809,16 @@ import org.slf4j.LoggerFactory;
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetWorkingDir()).compareTo(other.isSetWorkingDir());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetWorkingDir()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.workingDir, other.workingDir);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -844,6 +910,16 @@ import org.slf4j.LoggerFactory;
       }
       first = false;
     }
+    if (isSetWorkingDir()) {
+      if (!first) sb.append(", ");
+      sb.append("workingDir:");
+      if (this.workingDir == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.workingDir);
+      }
+      first = false;
+    }
     sb.append(")");
     return sb.toString();
   }
@@ -980,6 +1056,14 @@ import org.slf4j.LoggerFactory;
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 9: // WORKING_DIR
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.workingDir = iprot.readString();
+              struct.setWorkingDirIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -1050,6 +1134,13 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldEnd();
         }
       }
+      if (struct.workingDir != null) {
+        if (struct.isSetWorkingDir()) {
+          oprot.writeFieldBegin(WORKING_DIR_FIELD_DESC);
+          oprot.writeString(struct.workingDir);
+          oprot.writeFieldEnd();
+        }
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -1088,7 +1179,10 @@ import org.slf4j.LoggerFactory;
       if (struct.isSetJobName()) {
         optionals.set(5);
       }
-      oprot.writeBitSet(optionals, 6);
+      if (struct.isSetWorkingDir()) {
+        optionals.set(6);
+      }
+      oprot.writeBitSet(optionals, 7);
       if (struct.isSetCreationTime()) {
         oprot.writeI64(struct.creationTime);
       }
@@ -1113,6 +1207,9 @@ import org.slf4j.LoggerFactory;
       if (struct.isSetJobName()) {
         oprot.writeString(struct.jobName);
       }
+      if (struct.isSetWorkingDir()) {
+        oprot.writeString(struct.workingDir);
+      }
     }
 
     @Override
@@ -1122,7 +1219,7 @@ import org.slf4j.LoggerFactory;
       struct.setJobIDIsSet(true);
       struct.jobDescription = iprot.readString();
       struct.setJobDescriptionIsSet(true);
-      BitSet incoming = iprot.readBitSet(6);
+      BitSet incoming = iprot.readBitSet(7);
       if (incoming.get(0)) {
         struct.creationTime = iprot.readI64();
         struct.setCreationTimeIsSet(true);
@@ -1159,6 +1256,10 @@ import org.slf4j.LoggerFactory;
         struct.jobName = iprot.readString();
         struct.setJobNameIsSet(true);
       }
+      if (incoming.get(6)) {
+        struct.workingDir = iprot.readString();
+        struct.setWorkingDirIsSet(true);
+      }
     }
   }