You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2019/06/27 22:50:21 UTC

[airavata-php-gateway] branch staging updated (3e85b64 -> ea03e19)

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

machristie pushed a change to branch staging
in repository https://gitbox.apache.org/repos/asf/airavata-php-gateway.git.


    from 3e85b64  Merge branch 'develop' into staging
     new 0e35e22  Regenerated thrift stubs
     new ea03e19  AIRAVATA-3089 Use last status in array since it is the most recent one

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 app/controllers/ExperimentController.php           |    2 +-
 app/libraries/Airavata/API/Sharing/Types.php       |    8 +
 app/libraries/Airavata/API/Types.php               |    2 +-
 app/libraries/Airavata/Base/API/BaseAPI.php        |  218 ++
 .../Airavata/{Model => Base/API}/Types.php         |    2 +-
 .../AppCatalog/GroupResourceProfile/Types.php      |   25 +
 .../Airavata/Model/AppCatalog/Parser/Types.php     | 1407 +++++++++++++
 .../Airavata/Model/Application/Io/Types.php        |   23 +
 app/libraries/Airavata/Model/Experiment/Types.php  |   32 +
 app/libraries/Airavata/Model/Group/Types.php       |   55 +-
 app/libraries/Airavata/Model/Process/Types.php     |  219 +-
 app/libraries/Airavata/Model/Task/Types.php        |   46 +
 app/libraries/Airavata/Model/Workflow/Types.php    | 2176 ++++++++++++++++++++
 .../Iam/Admin/Services/CPI/IamAdminServices.php    | 1804 +++++++++++++---
 .../Service/Iam/Admin/Services/CPI/Types.php       |    2 +-
 .../Service/Profile/Groupmanager/CPI/Types.php     |    2 +-
 .../Profile/Tenant/CPI/TenantProfileService.php    |  281 +--
 .../Airavata/Service/Profile/Tenant/CPI/Types.php  |    2 +-
 .../Airavata/Service/Profile/User/CPI/Types.php    |    2 +-
 .../Profile/User/CPI/UserProfileService.php        |  493 ++++-
 app/libraries/ExperimentUtilities.php              |   10 +-
 app/views/experiment/summary.blade.php             |    6 +-
 app/views/partials/experiment-info.blade.php       |   16 +-
 23 files changed, 6277 insertions(+), 556 deletions(-)
 create mode 100644 app/libraries/Airavata/Base/API/BaseAPI.php
 copy app/libraries/Airavata/{Model => Base/API}/Types.php (93%)
 create mode 100644 app/libraries/Airavata/Model/AppCatalog/Parser/Types.php
 create mode 100644 app/libraries/Airavata/Model/Workflow/Types.php


[airavata-php-gateway] 02/02: AIRAVATA-3089 Use last status in array since it is the most recent one

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch staging
in repository https://gitbox.apache.org/repos/asf/airavata-php-gateway.git

commit ea03e19640d44a6613f8e312ee6ee17e62af01d2
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Thu Jun 27 18:47:49 2019 -0400

    AIRAVATA-3089 Use last status in array since it is the most recent one
---
 app/controllers/ExperimentController.php     |  2 +-
 app/libraries/ExperimentUtilities.php        | 10 +++++++---
 app/views/experiment/summary.blade.php       |  6 +++---
 app/views/partials/experiment-info.blade.php | 16 ++++++++--------
 4 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/app/controllers/ExperimentController.php b/app/controllers/ExperimentController.php
index f754213..c44aef6 100755
--- a/app/controllers/ExperimentController.php
+++ b/app/controllers/ExperimentController.php
@@ -176,7 +176,7 @@ class ExperimentController extends BaseController
 //            var_dump( $jobDetails); exit;
         foreach( $jobDetails as $index => $jobDetail){
             if(isset($jobDetail->jobStatuses) and !empty($jobDetail->jobStatuses)){
-                  $jobDetails[ $index]->jobStatuses[0]->jobStateName = JobState::$__names[$jobDetail->jobStatuses[0]->jobState];
+                  ExperimentUtilities::latestStatus($jobDetails[$index]->jobStatuses)->jobStateName = JobState::$__names[ExperimentUtilities::latestStatus($jobDetail->jobStatuses)->jobState];
             }
             else{
                 $jobDetails[ $index]->jobStatuses = [new stdClass()];
diff --git a/app/libraries/ExperimentUtilities.php b/app/libraries/ExperimentUtilities.php
index 16612fd..b150de4 100755
--- a/app/libraries/ExperimentUtilities.php
+++ b/app/libraries/ExperimentUtilities.php
@@ -1112,7 +1112,7 @@ class ExperimentUtilities
 
 
         if( is_array( $experiment->experimentStatus ) )
-            $experimentStatusString = $expVal["experimentStates"][$experiment->experimentStatus[0]->state];
+            $experimentStatusString = $expVal["experimentStates"][ExperimentUtilities::latestStatus($experiment->experimentStatus)->state];
         else {
             $experimentStatusString = $experiment->experimentStatus;
         }
@@ -1122,7 +1122,7 @@ class ExperimentUtilities
             $experimentStatus = $experiment->experimentStatus;
 
             if( is_array( $experiment->experimentStatus ) )
-                $expVal["experimentTimeOfStateChange"] = $experimentStatus[0]->timeOfStateChange / 1000; // divide by 1000 since timeOfStateChange is in ms
+                $expVal["experimentTimeOfStateChange"] = ExperimentUtilities::latestStatus($experimentStatus)->timeOfStateChange / 1000; // divide by 1000 since timeOfStateChange is in ms
             $expVal["experimentCreationTime"] = $experiment->creationTime / 1000; // divide by 1000 since creationTime is in ms
         }
 
@@ -1193,7 +1193,7 @@ class ExperimentUtilities
             }
         }*/
         if (isset($jobStatus) && count($jobStatus) > 0) {
-            $jobState = JobState::$__names[array_values($jobStatus)[0]->jobState];
+            $jobState = JobState::$__names[ExperimentUtilities::latestStatus(array_values($jobStatus))->jobState];
         } else {
             $jobState = null;
         }
@@ -1521,6 +1521,10 @@ class ExperimentUtilities
         ExperimentUtilities::share_experiment($expId, $users);
     }
 
+    public static function latestStatus($statusArray) {
+        return $statusArray ? $statusArray[count($statusArray) - 1] : null;
+    }
+
     /**
      * Set sharing privileges for a given experiment.
      * @param $expId
diff --git a/app/views/experiment/summary.blade.php b/app/views/experiment/summary.blade.php
index 647d26c..8214d3a 100755
--- a/app/views/experiment/summary.blade.php
+++ b/app/views/experiment/summary.blade.php
@@ -25,7 +25,7 @@
         var currentJobStatuses = {};
 
         @foreach( $expVal["jobDetails"] as $index => $jobDetail)
-        currentJobStatuses["{{$jobDetail->jobId}}"] = "{{ $jobDetail->jobStatuses[0]->jobStateName}}";
+        currentJobStatuses["{{$jobDetail->jobId}}"] = "{{ ExperimentUtilities::latestStatus($jobDetail->jobStatuses)->jobStateName}}";
         @endforeach
 
         var isStatusChanged = function(experimentTimeOfStateChange, jobStatuses) {
@@ -68,8 +68,8 @@
                         for (var jobIndex in jobDetails){
                             if (jobDetails.hasOwnProperty(jobIndex)) {
                                 var jobDetail = jobDetails[jobIndex];
-                                // Assuming only one job status per job
-                                jobStatuses[jobDetail["jobId"]] = jobDetail["jobStatuses"]["0"]["jobStateName"];
+                                // last status is the most recent one
+                                jobStatuses[jobDetail["jobId"]] = jobDetail["jobStatuses"][jobDetail["jobStatuses"].length - 1]["jobStateName"];
                             }
                         }
 
diff --git a/app/views/partials/experiment-info.blade.php b/app/views/partials/experiment-info.blade.php
index e174900..93768dd 100644
--- a/app/views/partials/experiment-info.blade.php
+++ b/app/views/partials/experiment-info.blade.php
@@ -105,7 +105,7 @@
                         <tr>
                             <td>{{$jobDetail->jobName}}</td>
                             <td>{{ $jobDetail->jobId}}</td>
-                            <td>{{$jobDetail->jobStatuses[0]->jobStateName }}</td>
+                            <td>{{ ExperimentUtilities::latestStatus($jobDetail->jobStatuses)->jobStateName }}</td>
                             <td class="time" unix-time="{{$jobDetail->creationTime}}"></td>
                         </tr>
                     </table>
@@ -184,7 +184,7 @@
         </tr>
         <tr>
             <td><strong>Outputs</strong></td>
-            <td>{{ ExperimentUtilities::list_output_files($experiment->experimentOutputs, $experiment->experimentStatus[0]->state, false) }}</td>
+            <td>{{ ExperimentUtilities::list_output_files($experiment->experimentOutputs, ExperimentUtilities::latestStatus($experiment->experimentStatus)->state, false) }}</td>
         </tr>
         <tr>
             <td><strong>Storage Directory</strong></td>
@@ -211,8 +211,8 @@
         </tr>
         {{--@endif--}}
         @foreach( $expVal["jobDetails"] as $index => $jobDetail)
-            @if($experiment->experimentStatus[0]->state == \Airavata\Model\Status\ExperimentState::FAILED
-                    || $jobDetail->jobStatuses[0]->jobStateName == "FAILED")
+            @if(ExperimentUtilities::latestStatus($experiment->experimentStatus)->state == \Airavata\Model\Status\ExperimentState::FAILED
+                    || ExperimentUtilities::latestStatus($jobDetail->jobStatuses)->jobStateName == "FAILED")
             <tr>
                 <th>Job Submission Response</th>
                 <td>{{$jobDetail->stdOut . $jobDetail->stdErr}}</td>
@@ -352,9 +352,9 @@
                                     <dl class="well dl-horizontal">
                                         <dt>Task Id : </dt> <dd>{{ $task->taskId }}</dd>
                                         <dt>Task Type : </dt> <dd>{{ $expVal["taskTypes"][$task->taskType] }}</dd>
-                                        <dt>Task Status : </dt> <dd>{{ $expVal["taskStates"][$task->taskStatuses[0]->state] }}</dd>
-                                        <dt>Task Status Time : </dt> <dd class="time" unix-time="{{{ $task->taskStatuses[0]->timeOfStateChange}}}"></dd>
-                                        <dt>Task Status Reason : </dt> <dd>{{{ $task->taskStatuses[0]->reason }}}</dd>
+                                        <dt>Task Status : </dt> <dd>{{ $expVal["taskStates"][ExperimentUtilities::latestStatus($task->taskStatuses)->state] }}</dd>
+                                        <dt>Task Status Time : </dt> <dd class="time" unix-time="{{{ ExperimentUtilities::latestStatus($task->taskStatuses)->timeOfStateChange}}}"></dd>
+                                        <dt>Task Status Reason : </dt> <dd>{{{ ExperimentUtilities::latestStatus($task->taskStatuses)->reason }}}</dd>
                                     @if( is_object( $task->taskErrors))
                                         <dt>Task Error Id : </dt><dd>{{ $task->taskErrors[0]->errorId }}</dd>
                                         <dt>Task Error Msg : </dt><dd>{{ $task->taskErrors[0]->userFriendlyMessage }} <a tabindex="0" class="popover-taskinfo btn btn-sm btn-default" role="button" data-toggle="popover" data-html="true" title="Detailed Task Information" data-content="{{ str_replace( ',', '<br/><br/>', $task->taskError->actualErrorMessage ) }}">More Info</a></dd>
@@ -376,7 +376,7 @@
                         <li>
                             <span class="alert"><i class="icon-time"></i>
                                 <p>Outputs<hr/>
-                                {{ ExperimentUtilities::list_process_output_files( $process->processOutputs, $process->processStatuses[0]->state) }}</p>
+                                {{ ExperimentUtilities::list_process_output_files( $process->processOutputs, ExperimentUtilities::latestStatus($process->processStatuses)->state) }}</p>
                             </span>
                         </li>
                     </ul>


[airavata-php-gateway] 01/02: Regenerated thrift stubs

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch staging
in repository https://gitbox.apache.org/repos/asf/airavata-php-gateway.git

commit 0e35e22a351f2dc86ebdadb2b9f8301c3bc8b8d4
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Thu Jun 27 18:04:22 2019 -0400

    Regenerated thrift stubs
---
 app/libraries/Airavata/API/Sharing/Types.php       |    8 +
 app/libraries/Airavata/API/Types.php               |    2 +-
 app/libraries/Airavata/Base/API/BaseAPI.php        |  218 ++
 .../Airavata/{API/Sharing => Base/API}/Types.php   |    2 +-
 .../AppCatalog/GroupResourceProfile/Types.php      |   25 +
 .../Airavata/Model/AppCatalog/Parser/Types.php     | 1407 +++++++++++++
 .../Airavata/Model/Application/Io/Types.php        |   23 +
 app/libraries/Airavata/Model/Experiment/Types.php  |   32 +
 app/libraries/Airavata/Model/Group/Types.php       |   55 +-
 app/libraries/Airavata/Model/Process/Types.php     |  219 +-
 app/libraries/Airavata/Model/Task/Types.php        |   46 +
 app/libraries/Airavata/Model/Workflow/Types.php    | 2176 ++++++++++++++++++++
 .../Iam/Admin/Services/CPI/IamAdminServices.php    | 1804 +++++++++++++---
 .../Service/Iam/Admin/Services/CPI/Types.php       |    2 +-
 .../Service/Profile/Groupmanager/CPI/Types.php     |    2 +-
 .../Profile/Tenant/CPI/TenantProfileService.php    |  281 +--
 .../Airavata/Service/Profile/Tenant/CPI/Types.php  |    2 +-
 .../Airavata/Service/Profile/User/CPI/Types.php    |    2 +-
 .../Profile/User/CPI/UserProfileService.php        |  493 ++++-
 19 files changed, 6258 insertions(+), 541 deletions(-)

diff --git a/app/libraries/Airavata/API/Sharing/Types.php b/app/libraries/Airavata/API/Sharing/Types.php
index 050b73e..054d28e 100644
--- a/app/libraries/Airavata/API/Sharing/Types.php
+++ b/app/libraries/Airavata/API/Sharing/Types.php
@@ -17,4 +17,12 @@ use Thrift\Protocol\TBinaryProtocolAccelerated;
 use Thrift\Exception\TApplicationException;
 
 
+final class Constant extends \Thrift\Type\TConstant {
+  static protected $SHARING_CPI_VERSION;
+
+  static protected function init_SHARING_CPI_VERSION() {
+    return "0.18.0";
+  }
+}
+
 
diff --git a/app/libraries/Airavata/API/Types.php b/app/libraries/Airavata/API/Types.php
index f1235c6..71ca620 100644
--- a/app/libraries/Airavata/API/Types.php
+++ b/app/libraries/Airavata/API/Types.php
@@ -35,7 +35,7 @@ final class Constant extends \Thrift\Type\TConstant {
      *              in a change to major/minor version numbers.
      * 
      */
-"0.17.0";
+"0.18.0";
   }
 }
 
diff --git a/app/libraries/Airavata/Base/API/BaseAPI.php b/app/libraries/Airavata/Base/API/BaseAPI.php
new file mode 100644
index 0000000..c720897
--- /dev/null
+++ b/app/libraries/Airavata/Base/API/BaseAPI.php
@@ -0,0 +1,218 @@
+<?php
+namespace Airavata\Base\API;
+/**
+ * Autogenerated by Thrift Compiler (0.10.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+interface BaseAPIIf {
+  /**
+   * @return string
+   */
+  public function getAPIVersion();
+}
+
+
+class BaseAPIClient implements \Airavata\Base\API\BaseAPIIf {
+  protected $input_ = null;
+  protected $output_ = null;
+
+  protected $seqid_ = 0;
+
+  public function __construct($input, $output=null) {
+    $this->input_ = $input;
+    $this->output_ = $output ? $output : $input;
+  }
+
+  public function getAPIVersion()
+  {
+    $this->send_getAPIVersion();
+    return $this->recv_getAPIVersion();
+  }
+
+  public function send_getAPIVersion()
+  {
+    $args = new \Airavata\Base\API\BaseAPI_getAPIVersion_args();
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAPIVersion', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAPIVersion', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAPIVersion()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Base\API\BaseAPI_getAPIVersion_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\Base\API\BaseAPI_getAPIVersion_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    throw new \Exception("getAPIVersion failed: unknown result");
+  }
+
+}
+
+
+// HELPER FUNCTIONS AND STRUCTURES
+
+class BaseAPI_getAPIVersion_args {
+  static $_TSPEC;
+
+
+  public function __construct() {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        );
+    }
+  }
+
+  public function getName() {
+    return 'BaseAPI_getAPIVersion_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('BaseAPI_getAPIVersion_args');
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class BaseAPI_getAPIVersion_result {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $success = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'BaseAPI_getAPIVersion_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('BaseAPI_getAPIVersion_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
+      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+
diff --git a/app/libraries/Airavata/API/Sharing/Types.php b/app/libraries/Airavata/Base/API/Types.php
similarity index 92%
copy from app/libraries/Airavata/API/Sharing/Types.php
copy to app/libraries/Airavata/Base/API/Types.php
index 050b73e..86d6757 100644
--- a/app/libraries/Airavata/API/Sharing/Types.php
+++ b/app/libraries/Airavata/Base/API/Types.php
@@ -1,5 +1,5 @@
 <?php
-namespace Airavata\API\Sharing;
+namespace Airavata\Base\API;
 
 /**
  * Autogenerated by Thrift Compiler (0.10.0)
diff --git a/app/libraries/Airavata/Model/AppCatalog/GroupResourceProfile/Types.php b/app/libraries/Airavata/Model/AppCatalog/GroupResourceProfile/Types.php
index 072d787..50364a5 100644
--- a/app/libraries/Airavata/Model/AppCatalog/GroupResourceProfile/Types.php
+++ b/app/libraries/Airavata/Model/AppCatalog/GroupResourceProfile/Types.php
@@ -1055,6 +1055,8 @@ class BatchQueueResourcePolicy {
  * batchQueueResourcePolicies:
  *  List of enforced policies on registered batch queues
  * 
+ * defaultCredentialStoreToken:
+ *  The default credential store token to use for compute resources that don't specify a resource specific credential store token.
  * 
  */
 class GroupResourceProfile {
@@ -1092,6 +1094,10 @@ class GroupResourceProfile {
    * @var int
    */
   public $updatedTime = null;
+  /**
+   * @var string
+   */
+  public $defaultCredentialStoreToken = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -1143,6 +1149,10 @@ class GroupResourceProfile {
           'var' => 'updatedTime',
           'type' => TType::I64,
           ),
+        9 => array(
+          'var' => 'defaultCredentialStoreToken',
+          'type' => TType::STRING,
+          ),
         );
     }
     if (is_array($vals)) {
@@ -1170,6 +1180,9 @@ class GroupResourceProfile {
       if (isset($vals['updatedTime'])) {
         $this->updatedTime = $vals['updatedTime'];
       }
+      if (isset($vals['defaultCredentialStoreToken'])) {
+        $this->defaultCredentialStoreToken = $vals['defaultCredentialStoreToken'];
+      }
     }
   }
 
@@ -1281,6 +1294,13 @@ class GroupResourceProfile {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 9:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->defaultCredentialStoreToken);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -1370,6 +1390,11 @@ class GroupResourceProfile {
       $xfer += $output->writeI64($this->updatedTime);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->defaultCredentialStoreToken !== null) {
+      $xfer += $output->writeFieldBegin('defaultCredentialStoreToken', TType::STRING, 9);
+      $xfer += $output->writeString($this->defaultCredentialStoreToken);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
diff --git a/app/libraries/Airavata/Model/AppCatalog/Parser/Types.php b/app/libraries/Airavata/Model/AppCatalog/Parser/Types.php
new file mode 100644
index 0000000..33ff6fe
--- /dev/null
+++ b/app/libraries/Airavata/Model/AppCatalog/Parser/Types.php
@@ -0,0 +1,1407 @@
+<?php
+namespace Airavata\Model\AppCatalog\Parser;
+
+/**
+ * Autogenerated by Thrift Compiler (0.10.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class IOType {
+  const FILE = 0;
+  const PROPERTY = 1;
+  static public $__names = array(
+    0 => 'FILE',
+    1 => 'PROPERTY',
+  );
+}
+
+class ParserInput {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $name = null;
+  /**
+   * @var bool
+   */
+  public $requiredInput = null;
+  /**
+   * @var string
+   */
+  public $parserId = null;
+  /**
+   * @var int
+   */
+  public $type = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'name',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'requiredInput',
+          'type' => TType::BOOL,
+          ),
+        4 => array(
+          'var' => 'parserId',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'type',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['name'])) {
+        $this->name = $vals['name'];
+      }
+      if (isset($vals['requiredInput'])) {
+        $this->requiredInput = $vals['requiredInput'];
+      }
+      if (isset($vals['parserId'])) {
+        $this->parserId = $vals['parserId'];
+      }
+      if (isset($vals['type'])) {
+        $this->type = $vals['type'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ParserInput';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->name);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->requiredInput);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parserId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->type);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ParserInput');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->name !== null) {
+      $xfer += $output->writeFieldBegin('name', TType::STRING, 2);
+      $xfer += $output->writeString($this->name);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->requiredInput !== null) {
+      $xfer += $output->writeFieldBegin('requiredInput', TType::BOOL, 3);
+      $xfer += $output->writeBool($this->requiredInput);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parserId !== null) {
+      $xfer += $output->writeFieldBegin('parserId', TType::STRING, 4);
+      $xfer += $output->writeString($this->parserId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->type !== null) {
+      $xfer += $output->writeFieldBegin('type', TType::I32, 5);
+      $xfer += $output->writeI32($this->type);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ParserOutput {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $name = null;
+  /**
+   * @var bool
+   */
+  public $requiredOutput = null;
+  /**
+   * @var string
+   */
+  public $parserId = null;
+  /**
+   * @var int
+   */
+  public $type = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'name',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'requiredOutput',
+          'type' => TType::BOOL,
+          ),
+        4 => array(
+          'var' => 'parserId',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'type',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['name'])) {
+        $this->name = $vals['name'];
+      }
+      if (isset($vals['requiredOutput'])) {
+        $this->requiredOutput = $vals['requiredOutput'];
+      }
+      if (isset($vals['parserId'])) {
+        $this->parserId = $vals['parserId'];
+      }
+      if (isset($vals['type'])) {
+        $this->type = $vals['type'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ParserOutput';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->name);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->requiredOutput);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parserId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->type);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ParserOutput');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->name !== null) {
+      $xfer += $output->writeFieldBegin('name', TType::STRING, 2);
+      $xfer += $output->writeString($this->name);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->requiredOutput !== null) {
+      $xfer += $output->writeFieldBegin('requiredOutput', TType::BOOL, 3);
+      $xfer += $output->writeBool($this->requiredOutput);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parserId !== null) {
+      $xfer += $output->writeFieldBegin('parserId', TType::STRING, 4);
+      $xfer += $output->writeString($this->parserId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->type !== null) {
+      $xfer += $output->writeFieldBegin('type', TType::I32, 5);
+      $xfer += $output->writeI32($this->type);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Parser {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $imageName = null;
+  /**
+   * @var string
+   */
+  public $outputDirPath = null;
+  /**
+   * @var string
+   */
+  public $inputDirPath = null;
+  /**
+   * @var string
+   */
+  public $executionCommand = null;
+  /**
+   * @var \Airavata\Model\AppCatalog\Parser\ParserInput[]
+   */
+  public $inputFiles = null;
+  /**
+   * @var \Airavata\Model\AppCatalog\Parser\ParserOutput[]
+   */
+  public $outputFiles = null;
+  /**
+   * @var string
+   */
+  public $gatewayId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'imageName',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'outputDirPath',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'inputDirPath',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'executionCommand',
+          'type' => TType::STRING,
+          ),
+        6 => array(
+          'var' => 'inputFiles',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\Parser\ParserInput',
+            ),
+          ),
+        7 => array(
+          'var' => 'outputFiles',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\Parser\ParserOutput',
+            ),
+          ),
+        8 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['imageName'])) {
+        $this->imageName = $vals['imageName'];
+      }
+      if (isset($vals['outputDirPath'])) {
+        $this->outputDirPath = $vals['outputDirPath'];
+      }
+      if (isset($vals['inputDirPath'])) {
+        $this->inputDirPath = $vals['inputDirPath'];
+      }
+      if (isset($vals['executionCommand'])) {
+        $this->executionCommand = $vals['executionCommand'];
+      }
+      if (isset($vals['inputFiles'])) {
+        $this->inputFiles = $vals['inputFiles'];
+      }
+      if (isset($vals['outputFiles'])) {
+        $this->outputFiles = $vals['outputFiles'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Parser';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->imageName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->outputDirPath);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->inputDirPath);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->executionCommand);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->inputFiles = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $elem5 = new \Airavata\Model\AppCatalog\Parser\ParserInput();
+              $xfer += $elem5->read($input);
+              $this->inputFiles []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::LST) {
+            $this->outputFiles = array();
+            $_size6 = 0;
+            $_etype9 = 0;
+            $xfer += $input->readListBegin($_etype9, $_size6);
+            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
+            {
+              $elem11 = null;
+              $elem11 = new \Airavata\Model\AppCatalog\Parser\ParserOutput();
+              $xfer += $elem11->read($input);
+              $this->outputFiles []= $elem11;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Parser');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->imageName !== null) {
+      $xfer += $output->writeFieldBegin('imageName', TType::STRING, 2);
+      $xfer += $output->writeString($this->imageName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->outputDirPath !== null) {
+      $xfer += $output->writeFieldBegin('outputDirPath', TType::STRING, 3);
+      $xfer += $output->writeString($this->outputDirPath);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->inputDirPath !== null) {
+      $xfer += $output->writeFieldBegin('inputDirPath', TType::STRING, 4);
+      $xfer += $output->writeString($this->inputDirPath);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->executionCommand !== null) {
+      $xfer += $output->writeFieldBegin('executionCommand', TType::STRING, 5);
+      $xfer += $output->writeString($this->executionCommand);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->inputFiles !== null) {
+      if (!is_array($this->inputFiles)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('inputFiles', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->inputFiles));
+        {
+          foreach ($this->inputFiles as $iter12)
+          {
+            $xfer += $iter12->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->outputFiles !== null) {
+      if (!is_array($this->outputFiles)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('outputFiles', TType::LST, 7);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->outputFiles));
+        {
+          foreach ($this->outputFiles as $iter13)
+          {
+            $xfer += $iter13->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 8);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ParserConnectorInput {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $inputId = null;
+  /**
+   * @var string
+   */
+  public $parentOutputId = null;
+  /**
+   * @var string
+   */
+  public $value = null;
+  /**
+   * @var string
+   */
+  public $parserConnectorId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'inputId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'parentOutputId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'value',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'parserConnectorId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['inputId'])) {
+        $this->inputId = $vals['inputId'];
+      }
+      if (isset($vals['parentOutputId'])) {
+        $this->parentOutputId = $vals['parentOutputId'];
+      }
+      if (isset($vals['value'])) {
+        $this->value = $vals['value'];
+      }
+      if (isset($vals['parserConnectorId'])) {
+        $this->parserConnectorId = $vals['parserConnectorId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ParserConnectorInput';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->inputId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parentOutputId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->value);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parserConnectorId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ParserConnectorInput');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->inputId !== null) {
+      $xfer += $output->writeFieldBegin('inputId', TType::STRING, 2);
+      $xfer += $output->writeString($this->inputId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parentOutputId !== null) {
+      $xfer += $output->writeFieldBegin('parentOutputId', TType::STRING, 3);
+      $xfer += $output->writeString($this->parentOutputId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->value !== null) {
+      $xfer += $output->writeFieldBegin('value', TType::STRING, 4);
+      $xfer += $output->writeString($this->value);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parserConnectorId !== null) {
+      $xfer += $output->writeFieldBegin('parserConnectorId', TType::STRING, 5);
+      $xfer += $output->writeString($this->parserConnectorId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ParserConnector {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $parentParserId = null;
+  /**
+   * @var string
+   */
+  public $childParserId = null;
+  /**
+   * @var \Airavata\Model\AppCatalog\Parser\ParserConnectorInput[]
+   */
+  public $connectorInputs = null;
+  /**
+   * @var string
+   */
+  public $parsingTemplateId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'parentParserId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'childParserId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'connectorInputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\Parser\ParserConnectorInput',
+            ),
+          ),
+        5 => array(
+          'var' => 'parsingTemplateId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['parentParserId'])) {
+        $this->parentParserId = $vals['parentParserId'];
+      }
+      if (isset($vals['childParserId'])) {
+        $this->childParserId = $vals['childParserId'];
+      }
+      if (isset($vals['connectorInputs'])) {
+        $this->connectorInputs = $vals['connectorInputs'];
+      }
+      if (isset($vals['parsingTemplateId'])) {
+        $this->parsingTemplateId = $vals['parsingTemplateId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ParserConnector';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parentParserId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->childParserId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::LST) {
+            $this->connectorInputs = array();
+            $_size14 = 0;
+            $_etype17 = 0;
+            $xfer += $input->readListBegin($_etype17, $_size14);
+            for ($_i18 = 0; $_i18 < $_size14; ++$_i18)
+            {
+              $elem19 = null;
+              $elem19 = new \Airavata\Model\AppCatalog\Parser\ParserConnectorInput();
+              $xfer += $elem19->read($input);
+              $this->connectorInputs []= $elem19;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parsingTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ParserConnector');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parentParserId !== null) {
+      $xfer += $output->writeFieldBegin('parentParserId', TType::STRING, 2);
+      $xfer += $output->writeString($this->parentParserId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->childParserId !== null) {
+      $xfer += $output->writeFieldBegin('childParserId', TType::STRING, 3);
+      $xfer += $output->writeString($this->childParserId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->connectorInputs !== null) {
+      if (!is_array($this->connectorInputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('connectorInputs', TType::LST, 4);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->connectorInputs));
+        {
+          foreach ($this->connectorInputs as $iter20)
+          {
+            $xfer += $iter20->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parsingTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('parsingTemplateId', TType::STRING, 5);
+      $xfer += $output->writeString($this->parsingTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ParsingTemplateInput {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $targetInputId = null;
+  /**
+   * @var string
+   */
+  public $applicationOutputName = null;
+  /**
+   * @var string
+   */
+  public $value = null;
+  /**
+   * @var string
+   */
+  public $parsingTemplateId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'targetInputId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'applicationOutputName',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'value',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'parsingTemplateId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['targetInputId'])) {
+        $this->targetInputId = $vals['targetInputId'];
+      }
+      if (isset($vals['applicationOutputName'])) {
+        $this->applicationOutputName = $vals['applicationOutputName'];
+      }
+      if (isset($vals['value'])) {
+        $this->value = $vals['value'];
+      }
+      if (isset($vals['parsingTemplateId'])) {
+        $this->parsingTemplateId = $vals['parsingTemplateId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ParsingTemplateInput';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->targetInputId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationOutputName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->value);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parsingTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ParsingTemplateInput');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->targetInputId !== null) {
+      $xfer += $output->writeFieldBegin('targetInputId', TType::STRING, 2);
+      $xfer += $output->writeString($this->targetInputId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationOutputName !== null) {
+      $xfer += $output->writeFieldBegin('applicationOutputName', TType::STRING, 3);
+      $xfer += $output->writeString($this->applicationOutputName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->value !== null) {
+      $xfer += $output->writeFieldBegin('value', TType::STRING, 4);
+      $xfer += $output->writeString($this->value);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parsingTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('parsingTemplateId', TType::STRING, 5);
+      $xfer += $output->writeString($this->parsingTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ParsingTemplate {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $applicationInterface = null;
+  /**
+   * @var \Airavata\Model\AppCatalog\Parser\ParsingTemplateInput[]
+   */
+  public $initialInputs = null;
+  /**
+   * @var \Airavata\Model\AppCatalog\Parser\ParserConnector[]
+   */
+  public $parserConnections = null;
+  /**
+   * @var string
+   */
+  public $gatewayId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'applicationInterface',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'initialInputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\Parser\ParsingTemplateInput',
+            ),
+          ),
+        4 => array(
+          'var' => 'parserConnections',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\Parser\ParserConnector',
+            ),
+          ),
+        5 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['applicationInterface'])) {
+        $this->applicationInterface = $vals['applicationInterface'];
+      }
+      if (isset($vals['initialInputs'])) {
+        $this->initialInputs = $vals['initialInputs'];
+      }
+      if (isset($vals['parserConnections'])) {
+        $this->parserConnections = $vals['parserConnections'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ParsingTemplate';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationInterface);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::LST) {
+            $this->initialInputs = array();
+            $_size21 = 0;
+            $_etype24 = 0;
+            $xfer += $input->readListBegin($_etype24, $_size21);
+            for ($_i25 = 0; $_i25 < $_size21; ++$_i25)
+            {
+              $elem26 = null;
+              $elem26 = new \Airavata\Model\AppCatalog\Parser\ParsingTemplateInput();
+              $xfer += $elem26->read($input);
+              $this->initialInputs []= $elem26;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::LST) {
+            $this->parserConnections = array();
+            $_size27 = 0;
+            $_etype30 = 0;
+            $xfer += $input->readListBegin($_etype30, $_size27);
+            for ($_i31 = 0; $_i31 < $_size27; ++$_i31)
+            {
+              $elem32 = null;
+              $elem32 = new \Airavata\Model\AppCatalog\Parser\ParserConnector();
+              $xfer += $elem32->read($input);
+              $this->parserConnections []= $elem32;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ParsingTemplate');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationInterface !== null) {
+      $xfer += $output->writeFieldBegin('applicationInterface', TType::STRING, 2);
+      $xfer += $output->writeString($this->applicationInterface);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->initialInputs !== null) {
+      if (!is_array($this->initialInputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('initialInputs', TType::LST, 3);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->initialInputs));
+        {
+          foreach ($this->initialInputs as $iter33)
+          {
+            $xfer += $iter33->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parserConnections !== null) {
+      if (!is_array($this->parserConnections)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('parserConnections', TType::LST, 4);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->parserConnections));
+        {
+          foreach ($this->parserConnections as $iter34)
+          {
+            $xfer += $iter34->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 5);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+
diff --git a/app/libraries/Airavata/Model/Application/Io/Types.php b/app/libraries/Airavata/Model/Application/Io/Types.php
index c417a5b..fb4977e 100644
--- a/app/libraries/Airavata/Model/Application/Io/Types.php
+++ b/app/libraries/Airavata/Model/Application/Io/Types.php
@@ -490,6 +490,10 @@ class OutputDataObjectType {
    * @var string
    */
   public $storageResourceId = null;
+  /**
+   * @var string
+   */
+  public $metaData = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -538,6 +542,10 @@ class OutputDataObjectType {
           'var' => 'storageResourceId',
           'type' => TType::STRING,
           ),
+        12 => array(
+          'var' => 'metaData',
+          'type' => TType::STRING,
+          ),
         );
     }
     if (is_array($vals)) {
@@ -574,6 +582,9 @@ class OutputDataObjectType {
       if (isset($vals['storageResourceId'])) {
         $this->storageResourceId = $vals['storageResourceId'];
       }
+      if (isset($vals['metaData'])) {
+        $this->metaData = $vals['metaData'];
+      }
     }
   }
 
@@ -673,6 +684,13 @@ class OutputDataObjectType {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 12:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->metaData);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -741,6 +759,11 @@ class OutputDataObjectType {
       $xfer += $output->writeString($this->storageResourceId);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->metaData !== null) {
+      $xfer += $output->writeFieldBegin('metaData', TType::STRING, 12);
+      $xfer += $output->writeString($this->metaData);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
diff --git a/app/libraries/Airavata/Model/Experiment/Types.php b/app/libraries/Airavata/Model/Experiment/Types.php
index 26f9695..56f77cd 100644
--- a/app/libraries/Airavata/Model/Experiment/Types.php
+++ b/app/libraries/Airavata/Model/Experiment/Types.php
@@ -34,6 +34,8 @@ final class ExperimentSearchFields {
   const TO_DATE = 4;
   const STATUS = 5;
   const PROJECT_ID = 6;
+  const USER_NAME = 7;
+  const JOB_ID = 8;
   static public $__names = array(
     0 => 'EXPERIMENT_NAME',
     1 => 'EXPERIMENT_DESC',
@@ -42,6 +44,8 @@ final class ExperimentSearchFields {
     4 => 'TO_DATE',
     5 => 'STATUS',
     6 => 'PROJECT_ID',
+    7 => 'USER_NAME',
+    8 => 'JOB_ID',
   );
 }
 
@@ -464,6 +468,10 @@ class ExperimentModel {
    * @var \Airavata\Model\Process\ProcessModel[]
    */
   public $processes = null;
+  /**
+   * @var \Airavata\Model\Workflow\AiravataWorkflow
+   */
+  public $workflow = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -574,6 +582,11 @@ class ExperimentModel {
             'class' => '\Airavata\Model\Process\ProcessModel',
             ),
           ),
+        20 => array(
+          'var' => 'workflow',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow\AiravataWorkflow',
+          ),
         );
     }
     if (is_array($vals)) {
@@ -634,6 +647,9 @@ class ExperimentModel {
       if (isset($vals['processes'])) {
         $this->processes = $vals['processes'];
       }
+      if (isset($vals['workflow'])) {
+        $this->workflow = $vals['workflow'];
+      }
     }
   }
 
@@ -855,6 +871,14 @@ class ExperimentModel {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 20:
+          if ($ftype == TType::STRUCT) {
+            $this->workflow = new \Airavata\Model\Workflow\AiravataWorkflow();
+            $xfer += $this->workflow->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -1038,6 +1062,14 @@ class ExperimentModel {
       }
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->workflow !== null) {
+      if (!is_object($this->workflow)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflow', TType::STRUCT, 20);
+      $xfer += $this->workflow->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
diff --git a/app/libraries/Airavata/Model/Group/Types.php b/app/libraries/Airavata/Model/Group/Types.php
index 0ccb16b..9e17f8a 100644
--- a/app/libraries/Airavata/Model/Group/Types.php
+++ b/app/libraries/Airavata/Model/Group/Types.php
@@ -70,6 +70,12 @@ class GroupModel {
    * @var string[]
    */
   public $members = null;
+  /**
+   * Note: each admin must also be a member of the group.
+   * 
+   * @var string[]
+   */
+  public $admins = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -98,6 +104,14 @@ class GroupModel {
             'type' => TType::STRING,
             ),
           ),
+        6 => array(
+          'var' => 'admins',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
         );
     }
     if (is_array($vals)) {
@@ -116,6 +130,9 @@ class GroupModel {
       if (isset($vals['members'])) {
         $this->members = $vals['members'];
       }
+      if (isset($vals['admins'])) {
+        $this->admins = $vals['admins'];
+      }
     }
   }
 
@@ -183,6 +200,23 @@ class GroupModel {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->admins = array();
+            $_size6 = 0;
+            $_etype9 = 0;
+            $xfer += $input->readListBegin($_etype9, $_size6);
+            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
+            {
+              $elem11 = null;
+              $xfer += $input->readString($elem11);
+              $this->admins []= $elem11;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -224,9 +258,26 @@ class GroupModel {
       {
         $output->writeListBegin(TType::STRING, count($this->members));
         {
-          foreach ($this->members as $iter6)
+          foreach ($this->members as $iter12)
+          {
+            $xfer += $output->writeString($iter12);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->admins !== null) {
+      if (!is_array($this->admins)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('admins', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRING, count($this->admins));
+        {
+          foreach ($this->admins as $iter13)
           {
-            $xfer += $output->writeString($iter6);
+            $xfer += $output->writeString($iter13);
           }
         }
         $output->writeListEnd();
diff --git a/app/libraries/Airavata/Model/Process/Types.php b/app/libraries/Airavata/Model/Process/Types.php
index c64ed03..555ff92 100644
--- a/app/libraries/Airavata/Model/Process/Types.php
+++ b/app/libraries/Airavata/Model/Process/Types.php
@@ -17,6 +17,150 @@ use Thrift\Protocol\TBinaryProtocolAccelerated;
 use Thrift\Exception\TApplicationException;
 
 
+class ProcessWorkflow {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $processId = null;
+  /**
+   * @var string
+   */
+  public $workflowId = null;
+  /**
+   * @var int
+   */
+  public $creationTime = null;
+  /**
+   * @var string
+   */
+  public $type = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'processId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'workflowId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'creationTime',
+          'type' => TType::I64,
+          ),
+        4 => array(
+          'var' => 'type',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['processId'])) {
+        $this->processId = $vals['processId'];
+      }
+      if (isset($vals['workflowId'])) {
+        $this->workflowId = $vals['workflowId'];
+      }
+      if (isset($vals['creationTime'])) {
+        $this->creationTime = $vals['creationTime'];
+      }
+      if (isset($vals['type'])) {
+        $this->type = $vals['type'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ProcessWorkflow';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->processId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->creationTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->type);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ProcessWorkflow');
+    if ($this->processId !== null) {
+      $xfer += $output->writeFieldBegin('processId', TType::STRING, 1);
+      $xfer += $output->writeString($this->processId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflowId !== null) {
+      $xfer += $output->writeFieldBegin('workflowId', TType::STRING, 2);
+      $xfer += $output->writeString($this->workflowId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->creationTime !== null) {
+      $xfer += $output->writeFieldBegin('creationTime', TType::I64, 3);
+      $xfer += $output->writeI64($this->creationTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->type !== null) {
+      $xfer += $output->writeFieldBegin('type', TType::STRING, 4);
+      $xfer += $output->writeString($this->type);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
 /**
  * ProcessModel: A structure holding the process details. The infromation is derived based on user provided
  *          configuration data or system inferred information from scheduling and QoS parameters.
@@ -129,6 +273,10 @@ class ProcessModel {
    * @var string
    */
   public $groupResourceProfileId = null;
+  /**
+   * @var \Airavata\Model\Process\ProcessWorkflow[]
+   */
+  public $processWorkflows = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -263,6 +411,15 @@ class ProcessModel {
           'var' => 'groupResourceProfileId',
           'type' => TType::STRING,
           ),
+        26 => array(
+          'var' => 'processWorkflows',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Process\ProcessWorkflow',
+            ),
+          ),
         );
     }
     if (is_array($vals)) {
@@ -341,6 +498,9 @@ class ProcessModel {
       if (isset($vals['groupResourceProfileId'])) {
         $this->groupResourceProfileId = $vals['groupResourceProfileId'];
       }
+      if (isset($vals['processWorkflows'])) {
+        $this->processWorkflows = $vals['processWorkflows'];
+      }
     }
   }
 
@@ -604,6 +764,24 @@ class ProcessModel {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 26:
+          if ($ftype == TType::LST) {
+            $this->processWorkflows = array();
+            $_size36 = 0;
+            $_etype39 = 0;
+            $xfer += $input->readListBegin($_etype39, $_size36);
+            for ($_i40 = 0; $_i40 < $_size36; ++$_i40)
+            {
+              $elem41 = null;
+              $elem41 = new \Airavata\Model\Process\ProcessWorkflow();
+              $xfer += $elem41->read($input);
+              $this->processWorkflows []= $elem41;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -645,9 +823,9 @@ class ProcessModel {
       {
         $output->writeListBegin(TType::STRUCT, count($this->processStatuses));
         {
-          foreach ($this->processStatuses as $iter36)
+          foreach ($this->processStatuses as $iter42)
           {
-            $xfer += $iter36->write($output);
+            $xfer += $iter42->write($output);
           }
         }
         $output->writeListEnd();
@@ -682,9 +860,9 @@ class ProcessModel {
       {
         $output->writeListBegin(TType::STRUCT, count($this->processInputs));
         {
-          foreach ($this->processInputs as $iter37)
+          foreach ($this->processInputs as $iter43)
           {
-            $xfer += $iter37->write($output);
+            $xfer += $iter43->write($output);
           }
         }
         $output->writeListEnd();
@@ -699,9 +877,9 @@ class ProcessModel {
       {
         $output->writeListBegin(TType::STRUCT, count($this->processOutputs));
         {
-          foreach ($this->processOutputs as $iter38)
+          foreach ($this->processOutputs as $iter44)
           {
-            $xfer += $iter38->write($output);
+            $xfer += $iter44->write($output);
           }
         }
         $output->writeListEnd();
@@ -724,9 +902,9 @@ class ProcessModel {
       {
         $output->writeListBegin(TType::STRUCT, count($this->tasks));
         {
-          foreach ($this->tasks as $iter39)
+          foreach ($this->tasks as $iter45)
           {
-            $xfer += $iter39->write($output);
+            $xfer += $iter45->write($output);
           }
         }
         $output->writeListEnd();
@@ -746,9 +924,9 @@ class ProcessModel {
       {
         $output->writeListBegin(TType::STRUCT, count($this->processErrors));
         {
-          foreach ($this->processErrors as $iter40)
+          foreach ($this->processErrors as $iter46)
           {
-            $xfer += $iter40->write($output);
+            $xfer += $iter46->write($output);
           }
         }
         $output->writeListEnd();
@@ -773,9 +951,9 @@ class ProcessModel {
       {
         $output->writeListBegin(TType::STRING, count($this->emailAddresses));
         {
-          foreach ($this->emailAddresses as $iter41)
+          foreach ($this->emailAddresses as $iter47)
           {
-            $xfer += $output->writeString($iter41);
+            $xfer += $output->writeString($iter47);
           }
         }
         $output->writeListEnd();
@@ -817,6 +995,23 @@ class ProcessModel {
       $xfer += $output->writeString($this->groupResourceProfileId);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->processWorkflows !== null) {
+      if (!is_array($this->processWorkflows)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('processWorkflows', TType::LST, 26);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->processWorkflows));
+        {
+          foreach ($this->processWorkflows as $iter48)
+          {
+            $xfer += $iter48->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
diff --git a/app/libraries/Airavata/Model/Task/Types.php b/app/libraries/Airavata/Model/Task/Types.php
index 5691abf..a204c2a 100644
--- a/app/libraries/Airavata/Model/Task/Types.php
+++ b/app/libraries/Airavata/Model/Task/Types.php
@@ -108,6 +108,14 @@ class TaskModel {
    * @var \Airavata\Model\Job\JobModel[]
    */
   public $jobs = null;
+  /**
+   * @var int
+   */
+  public $maxRetry = null;
+  /**
+   * @var int
+   */
+  public $currentRetry = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -167,6 +175,14 @@ class TaskModel {
             'class' => '\Airavata\Model\Job\JobModel',
             ),
           ),
+        11 => array(
+          'var' => 'maxRetry',
+          'type' => TType::I32,
+          ),
+        12 => array(
+          'var' => 'currentRetry',
+          'type' => TType::I32,
+          ),
         );
     }
     if (is_array($vals)) {
@@ -200,6 +216,12 @@ class TaskModel {
       if (isset($vals['jobs'])) {
         $this->jobs = $vals['jobs'];
       }
+      if (isset($vals['maxRetry'])) {
+        $this->maxRetry = $vals['maxRetry'];
+      }
+      if (isset($vals['currentRetry'])) {
+        $this->currentRetry = $vals['currentRetry'];
+      }
     }
   }
 
@@ -325,6 +347,20 @@ class TaskModel {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 11:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->maxRetry);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 12:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->currentRetry);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -424,6 +460,16 @@ class TaskModel {
       }
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->maxRetry !== null) {
+      $xfer += $output->writeFieldBegin('maxRetry', TType::I32, 11);
+      $xfer += $output->writeI32($this->maxRetry);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->currentRetry !== null) {
+      $xfer += $output->writeFieldBegin('currentRetry', TType::I32, 12);
+      $xfer += $output->writeI32($this->currentRetry);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
diff --git a/app/libraries/Airavata/Model/Workflow/Types.php b/app/libraries/Airavata/Model/Workflow/Types.php
new file mode 100644
index 0000000..30801da
--- /dev/null
+++ b/app/libraries/Airavata/Model/Workflow/Types.php
@@ -0,0 +1,2176 @@
+<?php
+namespace Airavata\Model\Workflow;
+
+/**
+ * Autogenerated by Thrift Compiler (0.10.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class ApplicationState {
+  const CREATED = 0;
+  const VALIDATED = 1;
+  const SCHEDULED = 2;
+  const LAUNCHED = 3;
+  const EXECUTING = 4;
+  const CANCELING = 5;
+  const CANCELED = 6;
+  const COMPLETED = 7;
+  const FAILED = 8;
+  static public $__names = array(
+    0 => 'CREATED',
+    1 => 'VALIDATED',
+    2 => 'SCHEDULED',
+    3 => 'LAUNCHED',
+    4 => 'EXECUTING',
+    5 => 'CANCELING',
+    6 => 'CANCELED',
+    7 => 'COMPLETED',
+    8 => 'FAILED',
+  );
+}
+
+final class ComponentType {
+  const APPLICATION = 0;
+  const HANDLER = 1;
+  static public $__names = array(
+    0 => 'APPLICATION',
+    1 => 'HANDLER',
+  );
+}
+
+final class HandlerType {
+  const FLOW_STARTER = 0;
+  const FLOW_TERMINATOR = 1;
+  static public $__names = array(
+    0 => 'FLOW_STARTER',
+    1 => 'FLOW_TERMINATOR',
+  );
+}
+
+final class HandlerState {
+  const CREATED = 0;
+  const VALIDATED = 1;
+  const SCHEDULED = 2;
+  const LAUNCHED = 3;
+  const EXECUTING = 4;
+  const CANCELING = 5;
+  const CANCELED = 6;
+  const COMPLETED = 7;
+  const FAILED = 8;
+  static public $__names = array(
+    0 => 'CREATED',
+    1 => 'VALIDATED',
+    2 => 'SCHEDULED',
+    3 => 'LAUNCHED',
+    4 => 'EXECUTING',
+    5 => 'CANCELING',
+    6 => 'CANCELED',
+    7 => 'COMPLETED',
+    8 => 'FAILED',
+  );
+}
+
+final class WorkflowState {
+  const CREATED = 0;
+  const VALIDATED = 1;
+  const SCHEDULED = 2;
+  const LAUNCHED = 3;
+  const EXECUTING = 4;
+  const PAUSING = 5;
+  const PAUSED = 6;
+  const RESTARTING = 7;
+  const CANCELING = 8;
+  const CANCELED = 9;
+  const COMPLETED = 10;
+  const FAILED = 11;
+  static public $__names = array(
+    0 => 'CREATED',
+    1 => 'VALIDATED',
+    2 => 'SCHEDULED',
+    3 => 'LAUNCHED',
+    4 => 'EXECUTING',
+    5 => 'PAUSING',
+    6 => 'PAUSED',
+    7 => 'RESTARTING',
+    8 => 'CANCELING',
+    9 => 'CANCELED',
+    10 => 'COMPLETED',
+    11 => 'FAILED',
+  );
+}
+
+class ApplicationStatus {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var int
+   */
+  public $state = null;
+  /**
+   * @var string
+   */
+  public $description = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'description',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['description'])) {
+        $this->description = $vals['description'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->description);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationStatus');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 2);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->description !== null) {
+      $xfer += $output->writeFieldBegin('description', TType::STRING, 3);
+      $xfer += $output->writeString($this->description);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 4);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class WorkflowApplication {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $processId = null;
+  /**
+   * @var string
+   */
+  public $applicationInterfaceId = null;
+  /**
+   * @var string
+   */
+  public $computeResourceId = null;
+  /**
+   * @var string
+   */
+  public $queueName = null;
+  /**
+   * @var int
+   */
+  public $nodeCount = null;
+  /**
+   * @var int
+   */
+  public $coreCount = null;
+  /**
+   * @var int
+   */
+  public $wallTimeLimit = null;
+  /**
+   * @var int
+   */
+  public $physicalMemory = null;
+  /**
+   * @var \Airavata\Model\Workflow\ApplicationStatus[]
+   */
+  public $statuses = null;
+  /**
+   * @var \Airavata\Model\Commons\ErrorModel[]
+   */
+  public $errors = null;
+  /**
+   * @var int
+   */
+  public $createdAt = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'processId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'applicationInterfaceId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'computeResourceId',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'queueName',
+          'type' => TType::STRING,
+          ),
+        6 => array(
+          'var' => 'nodeCount',
+          'type' => TType::I32,
+          ),
+        7 => array(
+          'var' => 'coreCount',
+          'type' => TType::I32,
+          ),
+        8 => array(
+          'var' => 'wallTimeLimit',
+          'type' => TType::I32,
+          ),
+        9 => array(
+          'var' => 'physicalMemory',
+          'type' => TType::I32,
+          ),
+        10 => array(
+          'var' => 'statuses',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workflow\ApplicationStatus',
+            ),
+          ),
+        11 => array(
+          'var' => 'errors',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Commons\ErrorModel',
+            ),
+          ),
+        12 => array(
+          'var' => 'createdAt',
+          'type' => TType::I64,
+          ),
+        13 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['processId'])) {
+        $this->processId = $vals['processId'];
+      }
+      if (isset($vals['applicationInterfaceId'])) {
+        $this->applicationInterfaceId = $vals['applicationInterfaceId'];
+      }
+      if (isset($vals['computeResourceId'])) {
+        $this->computeResourceId = $vals['computeResourceId'];
+      }
+      if (isset($vals['queueName'])) {
+        $this->queueName = $vals['queueName'];
+      }
+      if (isset($vals['nodeCount'])) {
+        $this->nodeCount = $vals['nodeCount'];
+      }
+      if (isset($vals['coreCount'])) {
+        $this->coreCount = $vals['coreCount'];
+      }
+      if (isset($vals['wallTimeLimit'])) {
+        $this->wallTimeLimit = $vals['wallTimeLimit'];
+      }
+      if (isset($vals['physicalMemory'])) {
+        $this->physicalMemory = $vals['physicalMemory'];
+      }
+      if (isset($vals['statuses'])) {
+        $this->statuses = $vals['statuses'];
+      }
+      if (isset($vals['errors'])) {
+        $this->errors = $vals['errors'];
+      }
+      if (isset($vals['createdAt'])) {
+        $this->createdAt = $vals['createdAt'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'WorkflowApplication';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->processId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->computeResourceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->queueName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->nodeCount);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->coreCount);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->wallTimeLimit);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->physicalMemory);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::LST) {
+            $this->statuses = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $elem5 = new \Airavata\Model\Workflow\ApplicationStatus();
+              $xfer += $elem5->read($input);
+              $this->statuses []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 11:
+          if ($ftype == TType::LST) {
+            $this->errors = array();
+            $_size6 = 0;
+            $_etype9 = 0;
+            $xfer += $input->readListBegin($_etype9, $_size6);
+            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
+            {
+              $elem11 = null;
+              $elem11 = new \Airavata\Model\Commons\ErrorModel();
+              $xfer += $elem11->read($input);
+              $this->errors []= $elem11;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 12:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->createdAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 13:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('WorkflowApplication');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->processId !== null) {
+      $xfer += $output->writeFieldBegin('processId', TType::STRING, 2);
+      $xfer += $output->writeString($this->processId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('applicationInterfaceId', TType::STRING, 3);
+      $xfer += $output->writeString($this->applicationInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->computeResourceId !== null) {
+      $xfer += $output->writeFieldBegin('computeResourceId', TType::STRING, 4);
+      $xfer += $output->writeString($this->computeResourceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->queueName !== null) {
+      $xfer += $output->writeFieldBegin('queueName', TType::STRING, 5);
+      $xfer += $output->writeString($this->queueName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->nodeCount !== null) {
+      $xfer += $output->writeFieldBegin('nodeCount', TType::I32, 6);
+      $xfer += $output->writeI32($this->nodeCount);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->coreCount !== null) {
+      $xfer += $output->writeFieldBegin('coreCount', TType::I32, 7);
+      $xfer += $output->writeI32($this->coreCount);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->wallTimeLimit !== null) {
+      $xfer += $output->writeFieldBegin('wallTimeLimit', TType::I32, 8);
+      $xfer += $output->writeI32($this->wallTimeLimit);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->physicalMemory !== null) {
+      $xfer += $output->writeFieldBegin('physicalMemory', TType::I32, 9);
+      $xfer += $output->writeI32($this->physicalMemory);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->statuses !== null) {
+      if (!is_array($this->statuses)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('statuses', TType::LST, 10);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->statuses));
+        {
+          foreach ($this->statuses as $iter12)
+          {
+            $xfer += $iter12->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errors !== null) {
+      if (!is_array($this->errors)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('errors', TType::LST, 11);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->errors));
+        {
+          foreach ($this->errors as $iter13)
+          {
+            $xfer += $iter13->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->createdAt !== null) {
+      $xfer += $output->writeFieldBegin('createdAt', TType::I64, 12);
+      $xfer += $output->writeI64($this->createdAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 13);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class DataBlock {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var string
+   */
+  public $value = null;
+  /**
+   * @var int
+   */
+  public $type = null;
+  /**
+   * @var int
+   */
+  public $createdAt = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'value',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'type',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'createdAt',
+          'type' => TType::I64,
+          ),
+        5 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['value'])) {
+        $this->value = $vals['value'];
+      }
+      if (isset($vals['type'])) {
+        $this->type = $vals['type'];
+      }
+      if (isset($vals['createdAt'])) {
+        $this->createdAt = $vals['createdAt'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'DataBlock';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->value);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->type);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->createdAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('DataBlock');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->value !== null) {
+      $xfer += $output->writeFieldBegin('value', TType::STRING, 2);
+      $xfer += $output->writeString($this->value);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->type !== null) {
+      $xfer += $output->writeFieldBegin('type', TType::I32, 3);
+      $xfer += $output->writeI32($this->type);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->createdAt !== null) {
+      $xfer += $output->writeFieldBegin('createdAt', TType::I64, 4);
+      $xfer += $output->writeI64($this->createdAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 5);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class WorkflowConnection {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = "DO_NOT_SET_AT_CLIENTS";
+  /**
+   * @var \Airavata\Model\Workflow\DataBlock
+   */
+  public $dataBlock = null;
+  /**
+   * @var int
+   */
+  public $fromType = null;
+  /**
+   * @var string
+   */
+  public $fromId = null;
+  /**
+   * @var string
+   */
+  public $fromOutputName = null;
+  /**
+   * @var int
+   */
+  public $toType = null;
+  /**
+   * @var string
+   */
+  public $toId = null;
+  /**
+   * @var string
+   */
+  public $toInputName = null;
+  /**
+   * @var int
+   */
+  public $createdAt = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'dataBlock',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow\DataBlock',
+          ),
+        3 => array(
+          'var' => 'fromType',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'fromId',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'fromOutputName',
+          'type' => TType::STRING,
+          ),
+        6 => array(
+          'var' => 'toType',
+          'type' => TType::I32,
+          ),
+        7 => array(
+          'var' => 'toId',
+          'type' => TType::STRING,
+          ),
+        8 => array(
+          'var' => 'toInputName',
+          'type' => TType::STRING,
+          ),
+        9 => array(
+          'var' => 'createdAt',
+          'type' => TType::I64,
+          ),
+        10 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['dataBlock'])) {
+        $this->dataBlock = $vals['dataBlock'];
+      }
+      if (isset($vals['fromType'])) {
+        $this->fromType = $vals['fromType'];
+      }
+      if (isset($vals['fromId'])) {
+        $this->fromId = $vals['fromId'];
+      }
+      if (isset($vals['fromOutputName'])) {
+        $this->fromOutputName = $vals['fromOutputName'];
+      }
+      if (isset($vals['toType'])) {
+        $this->toType = $vals['toType'];
+      }
+      if (isset($vals['toId'])) {
+        $this->toId = $vals['toId'];
+      }
+      if (isset($vals['toInputName'])) {
+        $this->toInputName = $vals['toInputName'];
+      }
+      if (isset($vals['createdAt'])) {
+        $this->createdAt = $vals['createdAt'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'WorkflowConnection';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->dataBlock = new \Airavata\Model\Workflow\DataBlock();
+            $xfer += $this->dataBlock->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->fromType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->fromId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->fromOutputName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->toType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->toId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->toInputName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->createdAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('WorkflowConnection');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataBlock !== null) {
+      if (!is_object($this->dataBlock)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('dataBlock', TType::STRUCT, 2);
+      $xfer += $this->dataBlock->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->fromType !== null) {
+      $xfer += $output->writeFieldBegin('fromType', TType::I32, 3);
+      $xfer += $output->writeI32($this->fromType);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->fromId !== null) {
+      $xfer += $output->writeFieldBegin('fromId', TType::STRING, 4);
+      $xfer += $output->writeString($this->fromId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->fromOutputName !== null) {
+      $xfer += $output->writeFieldBegin('fromOutputName', TType::STRING, 5);
+      $xfer += $output->writeString($this->fromOutputName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->toType !== null) {
+      $xfer += $output->writeFieldBegin('toType', TType::I32, 6);
+      $xfer += $output->writeI32($this->toType);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->toId !== null) {
+      $xfer += $output->writeFieldBegin('toId', TType::STRING, 7);
+      $xfer += $output->writeString($this->toId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->toInputName !== null) {
+      $xfer += $output->writeFieldBegin('toInputName', TType::STRING, 8);
+      $xfer += $output->writeString($this->toInputName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->createdAt !== null) {
+      $xfer += $output->writeFieldBegin('createdAt', TType::I64, 9);
+      $xfer += $output->writeI64($this->createdAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 10);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class HandlerStatus {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var int
+   */
+  public $state = null;
+  /**
+   * @var string
+   */
+  public $description = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'description',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['description'])) {
+        $this->description = $vals['description'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'HandlerStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->description);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('HandlerStatus');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 2);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->description !== null) {
+      $xfer += $output->writeFieldBegin('description', TType::STRING, 3);
+      $xfer += $output->writeString($this->description);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 4);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class WorkflowHandler {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var int
+   */
+  public $type = null;
+  /**
+   * @var \Airavata\Model\Application\Io\InputDataObjectType[]
+   */
+  public $inputs = null;
+  /**
+   * @var \Airavata\Model\Application\Io\OutputDataObjectType[]
+   */
+  public $outputs = null;
+  /**
+   * @var \Airavata\Model\Workflow\HandlerStatus[]
+   */
+  public $statuses = null;
+  /**
+   * @var \Airavata\Model\Commons\ErrorModel[]
+   */
+  public $errors = null;
+  /**
+   * @var int
+   */
+  public $createdAt = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'type',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'inputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Application\Io\InputDataObjectType',
+            ),
+          ),
+        4 => array(
+          'var' => 'outputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Application\Io\OutputDataObjectType',
+            ),
+          ),
+        5 => array(
+          'var' => 'statuses',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workflow\HandlerStatus',
+            ),
+          ),
+        6 => array(
+          'var' => 'errors',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Commons\ErrorModel',
+            ),
+          ),
+        7 => array(
+          'var' => 'createdAt',
+          'type' => TType::I64,
+          ),
+        8 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['type'])) {
+        $this->type = $vals['type'];
+      }
+      if (isset($vals['inputs'])) {
+        $this->inputs = $vals['inputs'];
+      }
+      if (isset($vals['outputs'])) {
+        $this->outputs = $vals['outputs'];
+      }
+      if (isset($vals['statuses'])) {
+        $this->statuses = $vals['statuses'];
+      }
+      if (isset($vals['errors'])) {
+        $this->errors = $vals['errors'];
+      }
+      if (isset($vals['createdAt'])) {
+        $this->createdAt = $vals['createdAt'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'WorkflowHandler';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->type);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::LST) {
+            $this->inputs = array();
+            $_size14 = 0;
+            $_etype17 = 0;
+            $xfer += $input->readListBegin($_etype17, $_size14);
+            for ($_i18 = 0; $_i18 < $_size14; ++$_i18)
+            {
+              $elem19 = null;
+              $elem19 = new \Airavata\Model\Application\Io\InputDataObjectType();
+              $xfer += $elem19->read($input);
+              $this->inputs []= $elem19;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::LST) {
+            $this->outputs = array();
+            $_size20 = 0;
+            $_etype23 = 0;
+            $xfer += $input->readListBegin($_etype23, $_size20);
+            for ($_i24 = 0; $_i24 < $_size20; ++$_i24)
+            {
+              $elem25 = null;
+              $elem25 = new \Airavata\Model\Application\Io\OutputDataObjectType();
+              $xfer += $elem25->read($input);
+              $this->outputs []= $elem25;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::LST) {
+            $this->statuses = array();
+            $_size26 = 0;
+            $_etype29 = 0;
+            $xfer += $input->readListBegin($_etype29, $_size26);
+            for ($_i30 = 0; $_i30 < $_size26; ++$_i30)
+            {
+              $elem31 = null;
+              $elem31 = new \Airavata\Model\Workflow\HandlerStatus();
+              $xfer += $elem31->read($input);
+              $this->statuses []= $elem31;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->errors = array();
+            $_size32 = 0;
+            $_etype35 = 0;
+            $xfer += $input->readListBegin($_etype35, $_size32);
+            for ($_i36 = 0; $_i36 < $_size32; ++$_i36)
+            {
+              $elem37 = null;
+              $elem37 = new \Airavata\Model\Commons\ErrorModel();
+              $xfer += $elem37->read($input);
+              $this->errors []= $elem37;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->createdAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('WorkflowHandler');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->type !== null) {
+      $xfer += $output->writeFieldBegin('type', TType::I32, 2);
+      $xfer += $output->writeI32($this->type);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->inputs !== null) {
+      if (!is_array($this->inputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('inputs', TType::LST, 3);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->inputs));
+        {
+          foreach ($this->inputs as $iter38)
+          {
+            $xfer += $iter38->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->outputs !== null) {
+      if (!is_array($this->outputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('outputs', TType::LST, 4);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->outputs));
+        {
+          foreach ($this->outputs as $iter39)
+          {
+            $xfer += $iter39->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->statuses !== null) {
+      if (!is_array($this->statuses)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('statuses', TType::LST, 5);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->statuses));
+        {
+          foreach ($this->statuses as $iter40)
+          {
+            $xfer += $iter40->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errors !== null) {
+      if (!is_array($this->errors)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('errors', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->errors));
+        {
+          foreach ($this->errors as $iter41)
+          {
+            $xfer += $iter41->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->createdAt !== null) {
+      $xfer += $output->writeFieldBegin('createdAt', TType::I64, 7);
+      $xfer += $output->writeI64($this->createdAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 8);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class WorkflowStatus {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = null;
+  /**
+   * @var int
+   */
+  public $state = null;
+  /**
+   * @var string
+   */
+  public $description = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'description',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['description'])) {
+        $this->description = $vals['description'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'WorkflowStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->description);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('WorkflowStatus');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 2);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->description !== null) {
+      $xfer += $output->writeFieldBegin('description', TType::STRING, 3);
+      $xfer += $output->writeString($this->description);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 4);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class AiravataWorkflow {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $id = "DO_NOT_SET_AT_CLIENTS";
+  /**
+   * @var string
+   */
+  public $experimentId = null;
+  /**
+   * @var string
+   */
+  public $description = null;
+  /**
+   * @var \Airavata\Model\Workflow\WorkflowApplication[]
+   */
+  public $applications = null;
+  /**
+   * @var \Airavata\Model\Workflow\WorkflowHandler[]
+   */
+  public $handlers = null;
+  /**
+   * @var \Airavata\Model\Workflow\WorkflowConnection[]
+   */
+  public $connections = null;
+  /**
+   * @var \Airavata\Model\Workflow\WorkflowStatus[]
+   */
+  public $statuses = null;
+  /**
+   * @var \Airavata\Model\Commons\ErrorModel[]
+   */
+  public $errors = null;
+  /**
+   * @var int
+   */
+  public $createdAt = null;
+  /**
+   * @var int
+   */
+  public $updatedAt = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'id',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'experimentId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'description',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'applications',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workflow\WorkflowApplication',
+            ),
+          ),
+        5 => array(
+          'var' => 'handlers',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workflow\WorkflowHandler',
+            ),
+          ),
+        6 => array(
+          'var' => 'connections',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workflow\WorkflowConnection',
+            ),
+          ),
+        7 => array(
+          'var' => 'statuses',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workflow\WorkflowStatus',
+            ),
+          ),
+        8 => array(
+          'var' => 'errors',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Commons\ErrorModel',
+            ),
+          ),
+        9 => array(
+          'var' => 'createdAt',
+          'type' => TType::I64,
+          ),
+        10 => array(
+          'var' => 'updatedAt',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['id'])) {
+        $this->id = $vals['id'];
+      }
+      if (isset($vals['experimentId'])) {
+        $this->experimentId = $vals['experimentId'];
+      }
+      if (isset($vals['description'])) {
+        $this->description = $vals['description'];
+      }
+      if (isset($vals['applications'])) {
+        $this->applications = $vals['applications'];
+      }
+      if (isset($vals['handlers'])) {
+        $this->handlers = $vals['handlers'];
+      }
+      if (isset($vals['connections'])) {
+        $this->connections = $vals['connections'];
+      }
+      if (isset($vals['statuses'])) {
+        $this->statuses = $vals['statuses'];
+      }
+      if (isset($vals['errors'])) {
+        $this->errors = $vals['errors'];
+      }
+      if (isset($vals['createdAt'])) {
+        $this->createdAt = $vals['createdAt'];
+      }
+      if (isset($vals['updatedAt'])) {
+        $this->updatedAt = $vals['updatedAt'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'AiravataWorkflow';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->id);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->experimentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->description);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::LST) {
+            $this->applications = array();
+            $_size42 = 0;
+            $_etype45 = 0;
+            $xfer += $input->readListBegin($_etype45, $_size42);
+            for ($_i46 = 0; $_i46 < $_size42; ++$_i46)
+            {
+              $elem47 = null;
+              $elem47 = new \Airavata\Model\Workflow\WorkflowApplication();
+              $xfer += $elem47->read($input);
+              $this->applications []= $elem47;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::LST) {
+            $this->handlers = array();
+            $_size48 = 0;
+            $_etype51 = 0;
+            $xfer += $input->readListBegin($_etype51, $_size48);
+            for ($_i52 = 0; $_i52 < $_size48; ++$_i52)
+            {
+              $elem53 = null;
+              $elem53 = new \Airavata\Model\Workflow\WorkflowHandler();
+              $xfer += $elem53->read($input);
+              $this->handlers []= $elem53;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->connections = array();
+            $_size54 = 0;
+            $_etype57 = 0;
+            $xfer += $input->readListBegin($_etype57, $_size54);
+            for ($_i58 = 0; $_i58 < $_size54; ++$_i58)
+            {
+              $elem59 = null;
+              $elem59 = new \Airavata\Model\Workflow\WorkflowConnection();
+              $xfer += $elem59->read($input);
+              $this->connections []= $elem59;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::LST) {
+            $this->statuses = array();
+            $_size60 = 0;
+            $_etype63 = 0;
+            $xfer += $input->readListBegin($_etype63, $_size60);
+            for ($_i64 = 0; $_i64 < $_size60; ++$_i64)
+            {
+              $elem65 = null;
+              $elem65 = new \Airavata\Model\Workflow\WorkflowStatus();
+              $xfer += $elem65->read($input);
+              $this->statuses []= $elem65;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::LST) {
+            $this->errors = array();
+            $_size66 = 0;
+            $_etype69 = 0;
+            $xfer += $input->readListBegin($_etype69, $_size66);
+            for ($_i70 = 0; $_i70 < $_size66; ++$_i70)
+            {
+              $elem71 = null;
+              $elem71 = new \Airavata\Model\Commons\ErrorModel();
+              $xfer += $elem71->read($input);
+              $this->errors []= $elem71;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->createdAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('AiravataWorkflow');
+    if ($this->id !== null) {
+      $xfer += $output->writeFieldBegin('id', TType::STRING, 1);
+      $xfer += $output->writeString($this->id);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->experimentId !== null) {
+      $xfer += $output->writeFieldBegin('experimentId', TType::STRING, 2);
+      $xfer += $output->writeString($this->experimentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->description !== null) {
+      $xfer += $output->writeFieldBegin('description', TType::STRING, 3);
+      $xfer += $output->writeString($this->description);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applications !== null) {
+      if (!is_array($this->applications)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applications', TType::LST, 4);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->applications));
+        {
+          foreach ($this->applications as $iter72)
+          {
+            $xfer += $iter72->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->handlers !== null) {
+      if (!is_array($this->handlers)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('handlers', TType::LST, 5);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->handlers));
+        {
+          foreach ($this->handlers as $iter73)
+          {
+            $xfer += $iter73->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->connections !== null) {
+      if (!is_array($this->connections)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('connections', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->connections));
+        {
+          foreach ($this->connections as $iter74)
+          {
+            $xfer += $iter74->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->statuses !== null) {
+      if (!is_array($this->statuses)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('statuses', TType::LST, 7);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->statuses));
+        {
+          foreach ($this->statuses as $iter75)
+          {
+            $xfer += $iter75->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errors !== null) {
+      if (!is_array($this->errors)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('errors', TType::LST, 8);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->errors));
+        {
+          foreach ($this->errors as $iter76)
+          {
+            $xfer += $iter76->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->createdAt !== null) {
+      $xfer += $output->writeFieldBegin('createdAt', TType::I64, 9);
+      $xfer += $output->writeI64($this->createdAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedAt !== null) {
+      $xfer += $output->writeFieldBegin('updatedAt', TType::I64, 10);
+      $xfer += $output->writeI64($this->updatedAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+
diff --git a/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/IamAdminServices.php b/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/IamAdminServices.php
index 1ba47d3..281b2df 100644
--- a/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/IamAdminServices.php
+++ b/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/IamAdminServices.php
@@ -16,22 +16,23 @@ use Thrift\Protocol\TBinaryProtocolAccelerated;
 use Thrift\Exception\TApplicationException;
 
 
-interface IamAdminServicesIf {
+interface IamAdminServicesIf extends \Airavata\Base\API\BaseAPIIf {
   /**
    * @param \Airavata\Model\Security\AuthzToken $authzToken
-   * @return string
+   * @param \Airavata\Model\Workspace\Gateway $gateway
+   * @return \Airavata\Model\Workspace\Gateway
    * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
    * @throws \Airavata\API\Error\AuthorizationException
    */
-  public function getAPIVersion(\Airavata\Model\Security\AuthzToken $authzToken);
+  public function setUpGateway(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\Workspace\Gateway $gateway);
   /**
    * @param \Airavata\Model\Security\AuthzToken $authzToken
-   * @param \Airavata\Model\Workspace\Gateway $gateway
-   * @return \Airavata\Model\Workspace\Gateway
+   * @param string $username
+   * @return bool
    * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
    * @throws \Airavata\API\Error\AuthorizationException
    */
-  public function setUpGateway(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\Workspace\Gateway $gateway);
+  public function isUsernameAvailable(\Airavata\Model\Security\AuthzToken $authzToken, $username);
   /**
    * @param \Airavata\Model\Security\AuthzToken $authzToken
    * @param string $username
@@ -63,6 +64,88 @@ interface IamAdminServicesIf {
   /**
    * @param \Airavata\Model\Security\AuthzToken $authzToken
    * @param string $username
+   * @return bool
+   * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   * @throws \Airavata\API\Error\AuthorizationException
+   */
+  public function isUserExist(\Airavata\Model\Security\AuthzToken $authzToken, $username);
+  /**
+   * @param \Airavata\Model\Security\AuthzToken $authzToken
+   * @param string $username
+   * @return \Airavata\Model\User\UserProfile * A structure holding the user profile and its child models.
+   * *
+   * * Notes:
+   * *  The model does not include passwords as it is assumed an external identity provider is used to authenticate user.
+   * *  References:
+   * *     NSF Demographic Information - http://www.nsf.gov/pubs/2000/00form1225/00form1225.doc
+   * *     LDAP Schema - https://tools.ietf.org/html/rfc4519
+   * *     SCIM 2.0 - https://tools.ietf.org/html/rfc7643
+   * *
+   * * userModelVersion:
+   * *  Version number of profile
+   * *
+   * * airavataInternalUserId:
+   * *  internal to Airavata, not intended to be used outside of the Airavata platform or possibly by gateways
+   * *  (that is, never shown to users), never reassigned, REQUIRED
+   * *
+   * * userId:
+   * *  Externally assertable unique identifier. SAML (primarly in higher education, academic) tends to keep
+   * *   user name less opaque. OpenID Connect maintains them to be opaque.
+   * *
+   * * firstName, middleName, lastName:
+   * *  First and Last names as assertede by the user
+   * *
+   * * namePrefix, nameSuffix:
+   * *  prefix and suffix to the users name as asserted by the user
+   * *
+   * * emails:
+   * *   Email identifier are Verified, REQUIRED and MULTIVALUED
+   * *
+   * * userName:
+   * *  Name-based identifiers can be multivalues. To keep it simple, Airavata will make it a string.
+   * *   In the future these can be enumerated as:
+   *     *   Official name (as asserted possibly by some external identity provider)
+   *     *   Prefered name (as asserted or suggested by user directly)
+   *     *   Components:
+   *     *      givenName
+   *     *      surname (familyName)
+   *     *      displayName (often asserted by user to handle things like middle names, suffix, prefix, and the like)
+   * *
+   * * orcidId: ORCID ID - http://orcid.org/about/what-is-orcid)
+   * *
+   * * phones: Telephone MULTIVALUED
+   * *
+   * * country: Country of Residance
+   * *
+   * * nationality Countries of citizenship
+   * *
+   * * comments:
+   * *   Free-form information (treated as opaque by Airavata and simply passed to resource).
+   * *
+   * * labeledURI:
+   *   * Google Scholar, Web of Science, ACS, e.t.c
+   * *
+   * * timeZone:
+   * *  User’s preferred timezone - IANA Timezone Databases - http://www.iana.org/time-zones.
+   * *
+   * 
+   * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   * @throws \Airavata\API\Error\AuthorizationException
+   */
+  public function getUser(\Airavata\Model\Security\AuthzToken $authzToken, $username);
+  /**
+   * @param \Airavata\Model\Security\AuthzToken $authzToken
+   * @param int $offset
+   * @param int $limit
+   * @param string $search
+   * @return \Airavata\Model\User\UserProfile[]
+   * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   * @throws \Airavata\API\Error\AuthorizationException
+   */
+  public function getUsers(\Airavata\Model\Security\AuthzToken $authzToken, $offset, $limit, $search);
+  /**
+   * @param \Airavata\Model\Security\AuthzToken $authzToken
+   * @param string $username
    * @param string $newPassword
    * @return bool
    * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
@@ -88,6 +171,14 @@ interface IamAdminServicesIf {
   /**
    * @param \Airavata\Model\Security\AuthzToken $authzToken
    * @param string $username
+   * @return bool
+   * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   * @throws \Airavata\API\Error\AuthorizationException
+   */
+  public function deleteUser(\Airavata\Model\Security\AuthzToken $authzToken, $username);
+  /**
+   * @param \Airavata\Model\Security\AuthzToken $authzToken
+   * @param string $username
    * @param string $roleName
    * @return bool
    * @throws \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
@@ -114,45 +205,40 @@ interface IamAdminServicesIf {
 }
 
 
-class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServicesIf {
-  protected $input_ = null;
-  protected $output_ = null;
-
-  protected $seqid_ = 0;
-
+class IamAdminServicesClient extends \Airavata\Base\API\BaseAPIClient implements \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServicesIf {
   public function __construct($input, $output=null) {
-    $this->input_ = $input;
-    $this->output_ = $output ? $output : $input;
+    parent::__construct($input, $output);
   }
 
-  public function getAPIVersion(\Airavata\Model\Security\AuthzToken $authzToken)
+  public function setUpGateway(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\Workspace\Gateway $gateway)
   {
-    $this->send_getAPIVersion($authzToken);
-    return $this->recv_getAPIVersion();
+    $this->send_setUpGateway($authzToken, $gateway);
+    return $this->recv_setUpGateway();
   }
 
-  public function send_getAPIVersion(\Airavata\Model\Security\AuthzToken $authzToken)
+  public function send_setUpGateway(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\Workspace\Gateway $gateway)
   {
-    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getAPIVersion_args();
+    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_setUpGateway_args();
     $args->authzToken = $authzToken;
+    $args->gateway = $gateway;
     $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
     if ($bin_accel)
     {
-      thrift_protocol_write_binary($this->output_, 'getAPIVersion', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+      thrift_protocol_write_binary($this->output_, 'setUpGateway', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
     }
     else
     {
-      $this->output_->writeMessageBegin('getAPIVersion', TMessageType::CALL, $this->seqid_);
+      $this->output_->writeMessageBegin('setUpGateway', TMessageType::CALL, $this->seqid_);
       $args->write($this->output_);
       $this->output_->writeMessageEnd();
       $this->output_->getTransport()->flush();
     }
   }
 
-  public function recv_getAPIVersion()
+  public function recv_setUpGateway()
   {
     $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
-    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getAPIVersion_result', $this->input_->isStrictRead());
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_setUpGateway_result', $this->input_->isStrictRead());
     else
     {
       $rseqid = 0;
@@ -166,7 +252,7 @@ class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI
         $this->input_->readMessageEnd();
         throw $x;
       }
-      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getAPIVersion_result();
+      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_setUpGateway_result();
       $result->read($this->input_);
       $this->input_->readMessageEnd();
     }
@@ -179,38 +265,38 @@ class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI
     if ($result->ae !== null) {
       throw $result->ae;
     }
-    throw new \Exception("getAPIVersion failed: unknown result");
+    throw new \Exception("setUpGateway failed: unknown result");
   }
 
-  public function setUpGateway(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\Workspace\Gateway $gateway)
+  public function isUsernameAvailable(\Airavata\Model\Security\AuthzToken $authzToken, $username)
   {
-    $this->send_setUpGateway($authzToken, $gateway);
-    return $this->recv_setUpGateway();
+    $this->send_isUsernameAvailable($authzToken, $username);
+    return $this->recv_isUsernameAvailable();
   }
 
-  public function send_setUpGateway(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\Workspace\Gateway $gateway)
+  public function send_isUsernameAvailable(\Airavata\Model\Security\AuthzToken $authzToken, $username)
   {
-    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_setUpGateway_args();
+    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_isUsernameAvailable_args();
     $args->authzToken = $authzToken;
-    $args->gateway = $gateway;
+    $args->username = $username;
     $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
     if ($bin_accel)
     {
-      thrift_protocol_write_binary($this->output_, 'setUpGateway', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+      thrift_protocol_write_binary($this->output_, 'isUsernameAvailable', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
     }
     else
     {
-      $this->output_->writeMessageBegin('setUpGateway', TMessageType::CALL, $this->seqid_);
+      $this->output_->writeMessageBegin('isUsernameAvailable', TMessageType::CALL, $this->seqid_);
       $args->write($this->output_);
       $this->output_->writeMessageEnd();
       $this->output_->getTransport()->flush();
     }
   }
 
-  public function recv_setUpGateway()
+  public function recv_isUsernameAvailable()
   {
     $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
-    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_setUpGateway_result', $this->input_->isStrictRead());
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_isUsernameAvailable_result', $this->input_->isStrictRead());
     else
     {
       $rseqid = 0;
@@ -224,7 +310,7 @@ class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI
         $this->input_->readMessageEnd();
         throw $x;
       }
-      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_setUpGateway_result();
+      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_isUsernameAvailable_result();
       $result->read($this->input_);
       $this->input_->readMessageEnd();
     }
@@ -237,7 +323,7 @@ class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI
     if ($result->ae !== null) {
       throw $result->ae;
     }
-    throw new \Exception("setUpGateway failed: unknown result");
+    throw new \Exception("isUsernameAvailable failed: unknown result");
   }
 
   public function registerUser(\Airavata\Model\Security\AuthzToken $authzToken, $username, $emailAddress, $firstName, $lastName, $newPassword)
@@ -418,6 +504,182 @@ class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI
     throw new \Exception("isUserEnabled failed: unknown result");
   }
 
+  public function isUserExist(\Airavata\Model\Security\AuthzToken $authzToken, $username)
+  {
+    $this->send_isUserExist($authzToken, $username);
+    return $this->recv_isUserExist();
+  }
+
+  public function send_isUserExist(\Airavata\Model\Security\AuthzToken $authzToken, $username)
+  {
+    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_isUserExist_args();
+    $args->authzToken = $authzToken;
+    $args->username = $username;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'isUserExist', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('isUserExist', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_isUserExist()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_isUserExist_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_isUserExist_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->Idse !== null) {
+      throw $result->Idse;
+    }
+    if ($result->ae !== null) {
+      throw $result->ae;
+    }
+    throw new \Exception("isUserExist failed: unknown result");
+  }
+
+  public function getUser(\Airavata\Model\Security\AuthzToken $authzToken, $username)
+  {
+    $this->send_getUser($authzToken, $username);
+    return $this->recv_getUser();
+  }
+
+  public function send_getUser(\Airavata\Model\Security\AuthzToken $authzToken, $username)
+  {
+    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getUser_args();
+    $args->authzToken = $authzToken;
+    $args->username = $username;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getUser', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getUser', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getUser()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getUser_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getUser_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->Idse !== null) {
+      throw $result->Idse;
+    }
+    if ($result->ae !== null) {
+      throw $result->ae;
+    }
+    throw new \Exception("getUser failed: unknown result");
+  }
+
+  public function getUsers(\Airavata\Model\Security\AuthzToken $authzToken, $offset, $limit, $search)
+  {
+    $this->send_getUsers($authzToken, $offset, $limit, $search);
+    return $this->recv_getUsers();
+  }
+
+  public function send_getUsers(\Airavata\Model\Security\AuthzToken $authzToken, $offset, $limit, $search)
+  {
+    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getUsers_args();
+    $args->authzToken = $authzToken;
+    $args->offset = $offset;
+    $args->limit = $limit;
+    $args->search = $search;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getUsers', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getUsers', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getUsers()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getUsers_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_getUsers_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->Idse !== null) {
+      throw $result->Idse;
+    }
+    if ($result->ae !== null) {
+      throw $result->ae;
+    }
+    throw new \Exception("getUsers failed: unknown result");
+  }
+
   public function resetUserPassword(\Airavata\Model\Security\AuthzToken $authzToken, $username, $newPassword)
   {
     $this->send_resetUserPassword($authzToken, $username, $newPassword);
@@ -591,6 +853,64 @@ class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI
     return;
   }
 
+  public function deleteUser(\Airavata\Model\Security\AuthzToken $authzToken, $username)
+  {
+    $this->send_deleteUser($authzToken, $username);
+    return $this->recv_deleteUser();
+  }
+
+  public function send_deleteUser(\Airavata\Model\Security\AuthzToken $authzToken, $username)
+  {
+    $args = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_deleteUser_args();
+    $args->authzToken = $authzToken;
+    $args->username = $username;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'deleteUser', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('deleteUser', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_deleteUser()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_deleteUser_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\Service\Iam\Admin\Services\CPI\IamAdminServices_deleteUser_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->Idse !== null) {
+      throw $result->Idse;
+    }
+    if ($result->ae !== null) {
+      throw $result->ae;
+    }
+    throw new \Exception("deleteUser failed: unknown result");
+  }
+
   public function addRoleToUser(\Airavata\Model\Security\AuthzToken $authzToken, $username, $roleName)
   {
     $this->send_addRoleToUser($authzToken, $username, $roleName);
@@ -772,13 +1092,17 @@ class IamAdminServicesClient implements \Airavata\Service\Iam\Admin\Services\CPI
 
 // HELPER FUNCTIONS AND STRUCTURES
 
-class IamAdminServices_getAPIVersion_args {
+class IamAdminServices_setUpGateway_args {
   static $_TSPEC;
 
   /**
    * @var \Airavata\Model\Security\AuthzToken
    */
   public $authzToken = null;
+  /**
+   * @var \Airavata\Model\Workspace\Gateway
+   */
+  public $gateway = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -788,17 +1112,810 @@ class IamAdminServices_getAPIVersion_args {
           'type' => TType::STRUCT,
           'class' => '\Airavata\Model\Security\AuthzToken',
           ),
-        );
-    }
-    if (is_array($vals)) {
+        2 => array(
+          'var' => 'gateway',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Gateway',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['authzToken'])) {
+        $this->authzToken = $vals['authzToken'];
+      }
+      if (isset($vals['gateway'])) {
+        $this->gateway = $vals['gateway'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_setUpGateway_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->authzToken = new \Airavata\Model\Security\AuthzToken();
+            $xfer += $this->authzToken->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->gateway = new \Airavata\Model\Workspace\Gateway();
+            $xfer += $this->gateway->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_setUpGateway_args');
+    if ($this->authzToken !== null) {
+      if (!is_object($this->authzToken)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('authzToken', TType::STRUCT, 1);
+      $xfer += $this->authzToken->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gateway !== null) {
+      if (!is_object($this->gateway)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('gateway', TType::STRUCT, 2);
+      $xfer += $this->gateway->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class IamAdminServices_setUpGateway_result {
+  static $_TSPEC;
+
+  /**
+   * @var \Airavata\Model\Workspace\Gateway
+   */
+  public $success = null;
+  /**
+   * @var \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   */
+  public $Idse = null;
+  /**
+   * @var \Airavata\API\Error\AuthorizationException
+   */
+  public $ae = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Gateway',
+          ),
+        1 => array(
+          'var' => 'Idse',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException',
+          ),
+        2 => array(
+          'var' => 'ae',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AuthorizationException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['Idse'])) {
+        $this->Idse = $vals['Idse'];
+      }
+      if (isset($vals['ae'])) {
+        $this->ae = $vals['ae'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_setUpGateway_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRUCT) {
+            $this->success = new \Airavata\Model\Workspace\Gateway();
+            $xfer += $this->success->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->Idse = new \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException();
+            $xfer += $this->Idse->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ae = new \Airavata\API\Error\AuthorizationException();
+            $xfer += $this->ae->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_setUpGateway_result');
+    if ($this->success !== null) {
+      if (!is_object($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::STRUCT, 0);
+      $xfer += $this->success->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->Idse !== null) {
+      $xfer += $output->writeFieldBegin('Idse', TType::STRUCT, 1);
+      $xfer += $this->Idse->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ae !== null) {
+      $xfer += $output->writeFieldBegin('ae', TType::STRUCT, 2);
+      $xfer += $this->ae->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class IamAdminServices_isUsernameAvailable_args {
+  static $_TSPEC;
+
+  /**
+   * @var \Airavata\Model\Security\AuthzToken
+   */
+  public $authzToken = null;
+  /**
+   * @var string
+   */
+  public $username = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'authzToken',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Security\AuthzToken',
+          ),
+        2 => array(
+          'var' => 'username',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['authzToken'])) {
+        $this->authzToken = $vals['authzToken'];
+      }
+      if (isset($vals['username'])) {
+        $this->username = $vals['username'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_isUsernameAvailable_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->authzToken = new \Airavata\Model\Security\AuthzToken();
+            $xfer += $this->authzToken->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->username);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_isUsernameAvailable_args');
+    if ($this->authzToken !== null) {
+      if (!is_object($this->authzToken)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('authzToken', TType::STRUCT, 1);
+      $xfer += $this->authzToken->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->username !== null) {
+      $xfer += $output->writeFieldBegin('username', TType::STRING, 2);
+      $xfer += $output->writeString($this->username);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class IamAdminServices_isUsernameAvailable_result {
+  static $_TSPEC;
+
+  /**
+   * @var bool
+   */
+  public $success = null;
+  /**
+   * @var \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   */
+  public $Idse = null;
+  /**
+   * @var \Airavata\API\Error\AuthorizationException
+   */
+  public $ae = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::BOOL,
+          ),
+        1 => array(
+          'var' => 'Idse',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException',
+          ),
+        2 => array(
+          'var' => 'ae',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AuthorizationException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['Idse'])) {
+        $this->Idse = $vals['Idse'];
+      }
+      if (isset($vals['ae'])) {
+        $this->ae = $vals['ae'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_isUsernameAvailable_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->Idse = new \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException();
+            $xfer += $this->Idse->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ae = new \Airavata\API\Error\AuthorizationException();
+            $xfer += $this->ae->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_isUsernameAvailable_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
+      $xfer += $output->writeBool($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->Idse !== null) {
+      $xfer += $output->writeFieldBegin('Idse', TType::STRUCT, 1);
+      $xfer += $this->Idse->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ae !== null) {
+      $xfer += $output->writeFieldBegin('ae', TType::STRUCT, 2);
+      $xfer += $this->ae->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class IamAdminServices_registerUser_args {
+  static $_TSPEC;
+
+  /**
+   * @var \Airavata\Model\Security\AuthzToken
+   */
+  public $authzToken = null;
+  /**
+   * @var string
+   */
+  public $username = null;
+  /**
+   * @var string
+   */
+  public $emailAddress = null;
+  /**
+   * @var string
+   */
+  public $firstName = null;
+  /**
+   * @var string
+   */
+  public $lastName = null;
+  /**
+   * @var string
+   */
+  public $newPassword = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'authzToken',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Security\AuthzToken',
+          ),
+        2 => array(
+          'var' => 'username',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'emailAddress',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'firstName',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'lastName',
+          'type' => TType::STRING,
+          ),
+        6 => array(
+          'var' => 'newPassword',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['authzToken'])) {
+        $this->authzToken = $vals['authzToken'];
+      }
+      if (isset($vals['username'])) {
+        $this->username = $vals['username'];
+      }
+      if (isset($vals['emailAddress'])) {
+        $this->emailAddress = $vals['emailAddress'];
+      }
+      if (isset($vals['firstName'])) {
+        $this->firstName = $vals['firstName'];
+      }
+      if (isset($vals['lastName'])) {
+        $this->lastName = $vals['lastName'];
+      }
+      if (isset($vals['newPassword'])) {
+        $this->newPassword = $vals['newPassword'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_registerUser_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->authzToken = new \Airavata\Model\Security\AuthzToken();
+            $xfer += $this->authzToken->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->username);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->emailAddress);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->firstName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->lastName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->newPassword);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_registerUser_args');
+    if ($this->authzToken !== null) {
+      if (!is_object($this->authzToken)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('authzToken', TType::STRUCT, 1);
+      $xfer += $this->authzToken->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->username !== null) {
+      $xfer += $output->writeFieldBegin('username', TType::STRING, 2);
+      $xfer += $output->writeString($this->username);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->emailAddress !== null) {
+      $xfer += $output->writeFieldBegin('emailAddress', TType::STRING, 3);
+      $xfer += $output->writeString($this->emailAddress);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->firstName !== null) {
+      $xfer += $output->writeFieldBegin('firstName', TType::STRING, 4);
+      $xfer += $output->writeString($this->firstName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->lastName !== null) {
+      $xfer += $output->writeFieldBegin('lastName', TType::STRING, 5);
+      $xfer += $output->writeString($this->lastName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->newPassword !== null) {
+      $xfer += $output->writeFieldBegin('newPassword', TType::STRING, 6);
+      $xfer += $output->writeString($this->newPassword);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class IamAdminServices_registerUser_result {
+  static $_TSPEC;
+
+  /**
+   * @var bool
+   */
+  public $success = null;
+  /**
+   * @var \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   */
+  public $Idse = null;
+  /**
+   * @var \Airavata\API\Error\AuthorizationException
+   */
+  public $ae = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::BOOL,
+          ),
+        1 => array(
+          'var' => 'Idse',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException',
+          ),
+        2 => array(
+          'var' => 'ae',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AuthorizationException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['Idse'])) {
+        $this->Idse = $vals['Idse'];
+      }
+      if (isset($vals['ae'])) {
+        $this->ae = $vals['ae'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_registerUser_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->Idse = new \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException();
+            $xfer += $this->Idse->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ae = new \Airavata\API\Error\AuthorizationException();
+            $xfer += $this->ae->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_registerUser_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
+      $xfer += $output->writeBool($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->Idse !== null) {
+      $xfer += $output->writeFieldBegin('Idse', TType::STRUCT, 1);
+      $xfer += $this->Idse->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ae !== null) {
+      $xfer += $output->writeFieldBegin('ae', TType::STRUCT, 2);
+      $xfer += $this->ae->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class IamAdminServices_enableUser_args {
+  static $_TSPEC;
+
+  /**
+   * @var \Airavata\Model\Security\AuthzToken
+   */
+  public $authzToken = null;
+  /**
+   * @var string
+   */
+  public $username = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'authzToken',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Security\AuthzToken',
+          ),
+        2 => array(
+          'var' => 'username',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
       if (isset($vals['authzToken'])) {
         $this->authzToken = $vals['authzToken'];
       }
+      if (isset($vals['username'])) {
+        $this->username = $vals['username'];
+      }
     }
   }
 
   public function getName() {
-    return 'IamAdminServices_getAPIVersion_args';
+    return 'IamAdminServices_enableUser_args';
   }
 
   public function read($input)
@@ -824,6 +1941,13 @@ class IamAdminServices_getAPIVersion_args {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->username);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -836,7 +1960,7 @@ class IamAdminServices_getAPIVersion_args {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_getAPIVersion_args');
+    $xfer += $output->writeStructBegin('IamAdminServices_enableUser_args');
     if ($this->authzToken !== null) {
       if (!is_object($this->authzToken)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
@@ -845,6 +1969,11 @@ class IamAdminServices_getAPIVersion_args {
       $xfer += $this->authzToken->write($output);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->username !== null) {
+      $xfer += $output->writeFieldBegin('username', TType::STRING, 2);
+      $xfer += $output->writeString($this->username);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
@@ -852,11 +1981,11 @@ class IamAdminServices_getAPIVersion_args {
 
 }
 
-class IamAdminServices_getAPIVersion_result {
+class IamAdminServices_enableUser_result {
   static $_TSPEC;
 
   /**
-   * @var string
+   * @var bool
    */
   public $success = null;
   /**
@@ -873,7 +2002,7 @@ class IamAdminServices_getAPIVersion_result {
       self::$_TSPEC = array(
         0 => array(
           'var' => 'success',
-          'type' => TType::STRING,
+          'type' => TType::BOOL,
           ),
         1 => array(
           'var' => 'Idse',
@@ -901,7 +2030,7 @@ class IamAdminServices_getAPIVersion_result {
   }
 
   public function getName() {
-    return 'IamAdminServices_getAPIVersion_result';
+    return 'IamAdminServices_enableUser_result';
   }
 
   public function read($input)
@@ -920,8 +2049,8 @@ class IamAdminServices_getAPIVersion_result {
       switch ($fid)
       {
         case 0:
-          if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->success);
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->success);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -954,10 +2083,10 @@ class IamAdminServices_getAPIVersion_result {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_getAPIVersion_result');
+    $xfer += $output->writeStructBegin('IamAdminServices_enableUser_result');
     if ($this->success !== null) {
-      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
-      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
+      $xfer += $output->writeBool($this->success);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->Idse !== null) {
@@ -977,7 +2106,7 @@ class IamAdminServices_getAPIVersion_result {
 
 }
 
-class IamAdminServices_setUpGateway_args {
+class IamAdminServices_isUserEnabled_args {
   static $_TSPEC;
 
   /**
@@ -985,9 +2114,9 @@ class IamAdminServices_setUpGateway_args {
    */
   public $authzToken = null;
   /**
-   * @var \Airavata\Model\Workspace\Gateway
+   * @var string
    */
-  public $gateway = null;
+  public $username = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -998,9 +2127,8 @@ class IamAdminServices_setUpGateway_args {
           'class' => '\Airavata\Model\Security\AuthzToken',
           ),
         2 => array(
-          'var' => 'gateway',
-          'type' => TType::STRUCT,
-          'class' => '\Airavata\Model\Workspace\Gateway',
+          'var' => 'username',
+          'type' => TType::STRING,
           ),
         );
     }
@@ -1008,14 +2136,14 @@ class IamAdminServices_setUpGateway_args {
       if (isset($vals['authzToken'])) {
         $this->authzToken = $vals['authzToken'];
       }
-      if (isset($vals['gateway'])) {
-        $this->gateway = $vals['gateway'];
+      if (isset($vals['username'])) {
+        $this->username = $vals['username'];
       }
     }
   }
 
   public function getName() {
-    return 'IamAdminServices_setUpGateway_args';
+    return 'IamAdminServices_isUserEnabled_args';
   }
 
   public function read($input)
@@ -1042,9 +2170,8 @@ class IamAdminServices_setUpGateway_args {
           }
           break;
         case 2:
-          if ($ftype == TType::STRUCT) {
-            $this->gateway = new \Airavata\Model\Workspace\Gateway();
-            $xfer += $this->gateway->read($input);
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->username);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -1061,7 +2188,7 @@ class IamAdminServices_setUpGateway_args {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_setUpGateway_args');
+    $xfer += $output->writeStructBegin('IamAdminServices_isUserEnabled_args');
     if ($this->authzToken !== null) {
       if (!is_object($this->authzToken)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
@@ -1070,12 +2197,9 @@ class IamAdminServices_setUpGateway_args {
       $xfer += $this->authzToken->write($output);
       $xfer += $output->writeFieldEnd();
     }
-    if ($this->gateway !== null) {
-      if (!is_object($this->gateway)) {
-        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
-      }
-      $xfer += $output->writeFieldBegin('gateway', TType::STRUCT, 2);
-      $xfer += $this->gateway->write($output);
+    if ($this->username !== null) {
+      $xfer += $output->writeFieldBegin('username', TType::STRING, 2);
+      $xfer += $output->writeString($this->username);
       $xfer += $output->writeFieldEnd();
     }
     $xfer += $output->writeFieldStop();
@@ -1085,11 +2209,11 @@ class IamAdminServices_setUpGateway_args {
 
 }
 
-class IamAdminServices_setUpGateway_result {
+class IamAdminServices_isUserEnabled_result {
   static $_TSPEC;
 
   /**
-   * @var \Airavata\Model\Workspace\Gateway
+   * @var bool
    */
   public $success = null;
   /**
@@ -1106,8 +2230,7 @@ class IamAdminServices_setUpGateway_result {
       self::$_TSPEC = array(
         0 => array(
           'var' => 'success',
-          'type' => TType::STRUCT,
-          'class' => '\Airavata\Model\Workspace\Gateway',
+          'type' => TType::BOOL,
           ),
         1 => array(
           'var' => 'Idse',
@@ -1135,7 +2258,7 @@ class IamAdminServices_setUpGateway_result {
   }
 
   public function getName() {
-    return 'IamAdminServices_setUpGateway_result';
+    return 'IamAdminServices_isUserEnabled_result';
   }
 
   public function read($input)
@@ -1154,9 +2277,8 @@ class IamAdminServices_setUpGateway_result {
       switch ($fid)
       {
         case 0:
-          if ($ftype == TType::STRUCT) {
-            $this->success = new \Airavata\Model\Workspace\Gateway();
-            $xfer += $this->success->read($input);
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->success);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -1189,13 +2311,10 @@ class IamAdminServices_setUpGateway_result {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_setUpGateway_result');
+    $xfer += $output->writeStructBegin('IamAdminServices_isUserEnabled_result');
     if ($this->success !== null) {
-      if (!is_object($this->success)) {
-        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
-      }
-      $xfer += $output->writeFieldBegin('success', TType::STRUCT, 0);
-      $xfer += $this->success->write($output);
+      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
+      $xfer += $output->writeBool($this->success);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->Idse !== null) {
@@ -1215,7 +2334,7 @@ class IamAdminServices_setUpGateway_result {
 
 }
 
-class IamAdminServices_registerUser_args {
+class IamAdminServices_isUserExist_args {
   static $_TSPEC;
 
   /**
@@ -1226,22 +2345,6 @@ class IamAdminServices_registerUser_args {
    * @var string
    */
   public $username = null;
-  /**
-   * @var string
-   */
-  public $emailAddress = null;
-  /**
-   * @var string
-   */
-  public $firstName = null;
-  /**
-   * @var string
-   */
-  public $lastName = null;
-  /**
-   * @var string
-   */
-  public $newPassword = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -1255,22 +2358,6 @@ class IamAdminServices_registerUser_args {
           'var' => 'username',
           'type' => TType::STRING,
           ),
-        3 => array(
-          'var' => 'emailAddress',
-          'type' => TType::STRING,
-          ),
-        4 => array(
-          'var' => 'firstName',
-          'type' => TType::STRING,
-          ),
-        5 => array(
-          'var' => 'lastName',
-          'type' => TType::STRING,
-          ),
-        6 => array(
-          'var' => 'newPassword',
-          'type' => TType::STRING,
-          ),
         );
     }
     if (is_array($vals)) {
@@ -1280,23 +2367,11 @@ class IamAdminServices_registerUser_args {
       if (isset($vals['username'])) {
         $this->username = $vals['username'];
       }
-      if (isset($vals['emailAddress'])) {
-        $this->emailAddress = $vals['emailAddress'];
-      }
-      if (isset($vals['firstName'])) {
-        $this->firstName = $vals['firstName'];
-      }
-      if (isset($vals['lastName'])) {
-        $this->lastName = $vals['lastName'];
-      }
-      if (isset($vals['newPassword'])) {
-        $this->newPassword = $vals['newPassword'];
-      }
     }
   }
 
   public function getName() {
-    return 'IamAdminServices_registerUser_args';
+    return 'IamAdminServices_isUserExist_args';
   }
 
   public function read($input)
@@ -1329,34 +2404,6 @@ class IamAdminServices_registerUser_args {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 3:
-          if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->emailAddress);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        case 4:
-          if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->firstName);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        case 5:
-          if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->lastName);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        case 6:
-          if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->newPassword);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -1369,7 +2416,7 @@ class IamAdminServices_registerUser_args {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_registerUser_args');
+    $xfer += $output->writeStructBegin('IamAdminServices_isUserExist_args');
     if ($this->authzToken !== null) {
       if (!is_object($this->authzToken)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
@@ -1383,26 +2430,6 @@ class IamAdminServices_registerUser_args {
       $xfer += $output->writeString($this->username);
       $xfer += $output->writeFieldEnd();
     }
-    if ($this->emailAddress !== null) {
-      $xfer += $output->writeFieldBegin('emailAddress', TType::STRING, 3);
-      $xfer += $output->writeString($this->emailAddress);
-      $xfer += $output->writeFieldEnd();
-    }
-    if ($this->firstName !== null) {
-      $xfer += $output->writeFieldBegin('firstName', TType::STRING, 4);
-      $xfer += $output->writeString($this->firstName);
-      $xfer += $output->writeFieldEnd();
-    }
-    if ($this->lastName !== null) {
-      $xfer += $output->writeFieldBegin('lastName', TType::STRING, 5);
-      $xfer += $output->writeString($this->lastName);
-      $xfer += $output->writeFieldEnd();
-    }
-    if ($this->newPassword !== null) {
-      $xfer += $output->writeFieldBegin('newPassword', TType::STRING, 6);
-      $xfer += $output->writeString($this->newPassword);
-      $xfer += $output->writeFieldEnd();
-    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;
@@ -1410,7 +2437,7 @@ class IamAdminServices_registerUser_args {
 
 }
 
-class IamAdminServices_registerUser_result {
+class IamAdminServices_isUserExist_result {
   static $_TSPEC;
 
   /**
@@ -1459,7 +2486,7 @@ class IamAdminServices_registerUser_result {
   }
 
   public function getName() {
-    return 'IamAdminServices_registerUser_result';
+    return 'IamAdminServices_isUserExist_result';
   }
 
   public function read($input)
@@ -1512,7 +2539,7 @@ class IamAdminServices_registerUser_result {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_registerUser_result');
+    $xfer += $output->writeStructBegin('IamAdminServices_isUserExist_result');
     if ($this->success !== null) {
       $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
       $xfer += $output->writeBool($this->success);
@@ -1535,7 +2562,7 @@ class IamAdminServices_registerUser_result {
 
 }
 
-class IamAdminServices_enableUser_args {
+class IamAdminServices_getUser_args {
   static $_TSPEC;
 
   /**
@@ -1572,7 +2599,7 @@ class IamAdminServices_enableUser_args {
   }
 
   public function getName() {
-    return 'IamAdminServices_enableUser_args';
+    return 'IamAdminServices_getUser_args';
   }
 
   public function read($input)
@@ -1617,7 +2644,7 @@ class IamAdminServices_enableUser_args {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_enableUser_args');
+    $xfer += $output->writeStructBegin('IamAdminServices_getUser_args');
     if ($this->authzToken !== null) {
       if (!is_object($this->authzToken)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
@@ -1638,11 +2665,11 @@ class IamAdminServices_enableUser_args {
 
 }
 
-class IamAdminServices_enableUser_result {
+class IamAdminServices_getUser_result {
   static $_TSPEC;
 
   /**
-   * @var bool
+   * @var \Airavata\Model\User\UserProfile
    */
   public $success = null;
   /**
@@ -1659,7 +2686,8 @@ class IamAdminServices_enableUser_result {
       self::$_TSPEC = array(
         0 => array(
           'var' => 'success',
-          'type' => TType::BOOL,
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\User\UserProfile',
           ),
         1 => array(
           'var' => 'Idse',
@@ -1687,7 +2715,7 @@ class IamAdminServices_enableUser_result {
   }
 
   public function getName() {
-    return 'IamAdminServices_enableUser_result';
+    return 'IamAdminServices_getUser_result';
   }
 
   public function read($input)
@@ -1706,8 +2734,9 @@ class IamAdminServices_enableUser_result {
       switch ($fid)
       {
         case 0:
-          if ($ftype == TType::BOOL) {
-            $xfer += $input->readBool($this->success);
+          if ($ftype == TType::STRUCT) {
+            $this->success = new \Airavata\Model\User\UserProfile();
+            $xfer += $this->success->read($input);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -1740,10 +2769,13 @@ class IamAdminServices_enableUser_result {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_enableUser_result');
+    $xfer += $output->writeStructBegin('IamAdminServices_getUser_result');
     if ($this->success !== null) {
-      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
-      $xfer += $output->writeBool($this->success);
+      if (!is_object($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::STRUCT, 0);
+      $xfer += $this->success->write($output);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->Idse !== null) {
@@ -1763,7 +2795,7 @@ class IamAdminServices_enableUser_result {
 
 }
 
-class IamAdminServices_isUserEnabled_args {
+class IamAdminServices_getUsers_args {
   static $_TSPEC;
 
   /**
@@ -1771,9 +2803,17 @@ class IamAdminServices_isUserEnabled_args {
    */
   public $authzToken = null;
   /**
+   * @var int
+   */
+  public $offset = null;
+  /**
+   * @var int
+   */
+  public $limit = null;
+  /**
    * @var string
    */
-  public $username = null;
+  public $search = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -1784,7 +2824,15 @@ class IamAdminServices_isUserEnabled_args {
           'class' => '\Airavata\Model\Security\AuthzToken',
           ),
         2 => array(
-          'var' => 'username',
+          'var' => 'offset',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'limit',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'search',
           'type' => TType::STRING,
           ),
         );
@@ -1793,14 +2841,20 @@ class IamAdminServices_isUserEnabled_args {
       if (isset($vals['authzToken'])) {
         $this->authzToken = $vals['authzToken'];
       }
-      if (isset($vals['username'])) {
-        $this->username = $vals['username'];
+      if (isset($vals['offset'])) {
+        $this->offset = $vals['offset'];
+      }
+      if (isset($vals['limit'])) {
+        $this->limit = $vals['limit'];
+      }
+      if (isset($vals['search'])) {
+        $this->search = $vals['search'];
       }
     }
   }
 
   public function getName() {
-    return 'IamAdminServices_isUserEnabled_args';
+    return 'IamAdminServices_getUsers_args';
   }
 
   public function read($input)
@@ -1827,8 +2881,22 @@ class IamAdminServices_isUserEnabled_args {
           }
           break;
         case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->offset);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->limit);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
           if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->username);
+            $xfer += $input->readString($this->search);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -1845,7 +2913,7 @@ class IamAdminServices_isUserEnabled_args {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_isUserEnabled_args');
+    $xfer += $output->writeStructBegin('IamAdminServices_getUsers_args');
     if ($this->authzToken !== null) {
       if (!is_object($this->authzToken)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
@@ -1854,9 +2922,19 @@ class IamAdminServices_isUserEnabled_args {
       $xfer += $this->authzToken->write($output);
       $xfer += $output->writeFieldEnd();
     }
-    if ($this->username !== null) {
-      $xfer += $output->writeFieldBegin('username', TType::STRING, 2);
-      $xfer += $output->writeString($this->username);
+    if ($this->offset !== null) {
+      $xfer += $output->writeFieldBegin('offset', TType::I32, 2);
+      $xfer += $output->writeI32($this->offset);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->limit !== null) {
+      $xfer += $output->writeFieldBegin('limit', TType::I32, 3);
+      $xfer += $output->writeI32($this->limit);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->search !== null) {
+      $xfer += $output->writeFieldBegin('search', TType::STRING, 4);
+      $xfer += $output->writeString($this->search);
       $xfer += $output->writeFieldEnd();
     }
     $xfer += $output->writeFieldStop();
@@ -1866,11 +2944,11 @@ class IamAdminServices_isUserEnabled_args {
 
 }
 
-class IamAdminServices_isUserEnabled_result {
+class IamAdminServices_getUsers_result {
   static $_TSPEC;
 
   /**
-   * @var bool
+   * @var \Airavata\Model\User\UserProfile[]
    */
   public $success = null;
   /**
@@ -1887,7 +2965,12 @@ class IamAdminServices_isUserEnabled_result {
       self::$_TSPEC = array(
         0 => array(
           'var' => 'success',
-          'type' => TType::BOOL,
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\User\UserProfile',
+            ),
           ),
         1 => array(
           'var' => 'Idse',
@@ -1915,7 +2998,7 @@ class IamAdminServices_isUserEnabled_result {
   }
 
   public function getName() {
-    return 'IamAdminServices_isUserEnabled_result';
+    return 'IamAdminServices_getUsers_result';
   }
 
   public function read($input)
@@ -1934,8 +3017,19 @@ class IamAdminServices_isUserEnabled_result {
       switch ($fid)
       {
         case 0:
-          if ($ftype == TType::BOOL) {
-            $xfer += $input->readBool($this->success);
+          if ($ftype == TType::LST) {
+            $this->success = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $elem5 = new \Airavata\Model\User\UserProfile();
+              $xfer += $elem5->read($input);
+              $this->success []= $elem5;
+            }
+            $xfer += $input->readListEnd();
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -1968,10 +3062,22 @@ class IamAdminServices_isUserEnabled_result {
 
   public function write($output) {
     $xfer = 0;
-    $xfer += $output->writeStructBegin('IamAdminServices_isUserEnabled_result');
+    $xfer += $output->writeStructBegin('IamAdminServices_getUsers_result');
     if ($this->success !== null) {
-      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
-      $xfer += $output->writeBool($this->success);
+      if (!is_array($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::LST, 0);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->success));
+        {
+          foreach ($this->success as $iter6)
+          {
+            $xfer += $iter6->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
       $xfer += $output->writeFieldEnd();
     }
     if ($this->Idse !== null) {
@@ -2443,15 +3549,15 @@ class IamAdminServices_findUsers_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size0 = 0;
-            $_etype3 = 0;
-            $xfer += $input->readListBegin($_etype3, $_size0);
-            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            $_size7 = 0;
+            $_etype10 = 0;
+            $xfer += $input->readListBegin($_etype10, $_size7);
+            for ($_i11 = 0; $_i11 < $_size7; ++$_i11)
             {
-              $elem5 = null;
-              $elem5 = new \Airavata\Model\User\UserProfile();
-              $xfer += $elem5->read($input);
-              $this->success []= $elem5;
+              $elem12 = null;
+              $elem12 = new \Airavata\Model\User\UserProfile();
+              $xfer += $elem12->read($input);
+              $this->success []= $elem12;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -2495,9 +3601,9 @@ class IamAdminServices_findUsers_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter6)
+          foreach ($this->success as $iter13)
           {
-            $xfer += $iter6->write($output);
+            $xfer += $iter13->write($output);
           }
         }
         $output->writeListEnd();
@@ -2731,6 +3837,234 @@ class IamAdminServices_updateUserProfile_result {
 
 }
 
+class IamAdminServices_deleteUser_args {
+  static $_TSPEC;
+
+  /**
+   * @var \Airavata\Model\Security\AuthzToken
+   */
+  public $authzToken = null;
+  /**
+   * @var string
+   */
+  public $username = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'authzToken',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Security\AuthzToken',
+          ),
+        2 => array(
+          'var' => 'username',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['authzToken'])) {
+        $this->authzToken = $vals['authzToken'];
+      }
+      if (isset($vals['username'])) {
+        $this->username = $vals['username'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_deleteUser_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->authzToken = new \Airavata\Model\Security\AuthzToken();
+            $xfer += $this->authzToken->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->username);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_deleteUser_args');
+    if ($this->authzToken !== null) {
+      if (!is_object($this->authzToken)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('authzToken', TType::STRUCT, 1);
+      $xfer += $this->authzToken->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->username !== null) {
+      $xfer += $output->writeFieldBegin('username', TType::STRING, 2);
+      $xfer += $output->writeString($this->username);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class IamAdminServices_deleteUser_result {
+  static $_TSPEC;
+
+  /**
+   * @var bool
+   */
+  public $success = null;
+  /**
+   * @var \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException
+   */
+  public $Idse = null;
+  /**
+   * @var \Airavata\API\Error\AuthorizationException
+   */
+  public $ae = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::BOOL,
+          ),
+        1 => array(
+          'var' => 'Idse',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException',
+          ),
+        2 => array(
+          'var' => 'ae',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AuthorizationException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['Idse'])) {
+        $this->Idse = $vals['Idse'];
+      }
+      if (isset($vals['ae'])) {
+        $this->ae = $vals['ae'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'IamAdminServices_deleteUser_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->Idse = new \Airavata\Service\Iam\Admin\Services\CPI\Error\IamAdminServicesException();
+            $xfer += $this->Idse->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ae = new \Airavata\API\Error\AuthorizationException();
+            $xfer += $this->ae->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('IamAdminServices_deleteUser_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
+      $xfer += $output->writeBool($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->Idse !== null) {
+      $xfer += $output->writeFieldBegin('Idse', TType::STRUCT, 1);
+      $xfer += $this->Idse->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ae !== null) {
+      $xfer += $output->writeFieldBegin('ae', TType::STRUCT, 2);
+      $xfer += $this->ae->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
 class IamAdminServices_addRoleToUser_args {
   static $_TSPEC;
 
@@ -3411,15 +4745,15 @@ class IamAdminServices_getUsersWithRole_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size7 = 0;
-            $_etype10 = 0;
-            $xfer += $input->readListBegin($_etype10, $_size7);
-            for ($_i11 = 0; $_i11 < $_size7; ++$_i11)
+            $_size14 = 0;
+            $_etype17 = 0;
+            $xfer += $input->readListBegin($_etype17, $_size14);
+            for ($_i18 = 0; $_i18 < $_size14; ++$_i18)
             {
-              $elem12 = null;
-              $elem12 = new \Airavata\Model\User\UserProfile();
-              $xfer += $elem12->read($input);
-              $this->success []= $elem12;
+              $elem19 = null;
+              $elem19 = new \Airavata\Model\User\UserProfile();
+              $xfer += $elem19->read($input);
+              $this->success []= $elem19;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3463,9 +4797,9 @@ class IamAdminServices_getUsersWithRole_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter13)
+          foreach ($this->success as $iter20)
           {
-            $xfer += $iter13->write($output);
+            $xfer += $iter20->write($output);
           }
         }
         $output->writeListEnd();
diff --git a/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/Types.php b/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/Types.php
index 54391ec..6290b8c 100644
--- a/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/Types.php
+++ b/app/libraries/Airavata/Service/Iam/Admin/Services/CPI/Types.php
@@ -22,7 +22,7 @@ final class Constant extends \Thrift\Type\TConstant {
   static protected $IAM_ADMIN_SERVICES_CPI_NAME;
 
   static protected function init_IAM_ADMIN_SERVICES_CPI_VERSION() {
-    return "0.17";
+    return "0.18.0";
   }
 
   static protected function init_IAM_ADMIN_SERVICES_CPI_NAME() {
diff --git a/app/libraries/Airavata/Service/Profile/Groupmanager/CPI/Types.php b/app/libraries/Airavata/Service/Profile/Groupmanager/CPI/Types.php
index b49f4a3..68ee023 100644
--- a/app/libraries/Airavata/Service/Profile/Groupmanager/CPI/Types.php
+++ b/app/libraries/Airavata/Service/Profile/Groupmanager/CPI/Types.php
@@ -22,7 +22,7 @@ final class Constant extends \Thrift\Type\TConstant {
   static protected $GROUP_MANAGER_CPI_NAME;
 
   static protected function init_GROUP_MANAGER_CPI_VERSION() {
-    return "0.17";
+    return "0.18.0";
   }
 
   static protected function init_GROUP_MANAGER_CPI_NAME() {
diff --git a/app/libraries/Airavata/Service/Profile/Tenant/CPI/TenantProfileService.php b/app/libraries/Airavata/Service/Profile/Tenant/CPI/TenantProfileService.php
index 633771e..da935f8 100644
--- a/app/libraries/Airavata/Service/Profile/Tenant/CPI/TenantProfileService.php
+++ b/app/libraries/Airavata/Service/Profile/Tenant/CPI/TenantProfileService.php
@@ -16,14 +16,7 @@ use Thrift\Protocol\TBinaryProtocolAccelerated;
 use Thrift\Exception\TApplicationException;
 
 
-interface TenantProfileServiceIf {
-  /**
-   * @param \Airavata\Model\Security\AuthzToken $authzToken
-   * @return string
-   * @throws \Airavata\Service\Profile\Tenant\CPI\Error\TenantProfileServiceException
-   * @throws \Airavata\API\Error\AuthorizationException
-   */
-  public function getAPIVersion(\Airavata\Model\Security\AuthzToken $authzToken);
+interface TenantProfileServiceIf extends \Airavata\Base\API\BaseAPIIf {
   /**
    * Return the airavataInternalGatewayId assigned to given gateway.
    * 
@@ -85,72 +78,9 @@ interface TenantProfileServiceIf {
 }
 
 
-class TenantProfileServiceClient implements \Airavata\Service\Profile\Tenant\CPI\TenantProfileServiceIf {
-  protected $input_ = null;
-  protected $output_ = null;
-
-  protected $seqid_ = 0;
-
+class TenantProfileServiceClient extends \Airavata\Base\API\BaseAPIClient implements \Airavata\Service\Profile\Tenant\CPI\TenantProfileServiceIf {
   public function __construct($input, $output=null) {
-    $this->input_ = $input;
-    $this->output_ = $output ? $output : $input;
-  }
-
-  public function getAPIVersion(\Airavata\Model\Security\AuthzToken $authzToken)
-  {
-    $this->send_getAPIVersion($authzToken);
-    return $this->recv_getAPIVersion();
-  }
-
-  public function send_getAPIVersion(\Airavata\Model\Security\AuthzToken $authzToken)
-  {
-    $args = new \Airavata\Service\Profile\Tenant\CPI\TenantProfileService_getAPIVersion_args();
-    $args->authzToken = $authzToken;
-    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
-    if ($bin_accel)
-    {
-      thrift_protocol_write_binary($this->output_, 'getAPIVersion', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
-    }
-    else
-    {
-      $this->output_->writeMessageBegin('getAPIVersion', TMessageType::CALL, $this->seqid_);
-      $args->write($this->output_);
-      $this->output_->writeMessageEnd();
-      $this->output_->getTransport()->flush();
-    }
-  }
-
-  public function recv_getAPIVersion()
-  {
-    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
-    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Profile\Tenant\CPI\TenantProfileService_getAPIVersion_result', $this->input_->isStrictRead());
-    else
-    {
-      $rseqid = 0;
-      $fname = null;
-      $mtype = 0;
-
-      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
-      if ($mtype == TMessageType::EXCEPTION) {
-        $x = new TApplicationException();
-        $x->read($this->input_);
-        $this->input_->readMessageEnd();
-        throw $x;
-      }
-      $result = new \Airavata\Service\Profile\Tenant\CPI\TenantProfileService_getAPIVersion_result();
-      $result->read($this->input_);
-      $this->input_->readMessageEnd();
-    }
-    if ($result->success !== null) {
-      return $result->success;
-    }
-    if ($result->tpe !== null) {
-      throw $result->tpe;
-    }
-    if ($result->ae !== null) {
-      throw $result->ae;
-    }
-    throw new \Exception("getAPIVersion failed: unknown result");
+    parent::__construct($input, $output);
   }
 
   public function addGateway(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\Workspace\Gateway $gateway)
@@ -564,211 +494,6 @@ class TenantProfileServiceClient implements \Airavata\Service\Profile\Tenant\CPI
 
 // HELPER FUNCTIONS AND STRUCTURES
 
-class TenantProfileService_getAPIVersion_args {
-  static $_TSPEC;
-
-  /**
-   * @var \Airavata\Model\Security\AuthzToken
-   */
-  public $authzToken = null;
-
-  public function __construct($vals=null) {
-    if (!isset(self::$_TSPEC)) {
-      self::$_TSPEC = array(
-        1 => array(
-          'var' => 'authzToken',
-          'type' => TType::STRUCT,
-          'class' => '\Airavata\Model\Security\AuthzToken',
-          ),
-        );
-    }
-    if (is_array($vals)) {
-      if (isset($vals['authzToken'])) {
-        $this->authzToken = $vals['authzToken'];
-      }
-    }
-  }
-
-  public function getName() {
-    return 'TenantProfileService_getAPIVersion_args';
-  }
-
-  public function read($input)
-  {
-    $xfer = 0;
-    $fname = null;
-    $ftype = 0;
-    $fid = 0;
-    $xfer += $input->readStructBegin($fname);
-    while (true)
-    {
-      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
-      if ($ftype == TType::STOP) {
-        break;
-      }
-      switch ($fid)
-      {
-        case 1:
-          if ($ftype == TType::STRUCT) {
-            $this->authzToken = new \Airavata\Model\Security\AuthzToken();
-            $xfer += $this->authzToken->read($input);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        default:
-          $xfer += $input->skip($ftype);
-          break;
-      }
-      $xfer += $input->readFieldEnd();
-    }
-    $xfer += $input->readStructEnd();
-    return $xfer;
-  }
-
-  public function write($output) {
-    $xfer = 0;
-    $xfer += $output->writeStructBegin('TenantProfileService_getAPIVersion_args');
-    if ($this->authzToken !== null) {
-      if (!is_object($this->authzToken)) {
-        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
-      }
-      $xfer += $output->writeFieldBegin('authzToken', TType::STRUCT, 1);
-      $xfer += $this->authzToken->write($output);
-      $xfer += $output->writeFieldEnd();
-    }
-    $xfer += $output->writeFieldStop();
-    $xfer += $output->writeStructEnd();
-    return $xfer;
-  }
-
-}
-
-class TenantProfileService_getAPIVersion_result {
-  static $_TSPEC;
-
-  /**
-   * @var string
-   */
-  public $success = null;
-  /**
-   * @var \Airavata\Service\Profile\Tenant\CPI\Error\TenantProfileServiceException
-   */
-  public $tpe = null;
-  /**
-   * @var \Airavata\API\Error\AuthorizationException
-   */
-  public $ae = null;
-
-  public function __construct($vals=null) {
-    if (!isset(self::$_TSPEC)) {
-      self::$_TSPEC = array(
-        0 => array(
-          'var' => 'success',
-          'type' => TType::STRING,
-          ),
-        1 => array(
-          'var' => 'tpe',
-          'type' => TType::STRUCT,
-          'class' => '\Airavata\Service\Profile\Tenant\CPI\Error\TenantProfileServiceException',
-          ),
-        2 => array(
-          'var' => 'ae',
-          'type' => TType::STRUCT,
-          'class' => '\Airavata\API\Error\AuthorizationException',
-          ),
-        );
-    }
-    if (is_array($vals)) {
-      if (isset($vals['success'])) {
-        $this->success = $vals['success'];
-      }
-      if (isset($vals['tpe'])) {
-        $this->tpe = $vals['tpe'];
-      }
-      if (isset($vals['ae'])) {
-        $this->ae = $vals['ae'];
-      }
-    }
-  }
-
-  public function getName() {
-    return 'TenantProfileService_getAPIVersion_result';
-  }
-
-  public function read($input)
-  {
-    $xfer = 0;
-    $fname = null;
-    $ftype = 0;
-    $fid = 0;
-    $xfer += $input->readStructBegin($fname);
-    while (true)
-    {
-      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
-      if ($ftype == TType::STOP) {
-        break;
-      }
-      switch ($fid)
-      {
-        case 0:
-          if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->success);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        case 1:
-          if ($ftype == TType::STRUCT) {
-            $this->tpe = new \Airavata\Service\Profile\Tenant\CPI\Error\TenantProfileServiceException();
-            $xfer += $this->tpe->read($input);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        case 2:
-          if ($ftype == TType::STRUCT) {
-            $this->ae = new \Airavata\API\Error\AuthorizationException();
-            $xfer += $this->ae->read($input);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        default:
-          $xfer += $input->skip($ftype);
-          break;
-      }
-      $xfer += $input->readFieldEnd();
-    }
-    $xfer += $input->readStructEnd();
-    return $xfer;
-  }
-
-  public function write($output) {
-    $xfer = 0;
-    $xfer += $output->writeStructBegin('TenantProfileService_getAPIVersion_result');
-    if ($this->success !== null) {
-      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
-      $xfer += $output->writeString($this->success);
-      $xfer += $output->writeFieldEnd();
-    }
-    if ($this->tpe !== null) {
-      $xfer += $output->writeFieldBegin('tpe', TType::STRUCT, 1);
-      $xfer += $this->tpe->write($output);
-      $xfer += $output->writeFieldEnd();
-    }
-    if ($this->ae !== null) {
-      $xfer += $output->writeFieldBegin('ae', TType::STRUCT, 2);
-      $xfer += $this->ae->write($output);
-      $xfer += $output->writeFieldEnd();
-    }
-    $xfer += $output->writeFieldStop();
-    $xfer += $output->writeStructEnd();
-    return $xfer;
-  }
-
-}
-
 class TenantProfileService_addGateway_args {
   static $_TSPEC;
 
diff --git a/app/libraries/Airavata/Service/Profile/Tenant/CPI/Types.php b/app/libraries/Airavata/Service/Profile/Tenant/CPI/Types.php
index 41891f4..ab67b5d 100644
--- a/app/libraries/Airavata/Service/Profile/Tenant/CPI/Types.php
+++ b/app/libraries/Airavata/Service/Profile/Tenant/CPI/Types.php
@@ -22,7 +22,7 @@ final class Constant extends \Thrift\Type\TConstant {
   static protected $TENANT_PROFILE_CPI_NAME;
 
   static protected function init_TENANT_PROFILE_CPI_VERSION() {
-    return "0.17";
+    return "0.18.0";
   }
 
   static protected function init_TENANT_PROFILE_CPI_NAME() {
diff --git a/app/libraries/Airavata/Service/Profile/User/CPI/Types.php b/app/libraries/Airavata/Service/Profile/User/CPI/Types.php
index bceeb65..6ff1b16 100644
--- a/app/libraries/Airavata/Service/Profile/User/CPI/Types.php
+++ b/app/libraries/Airavata/Service/Profile/User/CPI/Types.php
@@ -22,7 +22,7 @@ final class Constant extends \Thrift\Type\TConstant {
   static protected $USER_PROFILE_CPI_NAME;
 
   static protected function init_USER_PROFILE_CPI_VERSION() {
-    return "0.17";
+    return "0.18.0";
   }
 
   static protected function init_USER_PROFILE_CPI_NAME() {
diff --git a/app/libraries/Airavata/Service/Profile/User/CPI/UserProfileService.php b/app/libraries/Airavata/Service/Profile/User/CPI/UserProfileService.php
index 0efa67e..ca995b9 100644
--- a/app/libraries/Airavata/Service/Profile/User/CPI/UserProfileService.php
+++ b/app/libraries/Airavata/Service/Profile/User/CPI/UserProfileService.php
@@ -16,8 +16,26 @@ use Thrift\Protocol\TBinaryProtocolAccelerated;
 use Thrift\Exception\TApplicationException;
 
 
-interface UserProfileServiceIf {
+interface UserProfileServiceIf extends \Airavata\Base\API\BaseAPIIf {
   /**
+   * @return string
+   * @throws \Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException
+   */
+  public function getAPIVersion();
+  /**
+   * Create an initial UserProfile based on information in the IAM service for this user.
+   * 
+   * @param \Airavata\Model\Security\AuthzToken $authzToken
+   * @return string
+   * @throws \Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException
+   * @throws \Airavata\API\Error\AuthorizationException
+   */
+  public function initializeUserProfile(\Airavata\Model\Security\AuthzToken $authzToken);
+  /**
+   * This method is deprecated and will be removed in future versions of Airavata. Please use
+   * the initializeUserProfile method which fetches the information about the user profile from
+   * IAM service - @Deprecated
+   * 
    * @param \Airavata\Model\Security\AuthzToken $authzToken
    * @param \Airavata\Model\User\UserProfile $userProfile
    * @return string
@@ -129,15 +147,119 @@ interface UserProfileServiceIf {
 }
 
 
-class UserProfileServiceClient implements \Airavata\Service\Profile\User\CPI\UserProfileServiceIf {
-  protected $input_ = null;
-  protected $output_ = null;
+class UserProfileServiceClient extends \Airavata\Base\API\BaseAPIClient implements \Airavata\Service\Profile\User\CPI\UserProfileServiceIf {
+  public function __construct($input, $output=null) {
+    parent::__construct($input, $output);
+  }
 
-  protected $seqid_ = 0;
+  public function getAPIVersion()
+  {
+    $this->send_getAPIVersion();
+    return $this->recv_getAPIVersion();
+  }
 
-  public function __construct($input, $output=null) {
-    $this->input_ = $input;
-    $this->output_ = $output ? $output : $input;
+  public function send_getAPIVersion()
+  {
+    $args = new \Airavata\Service\Profile\User\CPI\UserProfileService_getAPIVersion_args();
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAPIVersion', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAPIVersion', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAPIVersion()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Profile\User\CPI\UserProfileService_getAPIVersion_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\Service\Profile\User\CPI\UserProfileService_getAPIVersion_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->upe !== null) {
+      throw $result->upe;
+    }
+    throw new \Exception("getAPIVersion failed: unknown result");
+  }
+
+  public function initializeUserProfile(\Airavata\Model\Security\AuthzToken $authzToken)
+  {
+    $this->send_initializeUserProfile($authzToken);
+    return $this->recv_initializeUserProfile();
+  }
+
+  public function send_initializeUserProfile(\Airavata\Model\Security\AuthzToken $authzToken)
+  {
+    $args = new \Airavata\Service\Profile\User\CPI\UserProfileService_initializeUserProfile_args();
+    $args->authzToken = $authzToken;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'initializeUserProfile', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('initializeUserProfile', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_initializeUserProfile()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\Service\Profile\User\CPI\UserProfileService_initializeUserProfile_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\Service\Profile\User\CPI\UserProfileService_initializeUserProfile_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->upe !== null) {
+      throw $result->upe;
+    }
+    if ($result->ae !== null) {
+      throw $result->ae;
+    }
+    throw new \Exception("initializeUserProfile failed: unknown result");
   }
 
   public function addUserProfile(\Airavata\Model\Security\AuthzToken $authzToken, \Airavata\Model\User\UserProfile $userProfile)
@@ -498,6 +620,361 @@ class UserProfileServiceClient implements \Airavata\Service\Profile\User\CPI\Use
 
 // HELPER FUNCTIONS AND STRUCTURES
 
+class UserProfileService_getAPIVersion_args {
+  static $_TSPEC;
+
+
+  public function __construct() {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        );
+    }
+  }
+
+  public function getName() {
+    return 'UserProfileService_getAPIVersion_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('UserProfileService_getAPIVersion_args');
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class UserProfileService_getAPIVersion_result {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $success = null;
+  /**
+   * @var \Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException
+   */
+  public $upe = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRING,
+          ),
+        1 => array(
+          'var' => 'upe',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['upe'])) {
+        $this->upe = $vals['upe'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'UserProfileService_getAPIVersion_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->upe = new \Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException();
+            $xfer += $this->upe->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('UserProfileService_getAPIVersion_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
+      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->upe !== null) {
+      $xfer += $output->writeFieldBegin('upe', TType::STRUCT, 1);
+      $xfer += $this->upe->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class UserProfileService_initializeUserProfile_args {
+  static $_TSPEC;
+
+  /**
+   * @var \Airavata\Model\Security\AuthzToken
+   */
+  public $authzToken = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'authzToken',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Security\AuthzToken',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['authzToken'])) {
+        $this->authzToken = $vals['authzToken'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'UserProfileService_initializeUserProfile_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->authzToken = new \Airavata\Model\Security\AuthzToken();
+            $xfer += $this->authzToken->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('UserProfileService_initializeUserProfile_args');
+    if ($this->authzToken !== null) {
+      if (!is_object($this->authzToken)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('authzToken', TType::STRUCT, 1);
+      $xfer += $this->authzToken->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class UserProfileService_initializeUserProfile_result {
+  static $_TSPEC;
+
+  /**
+   * @var string
+   */
+  public $success = null;
+  /**
+   * @var \Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException
+   */
+  public $upe = null;
+  /**
+   * @var \Airavata\API\Error\AuthorizationException
+   */
+  public $ae = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRING,
+          ),
+        1 => array(
+          'var' => 'upe',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException',
+          ),
+        2 => array(
+          'var' => 'ae',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AuthorizationException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['upe'])) {
+        $this->upe = $vals['upe'];
+      }
+      if (isset($vals['ae'])) {
+        $this->ae = $vals['ae'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'UserProfileService_initializeUserProfile_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->upe = new \Airavata\Service\Profile\User\CPI\Error\UserProfileServiceException();
+            $xfer += $this->upe->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ae = new \Airavata\API\Error\AuthorizationException();
+            $xfer += $this->ae->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('UserProfileService_initializeUserProfile_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
+      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->upe !== null) {
+      $xfer += $output->writeFieldBegin('upe', TType::STRUCT, 1);
+      $xfer += $this->upe->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ae !== null) {
+      $xfer += $output->writeFieldBegin('ae', TType::STRUCT, 2);
+      $xfer += $this->ae->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
 class UserProfileService_addUserProfile_args {
   static $_TSPEC;