You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2016/11/08 17:57:54 UTC

[1/7] airavata git commit: Fixed sharing registry build issue with pom versions

Repository: airavata
Updated Branches:
  refs/heads/develop a82e34ec0 -> 9ee4022f5


Fixed sharing registry build issue with pom versions


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

Branch: refs/heads/develop
Commit: 2b13da9fe12d7f3585ea8a94aca3ad2713d0d9a4
Parents: a82e34e
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Nov 7 12:11:38 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Nov 7 12:11:38 2016 -0500

----------------------------------------------------------------------
 modules/sharing-registry/pom.xml                      | 12 +++---------
 .../sharing-registry/sharing-data-migrator/pom.xml    |  7 ++++---
 .../sharing-registry-distribution/pom.xml             | 14 ++++++--------
 .../sharing-registry/sharing-registry-server/pom.xml  | 11 +++++++----
 .../sharing-registry/sharing-registry-stubs/pom.xml   |  5 ++++-
 5 files changed, 24 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/2b13da9f/modules/sharing-registry/pom.xml
----------------------------------------------------------------------
diff --git a/modules/sharing-registry/pom.xml b/modules/sharing-registry/pom.xml
index 781a11d..55ae5a5 100644
--- a/modules/sharing-registry/pom.xml
+++ b/modules/sharing-registry/pom.xml
@@ -2,7 +2,6 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
 
     <parent>
         <artifactId>airavata</artifactId>
@@ -11,16 +10,11 @@
         <version>0.17-SNAPSHOT</version>
     </parent>
 
-    <properties>
-        <global.version>0.17-SNAPSHOT</global.version>
-    </properties>
-
-    <groupId>org.apache.airavata</groupId>
+    <modelVersion>4.0.0</modelVersion>
     <artifactId>airavata-sharing-registry</artifactId>
     <packaging>pom</packaging>
-    <version>${global.version}</version>
-
-
+    <name>Airavata Sharing Registry</name>
+    <url>http://airavata.apache.org/</url>
 
     <modules>
         <module>sharing-registry-stubs</module>

http://git-wip-us.apache.org/repos/asf/airavata/blob/2b13da9f/modules/sharing-registry/sharing-data-migrator/pom.xml
----------------------------------------------------------------------
diff --git a/modules/sharing-registry/sharing-data-migrator/pom.xml b/modules/sharing-registry/sharing-data-migrator/pom.xml
index 3fb2035..e8b2c35 100644
--- a/modules/sharing-registry/sharing-data-migrator/pom.xml
+++ b/modules/sharing-registry/sharing-data-migrator/pom.xml
@@ -5,18 +5,19 @@
     <parent>
         <artifactId>airavata-sharing-registry</artifactId>
         <groupId>org.apache.airavata</groupId>
-        <version>${global.version}</version>
+        <version>0.17-SNAPSHOT</version>
     </parent>
-    <modelVersion>4.0.0</modelVersion>
 
+    <modelVersion>4.0.0</modelVersion>
     <artifactId>airavata-sharing-data-migrator</artifactId>
     <packaging>jar</packaging>
+    <name>Sharing Data Migrator</name>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-sharing-registry-server</artifactId>
-            <version>${project.version}</version>
+            <version>${project.parent.version}</version>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/2b13da9f/modules/sharing-registry/sharing-registry-distribution/pom.xml
----------------------------------------------------------------------
diff --git a/modules/sharing-registry/sharing-registry-distribution/pom.xml b/modules/sharing-registry/sharing-registry-distribution/pom.xml
index f9bff9a..ddf2437 100644
--- a/modules/sharing-registry/sharing-registry-distribution/pom.xml
+++ b/modules/sharing-registry/sharing-registry-distribution/pom.xml
@@ -5,11 +5,14 @@
     <parent>
         <artifactId>airavata-sharing-registry</artifactId>
         <groupId>org.apache.airavata</groupId>
-        <version>${global.version}</version>
+        <version>0.17-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>airavata-sharing-registry-distribution</artifactId>
+    <packaging>jar</packaging>
+    <name>Sharing Registry Distribution</name>
+    <url>http://airavata.apache.org/</url>
 
     <dependencies>
         <dependency>
@@ -20,17 +23,12 @@
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-sharing-registry-stubs</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.airavata</groupId>
-            <artifactId>airavata-server-configuration</artifactId>
-            <version>${project.version}</version>
+            <version>${project.parent.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-commons</artifactId>
-            <version>${project.version}</version>
+            <version>${project.parent.version}</version>
         </dependency>
         <dependency>
             <groupId>net.sf.dozer</groupId>

http://git-wip-us.apache.org/repos/asf/airavata/blob/2b13da9f/modules/sharing-registry/sharing-registry-server/pom.xml
----------------------------------------------------------------------
diff --git a/modules/sharing-registry/sharing-registry-server/pom.xml b/modules/sharing-registry/sharing-registry-server/pom.xml
index 1498575..2822f35 100644
--- a/modules/sharing-registry/sharing-registry-server/pom.xml
+++ b/modules/sharing-registry/sharing-registry-server/pom.xml
@@ -6,12 +6,15 @@
         <artifactId>airavata-sharing-registry</artifactId>
         <groupId>org.apache.airavata</groupId>
         <relativePath>../pom.xml</relativePath>
-        <version>${global.version}</version>
+        <version>0.17-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>airavata-sharing-registry-server</artifactId>
     <packaging>jar</packaging>
+    <name>Sharing Registry Server</name>
+    <url>http://airavata.apache.org/</url>
+
     <dependencies>
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -21,17 +24,17 @@
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-sharing-registry-stubs</artifactId>
-            <version>${project.version}</version>
+            <version>${project.parent.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-server-configuration</artifactId>
-            <version>${project.version}</version>
+            <version>${project.parent.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-commons</artifactId>
-            <version>${project.version}</version>
+            <version>${project.parent.version}</version>
         </dependency>
         <dependency>
             <groupId>net.sf.dozer</groupId>

http://git-wip-us.apache.org/repos/asf/airavata/blob/2b13da9f/modules/sharing-registry/sharing-registry-stubs/pom.xml
----------------------------------------------------------------------
diff --git a/modules/sharing-registry/sharing-registry-stubs/pom.xml b/modules/sharing-registry/sharing-registry-stubs/pom.xml
index ce39e03..87e80da 100644
--- a/modules/sharing-registry/sharing-registry-stubs/pom.xml
+++ b/modules/sharing-registry/sharing-registry-stubs/pom.xml
@@ -6,12 +6,15 @@
         <artifactId>airavata-sharing-registry</artifactId>
         <groupId>org.apache.airavata</groupId>
         <relativePath>../pom.xml</relativePath>
-        <version>${global.version}</version>
+        <version>0.17-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>airavata-sharing-registry-stubs</artifactId>
     <packaging>jar</packaging>
+    <name>Sharing Registry Stubs</name>
+    <url>http://airavata.apache.org/</url>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.thrift</groupId>


[6/7] airavata git commit: Renamed AuroraJobSubmission -> AuroraJobSubmissionTask

Posted by sh...@apache.org.
Renamed AuroraJobSubmission -> AuroraJobSubmissionTask


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

Branch: refs/heads/develop
Commit: 4d9c56e9a9f1431a493ca11e82eae21c82d1ebdf
Parents: aefd913
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Nov 7 15:35:45 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Nov 7 15:35:45 2016 -0500

----------------------------------------------------------------------
 .../server/src/main/resources/gfac-config.yaml  |   2 +
 .../gfac/impl/task/AuroraJobSubmission.java     | 147 -------------------
 .../gfac/impl/task/AuroraJobSubmissionTask.java | 147 +++++++++++++++++++
 3 files changed, 149 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/4d9c56e9/modules/configuration/server/src/main/resources/gfac-config.yaml
----------------------------------------------------------------------
diff --git a/modules/configuration/server/src/main/resources/gfac-config.yaml b/modules/configuration/server/src/main/resources/gfac-config.yaml
index 802d1e5..7d580ab 100644
--- a/modules/configuration/server/src/main/resources/gfac-config.yaml
+++ b/modules/configuration/server/src/main/resources/gfac-config.yaml
@@ -34,6 +34,8 @@ jobSubmitters:
   - submissionProtocol: LOCAL
     taskClass: org.apache.airavata.gfac.impl.task.LocalJobSubmissionTask
 
+  - submissionProtocol: CLOUD
+    taskClass: org.apache.airavata.gfac.impl.task.AuroraJobSubmissionTask
 
 # Following job subbmitters are not yet implemented.
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4d9c56e9/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java
deleted file mode 100644
index 6a3d898..0000000
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.airavata.gfac.impl.task;
-
-import java.util.Arrays;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.airavata.cloud.aurora.client.AuroraThriftClient;
-import org.apache.airavata.cloud.aurora.client.bean.IdentityBean;
-import org.apache.airavata.cloud.aurora.client.bean.JobConfigBean;
-import org.apache.airavata.cloud.aurora.client.bean.JobKeyBean;
-import org.apache.airavata.cloud.aurora.client.bean.ProcessBean;
-import org.apache.airavata.cloud.aurora.client.bean.ResourceBean;
-import org.apache.airavata.cloud.aurora.client.bean.ResponseBean;
-import org.apache.airavata.cloud.aurora.client.bean.TaskConfigBean;
-import org.apache.airavata.cloud.aurora.util.AuroraThriftClientUtil;
-import org.apache.airavata.common.utils.AiravataUtils;
-import org.apache.airavata.gfac.core.GFacException;
-import org.apache.airavata.gfac.core.GFacUtils;
-import org.apache.airavata.gfac.core.GroovyMap;
-import org.apache.airavata.gfac.core.Script;
-import org.apache.airavata.gfac.core.context.ProcessContext;
-import org.apache.airavata.gfac.core.context.TaskContext;
-import org.apache.airavata.gfac.core.task.JobSubmissionTask;
-import org.apache.airavata.gfac.core.task.TaskException;
-import org.apache.airavata.gfac.impl.AuroraUtils;
-import org.apache.airavata.model.appcatalog.computeresource.ResourceJobManagerType;
-import org.apache.airavata.model.commons.ErrorModel;
-import org.apache.airavata.model.job.JobModel;
-import org.apache.airavata.model.status.JobState;
-import org.apache.airavata.model.status.JobStatus;
-import org.apache.airavata.model.status.TaskState;
-import org.apache.airavata.model.status.TaskStatus;
-import org.apache.airavata.model.task.TaskTypes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AuroraJobSubmission implements JobSubmissionTask{
-
-    private static final Logger log = LoggerFactory.getLogger(AuroraJobSubmission.class);
-
-    @Override
-    public JobStatus cancel(TaskContext taskcontext) throws TaskException {
-        JobStatus jobStatus = new JobStatus();
-        jobStatus.setJobState(JobState.ACTIVE);
-        return jobStatus;
-    }
-
-    @Override
-    public void init(Map<String, String> propertyMap) throws TaskException {
-
-    }
-
-    @Override
-    public TaskStatus execute(TaskContext taskContext) {
-        TaskStatus taskStatus = new TaskStatus(TaskState.COMPLETED); // set to completed.
-        ProcessContext processContext = taskContext.getParentProcessContext();
-        JobModel jobModel = processContext.getJobModel();
-        jobModel.setTaskId(taskContext.getTaskId());
-        String jobIdAndName = "A" + GFacUtils.generateJobName();
-        jobModel.setJobName(jobIdAndName);
-        JobStatus jobStatus = new JobStatus();
-        jobStatus.setJobState(JobState.SUBMITTED);
-
-        try {
-            JobKeyBean jobKey = new JobKeyBean(AuroraUtils.ENVIRONMENT, AuroraUtils.ROLE, jobIdAndName);
-            IdentityBean owner = new IdentityBean(AuroraUtils.ROLE);
-            GroovyMap groovyMap = GFacUtils.createGroovyMap(processContext, taskContext);
-            groovyMap.add(Script.JOB_SUBMITTER_COMMAND, "sh");
-            String templateFileName = GFacUtils.getTemplateFileName(ResourceJobManagerType.CLOUD);
-            String script = GFacUtils.generateScript(groovyMap, templateFileName);
-            ProcessBean process_1 = new ProcessBean("process_1", script, false);
-
-            Set<ProcessBean> processes = new LinkedHashSet<>();
-            processes.add(process_1);
-            ResourceBean resources = new ResourceBean(1.5, 512, 512);
-            TaskConfigBean taskConfig = new TaskConfigBean("Airavata-Aurora-" + jobIdAndName, processes, resources);
-            JobConfigBean jobConfig = new JobConfigBean(jobKey, owner, taskConfig, AuroraUtils.CLUSTER);
-
-            String executorConfigJson = AuroraThriftClientUtil.getExecutorConfigJson(jobConfig);
-            log.info("Executor Config for Job {} , {}", jobIdAndName, executorConfigJson);
-
-            AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient();
-            ResponseBean response = client.createJob(jobConfig);
-            log.info("Response for job {}, {}", jobIdAndName, response);
-            jobModel.setJobDescription(resources.toString());
-
-            jobModel.setJobId(jobIdAndName);
-            jobStatus.setReason("Successfully Submitted");
-            jobModel.setJobStatuses(Arrays.asList(jobStatus ));
-            jobStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
-            taskContext.getParentProcessContext().setJobModel(jobModel);
-
-            GFacUtils.saveJobModel(processContext, jobModel);
-            GFacUtils.saveJobStatus(processContext, jobModel);
-            taskStatus.setReason("Successfully submitted job to Aurora");
-        } catch (Throwable e) {
-            String msg = "Error occurred while submitting Aurora job";
-            log.error(msg, e);
-            taskStatus.setState(TaskState.FAILED);
-            taskStatus.setReason(msg);
-            taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
-            ErrorModel errorModel = new ErrorModel();
-            errorModel.setActualErrorMessage(e.getMessage());
-            errorModel.setUserFriendlyMessage(msg);
-            taskContext.getTaskModel().setTaskErrors(Arrays.asList(errorModel));
-        }
-
-        taskContext.setTaskStatus(taskStatus);
-        try {
-            GFacUtils.saveAndPublishTaskStatus(taskContext);
-        } catch (GFacException e) {
-            log.error("Error while saving task status", e);
-        }
-        return taskStatus;
-    }
-
-    @Override
-    public TaskStatus recover(TaskContext taskContext) {
-        return execute(taskContext);
-    }
-
-    @Override
-    public TaskTypes getType() {
-        return TaskTypes.JOB_SUBMISSION;
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/4d9c56e9/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmissionTask.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmissionTask.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmissionTask.java
new file mode 100644
index 0000000..a987559
--- /dev/null
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmissionTask.java
@@ -0,0 +1,147 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.airavata.gfac.impl.task;
+
+import java.util.Arrays;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.airavata.cloud.aurora.client.AuroraThriftClient;
+import org.apache.airavata.cloud.aurora.client.bean.IdentityBean;
+import org.apache.airavata.cloud.aurora.client.bean.JobConfigBean;
+import org.apache.airavata.cloud.aurora.client.bean.JobKeyBean;
+import org.apache.airavata.cloud.aurora.client.bean.ProcessBean;
+import org.apache.airavata.cloud.aurora.client.bean.ResourceBean;
+import org.apache.airavata.cloud.aurora.client.bean.ResponseBean;
+import org.apache.airavata.cloud.aurora.client.bean.TaskConfigBean;
+import org.apache.airavata.cloud.aurora.util.AuroraThriftClientUtil;
+import org.apache.airavata.common.utils.AiravataUtils;
+import org.apache.airavata.gfac.core.GFacException;
+import org.apache.airavata.gfac.core.GFacUtils;
+import org.apache.airavata.gfac.core.GroovyMap;
+import org.apache.airavata.gfac.core.Script;
+import org.apache.airavata.gfac.core.context.ProcessContext;
+import org.apache.airavata.gfac.core.context.TaskContext;
+import org.apache.airavata.gfac.core.task.JobSubmissionTask;
+import org.apache.airavata.gfac.core.task.TaskException;
+import org.apache.airavata.gfac.impl.AuroraUtils;
+import org.apache.airavata.model.appcatalog.computeresource.ResourceJobManagerType;
+import org.apache.airavata.model.commons.ErrorModel;
+import org.apache.airavata.model.job.JobModel;
+import org.apache.airavata.model.status.JobState;
+import org.apache.airavata.model.status.JobStatus;
+import org.apache.airavata.model.status.TaskState;
+import org.apache.airavata.model.status.TaskStatus;
+import org.apache.airavata.model.task.TaskTypes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AuroraJobSubmissionTask implements JobSubmissionTask{
+
+    private static final Logger log = LoggerFactory.getLogger(AuroraJobSubmissionTask.class);
+
+    @Override
+    public JobStatus cancel(TaskContext taskcontext) throws TaskException {
+        JobStatus jobStatus = new JobStatus();
+        jobStatus.setJobState(JobState.ACTIVE);
+        return jobStatus;
+    }
+
+    @Override
+    public void init(Map<String, String> propertyMap) throws TaskException {
+
+    }
+
+    @Override
+    public TaskStatus execute(TaskContext taskContext) {
+        TaskStatus taskStatus = new TaskStatus(TaskState.COMPLETED); // set to completed.
+        ProcessContext processContext = taskContext.getParentProcessContext();
+        JobModel jobModel = processContext.getJobModel();
+        jobModel.setTaskId(taskContext.getTaskId());
+        String jobIdAndName = "A" + GFacUtils.generateJobName();
+        jobModel.setJobName(jobIdAndName);
+        JobStatus jobStatus = new JobStatus();
+        jobStatus.setJobState(JobState.SUBMITTED);
+
+        try {
+            JobKeyBean jobKey = new JobKeyBean(AuroraUtils.ENVIRONMENT, AuroraUtils.ROLE, jobIdAndName);
+            IdentityBean owner = new IdentityBean(AuroraUtils.ROLE);
+            GroovyMap groovyMap = GFacUtils.createGroovyMap(processContext, taskContext);
+            groovyMap.add(Script.JOB_SUBMITTER_COMMAND, "sh");
+            String templateFileName = GFacUtils.getTemplateFileName(ResourceJobManagerType.CLOUD);
+            String script = GFacUtils.generateScript(groovyMap, templateFileName);
+            ProcessBean process_1 = new ProcessBean("process_1", script, false);
+
+            Set<ProcessBean> processes = new LinkedHashSet<>();
+            processes.add(process_1);
+            ResourceBean resources = new ResourceBean(1.5, 512, 512);
+            TaskConfigBean taskConfig = new TaskConfigBean("Airavata-Aurora-" + jobIdAndName, processes, resources);
+            JobConfigBean jobConfig = new JobConfigBean(jobKey, owner, taskConfig, AuroraUtils.CLUSTER);
+
+            String executorConfigJson = AuroraThriftClientUtil.getExecutorConfigJson(jobConfig);
+            log.info("Executor Config for Job {} , {}", jobIdAndName, executorConfigJson);
+
+            AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient();
+            ResponseBean response = client.createJob(jobConfig);
+            log.info("Response for job {}, {}", jobIdAndName, response);
+            jobModel.setJobDescription(resources.toString());
+
+            jobModel.setJobId(jobIdAndName);
+            jobStatus.setReason("Successfully Submitted");
+            jobModel.setJobStatuses(Arrays.asList(jobStatus ));
+            jobStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+            taskContext.getParentProcessContext().setJobModel(jobModel);
+
+            GFacUtils.saveJobModel(processContext, jobModel);
+            GFacUtils.saveJobStatus(processContext, jobModel);
+            taskStatus.setReason("Successfully submitted job to Aurora");
+        } catch (Throwable e) {
+            String msg = "Error occurred while submitting Aurora job";
+            log.error(msg, e);
+            taskStatus.setState(TaskState.FAILED);
+            taskStatus.setReason(msg);
+            taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+            ErrorModel errorModel = new ErrorModel();
+            errorModel.setActualErrorMessage(e.getMessage());
+            errorModel.setUserFriendlyMessage(msg);
+            taskContext.getTaskModel().setTaskErrors(Arrays.asList(errorModel));
+        }
+
+        taskContext.setTaskStatus(taskStatus);
+        try {
+            GFacUtils.saveAndPublishTaskStatus(taskContext);
+        } catch (GFacException e) {
+            log.error("Error while saving task status", e);
+        }
+        return taskStatus;
+    }
+
+    @Override
+    public TaskStatus recover(TaskContext taskContext) {
+        return execute(taskContext);
+    }
+
+    @Override
+    public TaskTypes getType() {
+        return TaskTypes.JOB_SUBMISSION;
+    }
+}


[2/7] airavata git commit: Replaced cloud job submission command with generated script

Posted by sh...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/CloudJobSubmission.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/CloudJobSubmission.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/CloudJobSubmission.java
index 7d540de..23469ac 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/CloudJobSubmission.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/CloudJobSubmission.java
@@ -62,10 +62,11 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
 
   private static final org.apache.thrift.protocol.TField JOB_SUBMISSION_INTERFACE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("jobSubmissionInterfaceId", org.apache.thrift.protocol.TType.STRING, (short)1);
   private static final org.apache.thrift.protocol.TField SECURITY_PROTOCOL_FIELD_DESC = new org.apache.thrift.protocol.TField("securityProtocol", org.apache.thrift.protocol.TType.I32, (short)2);
-  private static final org.apache.thrift.protocol.TField NODE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("nodeId", org.apache.thrift.protocol.TType.STRING, (short)3);
-  private static final org.apache.thrift.protocol.TField EXECUTABLE_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("executableType", org.apache.thrift.protocol.TType.STRING, (short)4);
-  private static final org.apache.thrift.protocol.TField PROVIDER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("providerName", org.apache.thrift.protocol.TType.I32, (short)5);
-  private static final org.apache.thrift.protocol.TField USER_ACCOUNT_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("userAccountName", org.apache.thrift.protocol.TType.STRING, (short)6);
+  private static final org.apache.thrift.protocol.TField JOB_MANAGER_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("jobManagerType", org.apache.thrift.protocol.TType.I32, (short)3);
+  private static final org.apache.thrift.protocol.TField NODE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("nodeId", org.apache.thrift.protocol.TType.STRING, (short)4);
+  private static final org.apache.thrift.protocol.TField EXECUTABLE_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("executableType", org.apache.thrift.protocol.TType.STRING, (short)5);
+  private static final org.apache.thrift.protocol.TField PROVIDER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("providerName", org.apache.thrift.protocol.TType.I32, (short)6);
+  private static final org.apache.thrift.protocol.TField USER_ACCOUNT_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("userAccountName", org.apache.thrift.protocol.TType.STRING, (short)7);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -75,6 +76,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
 
   private String jobSubmissionInterfaceId; // required
   private org.apache.airavata.model.data.movement.SecurityProtocol securityProtocol; // required
+  private ResourceJobManagerType jobManagerType; // required
   private String nodeId; // required
   private String executableType; // required
   private ProviderName providerName; // required
@@ -88,14 +90,19 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
      * @see org.apache.airavata.model.data.movement.SecurityProtocol
      */
     SECURITY_PROTOCOL((short)2, "securityProtocol"),
-    NODE_ID((short)3, "nodeId"),
-    EXECUTABLE_TYPE((short)4, "executableType"),
+    /**
+     * 
+     * @see ResourceJobManagerType
+     */
+    JOB_MANAGER_TYPE((short)3, "jobManagerType"),
+    NODE_ID((short)4, "nodeId"),
+    EXECUTABLE_TYPE((short)5, "executableType"),
     /**
      * 
      * @see ProviderName
      */
-    PROVIDER_NAME((short)5, "providerName"),
-    USER_ACCOUNT_NAME((short)6, "userAccountName");
+    PROVIDER_NAME((short)6, "providerName"),
+    USER_ACCOUNT_NAME((short)7, "userAccountName");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -114,13 +121,15 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
           return JOB_SUBMISSION_INTERFACE_ID;
         case 2: // SECURITY_PROTOCOL
           return SECURITY_PROTOCOL;
-        case 3: // NODE_ID
+        case 3: // JOB_MANAGER_TYPE
+          return JOB_MANAGER_TYPE;
+        case 4: // NODE_ID
           return NODE_ID;
-        case 4: // EXECUTABLE_TYPE
+        case 5: // EXECUTABLE_TYPE
           return EXECUTABLE_TYPE;
-        case 5: // PROVIDER_NAME
+        case 6: // PROVIDER_NAME
           return PROVIDER_NAME;
-        case 6: // USER_ACCOUNT_NAME
+        case 7: // USER_ACCOUNT_NAME
           return USER_ACCOUNT_NAME;
         default:
           return null;
@@ -169,6 +178,8 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.SECURITY_PROTOCOL, new org.apache.thrift.meta_data.FieldMetaData("securityProtocol", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.airavata.model.data.movement.SecurityProtocol.class)));
+    tmpMap.put(_Fields.JOB_MANAGER_TYPE, new org.apache.thrift.meta_data.FieldMetaData("jobManagerType", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, ResourceJobManagerType.class)));
     tmpMap.put(_Fields.NODE_ID, new org.apache.thrift.meta_data.FieldMetaData("nodeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.EXECUTABLE_TYPE, new org.apache.thrift.meta_data.FieldMetaData("executableType", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -189,6 +200,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
   public CloudJobSubmission(
     String jobSubmissionInterfaceId,
     org.apache.airavata.model.data.movement.SecurityProtocol securityProtocol,
+    ResourceJobManagerType jobManagerType,
     String nodeId,
     String executableType,
     ProviderName providerName,
@@ -197,6 +209,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
     this();
     this.jobSubmissionInterfaceId = jobSubmissionInterfaceId;
     this.securityProtocol = securityProtocol;
+    this.jobManagerType = jobManagerType;
     this.nodeId = nodeId;
     this.executableType = executableType;
     this.providerName = providerName;
@@ -213,6 +226,9 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
     if (other.isSetSecurityProtocol()) {
       this.securityProtocol = other.securityProtocol;
     }
+    if (other.isSetJobManagerType()) {
+      this.jobManagerType = other.jobManagerType;
+    }
     if (other.isSetNodeId()) {
       this.nodeId = other.nodeId;
     }
@@ -236,6 +252,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
     this.jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
 
     this.securityProtocol = null;
+    this.jobManagerType = null;
     this.nodeId = null;
     this.executableType = null;
     this.providerName = null;
@@ -296,6 +313,37 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
     }
   }
 
+  /**
+   * 
+   * @see ResourceJobManagerType
+   */
+  public ResourceJobManagerType getJobManagerType() {
+    return this.jobManagerType;
+  }
+
+  /**
+   * 
+   * @see ResourceJobManagerType
+   */
+  public void setJobManagerType(ResourceJobManagerType jobManagerType) {
+    this.jobManagerType = jobManagerType;
+  }
+
+  public void unsetJobManagerType() {
+    this.jobManagerType = null;
+  }
+
+  /** Returns true if field jobManagerType is set (has been assigned a value) and false otherwise */
+  public boolean isSetJobManagerType() {
+    return this.jobManagerType != null;
+  }
+
+  public void setJobManagerTypeIsSet(boolean value) {
+    if (!value) {
+      this.jobManagerType = null;
+    }
+  }
+
   public String getNodeId() {
     return this.nodeId;
   }
@@ -414,6 +462,14 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
       }
       break;
 
+    case JOB_MANAGER_TYPE:
+      if (value == null) {
+        unsetJobManagerType();
+      } else {
+        setJobManagerType((ResourceJobManagerType)value);
+      }
+      break;
+
     case NODE_ID:
       if (value == null) {
         unsetNodeId();
@@ -457,6 +513,9 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
     case SECURITY_PROTOCOL:
       return getSecurityProtocol();
 
+    case JOB_MANAGER_TYPE:
+      return getJobManagerType();
+
     case NODE_ID:
       return getNodeId();
 
@@ -484,6 +543,8 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
       return isSetJobSubmissionInterfaceId();
     case SECURITY_PROTOCOL:
       return isSetSecurityProtocol();
+    case JOB_MANAGER_TYPE:
+      return isSetJobManagerType();
     case NODE_ID:
       return isSetNodeId();
     case EXECUTABLE_TYPE:
@@ -527,6 +588,15 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
         return false;
     }
 
+    boolean this_present_jobManagerType = true && this.isSetJobManagerType();
+    boolean that_present_jobManagerType = true && that.isSetJobManagerType();
+    if (this_present_jobManagerType || that_present_jobManagerType) {
+      if (!(this_present_jobManagerType && that_present_jobManagerType))
+        return false;
+      if (!this.jobManagerType.equals(that.jobManagerType))
+        return false;
+    }
+
     boolean this_present_nodeId = true && this.isSetNodeId();
     boolean that_present_nodeId = true && that.isSetNodeId();
     if (this_present_nodeId || that_present_nodeId) {
@@ -580,6 +650,11 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
     if (present_securityProtocol)
       list.add(securityProtocol.getValue());
 
+    boolean present_jobManagerType = true && (isSetJobManagerType());
+    list.add(present_jobManagerType);
+    if (present_jobManagerType)
+      list.add(jobManagerType.getValue());
+
     boolean present_nodeId = true && (isSetNodeId());
     list.add(present_nodeId);
     if (present_nodeId)
@@ -631,6 +706,16 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetJobManagerType()).compareTo(other.isSetJobManagerType());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetJobManagerType()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.jobManagerType, other.jobManagerType);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     lastComparison = Boolean.valueOf(isSetNodeId()).compareTo(other.isSetNodeId());
     if (lastComparison != 0) {
       return lastComparison;
@@ -707,6 +792,14 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
     }
     first = false;
     if (!first) sb.append(", ");
+    sb.append("jobManagerType:");
+    if (this.jobManagerType == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.jobManagerType);
+    }
+    first = false;
+    if (!first) sb.append(", ");
     sb.append("nodeId:");
     if (this.nodeId == null) {
       sb.append("null");
@@ -752,6 +845,10 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
       throw new org.apache.thrift.protocol.TProtocolException("Required field 'securityProtocol' is unset! Struct:" + toString());
     }
 
+    if (!isSetJobManagerType()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'jobManagerType' is unset! Struct:" + toString());
+    }
+
     if (!isSetNodeId()) {
       throw new org.apache.thrift.protocol.TProtocolException("Required field 'nodeId' is unset! Struct:" + toString());
     }
@@ -821,7 +918,15 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 3: // NODE_ID
+          case 3: // JOB_MANAGER_TYPE
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.jobManagerType = org.apache.airavata.model.appcatalog.computeresource.ResourceJobManagerType.findByValue(iprot.readI32());
+              struct.setJobManagerTypeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // NODE_ID
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
               struct.nodeId = iprot.readString();
               struct.setNodeIdIsSet(true);
@@ -829,7 +934,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 4: // EXECUTABLE_TYPE
+          case 5: // EXECUTABLE_TYPE
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
               struct.executableType = iprot.readString();
               struct.setExecutableTypeIsSet(true);
@@ -837,7 +942,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 5: // PROVIDER_NAME
+          case 6: // PROVIDER_NAME
             if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
               struct.providerName = org.apache.airavata.model.appcatalog.computeresource.ProviderName.findByValue(iprot.readI32());
               struct.setProviderNameIsSet(true);
@@ -845,7 +950,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 6: // USER_ACCOUNT_NAME
+          case 7: // USER_ACCOUNT_NAME
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
               struct.userAccountName = iprot.readString();
               struct.setUserAccountNameIsSet(true);
@@ -876,6 +981,11 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
         oprot.writeI32(struct.securityProtocol.getValue());
         oprot.writeFieldEnd();
       }
+      if (struct.jobManagerType != null) {
+        oprot.writeFieldBegin(JOB_MANAGER_TYPE_FIELD_DESC);
+        oprot.writeI32(struct.jobManagerType.getValue());
+        oprot.writeFieldEnd();
+      }
       if (struct.nodeId != null) {
         oprot.writeFieldBegin(NODE_ID_FIELD_DESC);
         oprot.writeString(struct.nodeId);
@@ -915,6 +1025,7 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
       TTupleProtocol oprot = (TTupleProtocol) prot;
       oprot.writeString(struct.jobSubmissionInterfaceId);
       oprot.writeI32(struct.securityProtocol.getValue());
+      oprot.writeI32(struct.jobManagerType.getValue());
       oprot.writeString(struct.nodeId);
       oprot.writeString(struct.executableType);
       oprot.writeI32(struct.providerName.getValue());
@@ -928,6 +1039,8 @@ public class CloudJobSubmission implements org.apache.thrift.TBase<CloudJobSubmi
       struct.setJobSubmissionInterfaceIdIsSet(true);
       struct.securityProtocol = org.apache.airavata.model.data.movement.SecurityProtocol.findByValue(iprot.readI32());
       struct.setSecurityProtocolIsSet(true);
+      struct.jobManagerType = org.apache.airavata.model.appcatalog.computeresource.ResourceJobManagerType.findByValue(iprot.readI32());
+      struct.setJobManagerTypeIsSet(true);
       struct.nodeId = iprot.readString();
       struct.setNodeIdIsSet(true);
       struct.executableType = iprot.readString();

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/ResourceJobManagerType.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/ResourceJobManagerType.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/ResourceJobManagerType.java
index 2fc5c0b..2bc79c5 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/ResourceJobManagerType.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/ResourceJobManagerType.java
@@ -52,7 +52,8 @@ public enum ResourceJobManagerType implements org.apache.thrift.TEnum {
   PBS(1),
   SLURM(2),
   LSF(3),
-  UGE(4);
+  UGE(4),
+  CLOUD(5);
 
   private final int value;
 
@@ -83,6 +84,8 @@ public enum ResourceJobManagerType implements org.apache.thrift.TEnum {
         return LSF;
       case 4:
         return UGE;
+      case 5:
+        return CLOUD;
       default:
         return null;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/modules/configuration/server/src/main/resources/CLOUD_Groovy.template
----------------------------------------------------------------------
diff --git a/modules/configuration/server/src/main/resources/CLOUD_Groovy.template b/modules/configuration/server/src/main/resources/CLOUD_Groovy.template
new file mode 100644
index 0000000..b16beb7
--- /dev/null
+++ b/modules/configuration/server/src/main/resources/CLOUD_Groovy.template
@@ -0,0 +1,7 @@
+<%
+   if (workingDirectory != null)  out.print 'cd ' + workingDirectory +' && '
+   if (jobSubmitterCommand != null)  out.print jobSubmitterCommand + ' '
+   if (executablePath != null)  out.print  executablePath + ' '
+   if (inputs != null) for(input in inputs)  out.print input + ' '
+   out.print '\n'
+%>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
index 66998c3..4de01ab 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
@@ -480,7 +480,7 @@ public class GFacUtils {
     public static String getZKGfacServersParentPath() {
         return ZKPaths.makePath(ZkConstants.ZOOKEEPER_SERVERS_NODE, ZkConstants.ZOOKEEPER_GFAC_SERVER_NODE);
     }
-    public static GroovyMap crateGroovyMap(ProcessContext processContext)
+    public static GroovyMap createGroovyMap(ProcessContext processContext)
             throws ApplicationSettingsException, AppCatalogException, GFacException {
         return createGroovyMap(processContext, null);
     }
@@ -488,140 +488,145 @@ public class GFacUtils {
             throws GFacException, AppCatalogException, ApplicationSettingsException {
 
         GroovyMap groovyMap = new GroovyMap();
-        ProcessModel processModel = processContext.getProcessModel();
-        ResourceJobManager resourceJobManager = getResourceJobManager(processContext);
-        setMailAddresses(processContext, groovyMap); // set email options and addresses
-
-        groovyMap.add(Script.INPUT_DIR, processContext.getInputDir());
-        groovyMap.add(Script.OUTPUT_DIR, processContext.getOutputDir());
-        groovyMap.add(Script.EXECUTABLE_PATH, processContext.getApplicationDeploymentDescription().getExecutablePath());
-        groovyMap.add(Script.STANDARD_OUT_FILE, processContext.getStdoutLocation());
-        groovyMap.add(Script.STANDARD_ERROR_FILE, processContext.getStderrLocation());
-        groovyMap.add(Script.SCRATCH_LOCATION, processContext.getScratchLocation());
-        groovyMap.add(Script.GATEWAY_ID, processContext.getGatewayId());
-        groovyMap.add(Script.GATEWAY_USER_NAME, processContext.getProcessModel().getUserName());
-        groovyMap.add(Script.APPLICATION_NAME, processContext.getApplicationInterfaceDescription().getApplicationName());
-
-        ComputeResourcePreference crp = getComputeResourcePreference(processContext);
-        if (isValid(crp.getAllocationProjectNumber())) {
-            groovyMap.add(Script.ACCOUNT_STRING, crp.getAllocationProjectNumber());
-        }
-        groovyMap.add(Script.RESERVATION, getReservation(crp));
-
-        // To make job name alpha numeric
-        groovyMap.add(Script.JOB_NAME, "A" + String.valueOf(generateJobName()));
-        groovyMap.add(Script.WORKING_DIR, processContext.getWorkingDir());
-
-        List<String> inputValues = getProcessInputValues(processModel.getProcessInputs());
-        inputValues.addAll(getProcessOutputValues(processModel.getProcessOutputs()));
-        groovyMap.add(Script.INPUTS, inputValues);
-
-        groovyMap.add(Script.USER_NAME, processContext.getJobSubmissionRemoteCluster().getServerInfo().getUserName());
-        groovyMap.add(Script.SHELL_NAME, "/bin/bash");
-        // get walltime
-        if (taskContext != null) {
-            try {
-                JobSubmissionTaskModel jobSubmissionTaskModel = ((JobSubmissionTaskModel) taskContext.getSubTaskModel());
-                if (jobSubmissionTaskModel.getWallTime() > 0) {
-                    groovyMap.add(Script.MAX_WALL_TIME,
-                            GFacUtils.maxWallTimeCalculator(jobSubmissionTaskModel.getWallTime()));
-                }
-            } catch (TException e) {
-                log.error("Error while getting job submission sub task model", e);
+        try {
+            ProcessModel processModel = processContext.getProcessModel();
+            ResourceJobManager resourceJobManager = getResourceJobManager(processContext);
+            setMailAddresses(processContext, groovyMap); // set email options and addresses
+
+            groovyMap.add(Script.INPUT_DIR, processContext.getInputDir());
+            groovyMap.add(Script.OUTPUT_DIR, processContext.getOutputDir());
+            groovyMap.add(Script.EXECUTABLE_PATH, processContext.getApplicationDeploymentDescription().getExecutablePath());
+            groovyMap.add(Script.STANDARD_OUT_FILE, processContext.getStdoutLocation());
+            groovyMap.add(Script.STANDARD_ERROR_FILE, processContext.getStderrLocation());
+            groovyMap.add(Script.SCRATCH_LOCATION, processContext.getScratchLocation());
+            groovyMap.add(Script.GATEWAY_ID, processContext.getGatewayId());
+            groovyMap.add(Script.GATEWAY_USER_NAME, processContext.getProcessModel().getUserName());
+            groovyMap.add(Script.APPLICATION_NAME, processContext.getApplicationInterfaceDescription().getApplicationName());
+
+            ComputeResourcePreference crp = getComputeResourcePreference(processContext);
+            if (isValid(crp.getAllocationProjectNumber())) {
+                groovyMap.add(Script.ACCOUNT_STRING, crp.getAllocationProjectNumber());
             }
-        }
+            groovyMap.add(Script.RESERVATION, getReservation(crp));
 
-        // NOTE: Give precedence to data comes with experiment
-        ComputationalResourceSchedulingModel scheduling = processModel.getProcessResourceSchedule();
-        if (scheduling != null) {
-            int totalNodeCount = scheduling.getNodeCount();
-            int totalCPUCount = scheduling.getTotalCPUCount();
+            // To make job name alpha numeric
+            groovyMap.add(Script.JOB_NAME, "A" + String.valueOf(generateJobName()));
+            groovyMap.add(Script.WORKING_DIR, processContext.getWorkingDir());
 
-            if (isValid(scheduling.getQueueName())) {
-                groovyMap.add(Script.QUEUE_NAME, scheduling.getQueueName());
-            }
-            if (totalNodeCount > 0) {
-                groovyMap.add(Script.NODES, totalNodeCount);
-            }
-            // qos per queue
-            String qoS = getQoS(crp.getQualityOfService(), scheduling.getQueueName());
-            if (qoS != null) {
-                groovyMap.add(Script.QUALITY_OF_SERVICE, qoS);
-            }
-            if (totalCPUCount > 0) {
-                int ppn = totalCPUCount / totalNodeCount;
-                groovyMap.add(Script.PROCESS_PER_NODE, ppn);
-                groovyMap.add(Script.CPU_COUNT, totalCPUCount);
-            }
-            // max wall time may be set before this level if jobsubmission task has wall time configured to this job,
-            // if so we ignore scheduling configuration.
-            if (scheduling.getWallTimeLimit() > 0 && groovyMap.get(Script.MAX_WALL_TIME) == null) {
-                groovyMap.add(Script.MAX_WALL_TIME,
-                        GFacUtils.maxWallTimeCalculator(scheduling.getWallTimeLimit()));
-                if (resourceJobManager != null) {
-                    if (resourceJobManager.getResourceJobManagerType().equals(ResourceJobManagerType.LSF)) {
+            List<String> inputValues = getProcessInputValues(processModel.getProcessInputs());
+            inputValues.addAll(getProcessOutputValues(processModel.getProcessOutputs()));
+            groovyMap.add(Script.INPUTS, inputValues);
+
+            groovyMap.add(Script.USER_NAME, processContext.getJobSubmissionRemoteCluster().getServerInfo().getUserName());
+            groovyMap.add(Script.SHELL_NAME, "/bin/bash");
+            // get walltime
+            if (taskContext != null) {
+                try {
+                    JobSubmissionTaskModel jobSubmissionTaskModel = ((JobSubmissionTaskModel) taskContext.getSubTaskModel());
+                    if (jobSubmissionTaskModel.getWallTime() > 0) {
                         groovyMap.add(Script.MAX_WALL_TIME,
-                                GFacUtils.maxWallTimeCalculator(scheduling.getWallTimeLimit()));
+                                GFacUtils.maxWallTimeCalculator(jobSubmissionTaskModel.getWallTime()));
                     }
+                } catch (TException e) {
+                    log.error("Error while getting job submission sub task model", e);
                 }
             }
-            if (scheduling.getTotalPhysicalMemory() > 0) {
-                groovyMap.add(Script.USED_MEM, scheduling.getTotalPhysicalMemory());
-            }
-            if (isValid(scheduling.getOverrideLoginUserName())) {
-                groovyMap.add(Script.USER_NAME, scheduling.getOverrideLoginUserName());
-            }
-            if (isValid(scheduling.getOverrideAllocationProjectNumber())) {
-                groovyMap.add(Script.ACCOUNT_STRING, scheduling.getOverrideAllocationProjectNumber());
-            }
-            if (isValid(scheduling.getStaticWorkingDir())) {
-                groovyMap.add(Script.WORKING_DIR, scheduling.getStaticWorkingDir());
+
+            // NOTE: Give precedence to data comes with experiment
+            ComputationalResourceSchedulingModel scheduling = processModel.getProcessResourceSchedule();
+            if (scheduling != null) {
+                int totalNodeCount = scheduling.getNodeCount();
+                int totalCPUCount = scheduling.getTotalCPUCount();
+
+                if (isValid(scheduling.getQueueName())) {
+                    groovyMap.add(Script.QUEUE_NAME, scheduling.getQueueName());
+                }
+                if (totalNodeCount > 0) {
+                    groovyMap.add(Script.NODES, totalNodeCount);
+                }
+                // qos per queue
+                String qoS = getQoS(crp.getQualityOfService(), scheduling.getQueueName());
+                if (qoS != null) {
+                    groovyMap.add(Script.QUALITY_OF_SERVICE, qoS);
+                }
+                if (totalCPUCount > 0) {
+                    int ppn = totalCPUCount / totalNodeCount;
+                    groovyMap.add(Script.PROCESS_PER_NODE, ppn);
+                    groovyMap.add(Script.CPU_COUNT, totalCPUCount);
+                }
+                // max wall time may be set before this level if jobsubmission task has wall time configured to this job,
+                // if so we ignore scheduling configuration.
+                if (scheduling.getWallTimeLimit() > 0 && groovyMap.get(Script.MAX_WALL_TIME) == null) {
+                    groovyMap.add(Script.MAX_WALL_TIME,
+                            GFacUtils.maxWallTimeCalculator(scheduling.getWallTimeLimit()));
+                    if (resourceJobManager != null) {
+                        if (resourceJobManager.getResourceJobManagerType().equals(ResourceJobManagerType.LSF)) {
+                            groovyMap.add(Script.MAX_WALL_TIME,
+                                    GFacUtils.maxWallTimeCalculator(scheduling.getWallTimeLimit()));
+                        }
+                    }
+                }
+                if (scheduling.getTotalPhysicalMemory() > 0) {
+                    groovyMap.add(Script.USED_MEM, scheduling.getTotalPhysicalMemory());
+                }
+                if (isValid(scheduling.getOverrideLoginUserName())) {
+                    groovyMap.add(Script.USER_NAME, scheduling.getOverrideLoginUserName());
+                }
+                if (isValid(scheduling.getOverrideAllocationProjectNumber())) {
+                    groovyMap.add(Script.ACCOUNT_STRING, scheduling.getOverrideAllocationProjectNumber());
+                }
+                if (isValid(scheduling.getStaticWorkingDir())) {
+                    groovyMap.add(Script.WORKING_DIR, scheduling.getStaticWorkingDir());
+                }
+            } else {
+                log.error("Task scheduling cannot be null at this point..");
             }
-        } else {
-            log.error("Task scheduling cannot be null at this point..");
-        }
 
-        ApplicationDeploymentDescription appDepDescription = processContext.getApplicationDeploymentDescription();
-        List<CommandObject> moduleCmds = appDepDescription.getModuleLoadCmds();
-        if (moduleCmds != null) {
-            List<String> modulesCmdCollect = moduleCmds.stream()
-                    .sorted((e1, e2) -> e1.getCommandOrder() - e2.getCommandOrder())
-                    .map(map -> map.getCommand())
-                    .collect(Collectors.toList());
-            groovyMap.add(Script.MODULE_COMMANDS, modulesCmdCollect);
-        }
+            ApplicationDeploymentDescription appDepDescription = processContext.getApplicationDeploymentDescription();
+            List<CommandObject> moduleCmds = appDepDescription.getModuleLoadCmds();
+            if (moduleCmds != null) {
+                List<String> modulesCmdCollect = moduleCmds.stream()
+                        .sorted((e1, e2) -> e1.getCommandOrder() - e2.getCommandOrder())
+                        .map(map -> map.getCommand())
+                        .collect(Collectors.toList());
+                groovyMap.add(Script.MODULE_COMMANDS, modulesCmdCollect);
+            }
 
-        List<CommandObject> preJobCommands = appDepDescription.getPreJobCommands();
-        if (preJobCommands != null) {
-            List<String> preJobCmdCollect = preJobCommands.stream()
-                    .sorted((e1, e2) -> e1.getCommandOrder() - e2.getCommandOrder())
-                    .map(map -> parseCommands(map.getCommand(), groovyMap))
-                    .collect(Collectors.toList());
-            groovyMap.add(Script.PRE_JOB_COMMANDS, preJobCmdCollect);
-        }
+            List<CommandObject> preJobCommands = appDepDescription.getPreJobCommands();
+            if (preJobCommands != null) {
+                List<String> preJobCmdCollect = preJobCommands.stream()
+                        .sorted((e1, e2) -> e1.getCommandOrder() - e2.getCommandOrder())
+                        .map(map -> parseCommands(map.getCommand(), groovyMap))
+                        .collect(Collectors.toList());
+                groovyMap.add(Script.PRE_JOB_COMMANDS, preJobCmdCollect);
+            }
 
-        List<CommandObject> postJobCommands = appDepDescription.getPostJobCommands();
-        if (postJobCommands != null) {
-            List<String> postJobCmdCollect = postJobCommands.stream()
-                    .sorted((e1, e2) -> e1.getCommandOrder() - e2.getCommandOrder())
-                    .map(map -> parseCommands(map.getCommand(), groovyMap))
-                    .collect(Collectors.toList());
-            groovyMap.add(Script.POST_JOB_COMMANDS, postJobCmdCollect);
-        }
+            List<CommandObject> postJobCommands = appDepDescription.getPostJobCommands();
+            if (postJobCommands != null) {
+                List<String> postJobCmdCollect = postJobCommands.stream()
+                        .sorted((e1, e2) -> e1.getCommandOrder() - e2.getCommandOrder())
+                        .map(map -> parseCommands(map.getCommand(), groovyMap))
+                        .collect(Collectors.toList());
+                groovyMap.add(Script.POST_JOB_COMMANDS, postJobCmdCollect);
+            }
 
-        ApplicationParallelismType parallelism = appDepDescription.getParallelism();
-        Map<ApplicationParallelismType, String> parallelismPrefix = processContext.getResourceJobManager().getParallelismPrefix();
-        if (parallelism != null) {
-            if (parallelism != ApplicationParallelismType.SERIAL) {
-                if (parallelismPrefix != null){
-                    String parallelismCommand = parallelismPrefix.get(parallelism);
-                    if (parallelismCommand != null){
-                        groovyMap.add(Script.JOB_SUBMITTER_COMMAND, parallelismCommand);
-                    }else {
-                        throw new GFacException("Parallelism prefix is not defined for given parallelism type " + parallelism + ".. Please define the parallelism prefix at App Catalog");
+            ApplicationParallelismType parallelism = appDepDescription.getParallelism();
+            Map<ApplicationParallelismType, String> parallelismPrefix = processContext.getResourceJobManager().getParallelismPrefix();
+            if (parallelism != null) {
+                if (parallelism != ApplicationParallelismType.SERIAL) {
+                    if (parallelismPrefix != null){
+                        String parallelismCommand = parallelismPrefix.get(parallelism);
+                        if (parallelismCommand != null){
+                            groovyMap.add(Script.JOB_SUBMITTER_COMMAND, parallelismCommand);
+                        }else {
+                            throw new GFacException("Parallelism prefix is not defined for given parallelism type " + parallelism + ".. Please define the parallelism prefix at App Catalog");
+                        }
                     }
-                }
+                } // FIXME what if type if SERIAL type
             }
+        } catch (Exception e) {
+            log.error("Error while creating groovy map", e);
+            throw e;
         }
         return groovyMap;
     }
@@ -897,26 +902,51 @@ public class GFacUtils {
     }
 
     public static File createJobFile(GroovyMap groovyMap, TaskContext tc, JobManagerConfiguration jMC)
-            throws GFacException{
+            throws GFacException {
+        try {
+            int number = new SecureRandom().nextInt();
+            number = (number < 0 ? -number : number);
+            File tempJobFile = new File(GFacUtils.getLocalDataDir(tc), "job_" + Integer.toString(number) + jMC.getScriptExtension());
+            FileUtils.writeStringToFile(tempJobFile, generateScript(groovyMap, jMC.getJobDescriptionTemplateName()));
+            return tempJobFile;
+        } catch (IOException e) {
+            throw new GFacException("Error while writing script content to temp file");
+        }
+    }
 
-        URL templateUrl = ApplicationSettings.loadFile(jMC.getJobDescriptionTemplateName());
+    public static String generateScript(GroovyMap groovyMap, String templateName) throws GFacException {
+        URL templateUrl = ApplicationSettings.loadFile(templateName);
         if (templateUrl == null) {
-            String error = "System configuration file '" + jMC.getJobDescriptionTemplateName()
-                    + "' not found in the classpath";
+            String error = "Template file '" + templateName + "' not found";
             throw new GFacException(error);
         }
+        File template = new File(templateUrl.getPath());
+        TemplateEngine engine = new GStringTemplateEngine();
+        Writable make;
         try {
-            File template = new File(templateUrl.getPath());
-            TemplateEngine engine = new GStringTemplateEngine();
-            Writable make = engine.createTemplate(template).make(groovyMap);
+            make = engine.createTemplate(template).make(groovyMap);
+        } catch (Exception e) {
+            throw new GFacException("Error while generating script using groovy map");
+        }
+        return make.toString();
+    }
 
-            int number = new SecureRandom().nextInt();
-            number = (number < 0 ? -number : number);
-            File tempJobFile = new File(GFacUtils.getLocalDataDir(tc), "job_" + Integer.toString(number) + jMC.getScriptExtension());
-            FileUtils.writeStringToFile(tempJobFile, make.toString());
-            return tempJobFile;
-        } catch (ClassNotFoundException | IOException e) {
-            throw new GFacException("Error while parsing template and generating script file");
+    public static String getTemplateFileName(ResourceJobManagerType resourceJobManagerType) {
+        switch (resourceJobManagerType) {
+            case FORK:
+                return "UGE_Groovy.template";
+            case PBS:
+                return "PBS_Groovy.template";
+            case SLURM:
+                return "SLURM_Groovy.template";
+            case UGE:
+                return "UGE_Groovy.template";
+            case LSF:
+                return "LSF_Groovy.template";
+            case CLOUD:
+                return "CLOUD_Groovy.template";
+            default:
+                return null;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GroovyMap.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GroovyMap.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GroovyMap.java
index 1abc878..a1f8132 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GroovyMap.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GroovyMap.java
@@ -63,6 +63,15 @@ public class GroovyMap extends HashMap<String, Object> {
         return get(script.name);
     }
 
+    public String getStringValue(Script script) {
+        Object obj = get(script);
+        if (obj instanceof String) {
+            return ((String) obj);
+        }else {
+            throw new ClassCastException("Value is not type for String");
+        }
+    }
+
     private void addDefaultValues() {
         this.add(Script.SHELL_NAME, null)
                 .add(Script.QUEUE_NAME, null)

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
index 5e8de6d..2a5afc1 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
@@ -199,22 +199,25 @@ public abstract class Factory {
 					.getResourceJobManagerType().name());
 		}
 
+		String templateFileName = GFacUtils.getTemplateFileName(resourceJobManager.getResourceJobManagerType());
+
 		switch (resourceJobManager.getResourceJobManagerType()) {
 			case PBS:
-				return new PBSJobConfiguration("PBS_Groovy.template", ".pbs", resourceJobManager.getJobManagerBinPath(),
+				return new PBSJobConfiguration(templateFileName, ".pbs", resourceJobManager.getJobManagerBinPath(),
 						resourceJobManager.getJobManagerCommands(), outputParser);
 			case SLURM:
-				return new SlurmJobConfiguration("SLURM_Groovy.template", ".slurm", resourceJobManager
+				return new SlurmJobConfiguration(templateFileName, ".slurm", resourceJobManager
 						.getJobManagerBinPath(), resourceJobManager.getJobManagerCommands(), outputParser);
 			case LSF:
-				return new LSFJobConfiguration("LSF_Groovy.template", ".lsf", resourceJobManager.getJobManagerBinPath(),
+				return new LSFJobConfiguration(templateFileName, ".lsf", resourceJobManager.getJobManagerBinPath(),
 						resourceJobManager.getJobManagerCommands(), outputParser);
 			case UGE:
-				return new UGEJobConfiguration("UGE_Groovy.template", ".pbs", resourceJobManager.getJobManagerBinPath(),
+				return new UGEJobConfiguration(templateFileName, ".pbs", resourceJobManager.getJobManagerBinPath(),
 						resourceJobManager.getJobManagerCommands(), outputParser);
 			case FORK:
-				return new ForkJobConfiguration("FORK_Groovy.template", ".sh", resourceJobManager.getJobManagerBinPath(),
+				return new ForkJobConfiguration(templateFileName, ".sh", resourceJobManager.getJobManagerBinPath(),
 						resourceJobManager.getJobManagerCommands(), outputParser);
+            // We don't have a job configuration manager for CLOUD type
 			default:
 				return null;
 		}

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java
index 0941c85..6a3d898 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java
@@ -37,11 +37,14 @@ import org.apache.airavata.cloud.aurora.util.AuroraThriftClientUtil;
 import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.gfac.core.GFacException;
 import org.apache.airavata.gfac.core.GFacUtils;
+import org.apache.airavata.gfac.core.GroovyMap;
+import org.apache.airavata.gfac.core.Script;
 import org.apache.airavata.gfac.core.context.ProcessContext;
 import org.apache.airavata.gfac.core.context.TaskContext;
 import org.apache.airavata.gfac.core.task.JobSubmissionTask;
 import org.apache.airavata.gfac.core.task.TaskException;
 import org.apache.airavata.gfac.impl.AuroraUtils;
+import org.apache.airavata.model.appcatalog.computeresource.ResourceJobManagerType;
 import org.apache.airavata.model.commons.ErrorModel;
 import org.apache.airavata.model.job.JobModel;
 import org.apache.airavata.model.status.JobState;
@@ -82,19 +85,15 @@ public class AuroraJobSubmission implements JobSubmissionTask{
         try {
             JobKeyBean jobKey = new JobKeyBean(AuroraUtils.ENVIRONMENT, AuroraUtils.ROLE, jobIdAndName);
             IdentityBean owner = new IdentityBean(AuroraUtils.ROLE);
-            // only autodoc vina
-            String workingDir = taskContext.getWorkingDir();
-//            ProcessBean proc1 = new ProcessBean("process_1", "mkdir -p " + workingDir, false);
-//            ProcessBean proc2 = new ProcessBean("process_2", "cp -rf /home/centos/efs-mount-point/autodock-vina/* " + workingDir , false);
-            String executablePath = processContext.getApplicationDeploymentDescription().getExecutablePath();
-            ProcessBean proc3 = new ProcessBean("process_3", "cd " + workingDir + " && sh " + executablePath, false);
-            Set<ProcessBean> processes = new LinkedHashSet<>();
-//            processes.add(proc1);
-//            processes.add(proc2);
-            processes.add(proc3);
+            GroovyMap groovyMap = GFacUtils.createGroovyMap(processContext, taskContext);
+            groovyMap.add(Script.JOB_SUBMITTER_COMMAND, "sh");
+            String templateFileName = GFacUtils.getTemplateFileName(ResourceJobManagerType.CLOUD);
+            String script = GFacUtils.generateScript(groovyMap, templateFileName);
+            ProcessBean process_1 = new ProcessBean("process_1", script, false);
 
+            Set<ProcessBean> processes = new LinkedHashSet<>();
+            processes.add(process_1);
             ResourceBean resources = new ResourceBean(1.5, 512, 512);
-
             TaskConfigBean taskConfig = new TaskConfigBean("Airavata-Aurora-" + jobIdAndName, processes, resources);
             JobConfigBean jobConfig = new JobConfigBean(jobKey, owner, taskConfig, AuroraUtils.CLUSTER);
 
@@ -115,8 +114,8 @@ public class AuroraJobSubmission implements JobSubmissionTask{
             GFacUtils.saveJobModel(processContext, jobModel);
             GFacUtils.saveJobStatus(processContext, jobModel);
             taskStatus.setReason("Successfully submitted job to Aurora");
-        } catch (Exception e) {
-            String msg = "Error occurred while submitting the job";
+        } catch (Throwable e) {
+            String msg = "Error occurred while submitting Aurora job";
             log.error(msg, e);
             taskStatus.setState(TaskState.FAILED);
             taskStatus.setReason(msg);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
index 657de00..deabb95 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
@@ -73,7 +73,7 @@ public class DefaultJobSubmissionTask implements JobSubmissionTask {
 		    jobModel.setTaskId(taskContext.getTaskId());
 		    RemoteCluster remoteCluster = processContext.getJobSubmissionRemoteCluster();
 			GroovyMap groovyMap = GFacUtils.createGroovyMap(processContext, taskContext);
-			jobModel.setJobName(groovyMap.get(Script.JOB_NAME).toString());
+			jobModel.setJobName(groovyMap.getStringValue(Script.JOB_NAME));
 			ResourceJobManager resourceJobManager = GFacUtils.getResourceJobManager(processContext);
 		    JobManagerConfiguration jConfig = null;
 		    if (resourceJobManager != null) {
@@ -278,8 +278,16 @@ public class DefaultJobSubmissionTask implements JobSubmissionTask {
 		    errorModel.setActualErrorMessage(e.getMessage());
 		    errorModel.setUserFriendlyMessage(msg);
 		    taskContext.getTaskModel().setTaskErrors(Arrays.asList(errorModel));
-	    } catch (RegistryException e) {
-            e.printStackTrace();
+	    } catch (Throwable e) {
+			String msg = "JobSubmission failed";
+			log.error(msg, e);
+			taskStatus.setState(TaskState.FAILED);
+			taskStatus.setReason(msg);
+			taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+			ErrorModel errorModel = new ErrorModel();
+			errorModel.setActualErrorMessage(e.getMessage());
+			errorModel.setUserFriendlyMessage(msg);
+			taskContext.getTaskModel().setTaskErrors(Arrays.asList(errorModel));
         }
 
         taskContext.setTaskStatus(taskStatus);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/thrift-interface-descriptions/data-models/resource-catalog-models/compute_resource_model.thrift
----------------------------------------------------------------------
diff --git a/thrift-interface-descriptions/data-models/resource-catalog-models/compute_resource_model.thrift b/thrift-interface-descriptions/data-models/resource-catalog-models/compute_resource_model.thrift
index 5ca2728..5d15c19 100644
--- a/thrift-interface-descriptions/data-models/resource-catalog-models/compute_resource_model.thrift
+++ b/thrift-interface-descriptions/data-models/resource-catalog-models/compute_resource_model.thrift
@@ -52,7 +52,8 @@ enum ResourceJobManagerType {
     PBS,
     SLURM,
     LSF,
-    UGE
+    UGE,
+    CLOUD
 }
 
 /**
@@ -287,10 +288,11 @@ enum ProviderName {
 struct CloudJobSubmission {
     1: required string jobSubmissionInterfaceId = airavata_commons.DEFAULT_ID,
     2: required data_movement_models.SecurityProtocol securityProtocol,
-    3: required string nodeId,
-    4: required string executableType,
-    5: required ProviderName providerName,
-    6: required string userAccountName
+    3: required ResourceJobManagerType jobManagerType,
+    4: required string nodeId,
+    5: required string executableType,
+    6: required ProviderName providerName,
+    7: required string userAccountName
 }
 
 /**


[7/7] airavata git commit: Add useUserCRPref boolean to processModel

Posted by sh...@apache.org.
Add useUserCRPref boolean to processModel


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

Branch: refs/heads/develop
Commit: 9ee4022f59b5420c945cd80cff96f31d89d63d31
Parents: 4d9c56e
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Tue Nov 8 12:31:23 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Tue Nov 8 12:31:23 2016 -0500

----------------------------------------------------------------------
 .../lib/airavata/process_model_types.cpp        |  22 ++++
 .../lib/airavata/process_model_types.h          |  12 ++-
 .../lib/Airavata/Model/Process/Types.php        |  23 ++++
 .../lib/apache/airavata/model/process/ttypes.py |  15 ++-
 .../airavata/model/process/ProcessModel.java    | 107 ++++++++++++++++++-
 .../process_model.thrift                        |   3 +-
 6 files changed, 174 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/9ee4022f/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp
index 1f72625..a2cf1a2 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp
@@ -148,6 +148,11 @@ void ProcessModel::__set_userName(const std::string& val) {
 __isset.userName = true;
 }
 
+void ProcessModel::__set_useUserCRPref(const bool val) {
+  this->useUserCRPref = val;
+__isset.useUserCRPref = true;
+}
+
 uint32_t ProcessModel::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -427,6 +432,14 @@ uint32_t ProcessModel::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
+      case 24:
+        if (ftype == ::apache::thrift::protocol::T_BOOL) {
+          xfer += iprot->readBool(this->useUserCRPref);
+          this->__isset.useUserCRPref = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -609,6 +622,11 @@ uint32_t ProcessModel::write(::apache::thrift::protocol::TProtocol* oprot) const
     xfer += oprot->writeString(this->userName);
     xfer += oprot->writeFieldEnd();
   }
+  if (this->__isset.useUserCRPref) {
+    xfer += oprot->writeFieldBegin("useUserCRPref", ::apache::thrift::protocol::T_BOOL, 24);
+    xfer += oprot->writeBool(this->useUserCRPref);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -639,6 +657,7 @@ void swap(ProcessModel &a, ProcessModel &b) {
   swap(a.generateCert, b.generateCert);
   swap(a.experimentDataDir, b.experimentDataDir);
   swap(a.userName, b.userName);
+  swap(a.useUserCRPref, b.useUserCRPref);
   swap(a.__isset, b.__isset);
 }
 
@@ -666,6 +685,7 @@ ProcessModel::ProcessModel(const ProcessModel& other36) {
   generateCert = other36.generateCert;
   experimentDataDir = other36.experimentDataDir;
   userName = other36.userName;
+  useUserCRPref = other36.useUserCRPref;
   __isset = other36.__isset;
 }
 ProcessModel& ProcessModel::operator=(const ProcessModel& other37) {
@@ -692,6 +712,7 @@ ProcessModel& ProcessModel::operator=(const ProcessModel& other37) {
   generateCert = other37.generateCert;
   experimentDataDir = other37.experimentDataDir;
   userName = other37.userName;
+  useUserCRPref = other37.useUserCRPref;
   __isset = other37.__isset;
   return *this;
 }
@@ -721,6 +742,7 @@ void ProcessModel::printTo(std::ostream& out) const {
   out << ", " << "generateCert="; (__isset.generateCert ? (out << to_string(generateCert)) : (out << "<null>"));
   out << ", " << "experimentDataDir="; (__isset.experimentDataDir ? (out << to_string(experimentDataDir)) : (out << "<null>"));
   out << ", " << "userName="; (__isset.userName ? (out << to_string(userName)) : (out << "<null>"));
+  out << ", " << "useUserCRPref="; (__isset.useUserCRPref ? (out << to_string(useUserCRPref)) : (out << "<null>"));
   out << ")";
 }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/9ee4022f/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h
index 82b8113..179de33 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h
@@ -44,7 +44,7 @@ namespace apache { namespace airavata { namespace model { namespace process {
 class ProcessModel;
 
 typedef struct _ProcessModel__isset {
-  _ProcessModel__isset() : creationTime(false), lastUpdateTime(false), processStatuses(false), processDetail(false), applicationInterfaceId(false), applicationDeploymentId(false), computeResourceId(false), processInputs(false), processOutputs(false), processResourceSchedule(false), tasks(false), taskDag(false), processErrors(false), gatewayExecutionId(false), enableEmailNotification(false), emailAddresses(false), storageResourceId(false), userDn(false), generateCert(true), experimentDataDir(false), userName(false) {}
+  _ProcessModel__isset() : creationTime(false), lastUpdateTime(false), processStatuses(false), processDetail(false), applicationInterfaceId(false), applicationDeploymentId(false), computeResourceId(false), processInputs(false), processOutputs(false), processResourceSchedule(false), tasks(false), taskDag(false), processErrors(false), gatewayExecutionId(false), enableEmailNotification(false), emailAddresses(false), storageResourceId(false), userDn(false), generateCert(true), experimentDataDir(false), userName(false), useUserCRPref(false) {}
   bool creationTime :1;
   bool lastUpdateTime :1;
   bool processStatuses :1;
@@ -66,6 +66,7 @@ typedef struct _ProcessModel__isset {
   bool generateCert :1;
   bool experimentDataDir :1;
   bool userName :1;
+  bool useUserCRPref :1;
 } _ProcessModel__isset;
 
 class ProcessModel {
@@ -73,7 +74,7 @@ class ProcessModel {
 
   ProcessModel(const ProcessModel&);
   ProcessModel& operator=(const ProcessModel&);
-  ProcessModel() : processId("DO_NOT_SET_AT_CLIENTS"), experimentId(), creationTime(0), lastUpdateTime(0), processDetail(), applicationInterfaceId(), applicationDeploymentId(), computeResourceId(), taskDag(), gatewayExecutionId(), enableEmailNotification(0), storageResourceId(), userDn(), generateCert(false), experimentDataDir(), userName() {
+  ProcessModel() : processId("DO_NOT_SET_AT_CLIENTS"), experimentId(), creationTime(0), lastUpdateTime(0), processDetail(), applicationInterfaceId(), applicationDeploymentId(), computeResourceId(), taskDag(), gatewayExecutionId(), enableEmailNotification(0), storageResourceId(), userDn(), generateCert(false), experimentDataDir(), userName(), useUserCRPref(0) {
   }
 
   virtual ~ProcessModel() throw();
@@ -100,6 +101,7 @@ class ProcessModel {
   bool generateCert;
   std::string experimentDataDir;
   std::string userName;
+  bool useUserCRPref;
 
   _ProcessModel__isset __isset;
 
@@ -149,6 +151,8 @@ class ProcessModel {
 
   void __set_userName(const std::string& val);
 
+  void __set_useUserCRPref(const bool val);
+
   bool operator == (const ProcessModel & rhs) const
   {
     if (!(processId == rhs.processId))
@@ -239,6 +243,10 @@ class ProcessModel {
       return false;
     else if (__isset.userName && !(userName == rhs.userName))
       return false;
+    if (__isset.useUserCRPref != rhs.__isset.useUserCRPref)
+      return false;
+    else if (__isset.useUserCRPref && !(useUserCRPref == rhs.useUserCRPref))
+      return false;
     return true;
   }
   bool operator != (const ProcessModel &rhs) const {

http://git-wip-us.apache.org/repos/asf/airavata/blob/9ee4022f/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php
index 9e0b0b2..dc69623 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php
@@ -121,6 +121,10 @@ class ProcessModel {
    * @var string
    */
   public $userName = null;
+  /**
+   * @var bool
+   */
+  public $useUserCRPref = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -247,6 +251,10 @@ class ProcessModel {
           'var' => 'userName',
           'type' => TType::STRING,
           ),
+        24 => array(
+          'var' => 'useUserCRPref',
+          'type' => TType::BOOL,
+          ),
         );
     }
     if (is_array($vals)) {
@@ -319,6 +327,9 @@ class ProcessModel {
       if (isset($vals['userName'])) {
         $this->userName = $vals['userName'];
       }
+      if (isset($vals['useUserCRPref'])) {
+        $this->useUserCRPref = $vals['useUserCRPref'];
+      }
     }
   }
 
@@ -568,6 +579,13 @@ class ProcessModel {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 24:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->useUserCRPref);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -771,6 +789,11 @@ class ProcessModel {
       $xfer += $output->writeString($this->userName);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->useUserCRPref !== null) {
+      $xfer += $output->writeFieldBegin('useUserCRPref', TType::BOOL, 24);
+      $xfer += $output->writeBool($this->useUserCRPref);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;

http://git-wip-us.apache.org/repos/asf/airavata/blob/9ee4022f/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py
index f5fe908..0ae58fe 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py
@@ -57,6 +57,7 @@ class ProcessModel:
    - generateCert
    - experimentDataDir
    - userName
+   - useUserCRPref
   """
 
   thrift_spec = (
@@ -84,9 +85,10 @@ class ProcessModel:
     (21, TType.BOOL, 'generateCert', None, False, ), # 21
     (22, TType.STRING, 'experimentDataDir', None, None, ), # 22
     (23, TType.STRING, 'userName', None, None, ), # 23
+    (24, TType.BOOL, 'useUserCRPref', None, None, ), # 24
   )
 
-  def __init__(self, processId=thrift_spec[1][4], experimentId=None, creationTime=None, lastUpdateTime=None, processStatuses=None, processDetail=None, applicationInterfaceId=None, applicationDeploymentId=None, computeResourceId=None, processInputs=None, processOutputs=None, processResourceSchedule=None, tasks=None, taskDag=None, processErrors=None, gatewayExecutionId=None, enableEmailNotification=None, emailAddresses=None, storageResourceId=None, userDn=None, generateCert=thrift_spec[21][4], experimentDataDir=None, userName=None,):
+  def __init__(self, processId=thrift_spec[1][4], experimentId=None, creationTime=None, lastUpdateTime=None, processStatuses=None, processDetail=None, applicationInterfaceId=None, applicationDeploymentId=None, computeResourceId=None, processInputs=None, processOutputs=None, processResourceSchedule=None, tasks=None, taskDag=None, processErrors=None, gatewayExecutionId=None, enableEmailNotification=None, emailAddresses=None, storageResourceId=None, userDn=None, generateCert=thrift_spec[21][4], experimentDataDir=None, userName=None, useUserCRPref=None,):
     self.processId = processId
     self.experimentId = experimentId
     self.creationTime = creationTime
@@ -110,6 +112,7 @@ class ProcessModel:
     self.generateCert = generateCert
     self.experimentDataDir = experimentDataDir
     self.userName = userName
+    self.useUserCRPref = useUserCRPref
 
   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:
@@ -271,6 +274,11 @@ class ProcessModel:
           self.userName = iprot.readString()
         else:
           iprot.skip(ftype)
+      elif fid == 24:
+        if ftype == TType.BOOL:
+          self.useUserCRPref = iprot.readBool()
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -391,6 +399,10 @@ class ProcessModel:
       oprot.writeFieldBegin('userName', TType.STRING, 23)
       oprot.writeString(self.userName)
       oprot.writeFieldEnd()
+    if self.useUserCRPref is not None:
+      oprot.writeFieldBegin('useUserCRPref', TType.BOOL, 24)
+      oprot.writeBool(self.useUserCRPref)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -427,6 +439,7 @@ class ProcessModel:
     value = (value * 31) ^ hash(self.generateCert)
     value = (value * 31) ^ hash(self.experimentDataDir)
     value = (value * 31) ^ hash(self.userName)
+    value = (value * 31) ^ hash(self.useUserCRPref)
     return value
 
   def __repr__(self):

http://git-wip-us.apache.org/repos/asf/airavata/blob/9ee4022f/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java
index 3454d4a..5fa77d0 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java
@@ -87,6 +87,7 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
   private static final org.apache.thrift.protocol.TField GENERATE_CERT_FIELD_DESC = new org.apache.thrift.protocol.TField("generateCert", org.apache.thrift.protocol.TType.BOOL, (short)21);
   private static final org.apache.thrift.protocol.TField EXPERIMENT_DATA_DIR_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentDataDir", org.apache.thrift.protocol.TType.STRING, (short)22);
   private static final org.apache.thrift.protocol.TField USER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("userName", org.apache.thrift.protocol.TType.STRING, (short)23);
+  private static final org.apache.thrift.protocol.TField USE_USER_CRPREF_FIELD_DESC = new org.apache.thrift.protocol.TField("useUserCRPref", org.apache.thrift.protocol.TType.BOOL, (short)24);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -117,6 +118,7 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
   private boolean generateCert; // optional
   private String experimentDataDir; // optional
   private String userName; // optional
+  private boolean useUserCRPref; // optional
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -142,7 +144,8 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
     USER_DN((short)20, "userDn"),
     GENERATE_CERT((short)21, "generateCert"),
     EXPERIMENT_DATA_DIR((short)22, "experimentDataDir"),
-    USER_NAME((short)23, "userName");
+    USER_NAME((short)23, "userName"),
+    USE_USER_CRPREF((short)24, "useUserCRPref");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -203,6 +206,8 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
           return EXPERIMENT_DATA_DIR;
         case 23: // USER_NAME
           return USER_NAME;
+        case 24: // USE_USER_CRPREF
+          return USE_USER_CRPREF;
         default:
           return null;
       }
@@ -247,8 +252,9 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
   private static final int __LASTUPDATETIME_ISSET_ID = 1;
   private static final int __ENABLEEMAILNOTIFICATION_ISSET_ID = 2;
   private static final int __GENERATECERT_ISSET_ID = 3;
+  private static final int __USEUSERCRPREF_ISSET_ID = 4;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.LAST_UPDATE_TIME,_Fields.PROCESS_STATUSES,_Fields.PROCESS_DETAIL,_Fields.APPLICATION_INTERFACE_ID,_Fields.APPLICATION_DEPLOYMENT_ID,_Fields.COMPUTE_RESOURCE_ID,_Fields.PROCESS_INPUTS,_Fields.PROCESS_OUTPUTS,_Fields.PROCESS_RESOURCE_SCHEDULE,_Fields.TASKS,_Fields.TASK_DAG,_Fields.PROCESS_ERRORS,_Fields.GATEWAY_EXECUTION_ID,_Fields.ENABLE_EMAIL_NOTIFICATION,_Fields.EMAIL_ADDRESSES,_Fields.STORAGE_RESOURCE_ID,_Fields.USER_DN,_Fields.GENERATE_CERT,_Fields.EXPERIMENT_DATA_DIR,_Fields.USER_NAME};
+  private static final _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.LAST_UPDATE_TIME,_Fields.PROCESS_STATUSES,_Fields.PROCESS_DETAIL,_Fields.APPLICATION_INTERFACE_ID,_Fields.APPLICATION_DEPLOYMENT_ID,_Fields.COMPUTE_RESOURCE_ID,_Fields.PROCESS_INPUTS,_Fields.PROCESS_OUTPUTS,_Fields.PROCESS_RESOURCE_SCHEDULE,_Fields.TASKS,_Fields.TASK_DAG,_Fields.PROCESS_ERRORS,_Fields.GATEWAY_EXECUTION_ID,_Fields.ENABLE_EMAIL_NOTIFICATION,_Fields.EMAIL_ADDRESSES,_Fields.STORAGE_RESOURCE_ID,_Fields.USER_DN,_Fields.GENERATE_CERT,_Fields.EXPERIMENT_DATA_DIR,_Fields.USER_NAME,_Fields.USE_USER_CRPREF};
   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);
@@ -304,6 +310,8 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.USER_NAME, new org.apache.thrift.meta_data.FieldMetaData("userName", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.USE_USER_CRPREF, new org.apache.thrift.meta_data.FieldMetaData("useUserCRPref", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ProcessModel.class, metaDataMap);
   }
@@ -411,6 +419,7 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
     if (other.isSetUserName()) {
       this.userName = other.userName;
     }
+    this.useUserCRPref = other.useUserCRPref;
   }
 
   public ProcessModel deepCopy() {
@@ -447,6 +456,8 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
 
     this.experimentDataDir = null;
     this.userName = null;
+    setUseUserCRPrefIsSet(false);
+    this.useUserCRPref = false;
   }
 
   public String getProcessId() {
@@ -1064,6 +1075,28 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
     }
   }
 
+  public boolean isUseUserCRPref() {
+    return this.useUserCRPref;
+  }
+
+  public void setUseUserCRPref(boolean useUserCRPref) {
+    this.useUserCRPref = useUserCRPref;
+    setUseUserCRPrefIsSet(true);
+  }
+
+  public void unsetUseUserCRPref() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __USEUSERCRPREF_ISSET_ID);
+  }
+
+  /** Returns true if field useUserCRPref is set (has been assigned a value) and false otherwise */
+  public boolean isSetUseUserCRPref() {
+    return EncodingUtils.testBit(__isset_bitfield, __USEUSERCRPREF_ISSET_ID);
+  }
+
+  public void setUseUserCRPrefIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __USEUSERCRPREF_ISSET_ID, value);
+  }
+
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
     case PROCESS_ID:
@@ -1250,6 +1283,14 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
       }
       break;
 
+    case USE_USER_CRPREF:
+      if (value == null) {
+        unsetUseUserCRPref();
+      } else {
+        setUseUserCRPref((Boolean)value);
+      }
+      break;
+
     }
   }
 
@@ -1324,6 +1365,9 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
     case USER_NAME:
       return getUserName();
 
+    case USE_USER_CRPREF:
+      return isUseUserCRPref();
+
     }
     throw new IllegalStateException();
   }
@@ -1381,6 +1425,8 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
       return isSetExperimentDataDir();
     case USER_NAME:
       return isSetUserName();
+    case USE_USER_CRPREF:
+      return isSetUseUserCRPref();
     }
     throw new IllegalStateException();
   }
@@ -1605,6 +1651,15 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
         return false;
     }
 
+    boolean this_present_useUserCRPref = true && this.isSetUseUserCRPref();
+    boolean that_present_useUserCRPref = true && that.isSetUseUserCRPref();
+    if (this_present_useUserCRPref || that_present_useUserCRPref) {
+      if (!(this_present_useUserCRPref && that_present_useUserCRPref))
+        return false;
+      if (this.useUserCRPref != that.useUserCRPref)
+        return false;
+    }
+
     return true;
   }
 
@@ -1727,6 +1782,11 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
     if (present_userName)
       list.add(userName);
 
+    boolean present_useUserCRPref = true && (isSetUseUserCRPref());
+    list.add(present_useUserCRPref);
+    if (present_useUserCRPref)
+      list.add(useUserCRPref);
+
     return list.hashCode();
   }
 
@@ -1968,6 +2028,16 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetUseUserCRPref()).compareTo(other.isSetUseUserCRPref());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUseUserCRPref()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.useUserCRPref, other.useUserCRPref);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -2197,6 +2267,12 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
       }
       first = false;
     }
+    if (isSetUseUserCRPref()) {
+      if (!first) sb.append(", ");
+      sb.append("useUserCRPref:");
+      sb.append(this.useUserCRPref);
+      first = false;
+    }
     sb.append(")");
     return sb.toString();
   }
@@ -2503,6 +2579,14 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 24: // USE_USER_CRPREF
+            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+              struct.useUserCRPref = iprot.readBool();
+              struct.setUseUserCRPrefIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -2707,6 +2791,11 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
           oprot.writeFieldEnd();
         }
       }
+      if (struct.isSetUseUserCRPref()) {
+        oprot.writeFieldBegin(USE_USER_CRPREF_FIELD_DESC);
+        oprot.writeBool(struct.useUserCRPref);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -2790,7 +2879,10 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
       if (struct.isSetUserName()) {
         optionals.set(20);
       }
-      oprot.writeBitSet(optionals, 21);
+      if (struct.isSetUseUserCRPref()) {
+        optionals.set(21);
+      }
+      oprot.writeBitSet(optionals, 22);
       if (struct.isSetCreationTime()) {
         oprot.writeI64(struct.creationTime);
       }
@@ -2890,6 +2982,9 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
       if (struct.isSetUserName()) {
         oprot.writeString(struct.userName);
       }
+      if (struct.isSetUseUserCRPref()) {
+        oprot.writeBool(struct.useUserCRPref);
+      }
     }
 
     @Override
@@ -2899,7 +2994,7 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
       struct.setProcessIdIsSet(true);
       struct.experimentId = iprot.readString();
       struct.setExperimentIdIsSet(true);
-      BitSet incoming = iprot.readBitSet(21);
+      BitSet incoming = iprot.readBitSet(22);
       if (incoming.get(0)) {
         struct.creationTime = iprot.readI64();
         struct.setCreationTimeIsSet(true);
@@ -3044,6 +3139,10 @@ public class ProcessModel implements org.apache.thrift.TBase<ProcessModel, Proce
         struct.userName = iprot.readString();
         struct.setUserNameIsSet(true);
       }
+      if (incoming.get(21)) {
+        struct.useUserCRPref = iprot.readBool();
+        struct.setUseUserCRPrefIsSet(true);
+      }
     }
   }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/9ee4022f/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift
----------------------------------------------------------------------
diff --git a/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift b/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift
index ac78837..b2bce73 100644
--- a/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift
+++ b/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift
@@ -62,5 +62,6 @@ struct ProcessModel {
     20: optional string userDn,
     21: optional bool generateCert = 0,
     22: optional string experimentDataDir,
-    23: optional string userName;
+    23: optional string userName,
+    24: optional bool useUserCRPref;
 }
\ No newline at end of file


[4/7] airavata git commit: Added cloud script template to distribution

Posted by sh...@apache.org.
Added cloud script template to distribution


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

Branch: refs/heads/develop
Commit: fe7bc1fcaef59bb5df73700f175ce45c99e8d6ac
Parents: 9f3810e
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Nov 7 14:58:17 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Nov 7 14:58:17 2016 -0500

----------------------------------------------------------------------
 modules/distribution/src/main/assembly/bin-assembly.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/fe7bc1fc/modules/distribution/src/main/assembly/bin-assembly.xml
----------------------------------------------------------------------
diff --git a/modules/distribution/src/main/assembly/bin-assembly.xml b/modules/distribution/src/main/assembly/bin-assembly.xml
index 971bba0..b6e589b 100644
--- a/modules/distribution/src/main/assembly/bin-assembly.xml
+++ b/modules/distribution/src/main/assembly/bin-assembly.xml
@@ -112,6 +112,7 @@
                 <include>LSF_Groovy.template</include>
                 <include>UGE_Groovy.template</include>
                 <include>FORK_Groovy.template</include>
+                <include>CLOUD_Groovy.template</include>
                 <include>gsissh.properties</include>
                 <include>airavata.jks</include>
                 <include>client_truststore.jks</include>


[5/7] airavata git commit: Fixed NPE with resource job manager

Posted by sh...@apache.org.
Fixed NPE with resource job manager


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

Branch: refs/heads/develop
Commit: aefd913a843f1bc764aa8da49f496a06dea27c77
Parents: fe7bc1f
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Nov 7 15:20:39 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Nov 7 15:20:39 2016 -0500

----------------------------------------------------------------------
 .../main/java/org/apache/airavata/gfac/core/GFacUtils.java    | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/aefd913a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
index 4de01ab..88a3ada 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
@@ -490,7 +490,7 @@ public class GFacUtils {
         GroovyMap groovyMap = new GroovyMap();
         try {
             ProcessModel processModel = processContext.getProcessModel();
-            ResourceJobManager resourceJobManager = getResourceJobManager(processContext);
+            ResourceJobManager resourceJobManager = processContext.getResourceJobManager();
             setMailAddresses(processContext, groovyMap); // set email options and addresses
 
             groovyMap.add(Script.INPUT_DIR, processContext.getInputDir());
@@ -611,8 +611,9 @@ public class GFacUtils {
             }
 
             ApplicationParallelismType parallelism = appDepDescription.getParallelism();
-            Map<ApplicationParallelismType, String> parallelismPrefix = processContext.getResourceJobManager().getParallelismPrefix();
-            if (parallelism != null) {
+
+            if (parallelism != null && resourceJobManager != null) {
+                Map<ApplicationParallelismType, String> parallelismPrefix = resourceJobManager.getParallelismPrefix();
                 if (parallelism != ApplicationParallelismType.SERIAL) {
                     if (parallelismPrefix != null){
                         String parallelismCommand = parallelismPrefix.get(parallelism);


[3/7] airavata git commit: Replaced cloud job submission command with generated script

Posted by sh...@apache.org.
Replaced cloud job submission command with generated script


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

Branch: refs/heads/develop
Commit: 9f3810efcc9da8557bf745f6a5986b5abf1373ce
Parents: 2b13da9
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Nov 7 13:13:43 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Nov 7 13:13:43 2016 -0500

----------------------------------------------------------------------
 .../main/resources/lib/airavata/Airavata.cpp    |  62 +++-
 .../src/main/resources/lib/airavata/Airavata.h  |  45 ++-
 .../lib/airavata/Airavata_server.skeleton.cpp   |   6 +-
 .../airavata/compute_resource_model_types.cpp   | 257 +++++++++-------
 .../lib/airavata/compute_resource_model_types.h |  10 +-
 .../Model/AppCatalog/ComputeResource/Types.php  |  45 ++-
 .../lib/apache/airavata/api/Airavata-remote     |   8 +-
 .../lib/apache/airavata/api/Airavata.py         |  55 +++-
 .../model/appcatalog/computeresource/ttypes.py  |  42 ++-
 .../appcatalog/computeresource/BatchQueue.java  |  25 +-
 .../computeresource/CloudJobSubmission.java     | 145 ++++++++-
 .../computeresource/ResourceJobManagerType.java |   5 +-
 .../src/main/resources/CLOUD_Groovy.template    |   7 +
 .../apache/airavata/gfac/core/GFacUtils.java    | 300 ++++++++++---------
 .../apache/airavata/gfac/core/GroovyMap.java    |   9 +
 .../org/apache/airavata/gfac/impl/Factory.java  |  13 +-
 .../gfac/impl/task/AuroraJobSubmission.java     |  25 +-
 .../impl/task/DefaultJobSubmissionTask.java     |  14 +-
 .../compute_resource_model.thrift               |  12 +-
 19 files changed, 732 insertions(+), 353 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
index 278781b..7ac0f13 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
@@ -15127,6 +15127,14 @@ uint32_t Airavata_cloneExperiment_args::read(::apache::thrift::protocol::TProtoc
           xfer += iprot->skip(ftype);
         }
         break;
+      case 4:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->newExperimentProjectId);
+          this->__isset.newExperimentProjectId = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -15158,6 +15166,10 @@ uint32_t Airavata_cloneExperiment_args::write(::apache::thrift::protocol::TProto
   xfer += oprot->writeString(this->newExperimentName);
   xfer += oprot->writeFieldEnd();
 
+  xfer += oprot->writeFieldBegin("newExperimentProjectId", ::apache::thrift::protocol::T_STRING, 4);
+  xfer += oprot->writeString(this->newExperimentProjectId);
+  xfer += oprot->writeFieldEnd();
+
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -15185,6 +15197,10 @@ uint32_t Airavata_cloneExperiment_pargs::write(::apache::thrift::protocol::TProt
   xfer += oprot->writeString((*(this->newExperimentName)));
   xfer += oprot->writeFieldEnd();
 
+  xfer += oprot->writeFieldBegin("newExperimentProjectId", ::apache::thrift::protocol::T_STRING, 4);
+  xfer += oprot->writeString((*(this->newExperimentProjectId)));
+  xfer += oprot->writeFieldEnd();
+
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -15264,6 +15280,14 @@ uint32_t Airavata_cloneExperiment_result::read(::apache::thrift::protocol::TProt
           xfer += iprot->skip(ftype);
         }
         break;
+      case 6:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->pnfe.read(iprot);
+          this->__isset.pnfe = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -15306,6 +15330,10 @@ uint32_t Airavata_cloneExperiment_result::write(::apache::thrift::protocol::TPro
     xfer += oprot->writeFieldBegin("ae", ::apache::thrift::protocol::T_STRUCT, 5);
     xfer += this->ae.write(oprot);
     xfer += oprot->writeFieldEnd();
+  } else if (this->__isset.pnfe) {
+    xfer += oprot->writeFieldBegin("pnfe", ::apache::thrift::protocol::T_STRUCT, 6);
+    xfer += this->pnfe.write(oprot);
+    xfer += oprot->writeFieldEnd();
   }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
@@ -15386,6 +15414,14 @@ uint32_t Airavata_cloneExperiment_presult::read(::apache::thrift::protocol::TPro
           xfer += iprot->skip(ftype);
         }
         break;
+      case 6:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->pnfe.read(iprot);
+          this->__isset.pnfe = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -55462,13 +55498,13 @@ void AiravataClient::recv_getJobDetails(std::vector< ::apache::airavata::model::
   throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "getJobDetails failed: unknown result");
 }
 
-void AiravataClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+void AiravataClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
-  send_cloneExperiment(authzToken, existingExperimentID, newExperimentName);
+  send_cloneExperiment(authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
   recv_cloneExperiment(_return);
 }
 
-void AiravataClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+void AiravataClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
   int32_t cseqid = 0;
   oprot_->writeMessageBegin("cloneExperiment", ::apache::thrift::protocol::T_CALL, cseqid);
@@ -55477,6 +55513,7 @@ void AiravataClient::send_cloneExperiment(const  ::apache::airavata::model::secu
   args.authzToken = &authzToken;
   args.existingExperimentID = &existingExperimentID;
   args.newExperimentName = &newExperimentName;
+  args.newExperimentProjectId = &newExperimentProjectId;
   args.write(oprot_);
 
   oprot_->writeMessageEnd();
@@ -55534,6 +55571,9 @@ void AiravataClient::recv_cloneExperiment(std::string& _return)
   if (result.__isset.ae) {
     throw result.ae;
   }
+  if (result.__isset.pnfe) {
+    throw result.pnfe;
+  }
   throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "cloneExperiment failed: unknown result");
 }
 
@@ -67196,7 +67236,7 @@ void AiravataProcessor::process_cloneExperiment(int32_t seqid, ::apache::thrift:
 
   Airavata_cloneExperiment_result result;
   try {
-    iface_->cloneExperiment(result.success, args.authzToken, args.existingExperimentID, args.newExperimentName);
+    iface_->cloneExperiment(result.success, args.authzToken, args.existingExperimentID, args.newExperimentName, args.newExperimentProjectId);
     result.__isset.success = true;
   } catch ( ::apache::airavata::api::error::InvalidRequestException &ire) {
     result.ire = ire;
@@ -67213,6 +67253,9 @@ void AiravataProcessor::process_cloneExperiment(int32_t seqid, ::apache::thrift:
   } catch ( ::apache::airavata::api::error::AuthorizationException &ae) {
     result.ae = ae;
     result.__isset.ae = true;
+  } catch ( ::apache::airavata::api::error::ProjectNotFoundException &pnfe) {
+    result.pnfe = pnfe;
+    result.__isset.pnfe = true;
   } catch (const std::exception& e) {
     if (this->eventHandler_.get() != NULL) {
       this->eventHandler_->handlerError(ctx, "Airavata.cloneExperiment");
@@ -79885,13 +79928,13 @@ void AiravataConcurrentClient::recv_getJobDetails(std::vector< ::apache::airavat
   } // end while(true)
 }
 
-void AiravataConcurrentClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+void AiravataConcurrentClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
-  int32_t seqid = send_cloneExperiment(authzToken, existingExperimentID, newExperimentName);
+  int32_t seqid = send_cloneExperiment(authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
   recv_cloneExperiment(_return, seqid);
 }
 
-int32_t AiravataConcurrentClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+int32_t AiravataConcurrentClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
   int32_t cseqid = this->sync_.generateSeqId();
   ::apache::thrift::async::TConcurrentSendSentry sentry(&this->sync_);
@@ -79901,6 +79944,7 @@ int32_t AiravataConcurrentClient::send_cloneExperiment(const  ::apache::airavata
   args.authzToken = &authzToken;
   args.existingExperimentID = &existingExperimentID;
   args.newExperimentName = &newExperimentName;
+  args.newExperimentProjectId = &newExperimentProjectId;
   args.write(oprot_);
 
   oprot_->writeMessageEnd();
@@ -79980,6 +80024,10 @@ void AiravataConcurrentClient::recv_cloneExperiment(std::string& _return, const
         sentry.commit();
         throw result.ae;
       }
+      if (result.__isset.pnfe) {
+        sentry.commit();
+        throw result.pnfe;
+      }
       // in a bad state, don't commit
       throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "cloneExperiment failed: unknown result");
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
index 1af59e7..9eb38ef 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
@@ -978,6 +978,9 @@ class AiravataIf {
    *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
    *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
    *      should be shared public by default.
+   * @param newExperimentProjectId
+   *    The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+   *      in the same project as the existing experiment.
    * 
    * @return
    *   The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -1009,8 +1012,9 @@ class AiravataIf {
    * @param authzToken
    * @param existingExperimentID
    * @param newExperimentName
+   * @param newExperimentProjectId
    */
-  virtual void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName) = 0;
+  virtual void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId) = 0;
 
   /**
    * 
@@ -3057,7 +3061,7 @@ class AiravataNull : virtual public AiravataIf {
   void getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* airavataExperimentId */) {
     return;
   }
-  void cloneExperiment(std::string& /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* existingExperimentID */, const std::string& /* newExperimentName */) {
+  void cloneExperiment(std::string& /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* existingExperimentID */, const std::string& /* newExperimentName */, const std::string& /* newExperimentProjectId */) {
     return;
   }
   void terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* airavataExperimentId */, const std::string& /* gatewayId */) {
@@ -10178,9 +10182,10 @@ class Airavata_getJobDetails_presult {
 };
 
 typedef struct _Airavata_cloneExperiment_args__isset {
-  _Airavata_cloneExperiment_args__isset() : existingExperimentID(false), newExperimentName(false) {}
+  _Airavata_cloneExperiment_args__isset() : existingExperimentID(false), newExperimentName(false), newExperimentProjectId(false) {}
   bool existingExperimentID :1;
   bool newExperimentName :1;
+  bool newExperimentProjectId :1;
 } _Airavata_cloneExperiment_args__isset;
 
 class Airavata_cloneExperiment_args {
@@ -10188,13 +10193,14 @@ class Airavata_cloneExperiment_args {
 
   Airavata_cloneExperiment_args(const Airavata_cloneExperiment_args&);
   Airavata_cloneExperiment_args& operator=(const Airavata_cloneExperiment_args&);
-  Airavata_cloneExperiment_args() : existingExperimentID(), newExperimentName() {
+  Airavata_cloneExperiment_args() : existingExperimentID(), newExperimentName(), newExperimentProjectId() {
   }
 
   virtual ~Airavata_cloneExperiment_args() throw();
    ::apache::airavata::model::security::AuthzToken authzToken;
   std::string existingExperimentID;
   std::string newExperimentName;
+  std::string newExperimentProjectId;
 
   _Airavata_cloneExperiment_args__isset __isset;
 
@@ -10204,6 +10210,8 @@ class Airavata_cloneExperiment_args {
 
   void __set_newExperimentName(const std::string& val);
 
+  void __set_newExperimentProjectId(const std::string& val);
+
   bool operator == (const Airavata_cloneExperiment_args & rhs) const
   {
     if (!(authzToken == rhs.authzToken))
@@ -10212,6 +10220,8 @@ class Airavata_cloneExperiment_args {
       return false;
     if (!(newExperimentName == rhs.newExperimentName))
       return false;
+    if (!(newExperimentProjectId == rhs.newExperimentProjectId))
+      return false;
     return true;
   }
   bool operator != (const Airavata_cloneExperiment_args &rhs) const {
@@ -10234,19 +10244,21 @@ class Airavata_cloneExperiment_pargs {
   const  ::apache::airavata::model::security::AuthzToken* authzToken;
   const std::string* existingExperimentID;
   const std::string* newExperimentName;
+  const std::string* newExperimentProjectId;
 
   uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
 
 };
 
 typedef struct _Airavata_cloneExperiment_result__isset {
-  _Airavata_cloneExperiment_result__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false) {}
+  _Airavata_cloneExperiment_result__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false), pnfe(false) {}
   bool success :1;
   bool ire :1;
   bool enf :1;
   bool ace :1;
   bool ase :1;
   bool ae :1;
+  bool pnfe :1;
 } _Airavata_cloneExperiment_result__isset;
 
 class Airavata_cloneExperiment_result {
@@ -10264,6 +10276,7 @@ class Airavata_cloneExperiment_result {
    ::apache::airavata::api::error::AiravataClientException ace;
    ::apache::airavata::api::error::AiravataSystemException ase;
    ::apache::airavata::api::error::AuthorizationException ae;
+   ::apache::airavata::api::error::ProjectNotFoundException pnfe;
 
   _Airavata_cloneExperiment_result__isset __isset;
 
@@ -10279,6 +10292,8 @@ class Airavata_cloneExperiment_result {
 
   void __set_ae(const  ::apache::airavata::api::error::AuthorizationException& val);
 
+  void __set_pnfe(const  ::apache::airavata::api::error::ProjectNotFoundException& val);
+
   bool operator == (const Airavata_cloneExperiment_result & rhs) const
   {
     if (!(success == rhs.success))
@@ -10293,6 +10308,8 @@ class Airavata_cloneExperiment_result {
       return false;
     if (!(ae == rhs.ae))
       return false;
+    if (!(pnfe == rhs.pnfe))
+      return false;
     return true;
   }
   bool operator != (const Airavata_cloneExperiment_result &rhs) const {
@@ -10307,13 +10324,14 @@ class Airavata_cloneExperiment_result {
 };
 
 typedef struct _Airavata_cloneExperiment_presult__isset {
-  _Airavata_cloneExperiment_presult__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false) {}
+  _Airavata_cloneExperiment_presult__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false), pnfe(false) {}
   bool success :1;
   bool ire :1;
   bool enf :1;
   bool ace :1;
   bool ase :1;
   bool ae :1;
+  bool pnfe :1;
 } _Airavata_cloneExperiment_presult__isset;
 
 class Airavata_cloneExperiment_presult {
@@ -10327,6 +10345,7 @@ class Airavata_cloneExperiment_presult {
    ::apache::airavata::api::error::AiravataClientException ace;
    ::apache::airavata::api::error::AiravataSystemException ase;
    ::apache::airavata::api::error::AuthorizationException ae;
+   ::apache::airavata::api::error::ProjectNotFoundException pnfe;
 
   _Airavata_cloneExperiment_presult__isset __isset;
 
@@ -27126,8 +27145,8 @@ class AiravataClient : virtual public AiravataIf {
   void getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void send_getJobDetails(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void recv_getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return);
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
-  void send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
+  void send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
   void recv_cloneExperiment(std::string& _return);
   void terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);
   void send_terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);
@@ -28327,13 +28346,13 @@ class AiravataMultiface : virtual public AiravataIf {
     return;
   }
 
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName) {
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId) {
     size_t sz = ifaces_.size();
     size_t i = 0;
     for (; i < (sz - 1); ++i) {
-      ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName);
+      ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
     }
-    ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName);
+    ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
     return;
   }
 
@@ -29639,8 +29658,8 @@ class AiravataConcurrentClient : virtual public AiravataIf {
   void getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   int32_t send_getJobDetails(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void recv_getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return, const int32_t seqid);
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
-  int32_t send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
+  int32_t send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
   void recv_cloneExperiment(std::string& _return, const int32_t seqid);
   void terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);
   int32_t send_terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
index 389f8d7..7e696db 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
@@ -1130,6 +1130,9 @@ class AiravataHandler : virtual public AiravataIf {
    *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
    *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
    *      should be shared public by default.
+   * @param newExperimentProjectId
+   *    The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+   *      in the same project as the existing experiment.
    * 
    * @return
    *   The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -1161,8 +1164,9 @@ class AiravataHandler : virtual public AiravataIf {
    * @param authzToken
    * @param existingExperimentID
    * @param newExperimentName
+   * @param newExperimentProjectId
    */
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName) {
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId) {
     // Your implementation goes here
     printf("cloneExperiment\n");
   }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
index a744a1f..1b0a612 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
@@ -35,16 +35,18 @@ int _kResourceJobManagerTypeValues[] = {
   ResourceJobManagerType::PBS,
   ResourceJobManagerType::SLURM,
   ResourceJobManagerType::LSF,
-  ResourceJobManagerType::UGE
+  ResourceJobManagerType::UGE,
+  ResourceJobManagerType::CLOUD
 };
 const char* _kResourceJobManagerTypeNames[] = {
   "FORK",
   "PBS",
   "SLURM",
   "LSF",
-  "UGE"
+  "UGE",
+  "CLOUD"
 };
-const std::map<int, const char*> _ResourceJobManagerType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(5, _kResourceJobManagerTypeValues, _kResourceJobManagerTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+const std::map<int, const char*> _ResourceJobManagerType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(6, _kResourceJobManagerTypeValues, _kResourceJobManagerTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
 
 int _kJobManagerCommandValues[] = {
   JobManagerCommand::SUBMISSION,
@@ -1389,6 +1391,10 @@ void CloudJobSubmission::__set_securityProtocol(const  ::apache::airavata::model
   this->securityProtocol = val;
 }
 
+void CloudJobSubmission::__set_jobManagerType(const ResourceJobManagerType::type val) {
+  this->jobManagerType = val;
+}
+
 void CloudJobSubmission::__set_nodeId(const std::string& val) {
   this->nodeId = val;
 }
@@ -1419,6 +1425,7 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
 
   bool isset_jobSubmissionInterfaceId = false;
   bool isset_securityProtocol = false;
+  bool isset_jobManagerType = false;
   bool isset_nodeId = false;
   bool isset_executableType = false;
   bool isset_providerName = false;
@@ -1451,6 +1458,16 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
         }
         break;
       case 3:
+        if (ftype == ::apache::thrift::protocol::T_I32) {
+          int32_t ecast49;
+          xfer += iprot->readI32(ecast49);
+          this->jobManagerType = (ResourceJobManagerType::type)ecast49;
+          isset_jobManagerType = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 4:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->nodeId);
           isset_nodeId = true;
@@ -1458,7 +1475,7 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
           xfer += iprot->skip(ftype);
         }
         break;
-      case 4:
+      case 5:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->executableType);
           isset_executableType = true;
@@ -1466,17 +1483,17 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
           xfer += iprot->skip(ftype);
         }
         break;
-      case 5:
+      case 6:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast49;
-          xfer += iprot->readI32(ecast49);
-          this->providerName = (ProviderName::type)ecast49;
+          int32_t ecast50;
+          xfer += iprot->readI32(ecast50);
+          this->providerName = (ProviderName::type)ecast50;
           isset_providerName = true;
         } else {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 6:
+      case 7:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->userAccountName);
           isset_userAccountName = true;
@@ -1497,6 +1514,8 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
     throw TProtocolException(TProtocolException::INVALID_DATA);
   if (!isset_securityProtocol)
     throw TProtocolException(TProtocolException::INVALID_DATA);
+  if (!isset_jobManagerType)
+    throw TProtocolException(TProtocolException::INVALID_DATA);
   if (!isset_nodeId)
     throw TProtocolException(TProtocolException::INVALID_DATA);
   if (!isset_executableType)
@@ -1521,19 +1540,23 @@ uint32_t CloudJobSubmission::write(::apache::thrift::protocol::TProtocol* oprot)
   xfer += oprot->writeI32((int32_t)this->securityProtocol);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("nodeId", ::apache::thrift::protocol::T_STRING, 3);
+  xfer += oprot->writeFieldBegin("jobManagerType", ::apache::thrift::protocol::T_I32, 3);
+  xfer += oprot->writeI32((int32_t)this->jobManagerType);
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldBegin("nodeId", ::apache::thrift::protocol::T_STRING, 4);
   xfer += oprot->writeString(this->nodeId);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("executableType", ::apache::thrift::protocol::T_STRING, 4);
+  xfer += oprot->writeFieldBegin("executableType", ::apache::thrift::protocol::T_STRING, 5);
   xfer += oprot->writeString(this->executableType);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("providerName", ::apache::thrift::protocol::T_I32, 5);
+  xfer += oprot->writeFieldBegin("providerName", ::apache::thrift::protocol::T_I32, 6);
   xfer += oprot->writeI32((int32_t)this->providerName);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("userAccountName", ::apache::thrift::protocol::T_STRING, 6);
+  xfer += oprot->writeFieldBegin("userAccountName", ::apache::thrift::protocol::T_STRING, 7);
   xfer += oprot->writeString(this->userAccountName);
   xfer += oprot->writeFieldEnd();
 
@@ -1546,27 +1569,30 @@ void swap(CloudJobSubmission &a, CloudJobSubmission &b) {
   using ::std::swap;
   swap(a.jobSubmissionInterfaceId, b.jobSubmissionInterfaceId);
   swap(a.securityProtocol, b.securityProtocol);
+  swap(a.jobManagerType, b.jobManagerType);
   swap(a.nodeId, b.nodeId);
   swap(a.executableType, b.executableType);
   swap(a.providerName, b.providerName);
   swap(a.userAccountName, b.userAccountName);
 }
 
-CloudJobSubmission::CloudJobSubmission(const CloudJobSubmission& other50) {
-  jobSubmissionInterfaceId = other50.jobSubmissionInterfaceId;
-  securityProtocol = other50.securityProtocol;
-  nodeId = other50.nodeId;
-  executableType = other50.executableType;
-  providerName = other50.providerName;
-  userAccountName = other50.userAccountName;
-}
-CloudJobSubmission& CloudJobSubmission::operator=(const CloudJobSubmission& other51) {
+CloudJobSubmission::CloudJobSubmission(const CloudJobSubmission& other51) {
   jobSubmissionInterfaceId = other51.jobSubmissionInterfaceId;
   securityProtocol = other51.securityProtocol;
+  jobManagerType = other51.jobManagerType;
   nodeId = other51.nodeId;
   executableType = other51.executableType;
   providerName = other51.providerName;
   userAccountName = other51.userAccountName;
+}
+CloudJobSubmission& CloudJobSubmission::operator=(const CloudJobSubmission& other52) {
+  jobSubmissionInterfaceId = other52.jobSubmissionInterfaceId;
+  securityProtocol = other52.securityProtocol;
+  jobManagerType = other52.jobManagerType;
+  nodeId = other52.nodeId;
+  executableType = other52.executableType;
+  providerName = other52.providerName;
+  userAccountName = other52.userAccountName;
   return *this;
 }
 void CloudJobSubmission::printTo(std::ostream& out) const {
@@ -1574,6 +1600,7 @@ void CloudJobSubmission::printTo(std::ostream& out) const {
   out << "CloudJobSubmission(";
   out << "jobSubmissionInterfaceId=" << to_string(jobSubmissionInterfaceId);
   out << ", " << "securityProtocol=" << to_string(securityProtocol);
+  out << ", " << "jobManagerType=" << to_string(jobManagerType);
   out << ", " << "nodeId=" << to_string(nodeId);
   out << ", " << "executableType=" << to_string(executableType);
   out << ", " << "providerName=" << to_string(providerName);
@@ -1632,9 +1659,9 @@ uint32_t JobSubmissionInterface::read(::apache::thrift::protocol::TProtocol* ipr
         break;
       case 2:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast52;
-          xfer += iprot->readI32(ecast52);
-          this->jobSubmissionProtocol = (JobSubmissionProtocol::type)ecast52;
+          int32_t ecast53;
+          xfer += iprot->readI32(ecast53);
+          this->jobSubmissionProtocol = (JobSubmissionProtocol::type)ecast53;
           isset_jobSubmissionProtocol = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -1695,15 +1722,15 @@ void swap(JobSubmissionInterface &a, JobSubmissionInterface &b) {
   swap(a.priorityOrder, b.priorityOrder);
 }
 
-JobSubmissionInterface::JobSubmissionInterface(const JobSubmissionInterface& other53) {
-  jobSubmissionInterfaceId = other53.jobSubmissionInterfaceId;
-  jobSubmissionProtocol = other53.jobSubmissionProtocol;
-  priorityOrder = other53.priorityOrder;
-}
-JobSubmissionInterface& JobSubmissionInterface::operator=(const JobSubmissionInterface& other54) {
+JobSubmissionInterface::JobSubmissionInterface(const JobSubmissionInterface& other54) {
   jobSubmissionInterfaceId = other54.jobSubmissionInterfaceId;
   jobSubmissionProtocol = other54.jobSubmissionProtocol;
   priorityOrder = other54.priorityOrder;
+}
+JobSubmissionInterface& JobSubmissionInterface::operator=(const JobSubmissionInterface& other55) {
+  jobSubmissionInterfaceId = other55.jobSubmissionInterfaceId;
+  jobSubmissionProtocol = other55.jobSubmissionProtocol;
+  priorityOrder = other55.priorityOrder;
   return *this;
 }
 void JobSubmissionInterface::printTo(std::ostream& out) const {
@@ -1831,14 +1858,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->hostAliases.clear();
-            uint32_t _size55;
-            ::apache::thrift::protocol::TType _etype58;
-            xfer += iprot->readListBegin(_etype58, _size55);
-            this->hostAliases.resize(_size55);
-            uint32_t _i59;
-            for (_i59 = 0; _i59 < _size55; ++_i59)
+            uint32_t _size56;
+            ::apache::thrift::protocol::TType _etype59;
+            xfer += iprot->readListBegin(_etype59, _size56);
+            this->hostAliases.resize(_size56);
+            uint32_t _i60;
+            for (_i60 = 0; _i60 < _size56; ++_i60)
             {
-              xfer += iprot->readString(this->hostAliases[_i59]);
+              xfer += iprot->readString(this->hostAliases[_i60]);
             }
             xfer += iprot->readListEnd();
           }
@@ -1851,14 +1878,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->ipAddresses.clear();
-            uint32_t _size60;
-            ::apache::thrift::protocol::TType _etype63;
-            xfer += iprot->readListBegin(_etype63, _size60);
-            this->ipAddresses.resize(_size60);
-            uint32_t _i64;
-            for (_i64 = 0; _i64 < _size60; ++_i64)
+            uint32_t _size61;
+            ::apache::thrift::protocol::TType _etype64;
+            xfer += iprot->readListBegin(_etype64, _size61);
+            this->ipAddresses.resize(_size61);
+            uint32_t _i65;
+            for (_i65 = 0; _i65 < _size61; ++_i65)
             {
-              xfer += iprot->readString(this->ipAddresses[_i64]);
+              xfer += iprot->readString(this->ipAddresses[_i65]);
             }
             xfer += iprot->readListEnd();
           }
@@ -1887,14 +1914,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->batchQueues.clear();
-            uint32_t _size65;
-            ::apache::thrift::protocol::TType _etype68;
-            xfer += iprot->readListBegin(_etype68, _size65);
-            this->batchQueues.resize(_size65);
-            uint32_t _i69;
-            for (_i69 = 0; _i69 < _size65; ++_i69)
+            uint32_t _size66;
+            ::apache::thrift::protocol::TType _etype69;
+            xfer += iprot->readListBegin(_etype69, _size66);
+            this->batchQueues.resize(_size66);
+            uint32_t _i70;
+            for (_i70 = 0; _i70 < _size66; ++_i70)
             {
-              xfer += this->batchQueues[_i69].read(iprot);
+              xfer += this->batchQueues[_i70].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1907,19 +1934,19 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_MAP) {
           {
             this->fileSystems.clear();
-            uint32_t _size70;
-            ::apache::thrift::protocol::TType _ktype71;
-            ::apache::thrift::protocol::TType _vtype72;
-            xfer += iprot->readMapBegin(_ktype71, _vtype72, _size70);
-            uint32_t _i74;
-            for (_i74 = 0; _i74 < _size70; ++_i74)
+            uint32_t _size71;
+            ::apache::thrift::protocol::TType _ktype72;
+            ::apache::thrift::protocol::TType _vtype73;
+            xfer += iprot->readMapBegin(_ktype72, _vtype73, _size71);
+            uint32_t _i75;
+            for (_i75 = 0; _i75 < _size71; ++_i75)
             {
-              FileSystems::type _key75;
-              int32_t ecast77;
-              xfer += iprot->readI32(ecast77);
-              _key75 = (FileSystems::type)ecast77;
-              std::string& _val76 = this->fileSystems[_key75];
-              xfer += iprot->readString(_val76);
+              FileSystems::type _key76;
+              int32_t ecast78;
+              xfer += iprot->readI32(ecast78);
+              _key76 = (FileSystems::type)ecast78;
+              std::string& _val77 = this->fileSystems[_key76];
+              xfer += iprot->readString(_val77);
             }
             xfer += iprot->readMapEnd();
           }
@@ -1932,14 +1959,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->jobSubmissionInterfaces.clear();
-            uint32_t _size78;
-            ::apache::thrift::protocol::TType _etype81;
-            xfer += iprot->readListBegin(_etype81, _size78);
-            this->jobSubmissionInterfaces.resize(_size78);
-            uint32_t _i82;
-            for (_i82 = 0; _i82 < _size78; ++_i82)
+            uint32_t _size79;
+            ::apache::thrift::protocol::TType _etype82;
+            xfer += iprot->readListBegin(_etype82, _size79);
+            this->jobSubmissionInterfaces.resize(_size79);
+            uint32_t _i83;
+            for (_i83 = 0; _i83 < _size79; ++_i83)
             {
-              xfer += this->jobSubmissionInterfaces[_i82].read(iprot);
+              xfer += this->jobSubmissionInterfaces[_i83].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1952,14 +1979,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->dataMovementInterfaces.clear();
-            uint32_t _size83;
-            ::apache::thrift::protocol::TType _etype86;
-            xfer += iprot->readListBegin(_etype86, _size83);
-            this->dataMovementInterfaces.resize(_size83);
-            uint32_t _i87;
-            for (_i87 = 0; _i87 < _size83; ++_i87)
+            uint32_t _size84;
+            ::apache::thrift::protocol::TType _etype87;
+            xfer += iprot->readListBegin(_etype87, _size84);
+            this->dataMovementInterfaces.resize(_size84);
+            uint32_t _i88;
+            for (_i88 = 0; _i88 < _size84; ++_i88)
             {
-              xfer += this->dataMovementInterfaces[_i87].read(iprot);
+              xfer += this->dataMovementInterfaces[_i88].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2033,10 +2060,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("hostAliases", ::apache::thrift::protocol::T_LIST, 3);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->hostAliases.size()));
-      std::vector<std::string> ::const_iterator _iter88;
-      for (_iter88 = this->hostAliases.begin(); _iter88 != this->hostAliases.end(); ++_iter88)
+      std::vector<std::string> ::const_iterator _iter89;
+      for (_iter89 = this->hostAliases.begin(); _iter89 != this->hostAliases.end(); ++_iter89)
       {
-        xfer += oprot->writeString((*_iter88));
+        xfer += oprot->writeString((*_iter89));
       }
       xfer += oprot->writeListEnd();
     }
@@ -2046,10 +2073,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("ipAddresses", ::apache::thrift::protocol::T_LIST, 4);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->ipAddresses.size()));
-      std::vector<std::string> ::const_iterator _iter89;
-      for (_iter89 = this->ipAddresses.begin(); _iter89 != this->ipAddresses.end(); ++_iter89)
+      std::vector<std::string> ::const_iterator _iter90;
+      for (_iter90 = this->ipAddresses.begin(); _iter90 != this->ipAddresses.end(); ++_iter90)
       {
-        xfer += oprot->writeString((*_iter89));
+        xfer += oprot->writeString((*_iter90));
       }
       xfer += oprot->writeListEnd();
     }
@@ -2069,10 +2096,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("batchQueues", ::apache::thrift::protocol::T_LIST, 7);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->batchQueues.size()));
-      std::vector<BatchQueue> ::const_iterator _iter90;
-      for (_iter90 = this->batchQueues.begin(); _iter90 != this->batchQueues.end(); ++_iter90)
+      std::vector<BatchQueue> ::const_iterator _iter91;
+      for (_iter91 = this->batchQueues.begin(); _iter91 != this->batchQueues.end(); ++_iter91)
       {
-        xfer += (*_iter90).write(oprot);
+        xfer += (*_iter91).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2082,11 +2109,11 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("fileSystems", ::apache::thrift::protocol::T_MAP, 8);
     {
       xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_I32, ::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->fileSystems.size()));
-      std::map<FileSystems::type, std::string> ::const_iterator _iter91;
-      for (_iter91 = this->fileSystems.begin(); _iter91 != this->fileSystems.end(); ++_iter91)
+      std::map<FileSystems::type, std::string> ::const_iterator _iter92;
+      for (_iter92 = this->fileSystems.begin(); _iter92 != this->fileSystems.end(); ++_iter92)
       {
-        xfer += oprot->writeI32((int32_t)_iter91->first);
-        xfer += oprot->writeString(_iter91->second);
+        xfer += oprot->writeI32((int32_t)_iter92->first);
+        xfer += oprot->writeString(_iter92->second);
       }
       xfer += oprot->writeMapEnd();
     }
@@ -2096,10 +2123,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("jobSubmissionInterfaces", ::apache::thrift::protocol::T_LIST, 9);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->jobSubmissionInterfaces.size()));
-      std::vector<JobSubmissionInterface> ::const_iterator _iter92;
-      for (_iter92 = this->jobSubmissionInterfaces.begin(); _iter92 != this->jobSubmissionInterfaces.end(); ++_iter92)
+      std::vector<JobSubmissionInterface> ::const_iterator _iter93;
+      for (_iter93 = this->jobSubmissionInterfaces.begin(); _iter93 != this->jobSubmissionInterfaces.end(); ++_iter93)
       {
-        xfer += (*_iter92).write(oprot);
+        xfer += (*_iter93).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2109,10 +2136,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("dataMovementInterfaces", ::apache::thrift::protocol::T_LIST, 10);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->dataMovementInterfaces.size()));
-      std::vector< ::apache::airavata::model::data::movement::DataMovementInterface> ::const_iterator _iter93;
-      for (_iter93 = this->dataMovementInterfaces.begin(); _iter93 != this->dataMovementInterfaces.end(); ++_iter93)
+      std::vector< ::apache::airavata::model::data::movement::DataMovementInterface> ::const_iterator _iter94;
+      for (_iter94 = this->dataMovementInterfaces.begin(); _iter94 != this->dataMovementInterfaces.end(); ++_iter94)
       {
-        xfer += (*_iter93).write(oprot);
+        xfer += (*_iter94).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2162,24 +2189,7 @@ void swap(ComputeResourceDescription &a, ComputeResourceDescription &b) {
   swap(a.__isset, b.__isset);
 }
 
-ComputeResourceDescription::ComputeResourceDescription(const ComputeResourceDescription& other94) {
-  computeResourceId = other94.computeResourceId;
-  hostName = other94.hostName;
-  hostAliases = other94.hostAliases;
-  ipAddresses = other94.ipAddresses;
-  resourceDescription = other94.resourceDescription;
-  enabled = other94.enabled;
-  batchQueues = other94.batchQueues;
-  fileSystems = other94.fileSystems;
-  jobSubmissionInterfaces = other94.jobSubmissionInterfaces;
-  dataMovementInterfaces = other94.dataMovementInterfaces;
-  maxMemoryPerNode = other94.maxMemoryPerNode;
-  gatewayUsageReporting = other94.gatewayUsageReporting;
-  gatewayUsageModuleLoadCommand = other94.gatewayUsageModuleLoadCommand;
-  gatewayUsageExecutable = other94.gatewayUsageExecutable;
-  __isset = other94.__isset;
-}
-ComputeResourceDescription& ComputeResourceDescription::operator=(const ComputeResourceDescription& other95) {
+ComputeResourceDescription::ComputeResourceDescription(const ComputeResourceDescription& other95) {
   computeResourceId = other95.computeResourceId;
   hostName = other95.hostName;
   hostAliases = other95.hostAliases;
@@ -2195,6 +2205,23 @@ ComputeResourceDescription& ComputeResourceDescription::operator=(const ComputeR
   gatewayUsageModuleLoadCommand = other95.gatewayUsageModuleLoadCommand;
   gatewayUsageExecutable = other95.gatewayUsageExecutable;
   __isset = other95.__isset;
+}
+ComputeResourceDescription& ComputeResourceDescription::operator=(const ComputeResourceDescription& other96) {
+  computeResourceId = other96.computeResourceId;
+  hostName = other96.hostName;
+  hostAliases = other96.hostAliases;
+  ipAddresses = other96.ipAddresses;
+  resourceDescription = other96.resourceDescription;
+  enabled = other96.enabled;
+  batchQueues = other96.batchQueues;
+  fileSystems = other96.fileSystems;
+  jobSubmissionInterfaces = other96.jobSubmissionInterfaces;
+  dataMovementInterfaces = other96.dataMovementInterfaces;
+  maxMemoryPerNode = other96.maxMemoryPerNode;
+  gatewayUsageReporting = other96.gatewayUsageReporting;
+  gatewayUsageModuleLoadCommand = other96.gatewayUsageModuleLoadCommand;
+  gatewayUsageExecutable = other96.gatewayUsageExecutable;
+  __isset = other96.__isset;
   return *this;
 }
 void ComputeResourceDescription::printTo(std::ostream& out) const {

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
index 89566a0..479d828 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
@@ -45,7 +45,8 @@ struct ResourceJobManagerType {
     PBS = 1,
     SLURM = 2,
     LSF = 3,
-    UGE = 4
+    UGE = 4,
+    CLOUD = 5
   };
 };
 
@@ -599,12 +600,13 @@ class CloudJobSubmission {
 
   CloudJobSubmission(const CloudJobSubmission&);
   CloudJobSubmission& operator=(const CloudJobSubmission&);
-  CloudJobSubmission() : jobSubmissionInterfaceId("DO_NOT_SET_AT_CLIENTS"), securityProtocol(( ::apache::airavata::model::data::movement::SecurityProtocol::type)0), nodeId(), executableType(), providerName((ProviderName::type)0), userAccountName() {
+  CloudJobSubmission() : jobSubmissionInterfaceId("DO_NOT_SET_AT_CLIENTS"), securityProtocol(( ::apache::airavata::model::data::movement::SecurityProtocol::type)0), jobManagerType((ResourceJobManagerType::type)0), nodeId(), executableType(), providerName((ProviderName::type)0), userAccountName() {
   }
 
   virtual ~CloudJobSubmission() throw();
   std::string jobSubmissionInterfaceId;
    ::apache::airavata::model::data::movement::SecurityProtocol::type securityProtocol;
+  ResourceJobManagerType::type jobManagerType;
   std::string nodeId;
   std::string executableType;
   ProviderName::type providerName;
@@ -614,6 +616,8 @@ class CloudJobSubmission {
 
   void __set_securityProtocol(const  ::apache::airavata::model::data::movement::SecurityProtocol::type val);
 
+  void __set_jobManagerType(const ResourceJobManagerType::type val);
+
   void __set_nodeId(const std::string& val);
 
   void __set_executableType(const std::string& val);
@@ -628,6 +632,8 @@ class CloudJobSubmission {
       return false;
     if (!(securityProtocol == rhs.securityProtocol))
       return false;
+    if (!(jobManagerType == rhs.jobManagerType))
+      return false;
     if (!(nodeId == rhs.nodeId))
       return false;
     if (!(executableType == rhs.executableType))

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
index 39acd3c..63cc404 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
@@ -42,12 +42,14 @@ final class ResourceJobManagerType {
   const SLURM = 2;
   const LSF = 3;
   const UGE = 4;
+  const CLOUD = 5;
   static public $__names = array(
     0 => 'FORK',
     1 => 'PBS',
     2 => 'SLURM',
     3 => 'LSF',
     4 => 'UGE',
+    5 => 'CLOUD',
   );
 }
 
@@ -1484,6 +1486,10 @@ class CloudJobSubmission {
    */
   public $securityProtocol = null;
   /**
+   * @var int
+   */
+  public $jobManagerType = null;
+  /**
    * @var string
    */
   public $nodeId = null;
@@ -1512,18 +1518,22 @@ class CloudJobSubmission {
           'type' => TType::I32,
           ),
         3 => array(
+          'var' => 'jobManagerType',
+          'type' => TType::I32,
+          ),
+        4 => array(
           'var' => 'nodeId',
           'type' => TType::STRING,
           ),
-        4 => array(
+        5 => array(
           'var' => 'executableType',
           'type' => TType::STRING,
           ),
-        5 => array(
+        6 => array(
           'var' => 'providerName',
           'type' => TType::I32,
           ),
-        6 => array(
+        7 => array(
           'var' => 'userAccountName',
           'type' => TType::STRING,
           ),
@@ -1536,6 +1546,9 @@ class CloudJobSubmission {
       if (isset($vals['securityProtocol'])) {
         $this->securityProtocol = $vals['securityProtocol'];
       }
+      if (isset($vals['jobManagerType'])) {
+        $this->jobManagerType = $vals['jobManagerType'];
+      }
       if (isset($vals['nodeId'])) {
         $this->nodeId = $vals['nodeId'];
       }
@@ -1585,27 +1598,34 @@ class CloudJobSubmission {
           }
           break;
         case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->jobManagerType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->nodeId);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 4:
+        case 5:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->executableType);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 5:
+        case 6:
           if ($ftype == TType::I32) {
             $xfer += $input->readI32($this->providerName);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 6:
+        case 7:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->userAccountName);
           } else {
@@ -1635,23 +1655,28 @@ class CloudJobSubmission {
       $xfer += $output->writeI32($this->securityProtocol);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->jobManagerType !== null) {
+      $xfer += $output->writeFieldBegin('jobManagerType', TType::I32, 3);
+      $xfer += $output->writeI32($this->jobManagerType);
+      $xfer += $output->writeFieldEnd();
+    }
     if ($this->nodeId !== null) {
-      $xfer += $output->writeFieldBegin('nodeId', TType::STRING, 3);
+      $xfer += $output->writeFieldBegin('nodeId', TType::STRING, 4);
       $xfer += $output->writeString($this->nodeId);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->executableType !== null) {
-      $xfer += $output->writeFieldBegin('executableType', TType::STRING, 4);
+      $xfer += $output->writeFieldBegin('executableType', TType::STRING, 5);
       $xfer += $output->writeString($this->executableType);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->providerName !== null) {
-      $xfer += $output->writeFieldBegin('providerName', TType::I32, 5);
+      $xfer += $output->writeFieldBegin('providerName', TType::I32, 6);
       $xfer += $output->writeI32($this->providerName);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->userAccountName !== null) {
-      $xfer += $output->writeFieldBegin('userAccountName', TType::STRING, 6);
+      $xfer += $output->writeFieldBegin('userAccountName', TType::STRING, 7);
       $xfer += $output->writeString($this->userAccountName);
       $xfer += $output->writeFieldEnd();
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
index b2bd563..8a66c88 100755
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
@@ -72,7 +72,7 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
   print('   getIntermediateOutputs(AuthzToken authzToken, string airavataExperimentId)')
   print('   getJobStatuses(AuthzToken authzToken, string airavataExperimentId)')
   print('   getJobDetails(AuthzToken authzToken, string airavataExperimentId)')
-  print('  string cloneExperiment(AuthzToken authzToken, string existingExperimentID, string newExperimentName)')
+  print('  string cloneExperiment(AuthzToken authzToken, string existingExperimentID, string newExperimentName, string newExperimentProjectId)')
   print('  void terminateExperiment(AuthzToken authzToken, string airavataExperimentId, string gatewayId)')
   print('  string registerApplicationModule(AuthzToken authzToken, string gatewayId, ApplicationModule applicationModule)')
   print('  ApplicationModule getApplicationModule(AuthzToken authzToken, string appModuleId)')
@@ -536,10 +536,10 @@ elif cmd == 'getJobDetails':
   pp.pprint(client.getJobDetails(eval(args[0]),args[1],))
 
 elif cmd == 'cloneExperiment':
-  if len(args) != 3:
-    print('cloneExperiment requires 3 args')
+  if len(args) != 4:
+    print('cloneExperiment requires 4 args')
     sys.exit(1)
-  pp.pprint(client.cloneExperiment(eval(args[0]),args[1],args[2],))
+  pp.pprint(client.cloneExperiment(eval(args[0]),args[1],args[2],args[3],))
 
 elif cmd == 'terminateExperiment':
   if len(args) != 3:

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
index e0188bf..d43bdf8 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
@@ -1086,7 +1086,7 @@ class Iface:
     """
     pass
 
-  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName):
+  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId):
     """
 
     Clone an Existing Experiment
@@ -1100,6 +1100,9 @@ class Iface:
        Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
          the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
          should be shared public by default.
+    @param newExperimentProjectId
+       The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+         in the same project as the existing experiment.
 
     @return
       The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -1132,6 +1135,7 @@ class Iface:
      - authzToken
      - existingExperimentID
      - newExperimentName
+     - newExperimentProjectId
     """
     pass
 
@@ -6031,7 +6035,7 @@ class Client(Iface):
       raise result.ae
     raise TApplicationException(TApplicationException.MISSING_RESULT, "getJobDetails failed: unknown result")
 
-  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName):
+  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId):
     """
 
     Clone an Existing Experiment
@@ -6045,6 +6049,9 @@ class Client(Iface):
        Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
          the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
          should be shared public by default.
+    @param newExperimentProjectId
+       The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+         in the same project as the existing experiment.
 
     @return
       The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -6077,16 +6084,18 @@ class Client(Iface):
      - authzToken
      - existingExperimentID
      - newExperimentName
+     - newExperimentProjectId
     """
-    self.send_cloneExperiment(authzToken, existingExperimentID, newExperimentName)
+    self.send_cloneExperiment(authzToken, existingExperimentID, newExperimentName, newExperimentProjectId)
     return self.recv_cloneExperiment()
 
-  def send_cloneExperiment(self, authzToken, existingExperimentID, newExperimentName):
+  def send_cloneExperiment(self, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId):
     self._oprot.writeMessageBegin('cloneExperiment', TMessageType.CALL, self._seqid)
     args = cloneExperiment_args()
     args.authzToken = authzToken
     args.existingExperimentID = existingExperimentID
     args.newExperimentName = newExperimentName
+    args.newExperimentProjectId = newExperimentProjectId
     args.write(self._oprot)
     self._oprot.writeMessageEnd()
     self._oprot.trans.flush()
@@ -6114,6 +6123,8 @@ class Client(Iface):
       raise result.ase
     if result.ae is not None:
       raise result.ae
+    if result.pnfe is not None:
+      raise result.pnfe
     raise TApplicationException(TApplicationException.MISSING_RESULT, "cloneExperiment failed: unknown result")
 
   def terminateExperiment(self, authzToken, airavataExperimentId, gatewayId):
@@ -13989,7 +14000,7 @@ class Processor(Iface, TProcessor):
     iprot.readMessageEnd()
     result = cloneExperiment_result()
     try:
-      result.success = self._handler.cloneExperiment(args.authzToken, args.existingExperimentID, args.newExperimentName)
+      result.success = self._handler.cloneExperiment(args.authzToken, args.existingExperimentID, args.newExperimentName, args.newExperimentProjectId)
       msg_type = TMessageType.REPLY
     except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
       raise
@@ -14008,6 +14019,9 @@ class Processor(Iface, TProcessor):
     except apache.airavata.api.error.ttypes.AuthorizationException as ae:
       msg_type = TMessageType.REPLY
       result.ae = ae
+    except apache.airavata.api.error.ttypes.ProjectNotFoundException as pnfe:
+      msg_type = TMessageType.REPLY
+      result.pnfe = pnfe
     except Exception as ex:
       msg_type = TMessageType.EXCEPTION
       logging.exception(ex)
@@ -28093,6 +28107,7 @@ class cloneExperiment_args:
    - authzToken
    - existingExperimentID
    - newExperimentName
+   - newExperimentProjectId
   """
 
   thrift_spec = (
@@ -28100,12 +28115,14 @@ class cloneExperiment_args:
     (1, TType.STRUCT, 'authzToken', (apache.airavata.model.security.ttypes.AuthzToken, apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
     (2, TType.STRING, 'existingExperimentID', None, None, ), # 2
     (3, TType.STRING, 'newExperimentName', None, None, ), # 3
+    (4, TType.STRING, 'newExperimentProjectId', None, None, ), # 4
   )
 
-  def __init__(self, authzToken=None, existingExperimentID=None, newExperimentName=None,):
+  def __init__(self, authzToken=None, existingExperimentID=None, newExperimentName=None, newExperimentProjectId=None,):
     self.authzToken = authzToken
     self.existingExperimentID = existingExperimentID
     self.newExperimentName = newExperimentName
+    self.newExperimentProjectId = newExperimentProjectId
 
   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:
@@ -28132,6 +28149,11 @@ class cloneExperiment_args:
           self.newExperimentName = iprot.readString()
         else:
           iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.STRING:
+          self.newExperimentProjectId = iprot.readString()
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -28154,6 +28176,10 @@ class cloneExperiment_args:
       oprot.writeFieldBegin('newExperimentName', TType.STRING, 3)
       oprot.writeString(self.newExperimentName)
       oprot.writeFieldEnd()
+    if self.newExperimentProjectId is not None:
+      oprot.writeFieldBegin('newExperimentProjectId', TType.STRING, 4)
+      oprot.writeString(self.newExperimentProjectId)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -28168,6 +28194,7 @@ class cloneExperiment_args:
     value = (value * 31) ^ hash(self.authzToken)
     value = (value * 31) ^ hash(self.existingExperimentID)
     value = (value * 31) ^ hash(self.newExperimentName)
+    value = (value * 31) ^ hash(self.newExperimentProjectId)
     return value
 
   def __repr__(self):
@@ -28190,6 +28217,7 @@ class cloneExperiment_result:
    - ace
    - ase
    - ae
+   - pnfe
   """
 
   thrift_spec = (
@@ -28199,15 +28227,17 @@ class cloneExperiment_result:
     (3, TType.STRUCT, 'ace', (apache.airavata.api.error.ttypes.AiravataClientException, apache.airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ), # 3
     (4, TType.STRUCT, 'ase', (apache.airavata.api.error.ttypes.AiravataSystemException, apache.airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ), # 4
     (5, TType.STRUCT, 'ae', (apache.airavata.api.error.ttypes.AuthorizationException, apache.airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ), # 5
+    (6, TType.STRUCT, 'pnfe', (apache.airavata.api.error.ttypes.ProjectNotFoundException, apache.airavata.api.error.ttypes.ProjectNotFoundException.thrift_spec), None, ), # 6
   )
 
-  def __init__(self, success=None, ire=None, enf=None, ace=None, ase=None, ae=None,):
+  def __init__(self, success=None, ire=None, enf=None, ace=None, ase=None, ae=None, pnfe=None,):
     self.success = success
     self.ire = ire
     self.enf = enf
     self.ace = ace
     self.ase = ase
     self.ae = ae
+    self.pnfe = pnfe
 
   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:
@@ -28253,6 +28283,12 @@ class cloneExperiment_result:
           self.ae.read(iprot)
         else:
           iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.STRUCT:
+          self.pnfe = apache.airavata.api.error.ttypes.ProjectNotFoundException()
+          self.pnfe.read(iprot)
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -28287,6 +28323,10 @@ class cloneExperiment_result:
       oprot.writeFieldBegin('ae', TType.STRUCT, 5)
       self.ae.write(oprot)
       oprot.writeFieldEnd()
+    if self.pnfe is not None:
+      oprot.writeFieldBegin('pnfe', TType.STRUCT, 6)
+      self.pnfe.write(oprot)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -28302,6 +28342,7 @@ class cloneExperiment_result:
     value = (value * 31) ^ hash(self.ace)
     value = (value * 31) ^ hash(self.ase)
     value = (value * 31) ^ hash(self.ae)
+    value = (value * 31) ^ hash(self.pnfe)
     return value
 
   def __repr__(self):

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
index 174d3b8..b86ac9a 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
@@ -45,6 +45,7 @@ class ResourceJobManagerType:
   SLURM = 2
   LSF = 3
   UGE = 4
+  CLOUD = 5
 
   _VALUES_TO_NAMES = {
     0: "FORK",
@@ -52,6 +53,7 @@ class ResourceJobManagerType:
     2: "SLURM",
     3: "LSF",
     4: "UGE",
+    5: "CLOUD",
   }
 
   _NAMES_TO_VALUES = {
@@ -60,6 +62,7 @@ class ResourceJobManagerType:
     "SLURM": 2,
     "LSF": 3,
     "UGE": 4,
+    "CLOUD": 5,
   }
 
 class JobManagerCommand:
@@ -1137,6 +1140,7 @@ class CloudJobSubmission:
   Attributes:
    - jobSubmissionInterfaceId
    - securityProtocol
+   - jobManagerType
    - nodeId
    - executableType
    - providerName
@@ -1147,15 +1151,17 @@ class CloudJobSubmission:
     None, # 0
     (1, TType.STRING, 'jobSubmissionInterfaceId', None, "DO_NOT_SET_AT_CLIENTS", ), # 1
     (2, TType.I32, 'securityProtocol', None, None, ), # 2
-    (3, TType.STRING, 'nodeId', None, None, ), # 3
-    (4, TType.STRING, 'executableType', None, None, ), # 4
-    (5, TType.I32, 'providerName', None, None, ), # 5
-    (6, TType.STRING, 'userAccountName', None, None, ), # 6
+    (3, TType.I32, 'jobManagerType', None, None, ), # 3
+    (4, TType.STRING, 'nodeId', None, None, ), # 4
+    (5, TType.STRING, 'executableType', None, None, ), # 5
+    (6, TType.I32, 'providerName', None, None, ), # 6
+    (7, TType.STRING, 'userAccountName', None, None, ), # 7
   )
 
-  def __init__(self, jobSubmissionInterfaceId=thrift_spec[1][4], securityProtocol=None, nodeId=None, executableType=None, providerName=None, userAccountName=None,):
+  def __init__(self, jobSubmissionInterfaceId=thrift_spec[1][4], securityProtocol=None, jobManagerType=None, nodeId=None, executableType=None, providerName=None, userAccountName=None,):
     self.jobSubmissionInterfaceId = jobSubmissionInterfaceId
     self.securityProtocol = securityProtocol
+    self.jobManagerType = jobManagerType
     self.nodeId = nodeId
     self.executableType = executableType
     self.providerName = providerName
@@ -1181,21 +1187,26 @@ class CloudJobSubmission:
         else:
           iprot.skip(ftype)
       elif fid == 3:
+        if ftype == TType.I32:
+          self.jobManagerType = iprot.readI32()
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
         if ftype == TType.STRING:
           self.nodeId = iprot.readString()
         else:
           iprot.skip(ftype)
-      elif fid == 4:
+      elif fid == 5:
         if ftype == TType.STRING:
           self.executableType = iprot.readString()
         else:
           iprot.skip(ftype)
-      elif fid == 5:
+      elif fid == 6:
         if ftype == TType.I32:
           self.providerName = iprot.readI32()
         else:
           iprot.skip(ftype)
-      elif fid == 6:
+      elif fid == 7:
         if ftype == TType.STRING:
           self.userAccountName = iprot.readString()
         else:
@@ -1218,20 +1229,24 @@ class CloudJobSubmission:
       oprot.writeFieldBegin('securityProtocol', TType.I32, 2)
       oprot.writeI32(self.securityProtocol)
       oprot.writeFieldEnd()
+    if self.jobManagerType is not None:
+      oprot.writeFieldBegin('jobManagerType', TType.I32, 3)
+      oprot.writeI32(self.jobManagerType)
+      oprot.writeFieldEnd()
     if self.nodeId is not None:
-      oprot.writeFieldBegin('nodeId', TType.STRING, 3)
+      oprot.writeFieldBegin('nodeId', TType.STRING, 4)
       oprot.writeString(self.nodeId)
       oprot.writeFieldEnd()
     if self.executableType is not None:
-      oprot.writeFieldBegin('executableType', TType.STRING, 4)
+      oprot.writeFieldBegin('executableType', TType.STRING, 5)
       oprot.writeString(self.executableType)
       oprot.writeFieldEnd()
     if self.providerName is not None:
-      oprot.writeFieldBegin('providerName', TType.I32, 5)
+      oprot.writeFieldBegin('providerName', TType.I32, 6)
       oprot.writeI32(self.providerName)
       oprot.writeFieldEnd()
     if self.userAccountName is not None:
-      oprot.writeFieldBegin('userAccountName', TType.STRING, 6)
+      oprot.writeFieldBegin('userAccountName', TType.STRING, 7)
       oprot.writeString(self.userAccountName)
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -1242,6 +1257,8 @@ class CloudJobSubmission:
       raise TProtocol.TProtocolException(message='Required field jobSubmissionInterfaceId is unset!')
     if self.securityProtocol is None:
       raise TProtocol.TProtocolException(message='Required field securityProtocol is unset!')
+    if self.jobManagerType is None:
+      raise TProtocol.TProtocolException(message='Required field jobManagerType is unset!')
     if self.nodeId is None:
       raise TProtocol.TProtocolException(message='Required field nodeId is unset!')
     if self.executableType is None:
@@ -1257,6 +1274,7 @@ class CloudJobSubmission:
     value = 17
     value = (value * 31) ^ hash(self.jobSubmissionInterfaceId)
     value = (value * 31) ^ hash(self.securityProtocol)
+    value = (value * 31) ^ hash(self.jobManagerType)
     value = (value * 31) ^ hash(self.nodeId)
     value = (value * 31) ^ hash(self.executableType)
     value = (value * 31) ^ hash(self.providerName)

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
index 682ab2d..67dfc20 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
@@ -23,15 +23,32 @@
  */
 package org.apache.airavata.model.appcatalog.computeresource;
 
-import org.apache.thrift.EncodingUtils;
-import org.apache.thrift.protocol.TTupleProtocol;
 import org.apache.thrift.scheme.IScheme;
 import org.apache.thrift.scheme.SchemeFactory;
 import org.apache.thrift.scheme.StandardScheme;
-import org.apache.thrift.scheme.TupleScheme;
 
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
 import javax.annotation.Generated;
-import java.util.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
 /**