adding useremails to experiment and task models - AIRAVATA-1563

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

Branch: refs/heads/master
Commit: 7a6fbdb25530028c0f9c04e02c556ce4e65394d5
Parents: 92888e5
Author: Chathuri Wimalasena <[email protected]>
Authored: Wed Feb 4 12:16:59 2015 -0500
Committer: Chathuri Wimalasena <[email protected]>
Committed: Wed Feb 4 12:16:59 2015 -0500

----------------------------------------------------------------------
 .../lib/airavata/experimentModel_types.cpp      | 394 ++++++++------
 .../lib/airavata/experimentModel_types.h        |  64 ++-
 .../Model/Workspace/Experiment/Types.php        | 416 ++++++++++-----
 .../model/workspace/experiment/Experiment.java  | 524 ++++++++++++++-----
 .../workspace/experiment/ExperimentSummary.java |  36 +-
 .../model/workspace/experiment/TaskDetails.java | 362 ++++++++++---
 .../workspace/experiment/ValidationResults.java |  36 +-
 .../experiment/WorkflowNodeDetails.java         | 144 ++---
 .../experimentModel.thrift                      |  22 +-
 .../persistance/registry/jpa/ResourceType.java  |   1 +
 .../registry/jpa/impl/ExperimentRegistry.java   |  54 +-
 .../registry/jpa/model/Experiment.java          |  11 +-
 .../registry/jpa/model/Notification_Email.java  |  97 ++++
 .../registry/jpa/model/TaskDetail.java          |  10 +
 .../jpa/resources/AbstractResource.java         |   7 +
 .../jpa/resources/ExperimentResource.java       |  53 ++
 .../resources/NotificationEmailResource.java    | 125 +++++
 .../jpa/resources/TaskDetailResource.java       |  54 +-
 .../registry/jpa/resources/Utils.java           |  21 +
 .../jpa/utils/ThriftDataModelConversion.java    |  42 +-
 .../src/main/resources/META-INF/persistence.xml |   1 +
 .../src/main/resources/registry-derby.sql       |  15 +
 .../src/main/resources/registry-mysql.sql       |  13 +-
 .../src/test/resources/registry-derby.sql       |   9 +
 24 files changed, 1870 insertions(+), 641 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/7a6fbdb2/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
----------------------------------------------------------------------
diff --git 
a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
 
b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
index c9ed366..d6e6b07 100644
--- 
a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
+++ 
b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.cpp
@@ -1843,8 +1843,8 @@ void swap(DataTransferDetails &a, DataTransferDetails &b) 
{
   swap(a.__isset, b.__isset);
 }
 
-const char* TaskDetails::ascii_fingerprint = 
"6FF0ECF6FE53D283757211BADE659108";
-const uint8_t TaskDetails::binary_fingerprint[16] = 
{0x6F,0xF0,0xEC,0xF6,0xFE,0x53,0xD2,0x83,0x75,0x72,0x11,0xBA,0xDE,0x65,0x91,0x08};
+const char* TaskDetails::ascii_fingerprint = 
"6EAEEB62655ECD5CA7A24BFDE46F678C";
+const uint8_t TaskDetails::binary_fingerprint[16] = 
{0x6E,0xAE,0xEB,0x62,0x65,0x5E,0xCD,0x5C,0xA7,0xA2,0x4B,0xFD,0xE4,0x6F,0x67,0x8C};
 
 uint32_t TaskDetails::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -2039,6 +2039,34 @@ uint32_t 
TaskDetails::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
+      case 15:
+        if (ftype == ::apache::thrift::protocol::T_BOOL) {
+          xfer += iprot->readBool(this->enableEmailNotification);
+          this->__isset.enableEmailNotification = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 16:
+        if (ftype == ::apache::thrift::protocol::T_LIST) {
+          {
+            this->emailAddresses.clear();
+            uint32_t _size45;
+            ::apache::thrift::protocol::TType _etype48;
+            xfer += iprot->readListBegin(_etype48, _size45);
+            this->emailAddresses.resize(_size45);
+            uint32_t _i49;
+            for (_i49 = 0; _i49 < _size45; ++_i49)
+            {
+              xfer += iprot->readString(this->emailAddresses[_i49]);
+            }
+            xfer += iprot->readListEnd();
+          }
+          this->__isset.emailAddresses = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -2085,10 +2113,10 @@ uint32_t 
TaskDetails::write(::apache::thrift::protocol::TProtocol* oprot) const
     xfer += oprot->writeFieldBegin("applicationInputs", 
::apache::thrift::protocol::T_LIST, 6);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->applicationInputs.size()));
-      std::vector< 
::apache::airavata::model::appcatalog::appinterface::InputDataObjectType> 
::const_iterator _iter45;
-      for (_iter45 = this->applicationInputs.begin(); _iter45 != 
this->applicationInputs.end(); ++_iter45)
+      std::vector< 
::apache::airavata::model::appcatalog::appinterface::InputDataObjectType> 
::const_iterator _iter50;
+      for (_iter50 = this->applicationInputs.begin(); _iter50 != 
this->applicationInputs.end(); ++_iter50)
       {
-        xfer += (*_iter45).write(oprot);
+        xfer += (*_iter50).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2098,10 +2126,10 @@ uint32_t 
TaskDetails::write(::apache::thrift::protocol::TProtocol* oprot) const
     xfer += oprot->writeFieldBegin("applicationOutputs", 
::apache::thrift::protocol::T_LIST, 7);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->applicationOutputs.size()));
-      std::vector< 
::apache::airavata::model::appcatalog::appinterface::OutputDataObjectType> 
::const_iterator _iter46;
-      for (_iter46 = this->applicationOutputs.begin(); _iter46 != 
this->applicationOutputs.end(); ++_iter46)
+      std::vector< 
::apache::airavata::model::appcatalog::appinterface::OutputDataObjectType> 
::const_iterator _iter51;
+      for (_iter51 = this->applicationOutputs.begin(); _iter51 != 
this->applicationOutputs.end(); ++_iter51)
       {
-        xfer += (*_iter46).write(oprot);
+        xfer += (*_iter51).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2131,10 +2159,10 @@ uint32_t 
TaskDetails::write(::apache::thrift::protocol::TProtocol* oprot) const
     xfer += oprot->writeFieldBegin("jobDetailsList", 
::apache::thrift::protocol::T_LIST, 12);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->jobDetailsList.size()));
-      std::vector<JobDetails> ::const_iterator _iter47;
-      for (_iter47 = this->jobDetailsList.begin(); _iter47 != 
this->jobDetailsList.end(); ++_iter47)
+      std::vector<JobDetails> ::const_iterator _iter52;
+      for (_iter52 = this->jobDetailsList.begin(); _iter52 != 
this->jobDetailsList.end(); ++_iter52)
       {
-        xfer += (*_iter47).write(oprot);
+        xfer += (*_iter52).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2144,10 +2172,10 @@ uint32_t 
TaskDetails::write(::apache::thrift::protocol::TProtocol* oprot) const
     xfer += oprot->writeFieldBegin("dataTransferDetailsList", 
::apache::thrift::protocol::T_LIST, 13);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->dataTransferDetailsList.size()));
-      std::vector<DataTransferDetails> ::const_iterator _iter48;
-      for (_iter48 = this->dataTransferDetailsList.begin(); _iter48 != 
this->dataTransferDetailsList.end(); ++_iter48)
+      std::vector<DataTransferDetails> ::const_iterator _iter53;
+      for (_iter53 = this->dataTransferDetailsList.begin(); _iter53 != 
this->dataTransferDetailsList.end(); ++_iter53)
       {
-        xfer += (*_iter48).write(oprot);
+        xfer += (*_iter53).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2157,10 +2185,28 @@ uint32_t 
TaskDetails::write(::apache::thrift::protocol::TProtocol* oprot) const
     xfer += oprot->writeFieldBegin("errors", 
::apache::thrift::protocol::T_LIST, 14);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->errors.size()));
-      std::vector<ErrorDetails> ::const_iterator _iter49;
-      for (_iter49 = this->errors.begin(); _iter49 != this->errors.end(); 
++_iter49)
+      std::vector<ErrorDetails> ::const_iterator _iter54;
+      for (_iter54 = this->errors.begin(); _iter54 != this->errors.end(); 
++_iter54)
       {
-        xfer += (*_iter49).write(oprot);
+        xfer += (*_iter54).write(oprot);
+      }
+      xfer += oprot->writeListEnd();
+    }
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.enableEmailNotification) {
+    xfer += oprot->writeFieldBegin("enableEmailNotification", 
::apache::thrift::protocol::T_BOOL, 15);
+    xfer += oprot->writeBool(this->enableEmailNotification);
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.emailAddresses) {
+    xfer += oprot->writeFieldBegin("emailAddresses", 
::apache::thrift::protocol::T_LIST, 16);
+    {
+      xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, 
static_cast<uint32_t>(this->emailAddresses.size()));
+      std::vector<std::string> ::const_iterator _iter55;
+      for (_iter55 = this->emailAddresses.begin(); _iter55 != 
this->emailAddresses.end(); ++_iter55)
+      {
+        xfer += oprot->writeString((*_iter55));
       }
       xfer += oprot->writeListEnd();
     }
@@ -2187,11 +2233,13 @@ void swap(TaskDetails &a, TaskDetails &b) {
   swap(a.jobDetailsList, b.jobDetailsList);
   swap(a.dataTransferDetailsList, b.dataTransferDetailsList);
   swap(a.errors, b.errors);
+  swap(a.enableEmailNotification, b.enableEmailNotification);
+  swap(a.emailAddresses, b.emailAddresses);
   swap(a.__isset, b.__isset);
 }
 
-const char* WorkflowNodeDetails::ascii_fingerprint = 
"D2AF8FCCA5B9C08220AE508BA2D7FB06";
-const uint8_t WorkflowNodeDetails::binary_fingerprint[16] = 
{0xD2,0xAF,0x8F,0xCC,0xA5,0xB9,0xC0,0x82,0x20,0xAE,0x50,0x8B,0xA2,0xD7,0xFB,0x06};
+const char* WorkflowNodeDetails::ascii_fingerprint = 
"CDDA44A784FD60829B4F4EAA67D71C72";
+const uint8_t WorkflowNodeDetails::binary_fingerprint[16] = 
{0xCD,0xDA,0x44,0xA7,0x84,0xFD,0x60,0x82,0x9B,0x4F,0x4E,0xAA,0x67,0xD7,0x1C,0x72};
 
 uint32_t WorkflowNodeDetails::read(::apache::thrift::protocol::TProtocol* 
iprot) {
 
@@ -2242,9 +2290,9 @@ uint32_t 
WorkflowNodeDetails::read(::apache::thrift::protocol::TProtocol* iprot)
         break;
       case 4:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast50;
-          xfer += iprot->readI32(ecast50);
-          this->executionUnit = (ExecutionUnit::type)ecast50;
+          int32_t ecast56;
+          xfer += iprot->readI32(ecast56);
+          this->executionUnit = (ExecutionUnit::type)ecast56;
           isset_executionUnit = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -2262,14 +2310,14 @@ uint32_t 
WorkflowNodeDetails::read(::apache::thrift::protocol::TProtocol* iprot)
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->nodeInputs.clear();
-            uint32_t _size51;
-            ::apache::thrift::protocol::TType _etype54;
-            xfer += iprot->readListBegin(_etype54, _size51);
-            this->nodeInputs.resize(_size51);
-            uint32_t _i55;
-            for (_i55 = 0; _i55 < _size51; ++_i55)
+            uint32_t _size57;
+            ::apache::thrift::protocol::TType _etype60;
+            xfer += iprot->readListBegin(_etype60, _size57);
+            this->nodeInputs.resize(_size57);
+            uint32_t _i61;
+            for (_i61 = 0; _i61 < _size57; ++_i61)
             {
-              xfer += this->nodeInputs[_i55].read(iprot);
+              xfer += this->nodeInputs[_i61].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2282,14 +2330,14 @@ uint32_t 
WorkflowNodeDetails::read(::apache::thrift::protocol::TProtocol* iprot)
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->nodeOutputs.clear();
-            uint32_t _size56;
-            ::apache::thrift::protocol::TType _etype59;
-            xfer += iprot->readListBegin(_etype59, _size56);
-            this->nodeOutputs.resize(_size56);
-            uint32_t _i60;
-            for (_i60 = 0; _i60 < _size56; ++_i60)
+            uint32_t _size62;
+            ::apache::thrift::protocol::TType _etype65;
+            xfer += iprot->readListBegin(_etype65, _size62);
+            this->nodeOutputs.resize(_size62);
+            uint32_t _i66;
+            for (_i66 = 0; _i66 < _size62; ++_i66)
             {
-              xfer += this->nodeOutputs[_i60].read(iprot);
+              xfer += this->nodeOutputs[_i66].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2310,14 +2358,14 @@ uint32_t 
WorkflowNodeDetails::read(::apache::thrift::protocol::TProtocol* iprot)
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->taskDetailsList.clear();
-            uint32_t _size61;
-            ::apache::thrift::protocol::TType _etype64;
-            xfer += iprot->readListBegin(_etype64, _size61);
-            this->taskDetailsList.resize(_size61);
-            uint32_t _i65;
-            for (_i65 = 0; _i65 < _size61; ++_i65)
+            uint32_t _size67;
+            ::apache::thrift::protocol::TType _etype70;
+            xfer += iprot->readListBegin(_etype70, _size67);
+            this->taskDetailsList.resize(_size67);
+            uint32_t _i71;
+            for (_i71 = 0; _i71 < _size67; ++_i71)
             {
-              xfer += this->taskDetailsList[_i65].read(iprot);
+              xfer += this->taskDetailsList[_i71].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2330,14 +2378,14 @@ uint32_t 
WorkflowNodeDetails::read(::apache::thrift::protocol::TProtocol* iprot)
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->errors.clear();
-            uint32_t _size66;
-            ::apache::thrift::protocol::TType _etype69;
-            xfer += iprot->readListBegin(_etype69, _size66);
-            this->errors.resize(_size66);
-            uint32_t _i70;
-            for (_i70 = 0; _i70 < _size66; ++_i70)
+            uint32_t _size72;
+            ::apache::thrift::protocol::TType _etype75;
+            xfer += iprot->readListBegin(_etype75, _size72);
+            this->errors.resize(_size72);
+            uint32_t _i76;
+            for (_i76 = 0; _i76 < _size72; ++_i76)
             {
-              xfer += this->errors[_i70].read(iprot);
+              xfer += this->errors[_i76].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2394,10 +2442,10 @@ uint32_t 
WorkflowNodeDetails::write(::apache::thrift::protocol::TProtocol* oprot
     xfer += oprot->writeFieldBegin("nodeInputs", 
::apache::thrift::protocol::T_LIST, 6);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->nodeInputs.size()));
-      std::vector< 
::apache::airavata::model::appcatalog::appinterface::InputDataObjectType> 
::const_iterator _iter71;
-      for (_iter71 = this->nodeInputs.begin(); _iter71 != 
this->nodeInputs.end(); ++_iter71)
+      std::vector< 
::apache::airavata::model::appcatalog::appinterface::InputDataObjectType> 
::const_iterator _iter77;
+      for (_iter77 = this->nodeInputs.begin(); _iter77 != 
this->nodeInputs.end(); ++_iter77)
       {
-        xfer += (*_iter71).write(oprot);
+        xfer += (*_iter77).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2407,10 +2455,10 @@ uint32_t 
WorkflowNodeDetails::write(::apache::thrift::protocol::TProtocol* oprot
     xfer += oprot->writeFieldBegin("nodeOutputs", 
::apache::thrift::protocol::T_LIST, 7);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->nodeOutputs.size()));
-      std::vector< 
::apache::airavata::model::appcatalog::appinterface::OutputDataObjectType> 
::const_iterator _iter72;
-      for (_iter72 = this->nodeOutputs.begin(); _iter72 != 
this->nodeOutputs.end(); ++_iter72)
+      std::vector< 
::apache::airavata::model::appcatalog::appinterface::OutputDataObjectType> 
::const_iterator _iter78;
+      for (_iter78 = this->nodeOutputs.begin(); _iter78 != 
this->nodeOutputs.end(); ++_iter78)
       {
-        xfer += (*_iter72).write(oprot);
+        xfer += (*_iter78).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2425,10 +2473,10 @@ uint32_t 
WorkflowNodeDetails::write(::apache::thrift::protocol::TProtocol* oprot
     xfer += oprot->writeFieldBegin("taskDetailsList", 
::apache::thrift::protocol::T_LIST, 9);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->taskDetailsList.size()));
-      std::vector<TaskDetails> ::const_iterator _iter73;
-      for (_iter73 = this->taskDetailsList.begin(); _iter73 != 
this->taskDetailsList.end(); ++_iter73)
+      std::vector<TaskDetails> ::const_iterator _iter79;
+      for (_iter79 = this->taskDetailsList.begin(); _iter79 != 
this->taskDetailsList.end(); ++_iter79)
       {
-        xfer += (*_iter73).write(oprot);
+        xfer += (*_iter79).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2438,10 +2486,10 @@ uint32_t 
WorkflowNodeDetails::write(::apache::thrift::protocol::TProtocol* oprot
     xfer += oprot->writeFieldBegin("errors", 
::apache::thrift::protocol::T_LIST, 10);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->errors.size()));
-      std::vector<ErrorDetails> ::const_iterator _iter74;
-      for (_iter74 = this->errors.begin(); _iter74 != this->errors.end(); 
++_iter74)
+      std::vector<ErrorDetails> ::const_iterator _iter80;
+      for (_iter80 = this->errors.begin(); _iter80 != this->errors.end(); 
++_iter80)
       {
-        xfer += (*_iter74).write(oprot);
+        xfer += (*_iter80).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2583,14 +2631,14 @@ uint32_t 
ValidationResults::read(::apache::thrift::protocol::TProtocol* iprot) {
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->validationResultList.clear();
-            uint32_t _size75;
-            ::apache::thrift::protocol::TType _etype78;
-            xfer += iprot->readListBegin(_etype78, _size75);
-            this->validationResultList.resize(_size75);
-            uint32_t _i79;
-            for (_i79 = 0; _i79 < _size75; ++_i79)
+            uint32_t _size81;
+            ::apache::thrift::protocol::TType _etype84;
+            xfer += iprot->readListBegin(_etype84, _size81);
+            this->validationResultList.resize(_size81);
+            uint32_t _i85;
+            for (_i85 = 0; _i85 < _size81; ++_i85)
             {
-              xfer += this->validationResultList[_i79].read(iprot);
+              xfer += this->validationResultList[_i85].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2626,10 +2674,10 @@ uint32_t 
ValidationResults::write(::apache::thrift::protocol::TProtocol* oprot)
   xfer += oprot->writeFieldBegin("validationResultList", 
::apache::thrift::protocol::T_LIST, 2);
   {
     xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->validationResultList.size()));
-    std::vector<ValidatorResult> ::const_iterator _iter80;
-    for (_iter80 = this->validationResultList.begin(); _iter80 != 
this->validationResultList.end(); ++_iter80)
+    std::vector<ValidatorResult> ::const_iterator _iter86;
+    for (_iter86 = this->validationResultList.begin(); _iter86 != 
this->validationResultList.end(); ++_iter86)
     {
-      xfer += (*_iter80).write(oprot);
+      xfer += (*_iter86).write(oprot);
     }
     xfer += oprot->writeListEnd();
   }
@@ -2646,8 +2694,8 @@ void swap(ValidationResults &a, ValidationResults &b) {
   swap(a.validationResultList, b.validationResultList);
 }
 
-const char* Experiment::ascii_fingerprint = "4CE20099975A60F2FE0D6D1139972D1A";
-const uint8_t Experiment::binary_fingerprint[16] = 
{0x4C,0xE2,0x00,0x99,0x97,0x5A,0x60,0xF2,0xFE,0x0D,0x6D,0x11,0x39,0x97,0x2D,0x1A};
+const char* Experiment::ascii_fingerprint = "145D3134FA7C46D3D99051850C4984FF";
+const uint8_t Experiment::binary_fingerprint[16] = 
{0x14,0x5D,0x31,0x34,0xFA,0x7C,0x46,0xD3,0xD9,0x90,0x51,0x85,0x0C,0x49,0x84,0xFF};
 
 uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -2754,6 +2802,34 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
         }
         break;
       case 11:
+        if (ftype == ::apache::thrift::protocol::T_BOOL) {
+          xfer += iprot->readBool(this->enableEmailNotification);
+          this->__isset.enableEmailNotification = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 12:
+        if (ftype == ::apache::thrift::protocol::T_LIST) {
+          {
+            this->emailAddresses.clear();
+            uint32_t _size87;
+            ::apache::thrift::protocol::TType _etype90;
+            xfer += iprot->readListBegin(_etype90, _size87);
+            this->emailAddresses.resize(_size87);
+            uint32_t _i91;
+            for (_i91 = 0; _i91 < _size87; ++_i91)
+            {
+              xfer += iprot->readString(this->emailAddresses[_i91]);
+            }
+            xfer += iprot->readListEnd();
+          }
+          this->__isset.emailAddresses = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 13:
         if (ftype == ::apache::thrift::protocol::T_STRUCT) {
           xfer += this->userConfigurationData.read(iprot);
           this->__isset.userConfigurationData = true;
@@ -2761,7 +2837,7 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 12:
+      case 14:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->workflowExecutionInstanceId);
           this->__isset.workflowExecutionInstanceId = true;
@@ -2769,18 +2845,18 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 13:
+      case 15:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->experimentInputs.clear();
-            uint32_t _size81;
-            ::apache::thrift::protocol::TType _etype84;
-            xfer += iprot->readListBegin(_etype84, _size81);
-            this->experimentInputs.resize(_size81);
-            uint32_t _i85;
-            for (_i85 = 0; _i85 < _size81; ++_i85)
+            uint32_t _size92;
+            ::apache::thrift::protocol::TType _etype95;
+            xfer += iprot->readListBegin(_etype95, _size92);
+            this->experimentInputs.resize(_size92);
+            uint32_t _i96;
+            for (_i96 = 0; _i96 < _size92; ++_i96)
             {
-              xfer += this->experimentInputs[_i85].read(iprot);
+              xfer += this->experimentInputs[_i96].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2789,18 +2865,18 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 14:
+      case 16:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->experimentOutputs.clear();
-            uint32_t _size86;
-            ::apache::thrift::protocol::TType _etype89;
-            xfer += iprot->readListBegin(_etype89, _size86);
-            this->experimentOutputs.resize(_size86);
-            uint32_t _i90;
-            for (_i90 = 0; _i90 < _size86; ++_i90)
+            uint32_t _size97;
+            ::apache::thrift::protocol::TType _etype100;
+            xfer += iprot->readListBegin(_etype100, _size97);
+            this->experimentOutputs.resize(_size97);
+            uint32_t _i101;
+            for (_i101 = 0; _i101 < _size97; ++_i101)
             {
-              xfer += this->experimentOutputs[_i90].read(iprot);
+              xfer += this->experimentOutputs[_i101].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2809,7 +2885,7 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 15:
+      case 17:
         if (ftype == ::apache::thrift::protocol::T_STRUCT) {
           xfer += this->experimentStatus.read(iprot);
           this->__isset.experimentStatus = true;
@@ -2817,18 +2893,18 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 16:
+      case 18:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->stateChangeList.clear();
-            uint32_t _size91;
-            ::apache::thrift::protocol::TType _etype94;
-            xfer += iprot->readListBegin(_etype94, _size91);
-            this->stateChangeList.resize(_size91);
-            uint32_t _i95;
-            for (_i95 = 0; _i95 < _size91; ++_i95)
+            uint32_t _size102;
+            ::apache::thrift::protocol::TType _etype105;
+            xfer += iprot->readListBegin(_etype105, _size102);
+            this->stateChangeList.resize(_size102);
+            uint32_t _i106;
+            for (_i106 = 0; _i106 < _size102; ++_i106)
             {
-              xfer += this->stateChangeList[_i95].read(iprot);
+              xfer += this->stateChangeList[_i106].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2837,18 +2913,18 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 17:
+      case 19:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->workflowNodeDetailsList.clear();
-            uint32_t _size96;
-            ::apache::thrift::protocol::TType _etype99;
-            xfer += iprot->readListBegin(_etype99, _size96);
-            this->workflowNodeDetailsList.resize(_size96);
-            uint32_t _i100;
-            for (_i100 = 0; _i100 < _size96; ++_i100)
+            uint32_t _size107;
+            ::apache::thrift::protocol::TType _etype110;
+            xfer += iprot->readListBegin(_etype110, _size107);
+            this->workflowNodeDetailsList.resize(_size107);
+            uint32_t _i111;
+            for (_i111 = 0; _i111 < _size107; ++_i111)
             {
-              xfer += this->workflowNodeDetailsList[_i100].read(iprot);
+              xfer += this->workflowNodeDetailsList[_i111].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2857,18 +2933,18 @@ uint32_t 
Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 18:
+      case 20:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->errors.clear();
-            uint32_t _size101;
-            ::apache::thrift::protocol::TType _etype104;
-            xfer += iprot->readListBegin(_etype104, _size101);
-            this->errors.resize(_size101);
-            uint32_t _i105;
-            for (_i105 = 0; _i105 < _size101; ++_i105)
+            uint32_t _size112;
+            ::apache::thrift::protocol::TType _etype115;
+            xfer += iprot->readListBegin(_etype115, _size112);
+            this->errors.resize(_size112);
+            uint32_t _i116;
+            for (_i116 = 0; _i116 < _size112; ++_i116)
             {
-              xfer += this->errors[_i105].read(iprot);
+              xfer += this->errors[_i116].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2947,81 +3023,99 @@ uint32_t 
Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeString(this->workflowTemplateVersion);
     xfer += oprot->writeFieldEnd();
   }
+  if (this->__isset.enableEmailNotification) {
+    xfer += oprot->writeFieldBegin("enableEmailNotification", 
::apache::thrift::protocol::T_BOOL, 11);
+    xfer += oprot->writeBool(this->enableEmailNotification);
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.emailAddresses) {
+    xfer += oprot->writeFieldBegin("emailAddresses", 
::apache::thrift::protocol::T_LIST, 12);
+    {
+      xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, 
static_cast<uint32_t>(this->emailAddresses.size()));
+      std::vector<std::string> ::const_iterator _iter117;
+      for (_iter117 = this->emailAddresses.begin(); _iter117 != 
this->emailAddresses.end(); ++_iter117)
+      {
+        xfer += oprot->writeString((*_iter117));
+      }
+      xfer += oprot->writeListEnd();
+    }
+    xfer += oprot->writeFieldEnd();
+  }
   if (this->__isset.userConfigurationData) {
-    xfer += oprot->writeFieldBegin("userConfigurationData", 
::apache::thrift::protocol::T_STRUCT, 11);
+    xfer += oprot->writeFieldBegin("userConfigurationData", 
::apache::thrift::protocol::T_STRUCT, 13);
     xfer += this->userConfigurationData.write(oprot);
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.workflowExecutionInstanceId) {
-    xfer += oprot->writeFieldBegin("workflowExecutionInstanceId", 
::apache::thrift::protocol::T_STRING, 12);
+    xfer += oprot->writeFieldBegin("workflowExecutionInstanceId", 
::apache::thrift::protocol::T_STRING, 14);
     xfer += oprot->writeString(this->workflowExecutionInstanceId);
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.experimentInputs) {
-    xfer += oprot->writeFieldBegin("experimentInputs", 
::apache::thrift::protocol::T_LIST, 13);
+    xfer += oprot->writeFieldBegin("experimentInputs", 
::apache::thrift::protocol::T_LIST, 15);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->experimentInputs.size()));
-      std::vector< 
::apache::airavata::model::appcatalog::appinterface::InputDataObjectType> 
::const_iterator _iter106;
-      for (_iter106 = this->experimentInputs.begin(); _iter106 != 
this->experimentInputs.end(); ++_iter106)
+      std::vector< 
::apache::airavata::model::appcatalog::appinterface::InputDataObjectType> 
::const_iterator _iter118;
+      for (_iter118 = this->experimentInputs.begin(); _iter118 != 
this->experimentInputs.end(); ++_iter118)
       {
-        xfer += (*_iter106).write(oprot);
+        xfer += (*_iter118).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.experimentOutputs) {
-    xfer += oprot->writeFieldBegin("experimentOutputs", 
::apache::thrift::protocol::T_LIST, 14);
+    xfer += oprot->writeFieldBegin("experimentOutputs", 
::apache::thrift::protocol::T_LIST, 16);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->experimentOutputs.size()));
-      std::vector< 
::apache::airavata::model::appcatalog::appinterface::OutputDataObjectType> 
::const_iterator _iter107;
-      for (_iter107 = this->experimentOutputs.begin(); _iter107 != 
this->experimentOutputs.end(); ++_iter107)
+      std::vector< 
::apache::airavata::model::appcatalog::appinterface::OutputDataObjectType> 
::const_iterator _iter119;
+      for (_iter119 = this->experimentOutputs.begin(); _iter119 != 
this->experimentOutputs.end(); ++_iter119)
       {
-        xfer += (*_iter107).write(oprot);
+        xfer += (*_iter119).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.experimentStatus) {
-    xfer += oprot->writeFieldBegin("experimentStatus", 
::apache::thrift::protocol::T_STRUCT, 15);
+    xfer += oprot->writeFieldBegin("experimentStatus", 
::apache::thrift::protocol::T_STRUCT, 17);
     xfer += this->experimentStatus.write(oprot);
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.stateChangeList) {
-    xfer += oprot->writeFieldBegin("stateChangeList", 
::apache::thrift::protocol::T_LIST, 16);
+    xfer += oprot->writeFieldBegin("stateChangeList", 
::apache::thrift::protocol::T_LIST, 18);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->stateChangeList.size()));
-      std::vector<WorkflowNodeStatus> ::const_iterator _iter108;
-      for (_iter108 = this->stateChangeList.begin(); _iter108 != 
this->stateChangeList.end(); ++_iter108)
+      std::vector<WorkflowNodeStatus> ::const_iterator _iter120;
+      for (_iter120 = this->stateChangeList.begin(); _iter120 != 
this->stateChangeList.end(); ++_iter120)
       {
-        xfer += (*_iter108).write(oprot);
+        xfer += (*_iter120).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.workflowNodeDetailsList) {
-    xfer += oprot->writeFieldBegin("workflowNodeDetailsList", 
::apache::thrift::protocol::T_LIST, 17);
+    xfer += oprot->writeFieldBegin("workflowNodeDetailsList", 
::apache::thrift::protocol::T_LIST, 19);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->workflowNodeDetailsList.size()));
-      std::vector<WorkflowNodeDetails> ::const_iterator _iter109;
-      for (_iter109 = this->workflowNodeDetailsList.begin(); _iter109 != 
this->workflowNodeDetailsList.end(); ++_iter109)
+      std::vector<WorkflowNodeDetails> ::const_iterator _iter121;
+      for (_iter121 = this->workflowNodeDetailsList.begin(); _iter121 != 
this->workflowNodeDetailsList.end(); ++_iter121)
       {
-        xfer += (*_iter109).write(oprot);
+        xfer += (*_iter121).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
     xfer += oprot->writeFieldEnd();
   }
   if (this->__isset.errors) {
-    xfer += oprot->writeFieldBegin("errors", 
::apache::thrift::protocol::T_LIST, 18);
+    xfer += oprot->writeFieldBegin("errors", 
::apache::thrift::protocol::T_LIST, 20);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->errors.size()));
-      std::vector<ErrorDetails> ::const_iterator _iter110;
-      for (_iter110 = this->errors.begin(); _iter110 != this->errors.end(); 
++_iter110)
+      std::vector<ErrorDetails> ::const_iterator _iter122;
+      for (_iter122 = this->errors.begin(); _iter122 != this->errors.end(); 
++_iter122)
       {
-        xfer += (*_iter110).write(oprot);
+        xfer += (*_iter122).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -3044,6 +3138,8 @@ void swap(Experiment &a, Experiment &b) {
   swap(a.applicationVersion, b.applicationVersion);
   swap(a.workflowTemplateId, b.workflowTemplateId);
   swap(a.workflowTemplateVersion, b.workflowTemplateVersion);
+  swap(a.enableEmailNotification, b.enableEmailNotification);
+  swap(a.emailAddresses, b.emailAddresses);
   swap(a.userConfigurationData, b.userConfigurationData);
   swap(a.workflowExecutionInstanceId, b.workflowExecutionInstanceId);
   swap(a.experimentInputs, b.experimentInputs);
@@ -3150,14 +3246,14 @@ uint32_t 
ExperimentSummary::read(::apache::thrift::protocol::TProtocol* iprot) {
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->errors.clear();
-            uint32_t _size111;
-            ::apache::thrift::protocol::TType _etype114;
-            xfer += iprot->readListBegin(_etype114, _size111);
-            this->errors.resize(_size111);
-            uint32_t _i115;
-            for (_i115 = 0; _i115 < _size111; ++_i115)
+            uint32_t _size123;
+            ::apache::thrift::protocol::TType _etype126;
+            xfer += iprot->readListBegin(_etype126, _size123);
+            this->errors.resize(_size123);
+            uint32_t _i127;
+            for (_i127 = 0; _i127 < _size123; ++_i127)
             {
-              xfer += this->errors[_i115].read(iprot);
+              xfer += this->errors[_i127].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -3230,10 +3326,10 @@ uint32_t 
ExperimentSummary::write(::apache::thrift::protocol::TProtocol* oprot)
     xfer += oprot->writeFieldBegin("errors", 
::apache::thrift::protocol::T_LIST, 9);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, 
static_cast<uint32_t>(this->errors.size()));
-      std::vector<ErrorDetails> ::const_iterator _iter116;
-      for (_iter116 = this->errors.begin(); _iter116 != this->errors.end(); 
++_iter116)
+      std::vector<ErrorDetails> ::const_iterator _iter128;
+      for (_iter128 = this->errors.begin(); _iter128 != this->errors.end(); 
++_iter128)
       {
-        xfer += (*_iter116).write(oprot);
+        xfer += (*_iter128).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/7a6fbdb2/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
----------------------------------------------------------------------
diff --git 
a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
 
b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
index b5e1e57..1b5306e 100644
--- 
a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
+++ 
b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/experimentModel_types.h
@@ -1275,7 +1275,7 @@ class DataTransferDetails {
 void swap(DataTransferDetails &a, DataTransferDetails &b);
 
 typedef struct _TaskDetails__isset {
-  _TaskDetails__isset() : creationTime(false), applicationId(false), 
applicationVersion(false), applicationDeploymentId(false), 
applicationInputs(false), applicationOutputs(false), taskScheduling(false), 
advancedInputDataHandling(false), advancedOutputDataHandling(false), 
taskStatus(false), jobDetailsList(false), dataTransferDetailsList(false), 
errors(false) {}
+  _TaskDetails__isset() : creationTime(false), applicationId(false), 
applicationVersion(false), applicationDeploymentId(false), 
applicationInputs(false), applicationOutputs(false), taskScheduling(false), 
advancedInputDataHandling(false), advancedOutputDataHandling(false), 
taskStatus(false), jobDetailsList(false), dataTransferDetailsList(false), 
errors(false), enableEmailNotification(false), emailAddresses(false) {}
   bool creationTime;
   bool applicationId;
   bool applicationVersion;
@@ -1289,15 +1289,17 @@ typedef struct _TaskDetails__isset {
   bool jobDetailsList;
   bool dataTransferDetailsList;
   bool errors;
+  bool enableEmailNotification;
+  bool emailAddresses;
 } _TaskDetails__isset;
 
 class TaskDetails {
  public:
 
-  static const char* ascii_fingerprint; // = 
"6FF0ECF6FE53D283757211BADE659108";
-  static const uint8_t binary_fingerprint[16]; // = 
{0x6F,0xF0,0xEC,0xF6,0xFE,0x53,0xD2,0x83,0x75,0x72,0x11,0xBA,0xDE,0x65,0x91,0x08};
+  static const char* ascii_fingerprint; // = 
"6EAEEB62655ECD5CA7A24BFDE46F678C";
+  static const uint8_t binary_fingerprint[16]; // = 
{0x6E,0xAE,0xEB,0x62,0x65,0x5E,0xCD,0x5C,0xA7,0xA2,0x4B,0xFD,0xE4,0x6F,0x67,0x8C};
 
-  TaskDetails() : taskID("DO_NOT_SET_AT_CLIENTS"), creationTime(0), 
applicationId(), applicationVersion(), applicationDeploymentId() {
+  TaskDetails() : taskID("DO_NOT_SET_AT_CLIENTS"), creationTime(0), 
applicationId(), applicationVersion(), applicationDeploymentId(), 
enableEmailNotification(0) {
   }
 
   virtual ~TaskDetails() throw() {}
@@ -1316,6 +1318,8 @@ class TaskDetails {
   std::vector<JobDetails>  jobDetailsList;
   std::vector<DataTransferDetails>  dataTransferDetailsList;
   std::vector<ErrorDetails>  errors;
+  bool enableEmailNotification;
+  std::vector<std::string>  emailAddresses;
 
   _TaskDetails__isset __isset;
 
@@ -1388,6 +1392,16 @@ class TaskDetails {
     __isset.errors = true;
   }
 
+  void __set_enableEmailNotification(const bool val) {
+    enableEmailNotification = val;
+    __isset.enableEmailNotification = true;
+  }
+
+  void __set_emailAddresses(const std::vector<std::string> & val) {
+    emailAddresses = val;
+    __isset.emailAddresses = true;
+  }
+
   bool operator == (const TaskDetails & rhs) const
   {
     if (!(taskID == rhs.taskID))
@@ -1444,6 +1458,14 @@ class TaskDetails {
       return false;
     else if (__isset.errors && !(errors == rhs.errors))
       return false;
+    if (__isset.enableEmailNotification != rhs.__isset.enableEmailNotification)
+      return false;
+    else if (__isset.enableEmailNotification && !(enableEmailNotification == 
rhs.enableEmailNotification))
+      return false;
+    if (__isset.emailAddresses != rhs.__isset.emailAddresses)
+      return false;
+    else if (__isset.emailAddresses && !(emailAddresses == rhs.emailAddresses))
+      return false;
     return true;
   }
   bool operator != (const TaskDetails &rhs) const {
@@ -1473,8 +1495,8 @@ typedef struct _WorkflowNodeDetails__isset {
 class WorkflowNodeDetails {
  public:
 
-  static const char* ascii_fingerprint; // = 
"D2AF8FCCA5B9C08220AE508BA2D7FB06";
-  static const uint8_t binary_fingerprint[16]; // = 
{0xD2,0xAF,0x8F,0xCC,0xA5,0xB9,0xC0,0x82,0x20,0xAE,0x50,0x8B,0xA2,0xD7,0xFB,0x06};
+  static const char* ascii_fingerprint; // = 
"CDDA44A784FD60829B4F4EAA67D71C72";
+  static const uint8_t binary_fingerprint[16]; // = 
{0xCD,0xDA,0x44,0xA7,0x84,0xFD,0x60,0x82,0x9B,0x4F,0x4E,0xAA,0x67,0xD7,0x1C,0x72};
 
   WorkflowNodeDetails() : nodeInstanceId("DO_NOT_SET_AT_CLIENTS"), 
creationTime(0), nodeName("SINGLE_APP_NODE"), 
executionUnit((ExecutionUnit::type)1), executionUnitData() {
     executionUnit = (ExecutionUnit::type)1;
@@ -1692,13 +1714,15 @@ class ValidationResults {
 void swap(ValidationResults &a, ValidationResults &b);
 
 typedef struct _Experiment__isset {
-  _Experiment__isset() : creationTime(false), description(false), 
applicationId(false), applicationVersion(false), workflowTemplateId(false), 
workflowTemplateVersion(false), userConfigurationData(false), 
workflowExecutionInstanceId(false), experimentInputs(false), 
experimentOutputs(false), experimentStatus(false), stateChangeList(false), 
workflowNodeDetailsList(false), errors(false) {}
+  _Experiment__isset() : creationTime(false), description(false), 
applicationId(false), applicationVersion(false), workflowTemplateId(false), 
workflowTemplateVersion(false), enableEmailNotification(false), 
emailAddresses(false), userConfigurationData(false), 
workflowExecutionInstanceId(false), experimentInputs(false), 
experimentOutputs(false), experimentStatus(false), stateChangeList(false), 
workflowNodeDetailsList(false), errors(false) {}
   bool creationTime;
   bool description;
   bool applicationId;
   bool applicationVersion;
   bool workflowTemplateId;
   bool workflowTemplateVersion;
+  bool enableEmailNotification;
+  bool emailAddresses;
   bool userConfigurationData;
   bool workflowExecutionInstanceId;
   bool experimentInputs;
@@ -1712,10 +1736,10 @@ typedef struct _Experiment__isset {
 class Experiment {
  public:
 
-  static const char* ascii_fingerprint; // = 
"4CE20099975A60F2FE0D6D1139972D1A";
-  static const uint8_t binary_fingerprint[16]; // = 
{0x4C,0xE2,0x00,0x99,0x97,0x5A,0x60,0xF2,0xFE,0x0D,0x6D,0x11,0x39,0x97,0x2D,0x1A};
+  static const char* ascii_fingerprint; // = 
"145D3134FA7C46D3D99051850C4984FF";
+  static const uint8_t binary_fingerprint[16]; // = 
{0x14,0x5D,0x31,0x34,0xFA,0x7C,0x46,0xD3,0xD9,0x90,0x51,0x85,0x0C,0x49,0x84,0xFF};
 
-  Experiment() : experimentID("DO_NOT_SET_AT_CLIENTS"), projectID("DEFAULT"), 
creationTime(0), userName(), name(), description(), applicationId(), 
applicationVersion(), workflowTemplateId(), workflowTemplateVersion(), 
workflowExecutionInstanceId() {
+  Experiment() : experimentID("DO_NOT_SET_AT_CLIENTS"), projectID("DEFAULT"), 
creationTime(0), userName(), name(), description(), applicationId(), 
applicationVersion(), workflowTemplateId(), workflowTemplateVersion(), 
enableEmailNotification(0), workflowExecutionInstanceId() {
   }
 
   virtual ~Experiment() throw() {}
@@ -1730,6 +1754,8 @@ class Experiment {
   std::string applicationVersion;
   std::string workflowTemplateId;
   std::string workflowTemplateVersion;
+  bool enableEmailNotification;
+  std::vector<std::string>  emailAddresses;
   UserConfigurationData userConfigurationData;
   std::string workflowExecutionInstanceId;
   std::vector< 
::apache::airavata::model::appcatalog::appinterface::InputDataObjectType>  
experimentInputs;
@@ -1787,6 +1813,16 @@ class Experiment {
     __isset.workflowTemplateVersion = true;
   }
 
+  void __set_enableEmailNotification(const bool val) {
+    enableEmailNotification = val;
+    __isset.enableEmailNotification = true;
+  }
+
+  void __set_emailAddresses(const std::vector<std::string> & val) {
+    emailAddresses = val;
+    __isset.emailAddresses = true;
+  }
+
   void __set_userConfigurationData(const UserConfigurationData& val) {
     userConfigurationData = val;
     __isset.userConfigurationData = true;
@@ -1861,6 +1897,14 @@ class Experiment {
       return false;
     else if (__isset.workflowTemplateVersion && !(workflowTemplateVersion == 
rhs.workflowTemplateVersion))
       return false;
+    if (__isset.enableEmailNotification != rhs.__isset.enableEmailNotification)
+      return false;
+    else if (__isset.enableEmailNotification && !(enableEmailNotification == 
rhs.enableEmailNotification))
+      return false;
+    if (__isset.emailAddresses != rhs.__isset.emailAddresses)
+      return false;
+    else if (__isset.emailAddresses && !(emailAddresses == rhs.emailAddresses))
+      return false;
     if (__isset.userConfigurationData != rhs.__isset.userConfigurationData)
       return false;
     else if (__isset.userConfigurationData && !(userConfigurationData == 
rhs.userConfigurationData))

http://git-wip-us.apache.org/repos/asf/airavata/blob/7a6fbdb2/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
----------------------------------------------------------------------
diff --git 
a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
 
b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
index c6037f7..1fbcd0b 100644
--- 
a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
+++ 
b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Workspace/Experiment/Types.php
@@ -2250,6 +2250,8 @@ class TaskDetails {
   public $jobDetailsList = null;
   public $dataTransferDetailsList = null;
   public $errors = null;
+  public $enableEmailNotification = null;
+  public $emailAddresses = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -2339,6 +2341,18 @@ class TaskDetails {
             'class' => '\Airavata\Model\Workspace\Experiment\ErrorDetails',
             ),
           ),
+        15 => array(
+          'var' => 'enableEmailNotification',
+          'type' => TType::BOOL,
+          ),
+        16 => array(
+          'var' => 'emailAddresses',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
         );
     }
     if (is_array($vals)) {
@@ -2384,6 +2398,12 @@ class TaskDetails {
       if (isset($vals['errors'])) {
         $this->errors = $vals['errors'];
       }
+      if (isset($vals['enableEmailNotification'])) {
+        $this->enableEmailNotification = $vals['enableEmailNotification'];
+      }
+      if (isset($vals['emailAddresses'])) {
+        $this->emailAddresses = $vals['emailAddresses'];
+      }
     }
   }
 
@@ -2563,6 +2583,30 @@ class TaskDetails {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 15:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->enableEmailNotification);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 16:
+          if ($ftype == TType::LST) {
+            $this->emailAddresses = array();
+            $_size44 = 0;
+            $_etype47 = 0;
+            $xfer += $input->readListBegin($_etype47, $_size44);
+            for ($_i48 = 0; $_i48 < $_size44; ++$_i48)
+            {
+              $elem49 = null;
+              $xfer += $input->readString($elem49);
+              $this->emailAddresses []= $elem49;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -2609,9 +2653,9 @@ class TaskDetails {
       {
         $output->writeListBegin(TType::STRUCT, 
count($this->applicationInputs));
         {
-          foreach ($this->applicationInputs as $iter44)
+          foreach ($this->applicationInputs as $iter50)
           {
-            $xfer += $iter44->write($output);
+            $xfer += $iter50->write($output);
           }
         }
         $output->writeListEnd();
@@ -2626,9 +2670,9 @@ class TaskDetails {
       {
         $output->writeListBegin(TType::STRUCT, 
count($this->applicationOutputs));
         {
-          foreach ($this->applicationOutputs as $iter45)
+          foreach ($this->applicationOutputs as $iter51)
           {
-            $xfer += $iter45->write($output);
+            $xfer += $iter51->write($output);
           }
         }
         $output->writeListEnd();
@@ -2675,9 +2719,9 @@ class TaskDetails {
       {
         $output->writeListBegin(TType::STRUCT, count($this->jobDetailsList));
         {
-          foreach ($this->jobDetailsList as $iter46)
+          foreach ($this->jobDetailsList as $iter52)
           {
-            $xfer += $iter46->write($output);
+            $xfer += $iter52->write($output);
           }
         }
         $output->writeListEnd();
@@ -2692,9 +2736,9 @@ class TaskDetails {
       {
         $output->writeListBegin(TType::STRUCT, 
count($this->dataTransferDetailsList));
         {
-          foreach ($this->dataTransferDetailsList as $iter47)
+          foreach ($this->dataTransferDetailsList as $iter53)
           {
-            $xfer += $iter47->write($output);
+            $xfer += $iter53->write($output);
           }
         }
         $output->writeListEnd();
@@ -2709,9 +2753,31 @@ class TaskDetails {
       {
         $output->writeListBegin(TType::STRUCT, count($this->errors));
         {
-          foreach ($this->errors as $iter48)
+          foreach ($this->errors as $iter54)
           {
-            $xfer += $iter48->write($output);
+            $xfer += $iter54->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->enableEmailNotification !== null) {
+      $xfer += $output->writeFieldBegin('enableEmailNotification', 
TType::BOOL, 15);
+      $xfer += $output->writeBool($this->enableEmailNotification);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->emailAddresses !== null) {
+      if (!is_array($this->emailAddresses)) {
+        throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('emailAddresses', TType::LST, 16);
+      {
+        $output->writeListBegin(TType::STRING, count($this->emailAddresses));
+        {
+          foreach ($this->emailAddresses as $iter55)
+          {
+            $xfer += $output->writeString($iter55);
           }
         }
         $output->writeListEnd();
@@ -2896,15 +2962,15 @@ class WorkflowNodeDetails {
         case 6:
           if ($ftype == TType::LST) {
             $this->nodeInputs = array();
-            $_size49 = 0;
-            $_etype52 = 0;
-            $xfer += $input->readListBegin($_etype52, $_size49);
-            for ($_i53 = 0; $_i53 < $_size49; ++$_i53)
+            $_size56 = 0;
+            $_etype59 = 0;
+            $xfer += $input->readListBegin($_etype59, $_size56);
+            for ($_i60 = 0; $_i60 < $_size56; ++$_i60)
             {
-              $elem54 = null;
-              $elem54 = new 
\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
-              $xfer += $elem54->read($input);
-              $this->nodeInputs []= $elem54;
+              $elem61 = null;
+              $elem61 = new 
\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
+              $xfer += $elem61->read($input);
+              $this->nodeInputs []= $elem61;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -2914,15 +2980,15 @@ class WorkflowNodeDetails {
         case 7:
           if ($ftype == TType::LST) {
             $this->nodeOutputs = array();
-            $_size55 = 0;
-            $_etype58 = 0;
-            $xfer += $input->readListBegin($_etype58, $_size55);
-            for ($_i59 = 0; $_i59 < $_size55; ++$_i59)
+            $_size62 = 0;
+            $_etype65 = 0;
+            $xfer += $input->readListBegin($_etype65, $_size62);
+            for ($_i66 = 0; $_i66 < $_size62; ++$_i66)
             {
-              $elem60 = null;
-              $elem60 = new 
\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
-              $xfer += $elem60->read($input);
-              $this->nodeOutputs []= $elem60;
+              $elem67 = null;
+              $elem67 = new 
\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem67->read($input);
+              $this->nodeOutputs []= $elem67;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -2940,15 +3006,15 @@ class WorkflowNodeDetails {
         case 9:
           if ($ftype == TType::LST) {
             $this->taskDetailsList = array();
-            $_size61 = 0;
-            $_etype64 = 0;
-            $xfer += $input->readListBegin($_etype64, $_size61);
-            for ($_i65 = 0; $_i65 < $_size61; ++$_i65)
+            $_size68 = 0;
+            $_etype71 = 0;
+            $xfer += $input->readListBegin($_etype71, $_size68);
+            for ($_i72 = 0; $_i72 < $_size68; ++$_i72)
             {
-              $elem66 = null;
-              $elem66 = new \Airavata\Model\Workspace\Experiment\TaskDetails();
-              $xfer += $elem66->read($input);
-              $this->taskDetailsList []= $elem66;
+              $elem73 = null;
+              $elem73 = new \Airavata\Model\Workspace\Experiment\TaskDetails();
+              $xfer += $elem73->read($input);
+              $this->taskDetailsList []= $elem73;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -2958,15 +3024,15 @@ class WorkflowNodeDetails {
         case 10:
           if ($ftype == TType::LST) {
             $this->errors = array();
-            $_size67 = 0;
-            $_etype70 = 0;
-            $xfer += $input->readListBegin($_etype70, $_size67);
-            for ($_i71 = 0; $_i71 < $_size67; ++$_i71)
+            $_size74 = 0;
+            $_etype77 = 0;
+            $xfer += $input->readListBegin($_etype77, $_size74);
+            for ($_i78 = 0; $_i78 < $_size74; ++$_i78)
             {
-              $elem72 = null;
-              $elem72 = new 
\Airavata\Model\Workspace\Experiment\ErrorDetails();
-              $xfer += $elem72->read($input);
-              $this->errors []= $elem72;
+              $elem79 = null;
+              $elem79 = new 
\Airavata\Model\Workspace\Experiment\ErrorDetails();
+              $xfer += $elem79->read($input);
+              $this->errors []= $elem79;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3019,9 +3085,9 @@ class WorkflowNodeDetails {
       {
         $output->writeListBegin(TType::STRUCT, count($this->nodeInputs));
         {
-          foreach ($this->nodeInputs as $iter73)
+          foreach ($this->nodeInputs as $iter80)
           {
-            $xfer += $iter73->write($output);
+            $xfer += $iter80->write($output);
           }
         }
         $output->writeListEnd();
@@ -3036,9 +3102,9 @@ class WorkflowNodeDetails {
       {
         $output->writeListBegin(TType::STRUCT, count($this->nodeOutputs));
         {
-          foreach ($this->nodeOutputs as $iter74)
+          foreach ($this->nodeOutputs as $iter81)
           {
-            $xfer += $iter74->write($output);
+            $xfer += $iter81->write($output);
           }
         }
         $output->writeListEnd();
@@ -3061,9 +3127,9 @@ class WorkflowNodeDetails {
       {
         $output->writeListBegin(TType::STRUCT, count($this->taskDetailsList));
         {
-          foreach ($this->taskDetailsList as $iter75)
+          foreach ($this->taskDetailsList as $iter82)
           {
-            $xfer += $iter75->write($output);
+            $xfer += $iter82->write($output);
           }
         }
         $output->writeListEnd();
@@ -3078,9 +3144,9 @@ class WorkflowNodeDetails {
       {
         $output->writeListBegin(TType::STRUCT, count($this->errors));
         {
-          foreach ($this->errors as $iter76)
+          foreach ($this->errors as $iter83)
           {
-            $xfer += $iter76->write($output);
+            $xfer += $iter83->write($output);
           }
         }
         $output->writeListEnd();
@@ -3249,15 +3315,15 @@ class ValidationResults {
         case 2:
           if ($ftype == TType::LST) {
             $this->validationResultList = array();
-            $_size77 = 0;
-            $_etype80 = 0;
-            $xfer += $input->readListBegin($_etype80, $_size77);
-            for ($_i81 = 0; $_i81 < $_size77; ++$_i81)
+            $_size84 = 0;
+            $_etype87 = 0;
+            $xfer += $input->readListBegin($_etype87, $_size84);
+            for ($_i88 = 0; $_i88 < $_size84; ++$_i88)
             {
-              $elem82 = null;
-              $elem82 = new 
\Airavata\Model\Workspace\Experiment\ValidatorResult();
-              $xfer += $elem82->read($input);
-              $this->validationResultList []= $elem82;
+              $elem89 = null;
+              $elem89 = new 
\Airavata\Model\Workspace\Experiment\ValidatorResult();
+              $xfer += $elem89->read($input);
+              $this->validationResultList []= $elem89;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3290,9 +3356,9 @@ class ValidationResults {
       {
         $output->writeListBegin(TType::STRUCT, 
count($this->validationResultList));
         {
-          foreach ($this->validationResultList as $iter83)
+          foreach ($this->validationResultList as $iter90)
           {
-            $xfer += $iter83->write($output);
+            $xfer += $iter90->write($output);
           }
         }
         $output->writeListEnd();
@@ -3319,6 +3385,8 @@ class Experiment {
   public $applicationVersion = null;
   public $workflowTemplateId = null;
   public $workflowTemplateVersion = null;
+  public $enableEmailNotification = null;
+  public $emailAddresses = null;
   public $userConfigurationData = null;
   public $workflowExecutionInstanceId = null;
   public $experimentInputs = null;
@@ -3372,15 +3440,27 @@ class Experiment {
           'type' => TType::STRING,
           ),
         11 => array(
+          'var' => 'enableEmailNotification',
+          'type' => TType::BOOL,
+          ),
+        12 => array(
+          'var' => 'emailAddresses',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        13 => array(
           'var' => 'userConfigurationData',
           'type' => TType::STRUCT,
           'class' => 
'\Airavata\Model\Workspace\Experiment\UserConfigurationData',
           ),
-        12 => array(
+        14 => array(
           'var' => 'workflowExecutionInstanceId',
           'type' => TType::STRING,
           ),
-        13 => array(
+        15 => array(
           'var' => 'experimentInputs',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3389,7 +3469,7 @@ class Experiment {
             'class' => 
'\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType',
             ),
           ),
-        14 => array(
+        16 => array(
           'var' => 'experimentOutputs',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3398,12 +3478,12 @@ class Experiment {
             'class' => 
'\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType',
             ),
           ),
-        15 => array(
+        17 => array(
           'var' => 'experimentStatus',
           'type' => TType::STRUCT,
           'class' => '\Airavata\Model\Workspace\Experiment\ExperimentStatus',
           ),
-        16 => array(
+        18 => array(
           'var' => 'stateChangeList',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3412,7 +3492,7 @@ class Experiment {
             'class' => 
'\Airavata\Model\Workspace\Experiment\WorkflowNodeStatus',
             ),
           ),
-        17 => array(
+        19 => array(
           'var' => 'workflowNodeDetailsList',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3421,7 +3501,7 @@ class Experiment {
             'class' => 
'\Airavata\Model\Workspace\Experiment\WorkflowNodeDetails',
             ),
           ),
-        18 => array(
+        20 => array(
           'var' => 'errors',
           'type' => TType::LST,
           'etype' => TType::STRUCT,
@@ -3463,6 +3543,12 @@ class Experiment {
       if (isset($vals['workflowTemplateVersion'])) {
         $this->workflowTemplateVersion = $vals['workflowTemplateVersion'];
       }
+      if (isset($vals['enableEmailNotification'])) {
+        $this->enableEmailNotification = $vals['enableEmailNotification'];
+      }
+      if (isset($vals['emailAddresses'])) {
+        $this->emailAddresses = $vals['emailAddresses'];
+      }
       if (isset($vals['userConfigurationData'])) {
         $this->userConfigurationData = $vals['userConfigurationData'];
       }
@@ -3580,6 +3666,30 @@ class Experiment {
           }
           break;
         case 11:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->enableEmailNotification);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 12:
+          if ($ftype == TType::LST) {
+            $this->emailAddresses = array();
+            $_size91 = 0;
+            $_etype94 = 0;
+            $xfer += $input->readListBegin($_etype94, $_size91);
+            for ($_i95 = 0; $_i95 < $_size91; ++$_i95)
+            {
+              $elem96 = null;
+              $xfer += $input->readString($elem96);
+              $this->emailAddresses []= $elem96;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 13:
           if ($ftype == TType::STRUCT) {
             $this->userConfigurationData = new 
\Airavata\Model\Workspace\Experiment\UserConfigurationData();
             $xfer += $this->userConfigurationData->read($input);
@@ -3587,50 +3697,50 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 12:
+        case 14:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->workflowExecutionInstanceId);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 13:
+        case 15:
           if ($ftype == TType::LST) {
             $this->experimentInputs = array();
-            $_size84 = 0;
-            $_etype87 = 0;
-            $xfer += $input->readListBegin($_etype87, $_size84);
-            for ($_i88 = 0; $_i88 < $_size84; ++$_i88)
+            $_size97 = 0;
+            $_etype100 = 0;
+            $xfer += $input->readListBegin($_etype100, $_size97);
+            for ($_i101 = 0; $_i101 < $_size97; ++$_i101)
             {
-              $elem89 = null;
-              $elem89 = new 
\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
-              $xfer += $elem89->read($input);
-              $this->experimentInputs []= $elem89;
+              $elem102 = null;
+              $elem102 = new 
\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
+              $xfer += $elem102->read($input);
+              $this->experimentInputs []= $elem102;
             }
             $xfer += $input->readListEnd();
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 14:
+        case 16:
           if ($ftype == TType::LST) {
             $this->experimentOutputs = array();
-            $_size90 = 0;
-            $_etype93 = 0;
-            $xfer += $input->readListBegin($_etype93, $_size90);
-            for ($_i94 = 0; $_i94 < $_size90; ++$_i94)
+            $_size103 = 0;
+            $_etype106 = 0;
+            $xfer += $input->readListBegin($_etype106, $_size103);
+            for ($_i107 = 0; $_i107 < $_size103; ++$_i107)
             {
-              $elem95 = null;
-              $elem95 = new 
\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
-              $xfer += $elem95->read($input);
-              $this->experimentOutputs []= $elem95;
+              $elem108 = null;
+              $elem108 = new 
\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem108->read($input);
+              $this->experimentOutputs []= $elem108;
             }
             $xfer += $input->readListEnd();
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 15:
+        case 17:
           if ($ftype == TType::STRUCT) {
             $this->experimentStatus = new 
\Airavata\Model\Workspace\Experiment\ExperimentStatus();
             $xfer += $this->experimentStatus->read($input);
@@ -3638,54 +3748,54 @@ class Experiment {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 16:
+        case 18:
           if ($ftype == TType::LST) {
             $this->stateChangeList = array();
-            $_size96 = 0;
-            $_etype99 = 0;
-            $xfer += $input->readListBegin($_etype99, $_size96);
-            for ($_i100 = 0; $_i100 < $_size96; ++$_i100)
+            $_size109 = 0;
+            $_etype112 = 0;
+            $xfer += $input->readListBegin($_etype112, $_size109);
+            for ($_i113 = 0; $_i113 < $_size109; ++$_i113)
             {
-              $elem101 = null;
-              $elem101 = new 
\Airavata\Model\Workspace\Experiment\WorkflowNodeStatus();
-              $xfer += $elem101->read($input);
-              $this->stateChangeList []= $elem101;
+              $elem114 = null;
+              $elem114 = new 
\Airavata\Model\Workspace\Experiment\WorkflowNodeStatus();
+              $xfer += $elem114->read($input);
+              $this->stateChangeList []= $elem114;
             }
             $xfer += $input->readListEnd();
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 17:
+        case 19:
           if ($ftype == TType::LST) {
             $this->workflowNodeDetailsList = array();
-            $_size102 = 0;
-            $_etype105 = 0;
-            $xfer += $input->readListBegin($_etype105, $_size102);
-            for ($_i106 = 0; $_i106 < $_size102; ++$_i106)
+            $_size115 = 0;
+            $_etype118 = 0;
+            $xfer += $input->readListBegin($_etype118, $_size115);
+            for ($_i119 = 0; $_i119 < $_size115; ++$_i119)
             {
-              $elem107 = null;
-              $elem107 = new 
\Airavata\Model\Workspace\Experiment\WorkflowNodeDetails();
-              $xfer += $elem107->read($input);
-              $this->workflowNodeDetailsList []= $elem107;
+              $elem120 = null;
+              $elem120 = new 
\Airavata\Model\Workspace\Experiment\WorkflowNodeDetails();
+              $xfer += $elem120->read($input);
+              $this->workflowNodeDetailsList []= $elem120;
             }
             $xfer += $input->readListEnd();
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 18:
+        case 20:
           if ($ftype == TType::LST) {
             $this->errors = array();
-            $_size108 = 0;
-            $_etype111 = 0;
-            $xfer += $input->readListBegin($_etype111, $_size108);
-            for ($_i112 = 0; $_i112 < $_size108; ++$_i112)
+            $_size121 = 0;
+            $_etype124 = 0;
+            $xfer += $input->readListBegin($_etype124, $_size121);
+            for ($_i125 = 0; $_i125 < $_size121; ++$_i125)
             {
-              $elem113 = null;
-              $elem113 = new 
\Airavata\Model\Workspace\Experiment\ErrorDetails();
-              $xfer += $elem113->read($input);
-              $this->errors []= $elem113;
+              $elem126 = null;
+              $elem126 = new 
\Airavata\Model\Workspace\Experiment\ErrorDetails();
+              $xfer += $elem126->read($input);
+              $this->errors []= $elem126;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3755,16 +3865,38 @@ class Experiment {
       $xfer += $output->writeString($this->workflowTemplateVersion);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->enableEmailNotification !== null) {
+      $xfer += $output->writeFieldBegin('enableEmailNotification', 
TType::BOOL, 11);
+      $xfer += $output->writeBool($this->enableEmailNotification);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->emailAddresses !== null) {
+      if (!is_array($this->emailAddresses)) {
+        throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('emailAddresses', TType::LST, 12);
+      {
+        $output->writeListBegin(TType::STRING, count($this->emailAddresses));
+        {
+          foreach ($this->emailAddresses as $iter127)
+          {
+            $xfer += $output->writeString($iter127);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
     if ($this->userConfigurationData !== null) {
       if (!is_object($this->userConfigurationData)) {
         throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('userConfigurationData', 
TType::STRUCT, 11);
+      $xfer += $output->writeFieldBegin('userConfigurationData', 
TType::STRUCT, 13);
       $xfer += $this->userConfigurationData->write($output);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->workflowExecutionInstanceId !== null) {
-      $xfer += $output->writeFieldBegin('workflowExecutionInstanceId', 
TType::STRING, 12);
+      $xfer += $output->writeFieldBegin('workflowExecutionInstanceId', 
TType::STRING, 14);
       $xfer += $output->writeString($this->workflowExecutionInstanceId);
       $xfer += $output->writeFieldEnd();
     }
@@ -3772,13 +3904,13 @@ class Experiment {
       if (!is_array($this->experimentInputs)) {
         throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('experimentInputs', TType::LST, 13);
+      $xfer += $output->writeFieldBegin('experimentInputs', TType::LST, 15);
       {
         $output->writeListBegin(TType::STRUCT, count($this->experimentInputs));
         {
-          foreach ($this->experimentInputs as $iter114)
+          foreach ($this->experimentInputs as $iter128)
           {
-            $xfer += $iter114->write($output);
+            $xfer += $iter128->write($output);
           }
         }
         $output->writeListEnd();
@@ -3789,13 +3921,13 @@ class Experiment {
       if (!is_array($this->experimentOutputs)) {
         throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('experimentOutputs', TType::LST, 14);
+      $xfer += $output->writeFieldBegin('experimentOutputs', TType::LST, 16);
       {
         $output->writeListBegin(TType::STRUCT, 
count($this->experimentOutputs));
         {
-          foreach ($this->experimentOutputs as $iter115)
+          foreach ($this->experimentOutputs as $iter129)
           {
-            $xfer += $iter115->write($output);
+            $xfer += $iter129->write($output);
           }
         }
         $output->writeListEnd();
@@ -3806,7 +3938,7 @@ class Experiment {
       if (!is_object($this->experimentStatus)) {
         throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('experimentStatus', TType::STRUCT, 15);
+      $xfer += $output->writeFieldBegin('experimentStatus', TType::STRUCT, 17);
       $xfer += $this->experimentStatus->write($output);
       $xfer += $output->writeFieldEnd();
     }
@@ -3814,13 +3946,13 @@ class Experiment {
       if (!is_array($this->stateChangeList)) {
         throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('stateChangeList', TType::LST, 16);
+      $xfer += $output->writeFieldBegin('stateChangeList', TType::LST, 18);
       {
         $output->writeListBegin(TType::STRUCT, count($this->stateChangeList));
         {
-          foreach ($this->stateChangeList as $iter116)
+          foreach ($this->stateChangeList as $iter130)
           {
-            $xfer += $iter116->write($output);
+            $xfer += $iter130->write($output);
           }
         }
         $output->writeListEnd();
@@ -3831,13 +3963,13 @@ class Experiment {
       if (!is_array($this->workflowNodeDetailsList)) {
         throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('workflowNodeDetailsList', TType::LST, 
17);
+      $xfer += $output->writeFieldBegin('workflowNodeDetailsList', TType::LST, 
19);
       {
         $output->writeListBegin(TType::STRUCT, 
count($this->workflowNodeDetailsList));
         {
-          foreach ($this->workflowNodeDetailsList as $iter117)
+          foreach ($this->workflowNodeDetailsList as $iter131)
           {
-            $xfer += $iter117->write($output);
+            $xfer += $iter131->write($output);
           }
         }
         $output->writeListEnd();
@@ -3848,13 +3980,13 @@ class Experiment {
       if (!is_array($this->errors)) {
         throw new TProtocolException('Bad type in structure.', 
TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('errors', TType::LST, 18);
+      $xfer += $output->writeFieldBegin('errors', TType::LST, 20);
       {
         $output->writeListBegin(TType::STRUCT, count($this->errors));
         {
-          foreach ($this->errors as $iter118)
+          foreach ($this->errors as $iter132)
           {
-            $xfer += $iter118->write($output);
+            $xfer += $iter132->write($output);
           }
         }
         $output->writeListEnd();
@@ -4038,15 +4170,15 @@ class ExperimentSummary {
         case 9:
           if ($ftype == TType::LST) {
             $this->errors = array();
-            $_size119 = 0;
-            $_etype122 = 0;
-            $xfer += $input->readListBegin($_etype122, $_size119);
-            for ($_i123 = 0; $_i123 < $_size119; ++$_i123)
+            $_size133 = 0;
+            $_etype136 = 0;
+            $xfer += $input->readListBegin($_etype136, $_size133);
+            for ($_i137 = 0; $_i137 < $_size133; ++$_i137)
             {
-              $elem124 = null;
-              $elem124 = new 
\Airavata\Model\Workspace\Experiment\ErrorDetails();
-              $xfer += $elem124->read($input);
-              $this->errors []= $elem124;
+              $elem138 = null;
+              $elem138 = new 
\Airavata\Model\Workspace\Experiment\ErrorDetails();
+              $xfer += $elem138->read($input);
+              $this->errors []= $elem138;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -4117,9 +4249,9 @@ class ExperimentSummary {
       {
         $output->writeListBegin(TType::STRUCT, count($this->errors));
         {
-          foreach ($this->errors as $iter125)
+          foreach ($this->errors as $iter139)
           {
-            $xfer += $iter125->write($output);
+            $xfer += $iter139->write($output);
           }
         }
         $output->writeListEnd();

Reply via email to