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

[2/2] airavata git commit: adding api changes to get detailed experiment tree

adding api changes to get detailed experiment tree


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

Branch: refs/heads/develop
Commit: 4f7af6a9a93774626fbf9b3b8d003022cadbf766
Parents: a6de539
Author: scnakandala <su...@gmail.com>
Authored: Mon Nov 16 11:36:46 2015 -0500
Committer: scnakandala <su...@gmail.com>
Committed: Tue Nov 17 15:08:22 2015 -0500

----------------------------------------------------------------------
 .../server/handler/AiravataServerHandler.java   |  68 +++-
 .../src/main/resources/lib/airavata/Airavata.h  | 257 ++++++++++++-
 .../lib/airavata/Airavata_server.skeleton.cpp   |  42 ++
 .../lib/airavata/experiment_model_types.cpp     | 380 ++++++++++---------
 .../lib/airavata/experiment_model_types.h       |  15 +-
 .../lib/airavata/process_model_types.cpp        |   4 +-
 .../lib/airavata/process_model_types.h          |   4 +-
 .../resources/lib/airavata/task_model_types.cpp | 204 ++++++----
 .../resources/lib/airavata/task_model_types.h   |  15 +-
 .../lib/Airavata/Model/Experiment/Types.php     | 187 +++++----
 .../resources/lib/Airavata/Model/Task/Types.php |  51 +++
 .../lib/apache/airavata/api/Airavata-remote     |   7 +
 .../apache/airavata/model/experiment/ttypes.py  | 125 +++---
 .../lib/apache/airavata/model/task/ttypes.py    |  25 +-
 .../airavata-api/airavata_api.thrift            |  44 +++
 .../airavata-api/experiment_model.thrift        |   4 +-
 .../airavata-api/task_model.thrift              |   4 +-
 17 files changed, 1030 insertions(+), 406 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
index e1f53bf..ab0e146 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
@@ -75,10 +75,7 @@ import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public class AiravataServerHandler implements Airavata.Iface {
     private static final Logger logger = LoggerFactory.getLogger(AiravataServerHandler.class);
@@ -1256,6 +1253,69 @@ public class AiravataServerHandler implements Airavata.Iface {
         return getExperimentInternal(airavataExperimentId);
     }
 
+    /**
+     * Fetch the completed nested tree structue of previously created experiment metadata which includes processes ->
+     * tasks -> jobs information.
+     *
+     * @param airavataExperimentId The identifier for the requested experiment. This is returned during the create experiment step.
+     * @return experimentMetada
+     * This method will return the previously stored experiment metadata.
+     * @throws org.apache.airavata.model.error.InvalidRequestException     For any incorrect forming of the request itself.
+     * @throws org.apache.airavata.model.error.ExperimentNotFoundException If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+     * @throws org.apache.airavata.model.error.AiravataClientException     The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+     *                                                                   <p/>
+     *                                                                   UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+     *                                                                   step, then Airavata Registry will not have a provenance area setup. The client has to follow
+     *                                                                   gateway registration steps and retry this request.
+     *                                                                   <p/>
+     *                                                                   AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+     *                                                                   For now this is a place holder.
+     *                                                                   <p/>
+     *                                                                   INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+     *                                                                   is implemented, the authorization will be more substantial.
+     * @throws org.apache.airavata.model.error.AiravataSystemException     This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+     *                                                                   rather an Airavata Administrator will be notified to take corrective action.
+     */
+    @Override
+    @SecurityCheck
+    public ExperimentModel getDetailedExperimentTree(AuthzToken authzToken, String airavataExperimentId) throws InvalidRequestException,
+            ExperimentNotFoundException, AiravataClientException, AiravataSystemException, AuthorizationException, TException {
+        try {
+            ExperimentModel experimentModel =  getExperimentInternal(airavataExperimentId);
+            experimentCatalog = RegistryFactory.getDefaultExpCatalog();
+            List<Object> processObjects  = experimentCatalog.get(ExperimentCatalogModelType.PROCESS,
+                    Constants.FieldConstants.ExperimentConstants.EXPERIMENT_ID, experimentModel.getExperimentId());
+            List<ProcessModel> processList = new ArrayList<>();
+            if(processObjects != null){
+                processObjects.stream().forEach(p -> {
+                    //Process already has the task object
+                    ((ProcessModel)p).getTasks().stream().forEach(t->{
+                        try {
+                            List<Object> jobObjects = experimentCatalog.get(ExperimentCatalogModelType.JOB,
+                                    Constants.FieldConstants.JobConstants.TASK_ID, ((TaskModel)t).getTaskId());
+                            List<JobModel> jobList  = new ArrayList<JobModel>();
+                            if(jobObjects != null){
+                                jobObjects.stream().forEach(j -> jobList.add((JobModel)j));
+                                t.setJobs(jobList);
+                            }
+                        } catch (RegistryException e) {
+                            logger.error(e.getMessage(), e);
+                        }
+                    });
+                    processList.add((ProcessModel)p);
+                });
+                experimentModel.setProcesses(processList);
+            }
+            return experimentModel;
+        } catch (Exception e) {
+            logger.error("Error while retrieving the experiment", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving the experiment. More info : " + e.getMessage());
+            throw exception;
+        }
+    }
+
     /*This private method wraps the logic of getExperiment method as this method is called internally in the API.*/
     private ExperimentModel getExperimentInternal(String airavataExperimentId) throws InvalidRequestException,
             ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException {

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/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 67e48ae..4b7cd57 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
@@ -474,6 +474,45 @@ class AiravataIf {
   virtual void getExperiment( ::apache::airavata::model::experiment::ExperimentModel& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId) = 0;
 
   /**
+   * Fetch the completed nested tree structue of previously created experiment metadata which includes processes ->
+   * tasks -> jobs information.
+   * 
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   * 
+   * @return experimentMetada
+   *   This method will return the previously stored experiment metadata.
+   * 
+   * @throws org.apache.airavata.model.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.model.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.model.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   * 
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   * 
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   * 
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   * 
+   * @throws org.apache.airavata.model.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   * 
+   * 
+   * @param authzToken
+   * @param airavataExperimentId
+   */
+  virtual void getDetailedExperimentTree( ::apache::airavata::model::experiment::ExperimentModel& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId) = 0;
+
+  /**
    * Configure a previously created experiment with required inputs, scheduling and other quality of service
    *   parameters. This method only updates the experiment object within the registry. The experiment has to be launched
    *   to make it actionable by the server.
@@ -1917,6 +1956,9 @@ class AiravataNull : virtual public AiravataIf {
   void getExperiment( ::apache::airavata::model::experiment::ExperimentModel& /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* airavataExperimentId */) {
     return;
   }
+  void getDetailedExperimentTree( ::apache::airavata::model::experiment::ExperimentModel& /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* airavataExperimentId */) {
+    return;
+  }
   void updateExperiment(const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* airavataExperimentId */, const  ::apache::airavata::model::experiment::ExperimentModel& /* experiment */) {
     return;
   }
@@ -6222,8 +6264,8 @@ typedef struct _Airavata_getExperimentsInProject_result__isset {
 class Airavata_getExperimentsInProject_result {
  public:
 
-  static const char* ascii_fingerprint; // = "4A43F862B4395ECBB8FAF5A2B8AD5719";
-  static const uint8_t binary_fingerprint[16]; // = {0x4A,0x43,0xF8,0x62,0xB4,0x39,0x5E,0xCB,0xB8,0xFA,0xF5,0xA2,0xB8,0xAD,0x57,0x19};
+  static const char* ascii_fingerprint; // = "B8784F6CD390EB041E2F35FF8F2F5DF8";
+  static const uint8_t binary_fingerprint[16]; // = {0xB8,0x78,0x4F,0x6C,0xD3,0x90,0xEB,0x04,0x1E,0x2F,0x35,0xFF,0x8F,0x2F,0x5D,0xF8};
 
   Airavata_getExperimentsInProject_result(const Airavata_getExperimentsInProject_result&);
   Airavata_getExperimentsInProject_result& operator=(const Airavata_getExperimentsInProject_result&);
@@ -6293,8 +6335,8 @@ typedef struct _Airavata_getExperimentsInProject_presult__isset {
 class Airavata_getExperimentsInProject_presult {
  public:
 
-  static const char* ascii_fingerprint; // = "4A43F862B4395ECBB8FAF5A2B8AD5719";
-  static const uint8_t binary_fingerprint[16]; // = {0x4A,0x43,0xF8,0x62,0xB4,0x39,0x5E,0xCB,0xB8,0xFA,0xF5,0xA2,0xB8,0xAD,0x57,0x19};
+  static const char* ascii_fingerprint; // = "B8784F6CD390EB041E2F35FF8F2F5DF8";
+  static const uint8_t binary_fingerprint[16]; // = {0xB8,0x78,0x4F,0x6C,0xD3,0x90,0xEB,0x04,0x1E,0x2F,0x35,0xFF,0x8F,0x2F,0x5D,0xF8};
 
 
   virtual ~Airavata_getExperimentsInProject_presult() throw();
@@ -6399,8 +6441,8 @@ typedef struct _Airavata_getUserExperiments_result__isset {
 class Airavata_getUserExperiments_result {
  public:
 
-  static const char* ascii_fingerprint; // = "564D61ED145B7790C97978C1EC67EB22";
-  static const uint8_t binary_fingerprint[16]; // = {0x56,0x4D,0x61,0xED,0x14,0x5B,0x77,0x90,0xC9,0x79,0x78,0xC1,0xEC,0x67,0xEB,0x22};
+  static const char* ascii_fingerprint; // = "84E19C1C4E5B827947AAA2E898184043";
+  static const uint8_t binary_fingerprint[16]; // = {0x84,0xE1,0x9C,0x1C,0x4E,0x5B,0x82,0x79,0x47,0xAA,0xA2,0xE8,0x98,0x18,0x40,0x43};
 
   Airavata_getUserExperiments_result(const Airavata_getUserExperiments_result&);
   Airavata_getUserExperiments_result& operator=(const Airavata_getUserExperiments_result&);
@@ -6464,8 +6506,8 @@ typedef struct _Airavata_getUserExperiments_presult__isset {
 class Airavata_getUserExperiments_presult {
  public:
 
-  static const char* ascii_fingerprint; // = "564D61ED145B7790C97978C1EC67EB22";
-  static const uint8_t binary_fingerprint[16]; // = {0x56,0x4D,0x61,0xED,0x14,0x5B,0x77,0x90,0xC9,0x79,0x78,0xC1,0xEC,0x67,0xEB,0x22};
+  static const char* ascii_fingerprint; // = "84E19C1C4E5B827947AAA2E898184043";
+  static const uint8_t binary_fingerprint[16]; // = {0x84,0xE1,0x9C,0x1C,0x4E,0x5B,0x82,0x79,0x47,0xAA,0xA2,0xE8,0x98,0x18,0x40,0x43};
 
 
   virtual ~Airavata_getUserExperiments_presult() throw();
@@ -6486,8 +6528,8 @@ class Airavata_getUserExperiments_presult {
 class Airavata_createExperiment_args {
  public:
 
-  static const char* ascii_fingerprint; // = "9A4BE74079A0E2FB7F9DE44451A9128E";
-  static const uint8_t binary_fingerprint[16]; // = {0x9A,0x4B,0xE7,0x40,0x79,0xA0,0xE2,0xFB,0x7F,0x9D,0xE4,0x44,0x51,0xA9,0x12,0x8E};
+  static const char* ascii_fingerprint; // = "AF8D8506603C5450CFF6943D2A1CC541";
+  static const uint8_t binary_fingerprint[16]; // = {0xAF,0x8D,0x85,0x06,0x60,0x3C,0x54,0x50,0xCF,0xF6,0x94,0x3D,0x2A,0x1C,0xC5,0x41};
 
   Airavata_createExperiment_args(const Airavata_createExperiment_args&);
   Airavata_createExperiment_args& operator=(const Airavata_createExperiment_args&);
@@ -6531,8 +6573,8 @@ class Airavata_createExperiment_args {
 class Airavata_createExperiment_pargs {
  public:
 
-  static const char* ascii_fingerprint; // = "9A4BE74079A0E2FB7F9DE44451A9128E";
-  static const uint8_t binary_fingerprint[16]; // = {0x9A,0x4B,0xE7,0x40,0x79,0xA0,0xE2,0xFB,0x7F,0x9D,0xE4,0x44,0x51,0xA9,0x12,0x8E};
+  static const char* ascii_fingerprint; // = "AF8D8506603C5450CFF6943D2A1CC541";
+  static const uint8_t binary_fingerprint[16]; // = {0xAF,0x8D,0x85,0x06,0x60,0x3C,0x54,0x50,0xCF,0xF6,0x94,0x3D,0x2A,0x1C,0xC5,0x41};
 
 
   virtual ~Airavata_createExperiment_pargs() throw();
@@ -6862,8 +6904,8 @@ typedef struct _Airavata_getExperiment_result__isset {
 class Airavata_getExperiment_result {
  public:
 
-  static const char* ascii_fingerprint; // = "0AC3160B80BF5C1F1AA64595E360CB5D";
-  static const uint8_t binary_fingerprint[16]; // = {0x0A,0xC3,0x16,0x0B,0x80,0xBF,0x5C,0x1F,0x1A,0xA6,0x45,0x95,0xE3,0x60,0xCB,0x5D};
+  static const char* ascii_fingerprint; // = "97507E675D509FA1DF7A743F62A5860C";
+  static const uint8_t binary_fingerprint[16]; // = {0x97,0x50,0x7E,0x67,0x5D,0x50,0x9F,0xA1,0xDF,0x7A,0x74,0x3F,0x62,0xA5,0x86,0x0C};
 
   Airavata_getExperiment_result(const Airavata_getExperiment_result&);
   Airavata_getExperiment_result& operator=(const Airavata_getExperiment_result&);
@@ -6933,8 +6975,8 @@ typedef struct _Airavata_getExperiment_presult__isset {
 class Airavata_getExperiment_presult {
  public:
 
-  static const char* ascii_fingerprint; // = "0AC3160B80BF5C1F1AA64595E360CB5D";
-  static const uint8_t binary_fingerprint[16]; // = {0x0A,0xC3,0x16,0x0B,0x80,0xBF,0x5C,0x1F,0x1A,0xA6,0x45,0x95,0xE3,0x60,0xCB,0x5D};
+  static const char* ascii_fingerprint; // = "97507E675D509FA1DF7A743F62A5860C";
+  static const uint8_t binary_fingerprint[16]; // = {0x97,0x50,0x7E,0x67,0x5D,0x50,0x9F,0xA1,0xDF,0x7A,0x74,0x3F,0x62,0xA5,0x86,0x0C};
 
 
   virtual ~Airavata_getExperiment_presult() throw();
@@ -6953,11 +6995,171 @@ class Airavata_getExperiment_presult {
 };
 
 
+class Airavata_getDetailedExperimentTree_args {
+ public:
+
+  static const char* ascii_fingerprint; // = "5C8C4FD14D732E7EC3E0A61A8C24C7FF";
+  static const uint8_t binary_fingerprint[16]; // = {0x5C,0x8C,0x4F,0xD1,0x4D,0x73,0x2E,0x7E,0xC3,0xE0,0xA6,0x1A,0x8C,0x24,0xC7,0xFF};
+
+  Airavata_getDetailedExperimentTree_args(const Airavata_getDetailedExperimentTree_args&);
+  Airavata_getDetailedExperimentTree_args& operator=(const Airavata_getDetailedExperimentTree_args&);
+  Airavata_getDetailedExperimentTree_args() : airavataExperimentId() {
+  }
+
+  virtual ~Airavata_getDetailedExperimentTree_args() throw();
+   ::apache::airavata::model::security::AuthzToken authzToken;
+  std::string airavataExperimentId;
+
+  void __set_authzToken(const  ::apache::airavata::model::security::AuthzToken& val);
+
+  void __set_airavataExperimentId(const std::string& val);
+
+  bool operator == (const Airavata_getDetailedExperimentTree_args & rhs) const
+  {
+    if (!(authzToken == rhs.authzToken))
+      return false;
+    if (!(airavataExperimentId == rhs.airavataExperimentId))
+      return false;
+    return true;
+  }
+  bool operator != (const Airavata_getDetailedExperimentTree_args &rhs) const {
+    return !(*this == rhs);
+  }
+
+  bool operator < (const Airavata_getDetailedExperimentTree_args & ) const;
+
+  uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+  uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+  friend std::ostream& operator<<(std::ostream& out, const Airavata_getDetailedExperimentTree_args& obj);
+};
+
+
+class Airavata_getDetailedExperimentTree_pargs {
+ public:
+
+  static const char* ascii_fingerprint; // = "5C8C4FD14D732E7EC3E0A61A8C24C7FF";
+  static const uint8_t binary_fingerprint[16]; // = {0x5C,0x8C,0x4F,0xD1,0x4D,0x73,0x2E,0x7E,0xC3,0xE0,0xA6,0x1A,0x8C,0x24,0xC7,0xFF};
+
+
+  virtual ~Airavata_getDetailedExperimentTree_pargs() throw();
+  const  ::apache::airavata::model::security::AuthzToken* authzToken;
+  const std::string* airavataExperimentId;
+
+  uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+  friend std::ostream& operator<<(std::ostream& out, const Airavata_getDetailedExperimentTree_pargs& obj);
+};
+
+typedef struct _Airavata_getDetailedExperimentTree_result__isset {
+  _Airavata_getDetailedExperimentTree_result__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false) {}
+  bool success :1;
+  bool ire :1;
+  bool enf :1;
+  bool ace :1;
+  bool ase :1;
+  bool ae :1;
+} _Airavata_getDetailedExperimentTree_result__isset;
+
+class Airavata_getDetailedExperimentTree_result {
+ public:
+
+  static const char* ascii_fingerprint; // = "97507E675D509FA1DF7A743F62A5860C";
+  static const uint8_t binary_fingerprint[16]; // = {0x97,0x50,0x7E,0x67,0x5D,0x50,0x9F,0xA1,0xDF,0x7A,0x74,0x3F,0x62,0xA5,0x86,0x0C};
+
+  Airavata_getDetailedExperimentTree_result(const Airavata_getDetailedExperimentTree_result&);
+  Airavata_getDetailedExperimentTree_result& operator=(const Airavata_getDetailedExperimentTree_result&);
+  Airavata_getDetailedExperimentTree_result() {
+  }
+
+  virtual ~Airavata_getDetailedExperimentTree_result() throw();
+   ::apache::airavata::model::experiment::ExperimentModel success;
+   ::apache::airavata::api::error::InvalidRequestException ire;
+   ::apache::airavata::api::error::ExperimentNotFoundException enf;
+   ::apache::airavata::api::error::AiravataClientException ace;
+   ::apache::airavata::api::error::AiravataSystemException ase;
+   ::apache::airavata::api::error::AuthorizationException ae;
+
+  _Airavata_getDetailedExperimentTree_result__isset __isset;
+
+  void __set_success(const  ::apache::airavata::model::experiment::ExperimentModel& val);
+
+  void __set_ire(const  ::apache::airavata::api::error::InvalidRequestException& val);
+
+  void __set_enf(const  ::apache::airavata::api::error::ExperimentNotFoundException& val);
+
+  void __set_ace(const  ::apache::airavata::api::error::AiravataClientException& val);
+
+  void __set_ase(const  ::apache::airavata::api::error::AiravataSystemException& val);
+
+  void __set_ae(const  ::apache::airavata::api::error::AuthorizationException& val);
+
+  bool operator == (const Airavata_getDetailedExperimentTree_result & rhs) const
+  {
+    if (!(success == rhs.success))
+      return false;
+    if (!(ire == rhs.ire))
+      return false;
+    if (!(enf == rhs.enf))
+      return false;
+    if (!(ace == rhs.ace))
+      return false;
+    if (!(ase == rhs.ase))
+      return false;
+    if (!(ae == rhs.ae))
+      return false;
+    return true;
+  }
+  bool operator != (const Airavata_getDetailedExperimentTree_result &rhs) const {
+    return !(*this == rhs);
+  }
+
+  bool operator < (const Airavata_getDetailedExperimentTree_result & ) const;
+
+  uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+  uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+  friend std::ostream& operator<<(std::ostream& out, const Airavata_getDetailedExperimentTree_result& obj);
+};
+
+typedef struct _Airavata_getDetailedExperimentTree_presult__isset {
+  _Airavata_getDetailedExperimentTree_presult__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false) {}
+  bool success :1;
+  bool ire :1;
+  bool enf :1;
+  bool ace :1;
+  bool ase :1;
+  bool ae :1;
+} _Airavata_getDetailedExperimentTree_presult__isset;
+
+class Airavata_getDetailedExperimentTree_presult {
+ public:
+
+  static const char* ascii_fingerprint; // = "97507E675D509FA1DF7A743F62A5860C";
+  static const uint8_t binary_fingerprint[16]; // = {0x97,0x50,0x7E,0x67,0x5D,0x50,0x9F,0xA1,0xDF,0x7A,0x74,0x3F,0x62,0xA5,0x86,0x0C};
+
+
+  virtual ~Airavata_getDetailedExperimentTree_presult() throw();
+   ::apache::airavata::model::experiment::ExperimentModel* success;
+   ::apache::airavata::api::error::InvalidRequestException ire;
+   ::apache::airavata::api::error::ExperimentNotFoundException enf;
+   ::apache::airavata::api::error::AiravataClientException ace;
+   ::apache::airavata::api::error::AiravataSystemException ase;
+   ::apache::airavata::api::error::AuthorizationException ae;
+
+  _Airavata_getDetailedExperimentTree_presult__isset __isset;
+
+  uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+
+  friend std::ostream& operator<<(std::ostream& out, const Airavata_getDetailedExperimentTree_presult& obj);
+};
+
+
 class Airavata_updateExperiment_args {
  public:
 
-  static const char* ascii_fingerprint; // = "9A4BE74079A0E2FB7F9DE44451A9128E";
-  static const uint8_t binary_fingerprint[16]; // = {0x9A,0x4B,0xE7,0x40,0x79,0xA0,0xE2,0xFB,0x7F,0x9D,0xE4,0x44,0x51,0xA9,0x12,0x8E};
+  static const char* ascii_fingerprint; // = "AF8D8506603C5450CFF6943D2A1CC541";
+  static const uint8_t binary_fingerprint[16]; // = {0xAF,0x8D,0x85,0x06,0x60,0x3C,0x54,0x50,0xCF,0xF6,0x94,0x3D,0x2A,0x1C,0xC5,0x41};
 
   Airavata_updateExperiment_args(const Airavata_updateExperiment_args&);
   Airavata_updateExperiment_args& operator=(const Airavata_updateExperiment_args&);
@@ -7001,8 +7203,8 @@ class Airavata_updateExperiment_args {
 class Airavata_updateExperiment_pargs {
  public:
 
-  static const char* ascii_fingerprint; // = "9A4BE74079A0E2FB7F9DE44451A9128E";
-  static const uint8_t binary_fingerprint[16]; // = {0x9A,0x4B,0xE7,0x40,0x79,0xA0,0xE2,0xFB,0x7F,0x9D,0xE4,0x44,0x51,0xA9,0x12,0x8E};
+  static const char* ascii_fingerprint; // = "AF8D8506603C5450CFF6943D2A1CC541";
+  static const uint8_t binary_fingerprint[16]; // = {0xAF,0x8D,0x85,0x06,0x60,0x3C,0x54,0x50,0xCF,0xF6,0x94,0x3D,0x2A,0x1C,0xC5,0x41};
 
 
   virtual ~Airavata_updateExperiment_pargs() throw();
@@ -22602,6 +22804,9 @@ class AiravataClient : virtual public AiravataIf {
   void getExperiment( ::apache::airavata::model::experiment::ExperimentModel& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void send_getExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void recv_getExperiment( ::apache::airavata::model::experiment::ExperimentModel& _return);
+  void getDetailedExperimentTree( ::apache::airavata::model::experiment::ExperimentModel& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
+  void send_getDetailedExperimentTree(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
+  void recv_getDetailedExperimentTree( ::apache::airavata::model::experiment::ExperimentModel& _return);
   void updateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const  ::apache::airavata::model::experiment::ExperimentModel& experiment);
   void send_updateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const  ::apache::airavata::model::experiment::ExperimentModel& experiment);
   void recv_updateExperiment();
@@ -22946,6 +23151,7 @@ class AiravataProcessor : public ::apache::thrift::TDispatchProcessor {
   void process_createExperiment(int32_t seqid, ::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, void* callContext);
   void process_deleteExperiment(int32_t seqid, ::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, void* callContext);
   void process_getExperiment(int32_t seqid, ::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, void* callContext);
+  void process_getDetailedExperimentTree(int32_t seqid, ::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, void* callContext);
   void process_updateExperiment(int32_t seqid, ::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, void* callContext);
   void process_updateExperimentConfiguration(int32_t seqid, ::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, void* callContext);
   void process_updateResourceScheduleing(int32_t seqid, ::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, void* callContext);
@@ -23078,6 +23284,7 @@ class AiravataProcessor : public ::apache::thrift::TDispatchProcessor {
     processMap_["createExperiment"] = &AiravataProcessor::process_createExperiment;
     processMap_["deleteExperiment"] = &AiravataProcessor::process_deleteExperiment;
     processMap_["getExperiment"] = &AiravataProcessor::process_getExperiment;
+    processMap_["getDetailedExperimentTree"] = &AiravataProcessor::process_getDetailedExperimentTree;
     processMap_["updateExperiment"] = &AiravataProcessor::process_updateExperiment;
     processMap_["updateExperimentConfiguration"] = &AiravataProcessor::process_updateExperimentConfiguration;
     processMap_["updateResourceScheduleing"] = &AiravataProcessor::process_updateResourceScheduleing;
@@ -23490,6 +23697,16 @@ class AiravataMultiface : virtual public AiravataIf {
     return;
   }
 
+  void getDetailedExperimentTree( ::apache::airavata::model::experiment::ExperimentModel& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId) {
+    size_t sz = ifaces_.size();
+    size_t i = 0;
+    for (; i < (sz - 1); ++i) {
+      ifaces_[i]->getDetailedExperimentTree(_return, authzToken, airavataExperimentId);
+    }
+    ifaces_[i]->getDetailedExperimentTree(_return, authzToken, airavataExperimentId);
+    return;
+  }
+
   void updateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const  ::apache::airavata::model::experiment::ExperimentModel& experiment) {
     size_t sz = ifaces_.size();
     size_t i = 0;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/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 87dc8c2..fdc4f8c 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
@@ -576,6 +576,48 @@ class AiravataHandler : virtual public AiravataIf {
   }
 
   /**
+   * Fetch the completed nested tree structue of previously created experiment metadata which includes processes ->
+   * tasks -> jobs information.
+   * 
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   * 
+   * @return experimentMetada
+   *   This method will return the previously stored experiment metadata.
+   * 
+   * @throws org.apache.airavata.model.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.model.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.model.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   * 
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   * 
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   * 
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   * 
+   * @throws org.apache.airavata.model.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   * 
+   * 
+   * @param authzToken
+   * @param airavataExperimentId
+   */
+  void getDetailedExperimentTree( ::apache::airavata::model::experiment::ExperimentModel& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId) {
+    // Your implementation goes here
+    printf("getDetailedExperimentTree\n");
+  }
+
+  /**
    * Configure a previously created experiment with required inputs, scheduling and other quality of service
    *   parameters. This method only updates the experiment object within the registry. The experiment has to be launched
    *   to make it actionable by the server.

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.cpp
index d4e5ad2..cdbf72b 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.cpp
@@ -370,8 +370,13 @@ void ExperimentModel::__set_errors(const std::vector< ::apache::airavata::model:
 __isset.errors = true;
 }
 
-const char* ExperimentModel::ascii_fingerprint = "5B49E16C9D5CBD0AE0EC026061048743";
-const uint8_t ExperimentModel::binary_fingerprint[16] = {0x5B,0x49,0xE1,0x6C,0x9D,0x5C,0xBD,0x0A,0xE0,0xEC,0x02,0x60,0x61,0x04,0x87,0x43};
+void ExperimentModel::__set_processes(const std::vector< ::apache::airavata::model::process::ProcessModel> & val) {
+  this->processes = val;
+__isset.processes = true;
+}
+
+const char* ExperimentModel::ascii_fingerprint = "4DF530DE68212F7F779CF0EF35D9EDC3";
+const uint8_t ExperimentModel::binary_fingerprint[16] = {0x4D,0xF5,0x30,0xDE,0x68,0x21,0x2F,0x7F,0x77,0x9C,0xF0,0xEF,0x35,0xD9,0xED,0xC3};
 
 uint32_t ExperimentModel::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -585,6 +590,26 @@ uint32_t ExperimentModel::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
+      case 18:
+        if (ftype == ::apache::thrift::protocol::T_LIST) {
+          {
+            this->processes.clear();
+            uint32_t _size23;
+            ::apache::thrift::protocol::TType _etype26;
+            xfer += iprot->readListBegin(_etype26, _size23);
+            this->processes.resize(_size23);
+            uint32_t _i27;
+            for (_i27 = 0; _i27 < _size23; ++_i27)
+            {
+              xfer += this->processes[_i27].read(iprot);
+            }
+            xfer += iprot->readListEnd();
+          }
+          this->__isset.processes = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -667,10 +692,10 @@ uint32_t ExperimentModel::write(::apache::thrift::protocol::TProtocol* oprot) co
     xfer += oprot->writeFieldBegin("emailAddresses", ::apache::thrift::protocol::T_LIST, 12);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->emailAddresses.size()));
-      std::vector<std::string> ::const_iterator _iter23;
-      for (_iter23 = this->emailAddresses.begin(); _iter23 != this->emailAddresses.end(); ++_iter23)
+      std::vector<std::string> ::const_iterator _iter28;
+      for (_iter28 = this->emailAddresses.begin(); _iter28 != this->emailAddresses.end(); ++_iter28)
       {
-        xfer += oprot->writeString((*_iter23));
+        xfer += oprot->writeString((*_iter28));
       }
       xfer += oprot->writeListEnd();
     }
@@ -685,10 +710,10 @@ uint32_t ExperimentModel::write(::apache::thrift::protocol::TProtocol* oprot) co
     xfer += oprot->writeFieldBegin("experimentInputs", ::apache::thrift::protocol::T_LIST, 14);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->experimentInputs.size()));
-      std::vector< ::apache::airavata::model::application::io::InputDataObjectType> ::const_iterator _iter24;
-      for (_iter24 = this->experimentInputs.begin(); _iter24 != this->experimentInputs.end(); ++_iter24)
+      std::vector< ::apache::airavata::model::application::io::InputDataObjectType> ::const_iterator _iter29;
+      for (_iter29 = this->experimentInputs.begin(); _iter29 != this->experimentInputs.end(); ++_iter29)
       {
-        xfer += (*_iter24).write(oprot);
+        xfer += (*_iter29).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -698,10 +723,10 @@ uint32_t ExperimentModel::write(::apache::thrift::protocol::TProtocol* oprot) co
     xfer += oprot->writeFieldBegin("experimentOutputs", ::apache::thrift::protocol::T_LIST, 15);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->experimentOutputs.size()));
-      std::vector< ::apache::airavata::model::application::io::OutputDataObjectType> ::const_iterator _iter25;
-      for (_iter25 = this->experimentOutputs.begin(); _iter25 != this->experimentOutputs.end(); ++_iter25)
+      std::vector< ::apache::airavata::model::application::io::OutputDataObjectType> ::const_iterator _iter30;
+      for (_iter30 = this->experimentOutputs.begin(); _iter30 != this->experimentOutputs.end(); ++_iter30)
       {
-        xfer += (*_iter25).write(oprot);
+        xfer += (*_iter30).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -716,10 +741,23 @@ uint32_t ExperimentModel::write(::apache::thrift::protocol::TProtocol* oprot) co
     xfer += oprot->writeFieldBegin("errors", ::apache::thrift::protocol::T_LIST, 17);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->errors.size()));
-      std::vector< ::apache::airavata::model::commons::ErrorModel> ::const_iterator _iter26;
-      for (_iter26 = this->errors.begin(); _iter26 != this->errors.end(); ++_iter26)
+      std::vector< ::apache::airavata::model::commons::ErrorModel> ::const_iterator _iter31;
+      for (_iter31 = this->errors.begin(); _iter31 != this->errors.end(); ++_iter31)
+      {
+        xfer += (*_iter31).write(oprot);
+      }
+      xfer += oprot->writeListEnd();
+    }
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.processes) {
+    xfer += oprot->writeFieldBegin("processes", ::apache::thrift::protocol::T_LIST, 18);
+    {
+      xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->processes.size()));
+      std::vector< ::apache::airavata::model::process::ProcessModel> ::const_iterator _iter32;
+      for (_iter32 = this->processes.begin(); _iter32 != this->processes.end(); ++_iter32)
       {
-        xfer += (*_iter26).write(oprot);
+        xfer += (*_iter32).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -750,48 +788,51 @@ void swap(ExperimentModel &a, ExperimentModel &b) {
   swap(a.experimentOutputs, b.experimentOutputs);
   swap(a.experimentStatus, b.experimentStatus);
   swap(a.errors, b.errors);
+  swap(a.processes, b.processes);
   swap(a.__isset, b.__isset);
 }
 
-ExperimentModel::ExperimentModel(const ExperimentModel& other27) {
-  experimentId = other27.experimentId;
-  projectId = other27.projectId;
-  gatewayId = other27.gatewayId;
-  experimentType = other27.experimentType;
-  userName = other27.userName;
-  experimentName = other27.experimentName;
-  creationTime = other27.creationTime;
-  description = other27.description;
-  executionId = other27.executionId;
-  gatewayExecutionId = other27.gatewayExecutionId;
-  enableEmailNotification = other27.enableEmailNotification;
-  emailAddresses = other27.emailAddresses;
-  userConfigurationData = other27.userConfigurationData;
-  experimentInputs = other27.experimentInputs;
-  experimentOutputs = other27.experimentOutputs;
-  experimentStatus = other27.experimentStatus;
-  errors = other27.errors;
-  __isset = other27.__isset;
-}
-ExperimentModel& ExperimentModel::operator=(const ExperimentModel& other28) {
-  experimentId = other28.experimentId;
-  projectId = other28.projectId;
-  gatewayId = other28.gatewayId;
-  experimentType = other28.experimentType;
-  userName = other28.userName;
-  experimentName = other28.experimentName;
-  creationTime = other28.creationTime;
-  description = other28.description;
-  executionId = other28.executionId;
-  gatewayExecutionId = other28.gatewayExecutionId;
-  enableEmailNotification = other28.enableEmailNotification;
-  emailAddresses = other28.emailAddresses;
-  userConfigurationData = other28.userConfigurationData;
-  experimentInputs = other28.experimentInputs;
-  experimentOutputs = other28.experimentOutputs;
-  experimentStatus = other28.experimentStatus;
-  errors = other28.errors;
-  __isset = other28.__isset;
+ExperimentModel::ExperimentModel(const ExperimentModel& other33) {
+  experimentId = other33.experimentId;
+  projectId = other33.projectId;
+  gatewayId = other33.gatewayId;
+  experimentType = other33.experimentType;
+  userName = other33.userName;
+  experimentName = other33.experimentName;
+  creationTime = other33.creationTime;
+  description = other33.description;
+  executionId = other33.executionId;
+  gatewayExecutionId = other33.gatewayExecutionId;
+  enableEmailNotification = other33.enableEmailNotification;
+  emailAddresses = other33.emailAddresses;
+  userConfigurationData = other33.userConfigurationData;
+  experimentInputs = other33.experimentInputs;
+  experimentOutputs = other33.experimentOutputs;
+  experimentStatus = other33.experimentStatus;
+  errors = other33.errors;
+  processes = other33.processes;
+  __isset = other33.__isset;
+}
+ExperimentModel& ExperimentModel::operator=(const ExperimentModel& other34) {
+  experimentId = other34.experimentId;
+  projectId = other34.projectId;
+  gatewayId = other34.gatewayId;
+  experimentType = other34.experimentType;
+  userName = other34.userName;
+  experimentName = other34.experimentName;
+  creationTime = other34.creationTime;
+  description = other34.description;
+  executionId = other34.executionId;
+  gatewayExecutionId = other34.gatewayExecutionId;
+  enableEmailNotification = other34.enableEmailNotification;
+  emailAddresses = other34.emailAddresses;
+  userConfigurationData = other34.userConfigurationData;
+  experimentInputs = other34.experimentInputs;
+  experimentOutputs = other34.experimentOutputs;
+  experimentStatus = other34.experimentStatus;
+  errors = other34.errors;
+  processes = other34.processes;
+  __isset = other34.__isset;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const ExperimentModel& obj) {
@@ -814,6 +855,7 @@ std::ostream& operator<<(std::ostream& out, const ExperimentModel& obj) {
   out << ", " << "experimentOutputs="; (obj.__isset.experimentOutputs ? (out << to_string(obj.experimentOutputs)) : (out << "<null>"));
   out << ", " << "experimentStatus="; (obj.__isset.experimentStatus ? (out << to_string(obj.experimentStatus)) : (out << "<null>"));
   out << ", " << "errors="; (obj.__isset.errors ? (out << to_string(obj.errors)) : (out << "<null>"));
+  out << ", " << "processes="; (obj.__isset.processes ? (out << to_string(obj.processes)) : (out << "<null>"));
   out << ")";
   return out;
 }
@@ -1088,33 +1130,33 @@ void swap(ExperimentSummaryModel &a, ExperimentSummaryModel &b) {
   swap(a.__isset, b.__isset);
 }
 
-ExperimentSummaryModel::ExperimentSummaryModel(const ExperimentSummaryModel& other29) {
-  experimentId = other29.experimentId;
-  projectId = other29.projectId;
-  gatewayId = other29.gatewayId;
-  creationTime = other29.creationTime;
-  userName = other29.userName;
-  name = other29.name;
-  description = other29.description;
-  executionId = other29.executionId;
-  resourceHostId = other29.resourceHostId;
-  experimentStatus = other29.experimentStatus;
-  statusUpdateTime = other29.statusUpdateTime;
-  __isset = other29.__isset;
-}
-ExperimentSummaryModel& ExperimentSummaryModel::operator=(const ExperimentSummaryModel& other30) {
-  experimentId = other30.experimentId;
-  projectId = other30.projectId;
-  gatewayId = other30.gatewayId;
-  creationTime = other30.creationTime;
-  userName = other30.userName;
-  name = other30.name;
-  description = other30.description;
-  executionId = other30.executionId;
-  resourceHostId = other30.resourceHostId;
-  experimentStatus = other30.experimentStatus;
-  statusUpdateTime = other30.statusUpdateTime;
-  __isset = other30.__isset;
+ExperimentSummaryModel::ExperimentSummaryModel(const ExperimentSummaryModel& other35) {
+  experimentId = other35.experimentId;
+  projectId = other35.projectId;
+  gatewayId = other35.gatewayId;
+  creationTime = other35.creationTime;
+  userName = other35.userName;
+  name = other35.name;
+  description = other35.description;
+  executionId = other35.executionId;
+  resourceHostId = other35.resourceHostId;
+  experimentStatus = other35.experimentStatus;
+  statusUpdateTime = other35.statusUpdateTime;
+  __isset = other35.__isset;
+}
+ExperimentSummaryModel& ExperimentSummaryModel::operator=(const ExperimentSummaryModel& other36) {
+  experimentId = other36.experimentId;
+  projectId = other36.projectId;
+  gatewayId = other36.gatewayId;
+  creationTime = other36.creationTime;
+  userName = other36.userName;
+  name = other36.name;
+  description = other36.description;
+  executionId = other36.executionId;
+  resourceHostId = other36.resourceHostId;
+  experimentStatus = other36.experimentStatus;
+  statusUpdateTime = other36.statusUpdateTime;
+  __isset = other36.__isset;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const ExperimentSummaryModel& obj) {
@@ -1275,14 +1317,14 @@ uint32_t ExperimentStatistics::read(::apache::thrift::protocol::TProtocol* iprot
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->allExperiments.clear();
-            uint32_t _size31;
-            ::apache::thrift::protocol::TType _etype34;
-            xfer += iprot->readListBegin(_etype34, _size31);
-            this->allExperiments.resize(_size31);
-            uint32_t _i35;
-            for (_i35 = 0; _i35 < _size31; ++_i35)
+            uint32_t _size37;
+            ::apache::thrift::protocol::TType _etype40;
+            xfer += iprot->readListBegin(_etype40, _size37);
+            this->allExperiments.resize(_size37);
+            uint32_t _i41;
+            for (_i41 = 0; _i41 < _size37; ++_i41)
             {
-              xfer += this->allExperiments[_i35].read(iprot);
+              xfer += this->allExperiments[_i41].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1295,14 +1337,14 @@ uint32_t ExperimentStatistics::read(::apache::thrift::protocol::TProtocol* iprot
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->completedExperiments.clear();
-            uint32_t _size36;
-            ::apache::thrift::protocol::TType _etype39;
-            xfer += iprot->readListBegin(_etype39, _size36);
-            this->completedExperiments.resize(_size36);
-            uint32_t _i40;
-            for (_i40 = 0; _i40 < _size36; ++_i40)
+            uint32_t _size42;
+            ::apache::thrift::protocol::TType _etype45;
+            xfer += iprot->readListBegin(_etype45, _size42);
+            this->completedExperiments.resize(_size42);
+            uint32_t _i46;
+            for (_i46 = 0; _i46 < _size42; ++_i46)
             {
-              xfer += this->completedExperiments[_i40].read(iprot);
+              xfer += this->completedExperiments[_i46].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1315,14 +1357,14 @@ uint32_t ExperimentStatistics::read(::apache::thrift::protocol::TProtocol* iprot
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->failedExperiments.clear();
-            uint32_t _size41;
-            ::apache::thrift::protocol::TType _etype44;
-            xfer += iprot->readListBegin(_etype44, _size41);
-            this->failedExperiments.resize(_size41);
-            uint32_t _i45;
-            for (_i45 = 0; _i45 < _size41; ++_i45)
+            uint32_t _size47;
+            ::apache::thrift::protocol::TType _etype50;
+            xfer += iprot->readListBegin(_etype50, _size47);
+            this->failedExperiments.resize(_size47);
+            uint32_t _i51;
+            for (_i51 = 0; _i51 < _size47; ++_i51)
             {
-              xfer += this->failedExperiments[_i45].read(iprot);
+              xfer += this->failedExperiments[_i51].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1335,14 +1377,14 @@ uint32_t ExperimentStatistics::read(::apache::thrift::protocol::TProtocol* iprot
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->cancelledExperiments.clear();
-            uint32_t _size46;
-            ::apache::thrift::protocol::TType _etype49;
-            xfer += iprot->readListBegin(_etype49, _size46);
-            this->cancelledExperiments.resize(_size46);
-            uint32_t _i50;
-            for (_i50 = 0; _i50 < _size46; ++_i50)
+            uint32_t _size52;
+            ::apache::thrift::protocol::TType _etype55;
+            xfer += iprot->readListBegin(_etype55, _size52);
+            this->cancelledExperiments.resize(_size52);
+            uint32_t _i56;
+            for (_i56 = 0; _i56 < _size52; ++_i56)
             {
-              xfer += this->cancelledExperiments[_i50].read(iprot);
+              xfer += this->cancelledExperiments[_i56].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1355,14 +1397,14 @@ uint32_t ExperimentStatistics::read(::apache::thrift::protocol::TProtocol* iprot
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->createdExperiments.clear();
-            uint32_t _size51;
-            ::apache::thrift::protocol::TType _etype54;
-            xfer += iprot->readListBegin(_etype54, _size51);
-            this->createdExperiments.resize(_size51);
-            uint32_t _i55;
-            for (_i55 = 0; _i55 < _size51; ++_i55)
+            uint32_t _size57;
+            ::apache::thrift::protocol::TType _etype60;
+            xfer += iprot->readListBegin(_etype60, _size57);
+            this->createdExperiments.resize(_size57);
+            uint32_t _i61;
+            for (_i61 = 0; _i61 < _size57; ++_i61)
             {
-              xfer += this->createdExperiments[_i55].read(iprot);
+              xfer += this->createdExperiments[_i61].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1375,14 +1417,14 @@ uint32_t ExperimentStatistics::read(::apache::thrift::protocol::TProtocol* iprot
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->runningExperiments.clear();
-            uint32_t _size56;
-            ::apache::thrift::protocol::TType _etype59;
-            xfer += iprot->readListBegin(_etype59, _size56);
-            this->runningExperiments.resize(_size56);
-            uint32_t _i60;
-            for (_i60 = 0; _i60 < _size56; ++_i60)
+            uint32_t _size62;
+            ::apache::thrift::protocol::TType _etype65;
+            xfer += iprot->readListBegin(_etype65, _size62);
+            this->runningExperiments.resize(_size62);
+            uint32_t _i66;
+            for (_i66 = 0; _i66 < _size62; ++_i66)
             {
-              xfer += this->runningExperiments[_i60].read(iprot);
+              xfer += this->runningExperiments[_i66].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1448,10 +1490,10 @@ uint32_t ExperimentStatistics::write(::apache::thrift::protocol::TProtocol* opro
   xfer += oprot->writeFieldBegin("allExperiments", ::apache::thrift::protocol::T_LIST, 7);
   {
     xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->allExperiments.size()));
-    std::vector<ExperimentSummaryModel> ::const_iterator _iter61;
-    for (_iter61 = this->allExperiments.begin(); _iter61 != this->allExperiments.end(); ++_iter61)
+    std::vector<ExperimentSummaryModel> ::const_iterator _iter67;
+    for (_iter67 = this->allExperiments.begin(); _iter67 != this->allExperiments.end(); ++_iter67)
     {
-      xfer += (*_iter61).write(oprot);
+      xfer += (*_iter67).write(oprot);
     }
     xfer += oprot->writeListEnd();
   }
@@ -1461,10 +1503,10 @@ uint32_t ExperimentStatistics::write(::apache::thrift::protocol::TProtocol* opro
     xfer += oprot->writeFieldBegin("completedExperiments", ::apache::thrift::protocol::T_LIST, 8);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->completedExperiments.size()));
-      std::vector<ExperimentSummaryModel> ::const_iterator _iter62;
-      for (_iter62 = this->completedExperiments.begin(); _iter62 != this->completedExperiments.end(); ++_iter62)
+      std::vector<ExperimentSummaryModel> ::const_iterator _iter68;
+      for (_iter68 = this->completedExperiments.begin(); _iter68 != this->completedExperiments.end(); ++_iter68)
       {
-        xfer += (*_iter62).write(oprot);
+        xfer += (*_iter68).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -1474,10 +1516,10 @@ uint32_t ExperimentStatistics::write(::apache::thrift::protocol::TProtocol* opro
     xfer += oprot->writeFieldBegin("failedExperiments", ::apache::thrift::protocol::T_LIST, 9);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->failedExperiments.size()));
-      std::vector<ExperimentSummaryModel> ::const_iterator _iter63;
-      for (_iter63 = this->failedExperiments.begin(); _iter63 != this->failedExperiments.end(); ++_iter63)
+      std::vector<ExperimentSummaryModel> ::const_iterator _iter69;
+      for (_iter69 = this->failedExperiments.begin(); _iter69 != this->failedExperiments.end(); ++_iter69)
       {
-        xfer += (*_iter63).write(oprot);
+        xfer += (*_iter69).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -1487,10 +1529,10 @@ uint32_t ExperimentStatistics::write(::apache::thrift::protocol::TProtocol* opro
     xfer += oprot->writeFieldBegin("cancelledExperiments", ::apache::thrift::protocol::T_LIST, 10);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->cancelledExperiments.size()));
-      std::vector<ExperimentSummaryModel> ::const_iterator _iter64;
-      for (_iter64 = this->cancelledExperiments.begin(); _iter64 != this->cancelledExperiments.end(); ++_iter64)
+      std::vector<ExperimentSummaryModel> ::const_iterator _iter70;
+      for (_iter70 = this->cancelledExperiments.begin(); _iter70 != this->cancelledExperiments.end(); ++_iter70)
       {
-        xfer += (*_iter64).write(oprot);
+        xfer += (*_iter70).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -1500,10 +1542,10 @@ uint32_t ExperimentStatistics::write(::apache::thrift::protocol::TProtocol* opro
     xfer += oprot->writeFieldBegin("createdExperiments", ::apache::thrift::protocol::T_LIST, 11);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->createdExperiments.size()));
-      std::vector<ExperimentSummaryModel> ::const_iterator _iter65;
-      for (_iter65 = this->createdExperiments.begin(); _iter65 != this->createdExperiments.end(); ++_iter65)
+      std::vector<ExperimentSummaryModel> ::const_iterator _iter71;
+      for (_iter71 = this->createdExperiments.begin(); _iter71 != this->createdExperiments.end(); ++_iter71)
       {
-        xfer += (*_iter65).write(oprot);
+        xfer += (*_iter71).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -1513,10 +1555,10 @@ uint32_t ExperimentStatistics::write(::apache::thrift::protocol::TProtocol* opro
     xfer += oprot->writeFieldBegin("runningExperiments", ::apache::thrift::protocol::T_LIST, 12);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->runningExperiments.size()));
-      std::vector<ExperimentSummaryModel> ::const_iterator _iter66;
-      for (_iter66 = this->runningExperiments.begin(); _iter66 != this->runningExperiments.end(); ++_iter66)
+      std::vector<ExperimentSummaryModel> ::const_iterator _iter72;
+      for (_iter72 = this->runningExperiments.begin(); _iter72 != this->runningExperiments.end(); ++_iter72)
       {
-        xfer += (*_iter66).write(oprot);
+        xfer += (*_iter72).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -1545,35 +1587,35 @@ void swap(ExperimentStatistics &a, ExperimentStatistics &b) {
   swap(a.__isset, b.__isset);
 }
 
-ExperimentStatistics::ExperimentStatistics(const ExperimentStatistics& other67) {
-  allExperimentCount = other67.allExperimentCount;
-  completedExperimentCount = other67.completedExperimentCount;
-  cancelledExperimentCount = other67.cancelledExperimentCount;
-  failedExperimentCount = other67.failedExperimentCount;
-  createdExperimentCount = other67.createdExperimentCount;
-  runningExperimentCount = other67.runningExperimentCount;
-  allExperiments = other67.allExperiments;
-  completedExperiments = other67.completedExperiments;
-  failedExperiments = other67.failedExperiments;
-  cancelledExperiments = other67.cancelledExperiments;
-  createdExperiments = other67.createdExperiments;
-  runningExperiments = other67.runningExperiments;
-  __isset = other67.__isset;
-}
-ExperimentStatistics& ExperimentStatistics::operator=(const ExperimentStatistics& other68) {
-  allExperimentCount = other68.allExperimentCount;
-  completedExperimentCount = other68.completedExperimentCount;
-  cancelledExperimentCount = other68.cancelledExperimentCount;
-  failedExperimentCount = other68.failedExperimentCount;
-  createdExperimentCount = other68.createdExperimentCount;
-  runningExperimentCount = other68.runningExperimentCount;
-  allExperiments = other68.allExperiments;
-  completedExperiments = other68.completedExperiments;
-  failedExperiments = other68.failedExperiments;
-  cancelledExperiments = other68.cancelledExperiments;
-  createdExperiments = other68.createdExperiments;
-  runningExperiments = other68.runningExperiments;
-  __isset = other68.__isset;
+ExperimentStatistics::ExperimentStatistics(const ExperimentStatistics& other73) {
+  allExperimentCount = other73.allExperimentCount;
+  completedExperimentCount = other73.completedExperimentCount;
+  cancelledExperimentCount = other73.cancelledExperimentCount;
+  failedExperimentCount = other73.failedExperimentCount;
+  createdExperimentCount = other73.createdExperimentCount;
+  runningExperimentCount = other73.runningExperimentCount;
+  allExperiments = other73.allExperiments;
+  completedExperiments = other73.completedExperiments;
+  failedExperiments = other73.failedExperiments;
+  cancelledExperiments = other73.cancelledExperiments;
+  createdExperiments = other73.createdExperiments;
+  runningExperiments = other73.runningExperiments;
+  __isset = other73.__isset;
+}
+ExperimentStatistics& ExperimentStatistics::operator=(const ExperimentStatistics& other74) {
+  allExperimentCount = other74.allExperimentCount;
+  completedExperimentCount = other74.completedExperimentCount;
+  cancelledExperimentCount = other74.cancelledExperimentCount;
+  failedExperimentCount = other74.failedExperimentCount;
+  createdExperimentCount = other74.createdExperimentCount;
+  runningExperimentCount = other74.runningExperimentCount;
+  allExperiments = other74.allExperiments;
+  completedExperiments = other74.completedExperiments;
+  failedExperiments = other74.failedExperiments;
+  cancelledExperiments = other74.cancelledExperiments;
+  createdExperiments = other74.createdExperiments;
+  runningExperiments = other74.runningExperiments;
+  __isset = other74.__isset;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const ExperimentStatistics& obj) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.h
index 13ec7a6..c9f71a2 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experiment_model_types.h
@@ -36,6 +36,7 @@
 #include "scheduling_model_types.h"
 #include "airavata_commons_types.h"
 #include "status_models_types.h"
+#include "process_model_types.h"
 
 
 namespace apache { namespace airavata { namespace model { namespace experiment {
@@ -159,7 +160,7 @@ class UserConfigurationDataModel {
 void swap(UserConfigurationDataModel &a, UserConfigurationDataModel &b);
 
 typedef struct _ExperimentModel__isset {
-  _ExperimentModel__isset() : creationTime(false), description(false), executionId(false), gatewayExecutionId(false), enableEmailNotification(false), emailAddresses(false), userConfigurationData(false), experimentInputs(false), experimentOutputs(false), experimentStatus(false), errors(false) {}
+  _ExperimentModel__isset() : creationTime(false), description(false), executionId(false), gatewayExecutionId(false), enableEmailNotification(false), emailAddresses(false), userConfigurationData(false), experimentInputs(false), experimentOutputs(false), experimentStatus(false), errors(false), processes(false) {}
   bool creationTime :1;
   bool description :1;
   bool executionId :1;
@@ -171,13 +172,14 @@ typedef struct _ExperimentModel__isset {
   bool experimentOutputs :1;
   bool experimentStatus :1;
   bool errors :1;
+  bool processes :1;
 } _ExperimentModel__isset;
 
 class ExperimentModel {
  public:
 
-  static const char* ascii_fingerprint; // = "5B49E16C9D5CBD0AE0EC026061048743";
-  static const uint8_t binary_fingerprint[16]; // = {0x5B,0x49,0xE1,0x6C,0x9D,0x5C,0xBD,0x0A,0xE0,0xEC,0x02,0x60,0x61,0x04,0x87,0x43};
+  static const char* ascii_fingerprint; // = "4DF530DE68212F7F779CF0EF35D9EDC3";
+  static const uint8_t binary_fingerprint[16]; // = {0x4D,0xF5,0x30,0xDE,0x68,0x21,0x2F,0x7F,0x77,0x9C,0xF0,0xEF,0x35,0xD9,0xED,0xC3};
 
   ExperimentModel(const ExperimentModel&);
   ExperimentModel& operator=(const ExperimentModel&);
@@ -204,6 +206,7 @@ class ExperimentModel {
   std::vector< ::apache::airavata::model::application::io::OutputDataObjectType>  experimentOutputs;
    ::apache::airavata::model::status::ExperimentStatus experimentStatus;
   std::vector< ::apache::airavata::model::commons::ErrorModel>  errors;
+  std::vector< ::apache::airavata::model::process::ProcessModel>  processes;
 
   _ExperimentModel__isset __isset;
 
@@ -241,6 +244,8 @@ class ExperimentModel {
 
   void __set_errors(const std::vector< ::apache::airavata::model::commons::ErrorModel> & val);
 
+  void __set_processes(const std::vector< ::apache::airavata::model::process::ProcessModel> & val);
+
   bool operator == (const ExperimentModel & rhs) const
   {
     if (!(experimentId == rhs.experimentId))
@@ -299,6 +304,10 @@ class ExperimentModel {
       return false;
     else if (__isset.errors && !(errors == rhs.errors))
       return false;
+    if (__isset.processes != rhs.__isset.processes)
+      return false;
+    else if (__isset.processes && !(processes == rhs.processes))
+      return false;
     return true;
   }
   bool operator != (const ExperimentModel &rhs) const {

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/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 1bb4dba..12a5cc9 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
@@ -123,8 +123,8 @@ void ProcessModel::__set_emailAddresses(const std::vector<std::string> & val) {
 __isset.emailAddresses = true;
 }
 
-const char* ProcessModel::ascii_fingerprint = "39636B349F7E4431980EEC63BDFCEB41";
-const uint8_t ProcessModel::binary_fingerprint[16] = {0x39,0x63,0x6B,0x34,0x9F,0x7E,0x44,0x31,0x98,0x0E,0xEC,0x63,0xBD,0xFC,0xEB,0x41};
+const char* ProcessModel::ascii_fingerprint = "DD9F28E8C54528EC5BBC117D76D7BC84";
+const uint8_t ProcessModel::binary_fingerprint[16] = {0xDD,0x9F,0x28,0xE8,0xC5,0x45,0x28,0xEC,0x5B,0xBC,0x11,0x7D,0x76,0xD7,0xBC,0x84};
 
 uint32_t ProcessModel::read(::apache::thrift::protocol::TProtocol* iprot) {
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/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 0d56652..8234941 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
@@ -66,8 +66,8 @@ typedef struct _ProcessModel__isset {
 class ProcessModel {
  public:
 
-  static const char* ascii_fingerprint; // = "39636B349F7E4431980EEC63BDFCEB41";
-  static const uint8_t binary_fingerprint[16]; // = {0x39,0x63,0x6B,0x34,0x9F,0x7E,0x44,0x31,0x98,0x0E,0xEC,0x63,0xBD,0xFC,0xEB,0x41};
+  static const char* ascii_fingerprint; // = "DD9F28E8C54528EC5BBC117D76D7BC84";
+  static const uint8_t binary_fingerprint[16]; // = {0xDD,0x9F,0x28,0xE8,0xC5,0x45,0x28,0xEC,0x5B,0xBC,0x11,0x7D,0x76,0xD7,0xBC,0x84};
 
   ProcessModel(const ProcessModel&);
   ProcessModel& operator=(const ProcessModel&);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.cpp
index 95cd95c..c99a9e0 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.cpp
@@ -102,8 +102,13 @@ void TaskModel::__set_taskError(const  ::apache::airavata::model::commons::Error
 __isset.taskError = true;
 }
 
-const char* TaskModel::ascii_fingerprint = "CE3A1BEFC350140F2B4D2EF1424A7C4F";
-const uint8_t TaskModel::binary_fingerprint[16] = {0xCE,0x3A,0x1B,0xEF,0xC3,0x50,0x14,0x0F,0x2B,0x4D,0x2E,0xF1,0x42,0x4A,0x7C,0x4F};
+void TaskModel::__set_jobs(const std::vector< ::apache::airavata::model::job::JobModel> & val) {
+  this->jobs = val;
+__isset.jobs = true;
+}
+
+const char* TaskModel::ascii_fingerprint = "BA52131C9C867CBF7281F29EDD7DDB6F";
+const uint8_t TaskModel::binary_fingerprint[16] = {0xBA,0x52,0x13,0x1C,0x9C,0x86,0x7C,0xBF,0x72,0x81,0xF2,0x9E,0xDD,0x7D,0xDB,0x6F};
 
 uint32_t TaskModel::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -205,6 +210,26 @@ uint32_t TaskModel::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
+      case 10:
+        if (ftype == ::apache::thrift::protocol::T_LIST) {
+          {
+            this->jobs.clear();
+            uint32_t _size1;
+            ::apache::thrift::protocol::TType _etype4;
+            xfer += iprot->readListBegin(_etype4, _size1);
+            this->jobs.resize(_size1);
+            uint32_t _i5;
+            for (_i5 = 0; _i5 < _size1; ++_i5)
+            {
+              xfer += this->jobs[_i5].read(iprot);
+            }
+            xfer += iprot->readListEnd();
+          }
+          this->__isset.jobs = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -273,6 +298,19 @@ uint32_t TaskModel::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += this->taskError.write(oprot);
     xfer += oprot->writeFieldEnd();
   }
+  if (this->__isset.jobs) {
+    xfer += oprot->writeFieldBegin("jobs", ::apache::thrift::protocol::T_LIST, 10);
+    {
+      xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->jobs.size()));
+      std::vector< ::apache::airavata::model::job::JobModel> ::const_iterator _iter6;
+      for (_iter6 = this->jobs.begin(); _iter6 != this->jobs.end(); ++_iter6)
+      {
+        xfer += (*_iter6).write(oprot);
+      }
+      xfer += oprot->writeListEnd();
+    }
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   oprot->decrementRecursionDepth();
@@ -290,32 +328,35 @@ void swap(TaskModel &a, TaskModel &b) {
   swap(a.taskDetail, b.taskDetail);
   swap(a.subTaskModel, b.subTaskModel);
   swap(a.taskError, b.taskError);
+  swap(a.jobs, b.jobs);
   swap(a.__isset, b.__isset);
 }
 
-TaskModel::TaskModel(const TaskModel& other1) {
-  taskId = other1.taskId;
-  taskType = other1.taskType;
-  parentProcessId = other1.parentProcessId;
-  creationTime = other1.creationTime;
-  lastUpdateTime = other1.lastUpdateTime;
-  taskStatus = other1.taskStatus;
-  taskDetail = other1.taskDetail;
-  subTaskModel = other1.subTaskModel;
-  taskError = other1.taskError;
-  __isset = other1.__isset;
-}
-TaskModel& TaskModel::operator=(const TaskModel& other2) {
-  taskId = other2.taskId;
-  taskType = other2.taskType;
-  parentProcessId = other2.parentProcessId;
-  creationTime = other2.creationTime;
-  lastUpdateTime = other2.lastUpdateTime;
-  taskStatus = other2.taskStatus;
-  taskDetail = other2.taskDetail;
-  subTaskModel = other2.subTaskModel;
-  taskError = other2.taskError;
-  __isset = other2.__isset;
+TaskModel::TaskModel(const TaskModel& other7) {
+  taskId = other7.taskId;
+  taskType = other7.taskType;
+  parentProcessId = other7.parentProcessId;
+  creationTime = other7.creationTime;
+  lastUpdateTime = other7.lastUpdateTime;
+  taskStatus = other7.taskStatus;
+  taskDetail = other7.taskDetail;
+  subTaskModel = other7.subTaskModel;
+  taskError = other7.taskError;
+  jobs = other7.jobs;
+  __isset = other7.__isset;
+}
+TaskModel& TaskModel::operator=(const TaskModel& other8) {
+  taskId = other8.taskId;
+  taskType = other8.taskType;
+  parentProcessId = other8.parentProcessId;
+  creationTime = other8.creationTime;
+  lastUpdateTime = other8.lastUpdateTime;
+  taskStatus = other8.taskStatus;
+  taskDetail = other8.taskDetail;
+  subTaskModel = other8.subTaskModel;
+  taskError = other8.taskError;
+  jobs = other8.jobs;
+  __isset = other8.__isset;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const TaskModel& obj) {
@@ -330,6 +371,7 @@ std::ostream& operator<<(std::ostream& out, const TaskModel& obj) {
   out << ", " << "taskDetail="; (obj.__isset.taskDetail ? (out << to_string(obj.taskDetail)) : (out << "<null>"));
   out << ", " << "subTaskModel="; (obj.__isset.subTaskModel ? (out << to_string(obj.subTaskModel)) : (out << "<null>"));
   out << ", " << "taskError="; (obj.__isset.taskError ? (out << to_string(obj.taskError)) : (out << "<null>"));
+  out << ", " << "jobs="; (obj.__isset.jobs ? (out << to_string(obj.jobs)) : (out << "<null>"));
   out << ")";
   return out;
 }
@@ -420,9 +462,9 @@ uint32_t DataStagingTaskModel::read(::apache::thrift::protocol::TProtocol* iprot
         break;
       case 3:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast3;
-          xfer += iprot->readI32(ecast3);
-          this->type = (DataStageType::type)ecast3;
+          int32_t ecast9;
+          xfer += iprot->readI32(ecast9);
+          this->type = (DataStageType::type)ecast9;
           isset_type = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -547,27 +589,27 @@ void swap(DataStagingTaskModel &a, DataStagingTaskModel &b) {
   swap(a.__isset, b.__isset);
 }
 
-DataStagingTaskModel::DataStagingTaskModel(const DataStagingTaskModel& other4) {
-  source = other4.source;
-  destination = other4.destination;
-  type = other4.type;
-  transferStartTime = other4.transferStartTime;
-  transferEndTime = other4.transferEndTime;
-  transferRate = other4.transferRate;
-  processInput = other4.processInput;
-  processOutput = other4.processOutput;
-  __isset = other4.__isset;
-}
-DataStagingTaskModel& DataStagingTaskModel::operator=(const DataStagingTaskModel& other5) {
-  source = other5.source;
-  destination = other5.destination;
-  type = other5.type;
-  transferStartTime = other5.transferStartTime;
-  transferEndTime = other5.transferEndTime;
-  transferRate = other5.transferRate;
-  processInput = other5.processInput;
-  processOutput = other5.processOutput;
-  __isset = other5.__isset;
+DataStagingTaskModel::DataStagingTaskModel(const DataStagingTaskModel& other10) {
+  source = other10.source;
+  destination = other10.destination;
+  type = other10.type;
+  transferStartTime = other10.transferStartTime;
+  transferEndTime = other10.transferEndTime;
+  transferRate = other10.transferRate;
+  processInput = other10.processInput;
+  processOutput = other10.processOutput;
+  __isset = other10.__isset;
+}
+DataStagingTaskModel& DataStagingTaskModel::operator=(const DataStagingTaskModel& other11) {
+  source = other11.source;
+  destination = other11.destination;
+  type = other11.type;
+  transferStartTime = other11.transferStartTime;
+  transferEndTime = other11.transferEndTime;
+  transferRate = other11.transferRate;
+  processInput = other11.processInput;
+  processOutput = other11.processOutput;
+  __isset = other11.__isset;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const DataStagingTaskModel& obj) {
@@ -633,9 +675,9 @@ uint32_t EnvironmentSetupTaskModel::read(::apache::thrift::protocol::TProtocol*
         break;
       case 2:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast6;
-          xfer += iprot->readI32(ecast6);
-          this->protocol = ( ::apache::airavata::model::appcatalog::computeresource::SecurityProtocol::type)ecast6;
+          int32_t ecast12;
+          xfer += iprot->readI32(ecast12);
+          this->protocol = ( ::apache::airavata::model::appcatalog::computeresource::SecurityProtocol::type)ecast12;
           isset_protocol = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -682,13 +724,13 @@ void swap(EnvironmentSetupTaskModel &a, EnvironmentSetupTaskModel &b) {
   swap(a.protocol, b.protocol);
 }
 
-EnvironmentSetupTaskModel::EnvironmentSetupTaskModel(const EnvironmentSetupTaskModel& other7) {
-  location = other7.location;
-  protocol = other7.protocol;
+EnvironmentSetupTaskModel::EnvironmentSetupTaskModel(const EnvironmentSetupTaskModel& other13) {
+  location = other13.location;
+  protocol = other13.protocol;
 }
-EnvironmentSetupTaskModel& EnvironmentSetupTaskModel::operator=(const EnvironmentSetupTaskModel& other8) {
-  location = other8.location;
-  protocol = other8.protocol;
+EnvironmentSetupTaskModel& EnvironmentSetupTaskModel::operator=(const EnvironmentSetupTaskModel& other14) {
+  location = other14.location;
+  protocol = other14.protocol;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const EnvironmentSetupTaskModel& obj) {
@@ -745,9 +787,9 @@ uint32_t JobSubmissionTaskModel::read(::apache::thrift::protocol::TProtocol* ipr
     {
       case 1:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast9;
-          xfer += iprot->readI32(ecast9);
-          this->jobSubmissionProtocol = ( ::apache::airavata::model::appcatalog::computeresource::JobSubmissionProtocol::type)ecast9;
+          int32_t ecast15;
+          xfer += iprot->readI32(ecast15);
+          this->jobSubmissionProtocol = ( ::apache::airavata::model::appcatalog::computeresource::JobSubmissionProtocol::type)ecast15;
           isset_jobSubmissionProtocol = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -755,9 +797,9 @@ uint32_t JobSubmissionTaskModel::read(::apache::thrift::protocol::TProtocol* ipr
         break;
       case 2:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast10;
-          xfer += iprot->readI32(ecast10);
-          this->monitorMode = ( ::apache::airavata::model::appcatalog::computeresource::MonitorMode::type)ecast10;
+          int32_t ecast16;
+          xfer += iprot->readI32(ecast16);
+          this->monitorMode = ( ::apache::airavata::model::appcatalog::computeresource::MonitorMode::type)ecast16;
           isset_monitorMode = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -819,17 +861,17 @@ void swap(JobSubmissionTaskModel &a, JobSubmissionTaskModel &b) {
   swap(a.__isset, b.__isset);
 }
 
-JobSubmissionTaskModel::JobSubmissionTaskModel(const JobSubmissionTaskModel& other11) {
-  jobSubmissionProtocol = other11.jobSubmissionProtocol;
-  monitorMode = other11.monitorMode;
-  wallTime = other11.wallTime;
-  __isset = other11.__isset;
+JobSubmissionTaskModel::JobSubmissionTaskModel(const JobSubmissionTaskModel& other17) {
+  jobSubmissionProtocol = other17.jobSubmissionProtocol;
+  monitorMode = other17.monitorMode;
+  wallTime = other17.wallTime;
+  __isset = other17.__isset;
 }
-JobSubmissionTaskModel& JobSubmissionTaskModel::operator=(const JobSubmissionTaskModel& other12) {
-  jobSubmissionProtocol = other12.jobSubmissionProtocol;
-  monitorMode = other12.monitorMode;
-  wallTime = other12.wallTime;
-  __isset = other12.__isset;
+JobSubmissionTaskModel& JobSubmissionTaskModel::operator=(const JobSubmissionTaskModel& other18) {
+  jobSubmissionProtocol = other18.jobSubmissionProtocol;
+  monitorMode = other18.monitorMode;
+  wallTime = other18.wallTime;
+  __isset = other18.__isset;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const JobSubmissionTaskModel& obj) {
@@ -877,9 +919,9 @@ uint32_t MonitorTaskModel::read(::apache::thrift::protocol::TProtocol* iprot) {
     {
       case 1:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast13;
-          xfer += iprot->readI32(ecast13);
-          this->monitorMode = ( ::apache::airavata::model::appcatalog::computeresource::MonitorMode::type)ecast13;
+          int32_t ecast19;
+          xfer += iprot->readI32(ecast19);
+          this->monitorMode = ( ::apache::airavata::model::appcatalog::computeresource::MonitorMode::type)ecast19;
           isset_monitorMode = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -919,11 +961,11 @@ void swap(MonitorTaskModel &a, MonitorTaskModel &b) {
   swap(a.monitorMode, b.monitorMode);
 }
 
-MonitorTaskModel::MonitorTaskModel(const MonitorTaskModel& other14) {
-  monitorMode = other14.monitorMode;
+MonitorTaskModel::MonitorTaskModel(const MonitorTaskModel& other20) {
+  monitorMode = other20.monitorMode;
 }
-MonitorTaskModel& MonitorTaskModel::operator=(const MonitorTaskModel& other15) {
-  monitorMode = other15.monitorMode;
+MonitorTaskModel& MonitorTaskModel::operator=(const MonitorTaskModel& other21) {
+  monitorMode = other21.monitorMode;
   return *this;
 }
 std::ostream& operator<<(std::ostream& out, const MonitorTaskModel& obj) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f7af6a9/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.h
index 7be9392..80a501f 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/task_model_types.h
@@ -36,6 +36,7 @@
 #include "status_models_types.h"
 #include "compute_resource_model_types.h"
 #include "application_io_models_types.h"
+#include "job_model_types.h"
 
 
 namespace apache { namespace airavata { namespace model { namespace task {
@@ -73,17 +74,18 @@ class JobSubmissionTaskModel;
 class MonitorTaskModel;
 
 typedef struct _TaskModel__isset {
-  _TaskModel__isset() : taskDetail(false), subTaskModel(false), taskError(false) {}
+  _TaskModel__isset() : taskDetail(false), subTaskModel(false), taskError(false), jobs(false) {}
   bool taskDetail :1;
   bool subTaskModel :1;
   bool taskError :1;
+  bool jobs :1;
 } _TaskModel__isset;
 
 class TaskModel {
  public:
 
-  static const char* ascii_fingerprint; // = "CE3A1BEFC350140F2B4D2EF1424A7C4F";
-  static const uint8_t binary_fingerprint[16]; // = {0xCE,0x3A,0x1B,0xEF,0xC3,0x50,0x14,0x0F,0x2B,0x4D,0x2E,0xF1,0x42,0x4A,0x7C,0x4F};
+  static const char* ascii_fingerprint; // = "BA52131C9C867CBF7281F29EDD7DDB6F";
+  static const uint8_t binary_fingerprint[16]; // = {0xBA,0x52,0x13,0x1C,0x9C,0x86,0x7C,0xBF,0x72,0x81,0xF2,0x9E,0xDD,0x7D,0xDB,0x6F};
 
   TaskModel(const TaskModel&);
   TaskModel& operator=(const TaskModel&);
@@ -100,6 +102,7 @@ class TaskModel {
   std::string taskDetail;
   std::string subTaskModel;
    ::apache::airavata::model::commons::ErrorModel taskError;
+  std::vector< ::apache::airavata::model::job::JobModel>  jobs;
 
   _TaskModel__isset __isset;
 
@@ -121,6 +124,8 @@ class TaskModel {
 
   void __set_taskError(const  ::apache::airavata::model::commons::ErrorModel& val);
 
+  void __set_jobs(const std::vector< ::apache::airavata::model::job::JobModel> & val);
+
   bool operator == (const TaskModel & rhs) const
   {
     if (!(taskId == rhs.taskId))
@@ -147,6 +152,10 @@ class TaskModel {
       return false;
     else if (__isset.taskError && !(taskError == rhs.taskError))
       return false;
+    if (__isset.jobs != rhs.__isset.jobs)
+      return false;
+    else if (__isset.jobs && !(jobs == rhs.jobs))
+      return false;
     return true;
   }
   bool operator != (const TaskModel &rhs) const {