You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2014/05/16 17:21:02 UTC

[2/2] git commit: adding generated code for experiment validation

adding generated code for experiment validation


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

Branch: refs/heads/master
Commit: 23628a6d953b8ddc1d8bf06cef07b8b01eef9626
Parents: e9c0b4d
Author: Chathuri Wimalasena <ka...@gmail.com>
Authored: Fri May 16 11:20:54 2014 -0400
Committer: Chathuri Wimalasena <ka...@gmail.com>
Committed: Fri May 16 11:20:54 2014 -0400

----------------------------------------------------------------------
 .../server/handler/AiravataServerHandler.java   |   4 +-
 .../java/org/apache/airavata/api/Airavata.java  | 153 +++++++--
 .../src/main/resources/lib/Airavata.cpp         |  38 ++-
 .../src/main/resources/lib/Airavata.h           |  29 +-
 .../resources/lib/Airavata_server.skeleton.cpp  |   2 +-
 .../resources/lib/experimentModel_types.cpp     | 279 ++++++++++++++---
 .../main/resources/lib/experimentModel_types.h  |  97 ++++++
 .../resources/lib/Airavata/API/Airavata.php     |  32 +-
 .../Model/Workspace/Experiment/Types.php        | 312 ++++++++++++++++---
 .../model/workspace/experiment/Experiment.java  | 180 +++++------
 .../airavataAPI.thrift                          |   2 +-
 .../experimentModel.thrift                      |   6 +-
 12 files changed, 899 insertions(+), 235 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
index 474b040..9513fb2 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
@@ -477,6 +477,7 @@ public class AiravataServerHandler implements Airavata.Iface {
      * Launch a previously created and configured experiment. Airavata Server will then start processing the request and appropriate
      * notifications and intermediate and output data will be subsequently available for this experiment.
      *
+     *
      * @param airavataExperimentId   The identifier for the requested experiment. This is returned during the create experiment step.
      * @param airavataCredStoreToken :
      *                               A requirement to execute experiments within Airavata is to first register the targeted remote computational account
@@ -508,7 +509,7 @@ public class AiravataServerHandler implements Airavata.Iface {
      *          rather an Airavata Administrator will be notified to take corrective action.
      */
     @Override
-    public void launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws InvalidRequestException, ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException {
+    public ValidationResults launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws InvalidRequestException, ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException {
         final OrchestratorService.Client orchestratorClient = getOrchestratorClient();
         final String expID = airavataExperimentId;
         (new Thread(){
@@ -524,6 +525,7 @@ public class AiravataServerHandler implements Airavata.Iface {
                 }
             }
         }).start();
+        return null;
     }
 
 	private OrchestratorService.Client getOrchestratorClient() {

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
index 9ef5de9..cfae95e 100644
--- a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
@@ -288,7 +288,7 @@ import org.slf4j.LoggerFactory;
      * @param airavataExperimentId
      * @param airavataCredStoreToken
      */
-    public void launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException;
+    public org.apache.airavata.model.workspace.experiment.ValidationResults launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException;
 
     public org.apache.airavata.model.workspace.experiment.ExperimentStatus getExperimentStatus(String airavataExperimentId) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException;
 
@@ -829,10 +829,10 @@ import org.slf4j.LoggerFactory;
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "validateExperiment failed: unknown result");
     }
 
-    public void launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException
+    public org.apache.airavata.model.workspace.experiment.ValidationResults launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException
     {
       send_launchExperiment(airavataExperimentId, airavataCredStoreToken);
-      recv_launchExperiment();
+      return recv_launchExperiment();
     }
 
     public void send_launchExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.thrift.TException
@@ -843,10 +843,13 @@ import org.slf4j.LoggerFactory;
       sendBase("launchExperiment", args);
     }
 
-    public void recv_launchExperiment() throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException
+    public org.apache.airavata.model.workspace.experiment.ValidationResults recv_launchExperiment() throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException
     {
       launchExperiment_result result = new launchExperiment_result();
       receiveBase(result, "launchExperiment");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
       if (result.ire != null) {
         throw result.ire;
       }
@@ -859,7 +862,7 @@ import org.slf4j.LoggerFactory;
       if (result.ase != null) {
         throw result.ase;
       }
-      return;
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "launchExperiment failed: unknown result");
     }
 
     public org.apache.airavata.model.workspace.experiment.ExperimentStatus getExperimentStatus(String airavataExperimentId) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException
@@ -1476,13 +1479,13 @@ import org.slf4j.LoggerFactory;
         prot.writeMessageEnd();
       }
 
-      public void getResult() throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException {
+      public org.apache.airavata.model.workspace.experiment.ValidationResults getResult() throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new IllegalStateException("Method call not finished!");
         }
         org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
         org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
-        (new Client(prot)).recv_launchExperiment();
+        return (new Client(prot)).recv_launchExperiment();
       }
     }
 
@@ -2047,7 +2050,7 @@ import org.slf4j.LoggerFactory;
       public launchExperiment_result getResult(I iface, launchExperiment_args args) throws org.apache.thrift.TException {
         launchExperiment_result result = new launchExperiment_result();
         try {
-          iface.launchExperiment(args.airavataExperimentId, args.airavataCredStoreToken);
+          result.success = iface.launchExperiment(args.airavataExperimentId, args.airavataCredStoreToken);
         } catch (org.apache.airavata.api.error.InvalidRequestException ire) {
           result.ire = ire;
         } catch (org.apache.airavata.api.error.ExperimentNotFoundException enf) {
@@ -3061,7 +3064,7 @@ import org.slf4j.LoggerFactory;
       }
     }
 
-    public static class launchExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, launchExperiment_args, Void> {
+    public static class launchExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, launchExperiment_args, org.apache.airavata.model.workspace.experiment.ValidationResults> {
       public launchExperiment() {
         super("launchExperiment");
       }
@@ -3070,11 +3073,12 @@ import org.slf4j.LoggerFactory;
         return new launchExperiment_args();
       }
 
-      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ValidationResults> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Void>() { 
-          public void onComplete(Void o) {
+        return new AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ValidationResults>() { 
+          public void onComplete(org.apache.airavata.model.workspace.experiment.ValidationResults o) {
             launchExperiment_result result = new launchExperiment_result();
+            result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -3127,7 +3131,7 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, launchExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
+      public void start(I iface, launchExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ValidationResults> resultHandler) throws TException {
         iface.launchExperiment(args.airavataExperimentId, args.airavataCredStoreToken,resultHandler);
       }
     }
@@ -16349,6 +16353,7 @@ import org.slf4j.LoggerFactory;
   public static class launchExperiment_result implements org.apache.thrift.TBase<launchExperiment_result, launchExperiment_result._Fields>, java.io.Serializable, Cloneable, Comparable<launchExperiment_result>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("launchExperiment_result");
 
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRUCT, (short)0);
     private static final org.apache.thrift.protocol.TField IRE_FIELD_DESC = new org.apache.thrift.protocol.TField("ire", org.apache.thrift.protocol.TType.STRUCT, (short)1);
     private static final org.apache.thrift.protocol.TField ENF_FIELD_DESC = new org.apache.thrift.protocol.TField("enf", org.apache.thrift.protocol.TType.STRUCT, (short)2);
     private static final org.apache.thrift.protocol.TField ACE_FIELD_DESC = new org.apache.thrift.protocol.TField("ace", org.apache.thrift.protocol.TType.STRUCT, (short)3);
@@ -16360,6 +16365,7 @@ import org.slf4j.LoggerFactory;
       schemes.put(TupleScheme.class, new launchExperiment_resultTupleSchemeFactory());
     }
 
+    public org.apache.airavata.model.workspace.experiment.ValidationResults success; // required
     public org.apache.airavata.api.error.InvalidRequestException ire; // required
     public org.apache.airavata.api.error.ExperimentNotFoundException enf; // required
     public org.apache.airavata.api.error.AiravataClientException ace; // required
@@ -16367,6 +16373,7 @@ import org.slf4j.LoggerFactory;
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     @SuppressWarnings("all") public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
       IRE((short)1, "ire"),
       ENF((short)2, "enf"),
       ACE((short)3, "ace"),
@@ -16385,6 +16392,8 @@ import org.slf4j.LoggerFactory;
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
           case 1: // IRE
             return IRE;
           case 2: // ENF
@@ -16436,6 +16445,8 @@ import org.slf4j.LoggerFactory;
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workspace.experiment.ValidationResults.class)));
       tmpMap.put(_Fields.IRE, new org.apache.thrift.meta_data.FieldMetaData("ire", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT)));
       tmpMap.put(_Fields.ENF, new org.apache.thrift.meta_data.FieldMetaData("enf", org.apache.thrift.TFieldRequirementType.DEFAULT, 
@@ -16452,12 +16463,14 @@ import org.slf4j.LoggerFactory;
     }
 
     public launchExperiment_result(
+      org.apache.airavata.model.workspace.experiment.ValidationResults success,
       org.apache.airavata.api.error.InvalidRequestException ire,
       org.apache.airavata.api.error.ExperimentNotFoundException enf,
       org.apache.airavata.api.error.AiravataClientException ace,
       org.apache.airavata.api.error.AiravataSystemException ase)
     {
       this();
+      this.success = success;
       this.ire = ire;
       this.enf = enf;
       this.ace = ace;
@@ -16468,6 +16481,9 @@ import org.slf4j.LoggerFactory;
      * Performs a deep copy on <i>other</i>.
      */
     public launchExperiment_result(launchExperiment_result other) {
+      if (other.isSetSuccess()) {
+        this.success = new org.apache.airavata.model.workspace.experiment.ValidationResults(other.success);
+      }
       if (other.isSetIre()) {
         this.ire = new org.apache.airavata.api.error.InvalidRequestException(other.ire);
       }
@@ -16488,12 +16504,37 @@ import org.slf4j.LoggerFactory;
 
     @Override
     public void clear() {
+      this.success = null;
       this.ire = null;
       this.enf = null;
       this.ace = null;
       this.ase = null;
     }
 
+    public org.apache.airavata.model.workspace.experiment.ValidationResults getSuccess() {
+      return this.success;
+    }
+
+    public launchExperiment_result setSuccess(org.apache.airavata.model.workspace.experiment.ValidationResults success) {
+      this.success = success;
+      return this;
+    }
+
+    public void unsetSuccess() {
+      this.success = null;
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return this.success != null;
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      if (!value) {
+        this.success = null;
+      }
+    }
+
     public org.apache.airavata.api.error.InvalidRequestException getIre() {
       return this.ire;
     }
@@ -16592,6 +16633,14 @@ import org.slf4j.LoggerFactory;
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((org.apache.airavata.model.workspace.experiment.ValidationResults)value);
+        }
+        break;
+
       case IRE:
         if (value == null) {
           unsetIre();
@@ -16629,6 +16678,9 @@ import org.slf4j.LoggerFactory;
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case SUCCESS:
+        return getSuccess();
+
       case IRE:
         return getIre();
 
@@ -16652,6 +16704,8 @@ import org.slf4j.LoggerFactory;
       }
 
       switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
       case IRE:
         return isSetIre();
       case ENF:
@@ -16677,6 +16731,15 @@ import org.slf4j.LoggerFactory;
       if (that == null)
         return false;
 
+      boolean this_present_success = true && this.isSetSuccess();
+      boolean that_present_success = true && that.isSetSuccess();
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (!this.success.equals(that.success))
+          return false;
+      }
+
       boolean this_present_ire = true && this.isSetIre();
       boolean that_present_ire = true && that.isSetIre();
       if (this_present_ire || that_present_ire) {
@@ -16729,6 +16792,16 @@ import org.slf4j.LoggerFactory;
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetIre()).compareTo(other.isSetIre());
       if (lastComparison != 0) {
         return lastComparison;
@@ -16789,6 +16862,14 @@ import org.slf4j.LoggerFactory;
       StringBuilder sb = new StringBuilder("launchExperiment_result(");
       boolean first = true;
 
+      sb.append("success:");
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("ire:");
       if (this.ire == null) {
         sb.append("null");
@@ -16827,6 +16908,9 @@ import org.slf4j.LoggerFactory;
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
       // check for sub-struct validity
+      if (success != null) {
+        success.validate();
+      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -16863,6 +16947,15 @@ import org.slf4j.LoggerFactory;
             break;
           }
           switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.success = new org.apache.airavata.model.workspace.experiment.ValidationResults();
+                struct.success.read(iprot);
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             case 1: // IRE
               if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
                 struct.ire = new org.apache.airavata.api.error.InvalidRequestException();
@@ -16914,6 +17007,11 @@ import org.slf4j.LoggerFactory;
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.success != null) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          struct.success.write(oprot);
+          oprot.writeFieldEnd();
+        }
         if (struct.ire != null) {
           oprot.writeFieldBegin(IRE_FIELD_DESC);
           struct.ire.write(oprot);
@@ -16952,19 +17050,25 @@ import org.slf4j.LoggerFactory;
       public void write(org.apache.thrift.protocol.TProtocol prot, launchExperiment_result struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
         BitSet optionals = new BitSet();
-        if (struct.isSetIre()) {
+        if (struct.isSetSuccess()) {
           optionals.set(0);
         }
-        if (struct.isSetEnf()) {
+        if (struct.isSetIre()) {
           optionals.set(1);
         }
-        if (struct.isSetAce()) {
+        if (struct.isSetEnf()) {
           optionals.set(2);
         }
-        if (struct.isSetAse()) {
+        if (struct.isSetAce()) {
           optionals.set(3);
         }
-        oprot.writeBitSet(optionals, 4);
+        if (struct.isSetAse()) {
+          optionals.set(4);
+        }
+        oprot.writeBitSet(optionals, 5);
+        if (struct.isSetSuccess()) {
+          struct.success.write(oprot);
+        }
         if (struct.isSetIre()) {
           struct.ire.write(oprot);
         }
@@ -16982,23 +17086,28 @@ import org.slf4j.LoggerFactory;
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, launchExperiment_result struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
-        BitSet incoming = iprot.readBitSet(4);
+        BitSet incoming = iprot.readBitSet(5);
         if (incoming.get(0)) {
+          struct.success = new org.apache.airavata.model.workspace.experiment.ValidationResults();
+          struct.success.read(iprot);
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
           struct.ire = new org.apache.airavata.api.error.InvalidRequestException();
           struct.ire.read(iprot);
           struct.setIreIsSet(true);
         }
-        if (incoming.get(1)) {
+        if (incoming.get(2)) {
           struct.enf = new org.apache.airavata.api.error.ExperimentNotFoundException();
           struct.enf.read(iprot);
           struct.setEnfIsSet(true);
         }
-        if (incoming.get(2)) {
+        if (incoming.get(3)) {
           struct.ace = new org.apache.airavata.api.error.AiravataClientException();
           struct.ace.read(iprot);
           struct.setAceIsSet(true);
         }
-        if (incoming.get(3)) {
+        if (incoming.get(4)) {
           struct.ase = new org.apache.airavata.api.error.AiravataSystemException();
           struct.ase.read(iprot);
           struct.setAseIsSet(true);

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
index 66aa916..96e3c9a 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
@@ -2948,6 +2948,14 @@ uint32_t Airavata_launchExperiment_result::read(::apache::thrift::protocol::TPro
     }
     switch (fid)
     {
+      case 0:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->success.read(iprot);
+          this->__isset.success = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       case 1:
         if (ftype == ::apache::thrift::protocol::T_STRUCT) {
           xfer += this->ire.read(iprot);
@@ -2998,7 +3006,11 @@ uint32_t Airavata_launchExperiment_result::write(::apache::thrift::protocol::TPr
 
   xfer += oprot->writeStructBegin("Airavata_launchExperiment_result");
 
-  if (this->__isset.ire) {
+  if (this->__isset.success) {
+    xfer += oprot->writeFieldBegin("success", ::apache::thrift::protocol::T_STRUCT, 0);
+    xfer += this->success.write(oprot);
+    xfer += oprot->writeFieldEnd();
+  } else if (this->__isset.ire) {
     xfer += oprot->writeFieldBegin("ire", ::apache::thrift::protocol::T_STRUCT, 1);
     xfer += this->ire.write(oprot);
     xfer += oprot->writeFieldEnd();
@@ -3040,6 +3052,14 @@ uint32_t Airavata_launchExperiment_presult::read(::apache::thrift::protocol::TPr
     }
     switch (fid)
     {
+      case 0:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += (*(this->success)).read(iprot);
+          this->__isset.success = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       case 1:
         if (ftype == ::apache::thrift::protocol::T_STRUCT) {
           xfer += this->ire.read(iprot);
@@ -5045,10 +5065,10 @@ bool AiravataClient::recv_validateExperiment()
   throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "validateExperiment failed: unknown result");
 }
 
-void AiravataClient::launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken)
+void AiravataClient::launchExperiment( ::ValidationResults& _return, const std::string& airavataExperimentId, const std::string& airavataCredStoreToken)
 {
   send_launchExperiment(airavataExperimentId, airavataCredStoreToken);
-  recv_launchExperiment();
+  recv_launchExperiment(_return);
 }
 
 void AiravataClient::send_launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken)
@@ -5066,7 +5086,7 @@ void AiravataClient::send_launchExperiment(const std::string& airavataExperiment
   oprot_->getTransport()->flush();
 }
 
-void AiravataClient::recv_launchExperiment()
+void AiravataClient::recv_launchExperiment( ::ValidationResults& _return)
 {
 
   int32_t rseqid = 0;
@@ -5092,10 +5112,15 @@ void AiravataClient::recv_launchExperiment()
     iprot_->getTransport()->readEnd();
   }
   Airavata_launchExperiment_presult result;
+  result.success = &_return;
   result.read(iprot_);
   iprot_->readMessageEnd();
   iprot_->getTransport()->readEnd();
 
+  if (result.__isset.success) {
+    // _return pointer has now been filled
+    return;
+  }
   if (result.__isset.ire) {
     throw result.ire;
   }
@@ -5108,7 +5133,7 @@ void AiravataClient::recv_launchExperiment()
   if (result.__isset.ase) {
     throw result.ase;
   }
-  return;
+  throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "launchExperiment failed: unknown result");
 }
 
 void AiravataClient::getExperimentStatus( ::ExperimentStatus& _return, const std::string& airavataExperimentId)
@@ -6272,7 +6297,8 @@ void AiravataProcessor::process_launchExperiment(int32_t seqid, ::apache::thrift
 
   Airavata_launchExperiment_result result;
   try {
-    iface_->launchExperiment(args.airavataExperimentId, args.airavataCredStoreToken);
+    iface_->launchExperiment(result.success, args.airavataExperimentId, args.airavataCredStoreToken);
+    result.__isset.success = true;
   } catch ( ::airavata::api::error::InvalidRequestException &ire) {
     result.ire = ire;
     result.__isset.ire = true;

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
index c12a0dd..b4f23d5 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
@@ -28,7 +28,7 @@ class AiravataIf {
   virtual void updateExperimentConfiguration(const std::string& airavataExperimentId, const  ::UserConfigurationData& userConfiguration) = 0;
   virtual void updateResourceScheduleing(const std::string& airavataExperimentId, const  ::ComputationalResourceScheduling& resourceScheduling) = 0;
   virtual bool validateExperiment(const std::string& airavataExperimentId) = 0;
-  virtual void launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) = 0;
+  virtual void launchExperiment( ::ValidationResults& _return, const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) = 0;
   virtual void getExperimentStatus( ::ExperimentStatus& _return, const std::string& airavataExperimentId) = 0;
   virtual void getExperimentOutputs(std::vector< ::DataObjectType> & _return, const std::string& airavataExperimentId) = 0;
   virtual void getJobStatuses(std::map<std::string,  ::JobStatus> & _return, const std::string& airavataExperimentId) = 0;
@@ -103,7 +103,7 @@ class AiravataNull : virtual public AiravataIf {
     bool _return = false;
     return _return;
   }
-  void launchExperiment(const std::string& /* airavataExperimentId */, const std::string& /* airavataCredStoreToken */) {
+  void launchExperiment( ::ValidationResults& /* _return */, const std::string& /* airavataExperimentId */, const std::string& /* airavataCredStoreToken */) {
     return;
   }
   void getExperimentStatus( ::ExperimentStatus& /* _return */, const std::string& /* airavataExperimentId */) {
@@ -1789,7 +1789,8 @@ class Airavata_launchExperiment_pargs {
 };
 
 typedef struct _Airavata_launchExperiment_result__isset {
-  _Airavata_launchExperiment_result__isset() : ire(false), enf(false), ace(false), ase(false) {}
+  _Airavata_launchExperiment_result__isset() : success(false), ire(false), enf(false), ace(false), ase(false) {}
+  bool success;
   bool ire;
   bool enf;
   bool ace;
@@ -1804,6 +1805,7 @@ class Airavata_launchExperiment_result {
 
   virtual ~Airavata_launchExperiment_result() throw() {}
 
+   ::ValidationResults success;
    ::airavata::api::error::InvalidRequestException ire;
    ::airavata::api::error::ExperimentNotFoundException enf;
    ::airavata::api::error::AiravataClientException ace;
@@ -1811,6 +1813,10 @@ class Airavata_launchExperiment_result {
 
   _Airavata_launchExperiment_result__isset __isset;
 
+  void __set_success(const  ::ValidationResults& val) {
+    success = val;
+  }
+
   void __set_ire(const  ::airavata::api::error::InvalidRequestException& val) {
     ire = val;
   }
@@ -1829,6 +1835,8 @@ class Airavata_launchExperiment_result {
 
   bool operator == (const Airavata_launchExperiment_result & rhs) const
   {
+    if (!(success == rhs.success))
+      return false;
     if (!(ire == rhs.ire))
       return false;
     if (!(enf == rhs.enf))
@@ -1851,7 +1859,8 @@ class Airavata_launchExperiment_result {
 };
 
 typedef struct _Airavata_launchExperiment_presult__isset {
-  _Airavata_launchExperiment_presult__isset() : ire(false), enf(false), ace(false), ase(false) {}
+  _Airavata_launchExperiment_presult__isset() : success(false), ire(false), enf(false), ace(false), ase(false) {}
+  bool success;
   bool ire;
   bool enf;
   bool ace;
@@ -1864,6 +1873,7 @@ class Airavata_launchExperiment_presult {
 
   virtual ~Airavata_launchExperiment_presult() throw() {}
 
+   ::ValidationResults* success;
    ::airavata::api::error::InvalidRequestException ire;
    ::airavata::api::error::ExperimentNotFoundException enf;
    ::airavata::api::error::AiravataClientException ace;
@@ -2575,9 +2585,9 @@ class AiravataClient : virtual public AiravataIf {
   bool validateExperiment(const std::string& airavataExperimentId);
   void send_validateExperiment(const std::string& airavataExperimentId);
   bool recv_validateExperiment();
-  void launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken);
+  void launchExperiment( ::ValidationResults& _return, const std::string& airavataExperimentId, const std::string& airavataCredStoreToken);
   void send_launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken);
-  void recv_launchExperiment();
+  void recv_launchExperiment( ::ValidationResults& _return);
   void getExperimentStatus( ::ExperimentStatus& _return, const std::string& airavataExperimentId);
   void send_getExperimentStatus(const std::string& airavataExperimentId);
   void recv_getExperimentStatus( ::ExperimentStatus& _return);
@@ -2802,13 +2812,14 @@ class AiravataMultiface : virtual public AiravataIf {
     return ifaces_[i]->validateExperiment(airavataExperimentId);
   }
 
-  void launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) {
+  void launchExperiment( ::ValidationResults& _return, const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) {
     size_t sz = ifaces_.size();
     size_t i = 0;
     for (; i < (sz - 1); ++i) {
-      ifaces_[i]->launchExperiment(airavataExperimentId, airavataCredStoreToken);
+      ifaces_[i]->launchExperiment(_return, airavataExperimentId, airavataCredStoreToken);
     }
-    ifaces_[i]->launchExperiment(airavataExperimentId, airavataCredStoreToken);
+    ifaces_[i]->launchExperiment(_return, airavataExperimentId, airavataCredStoreToken);
+    return;
   }
 
   void getExperimentStatus( ::ExperimentStatus& _return, const std::string& airavataExperimentId) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
index 30e57c0..d413309 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
@@ -87,7 +87,7 @@ class AiravataHandler : virtual public AiravataIf {
     printf("validateExperiment\n");
   }
 
-  void launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) {
+  void launchExperiment( ::ValidationResults& _return, const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) {
     // Your implementation goes here
     printf("launchExperiment\n");
   }

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.cpp
index e02c462..9e84080 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.cpp
@@ -2483,6 +2483,185 @@ void swap(WorkflowNodeDetails &a, WorkflowNodeDetails &b) {
   swap(a.__isset, b.__isset);
 }
 
+const char* ValidatorResult::ascii_fingerprint = "EB04A806CFFC9025AEE48CFFDC378A86";
+const uint8_t ValidatorResult::binary_fingerprint[16] = {0xEB,0x04,0xA8,0x06,0xCF,0xFC,0x90,0x25,0xAE,0xE4,0x8C,0xFF,0xDC,0x37,0x8A,0x86};
+
+uint32_t ValidatorResult::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+  uint32_t xfer = 0;
+  std::string fname;
+  ::apache::thrift::protocol::TType ftype;
+  int16_t fid;
+
+  xfer += iprot->readStructBegin(fname);
+
+  using ::apache::thrift::protocol::TProtocolException;
+
+  bool isset_result = false;
+
+  while (true)
+  {
+    xfer += iprot->readFieldBegin(fname, ftype, fid);
+    if (ftype == ::apache::thrift::protocol::T_STOP) {
+      break;
+    }
+    switch (fid)
+    {
+      case 1:
+        if (ftype == ::apache::thrift::protocol::T_BOOL) {
+          xfer += iprot->readBool(this->result);
+          isset_result = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 2:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->errorDetails);
+          this->__isset.errorDetails = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      default:
+        xfer += iprot->skip(ftype);
+        break;
+    }
+    xfer += iprot->readFieldEnd();
+  }
+
+  xfer += iprot->readStructEnd();
+
+  if (!isset_result)
+    throw TProtocolException(TProtocolException::INVALID_DATA);
+  return xfer;
+}
+
+uint32_t ValidatorResult::write(::apache::thrift::protocol::TProtocol* oprot) const {
+  uint32_t xfer = 0;
+  xfer += oprot->writeStructBegin("ValidatorResult");
+
+  xfer += oprot->writeFieldBegin("result", ::apache::thrift::protocol::T_BOOL, 1);
+  xfer += oprot->writeBool(this->result);
+  xfer += oprot->writeFieldEnd();
+
+  if (this->__isset.errorDetails) {
+    xfer += oprot->writeFieldBegin("errorDetails", ::apache::thrift::protocol::T_STRING, 2);
+    xfer += oprot->writeString(this->errorDetails);
+    xfer += oprot->writeFieldEnd();
+  }
+  xfer += oprot->writeFieldStop();
+  xfer += oprot->writeStructEnd();
+  return xfer;
+}
+
+void swap(ValidatorResult &a, ValidatorResult &b) {
+  using ::std::swap;
+  swap(a.result, b.result);
+  swap(a.errorDetails, b.errorDetails);
+  swap(a.__isset, b.__isset);
+}
+
+const char* ValidationResults::ascii_fingerprint = "E73BC8630EE405DA5FB801ED852143D2";
+const uint8_t ValidationResults::binary_fingerprint[16] = {0xE7,0x3B,0xC8,0x63,0x0E,0xE4,0x05,0xDA,0x5F,0xB8,0x01,0xED,0x85,0x21,0x43,0xD2};
+
+uint32_t ValidationResults::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+  uint32_t xfer = 0;
+  std::string fname;
+  ::apache::thrift::protocol::TType ftype;
+  int16_t fid;
+
+  xfer += iprot->readStructBegin(fname);
+
+  using ::apache::thrift::protocol::TProtocolException;
+
+  bool isset_validationState = false;
+  bool isset_validationResultList = false;
+
+  while (true)
+  {
+    xfer += iprot->readFieldBegin(fname, ftype, fid);
+    if (ftype == ::apache::thrift::protocol::T_STOP) {
+      break;
+    }
+    switch (fid)
+    {
+      case 1:
+        if (ftype == ::apache::thrift::protocol::T_BOOL) {
+          xfer += iprot->readBool(this->validationState);
+          isset_validationState = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 2:
+        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)
+            {
+              xfer += this->validationResultList[_i79].read(iprot);
+            }
+            xfer += iprot->readListEnd();
+          }
+          isset_validationResultList = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      default:
+        xfer += iprot->skip(ftype);
+        break;
+    }
+    xfer += iprot->readFieldEnd();
+  }
+
+  xfer += iprot->readStructEnd();
+
+  if (!isset_validationState)
+    throw TProtocolException(TProtocolException::INVALID_DATA);
+  if (!isset_validationResultList)
+    throw TProtocolException(TProtocolException::INVALID_DATA);
+  return xfer;
+}
+
+uint32_t ValidationResults::write(::apache::thrift::protocol::TProtocol* oprot) const {
+  uint32_t xfer = 0;
+  xfer += oprot->writeStructBegin("ValidationResults");
+
+  xfer += oprot->writeFieldBegin("validationState", ::apache::thrift::protocol::T_BOOL, 1);
+  xfer += oprot->writeBool(this->validationState);
+  xfer += oprot->writeFieldEnd();
+
+  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)
+    {
+      xfer += (*_iter80).write(oprot);
+    }
+    xfer += oprot->writeListEnd();
+  }
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldStop();
+  xfer += oprot->writeStructEnd();
+  return xfer;
+}
+
+void swap(ValidationResults &a, ValidationResults &b) {
+  using ::std::swap;
+  swap(a.validationState, b.validationState);
+  swap(a.validationResultList, b.validationResultList);
+}
+
 const char* Experiment::ascii_fingerprint = "9991CE776AFA4D20B5AA55C2BB0136D4";
 const uint8_t Experiment::binary_fingerprint[16] = {0x99,0x91,0xCE,0x77,0x6A,0xFA,0x4D,0x20,0xB5,0xAA,0x55,0xC2,0xBB,0x01,0x36,0xD4};
 
@@ -2610,14 +2789,14 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->experimentInputs.clear();
-            uint32_t _size75;
-            ::apache::thrift::protocol::TType _etype78;
-            xfer += iprot->readListBegin(_etype78, _size75);
-            this->experimentInputs.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->experimentInputs.resize(_size81);
+            uint32_t _i85;
+            for (_i85 = 0; _i85 < _size81; ++_i85)
             {
-              xfer += this->experimentInputs[_i79].read(iprot);
+              xfer += this->experimentInputs[_i85].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2630,14 +2809,14 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->experimentOutputs.clear();
-            uint32_t _size80;
-            ::apache::thrift::protocol::TType _etype83;
-            xfer += iprot->readListBegin(_etype83, _size80);
-            this->experimentOutputs.resize(_size80);
-            uint32_t _i84;
-            for (_i84 = 0; _i84 < _size80; ++_i84)
+            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)
             {
-              xfer += this->experimentOutputs[_i84].read(iprot);
+              xfer += this->experimentOutputs[_i90].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2658,14 +2837,14 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->stateChangeList.clear();
-            uint32_t _size85;
-            ::apache::thrift::protocol::TType _etype88;
-            xfer += iprot->readListBegin(_etype88, _size85);
-            this->stateChangeList.resize(_size85);
-            uint32_t _i89;
-            for (_i89 = 0; _i89 < _size85; ++_i89)
+            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)
             {
-              xfer += this->stateChangeList[_i89].read(iprot);
+              xfer += this->stateChangeList[_i95].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2678,14 +2857,14 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->workflowNodeDetailsList.clear();
-            uint32_t _size90;
-            ::apache::thrift::protocol::TType _etype93;
-            xfer += iprot->readListBegin(_etype93, _size90);
-            this->workflowNodeDetailsList.resize(_size90);
-            uint32_t _i94;
-            for (_i94 = 0; _i94 < _size90; ++_i94)
+            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)
             {
-              xfer += this->workflowNodeDetailsList[_i94].read(iprot);
+              xfer += this->workflowNodeDetailsList[_i100].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2698,14 +2877,14 @@ uint32_t Experiment::read(::apache::thrift::protocol::TProtocol* iprot) {
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->errors.clear();
-            uint32_t _size95;
-            ::apache::thrift::protocol::TType _etype98;
-            xfer += iprot->readListBegin(_etype98, _size95);
-            this->errors.resize(_size95);
-            uint32_t _i99;
-            for (_i99 = 0; _i99 < _size95; ++_i99)
+            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)
             {
-              xfer += this->errors[_i99].read(iprot);
+              xfer += this->errors[_i105].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2798,10 +2977,10 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldBegin("experimentInputs", ::apache::thrift::protocol::T_LIST, 13);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->experimentInputs.size()));
-      std::vector<DataObjectType> ::const_iterator _iter100;
-      for (_iter100 = this->experimentInputs.begin(); _iter100 != this->experimentInputs.end(); ++_iter100)
+      std::vector<DataObjectType> ::const_iterator _iter106;
+      for (_iter106 = this->experimentInputs.begin(); _iter106 != this->experimentInputs.end(); ++_iter106)
       {
-        xfer += (*_iter100).write(oprot);
+        xfer += (*_iter106).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2811,10 +2990,10 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldBegin("experimentOutputs", ::apache::thrift::protocol::T_LIST, 14);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->experimentOutputs.size()));
-      std::vector<DataObjectType> ::const_iterator _iter101;
-      for (_iter101 = this->experimentOutputs.begin(); _iter101 != this->experimentOutputs.end(); ++_iter101)
+      std::vector<DataObjectType> ::const_iterator _iter107;
+      for (_iter107 = this->experimentOutputs.begin(); _iter107 != this->experimentOutputs.end(); ++_iter107)
       {
-        xfer += (*_iter101).write(oprot);
+        xfer += (*_iter107).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2829,10 +3008,10 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldBegin("stateChangeList", ::apache::thrift::protocol::T_LIST, 16);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->stateChangeList.size()));
-      std::vector<WorkflowNodeStatus> ::const_iterator _iter102;
-      for (_iter102 = this->stateChangeList.begin(); _iter102 != this->stateChangeList.end(); ++_iter102)
+      std::vector<WorkflowNodeStatus> ::const_iterator _iter108;
+      for (_iter108 = this->stateChangeList.begin(); _iter108 != this->stateChangeList.end(); ++_iter108)
       {
-        xfer += (*_iter102).write(oprot);
+        xfer += (*_iter108).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2842,10 +3021,10 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldBegin("workflowNodeDetailsList", ::apache::thrift::protocol::T_LIST, 17);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->workflowNodeDetailsList.size()));
-      std::vector<WorkflowNodeDetails> ::const_iterator _iter103;
-      for (_iter103 = this->workflowNodeDetailsList.begin(); _iter103 != this->workflowNodeDetailsList.end(); ++_iter103)
+      std::vector<WorkflowNodeDetails> ::const_iterator _iter109;
+      for (_iter109 = this->workflowNodeDetailsList.begin(); _iter109 != this->workflowNodeDetailsList.end(); ++_iter109)
       {
-        xfer += (*_iter103).write(oprot);
+        xfer += (*_iter109).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2855,10 +3034,10 @@ uint32_t Experiment::write(::apache::thrift::protocol::TProtocol* oprot) const {
     xfer += oprot->writeFieldBegin("errors", ::apache::thrift::protocol::T_LIST, 18);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->errors.size()));
-      std::vector<ErrorDetails> ::const_iterator _iter104;
-      for (_iter104 = this->errors.begin(); _iter104 != this->errors.end(); ++_iter104)
+      std::vector<ErrorDetails> ::const_iterator _iter110;
+      for (_iter110 = this->errors.begin(); _iter110 != this->errors.end(); ++_iter110)
       {
-        xfer += (*_iter104).write(oprot);
+        xfer += (*_iter110).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.h
index 451e579..4563487 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/experimentModel_types.h
@@ -1597,6 +1597,103 @@ class WorkflowNodeDetails {
 
 void swap(WorkflowNodeDetails &a, WorkflowNodeDetails &b);
 
+typedef struct _ValidatorResult__isset {
+  _ValidatorResult__isset() : errorDetails(false) {}
+  bool errorDetails;
+} _ValidatorResult__isset;
+
+class ValidatorResult {
+ public:
+
+  static const char* ascii_fingerprint; // = "EB04A806CFFC9025AEE48CFFDC378A86";
+  static const uint8_t binary_fingerprint[16]; // = {0xEB,0x04,0xA8,0x06,0xCF,0xFC,0x90,0x25,0xAE,0xE4,0x8C,0xFF,0xDC,0x37,0x8A,0x86};
+
+  ValidatorResult() : result(0), errorDetails() {
+  }
+
+  virtual ~ValidatorResult() throw() {}
+
+  bool result;
+  std::string errorDetails;
+
+  _ValidatorResult__isset __isset;
+
+  void __set_result(const bool val) {
+    result = val;
+  }
+
+  void __set_errorDetails(const std::string& val) {
+    errorDetails = val;
+    __isset.errorDetails = true;
+  }
+
+  bool operator == (const ValidatorResult & rhs) const
+  {
+    if (!(result == rhs.result))
+      return false;
+    if (__isset.errorDetails != rhs.__isset.errorDetails)
+      return false;
+    else if (__isset.errorDetails && !(errorDetails == rhs.errorDetails))
+      return false;
+    return true;
+  }
+  bool operator != (const ValidatorResult &rhs) const {
+    return !(*this == rhs);
+  }
+
+  bool operator < (const ValidatorResult & ) const;
+
+  uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+  uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+};
+
+void swap(ValidatorResult &a, ValidatorResult &b);
+
+
+class ValidationResults {
+ public:
+
+  static const char* ascii_fingerprint; // = "E73BC8630EE405DA5FB801ED852143D2";
+  static const uint8_t binary_fingerprint[16]; // = {0xE7,0x3B,0xC8,0x63,0x0E,0xE4,0x05,0xDA,0x5F,0xB8,0x01,0xED,0x85,0x21,0x43,0xD2};
+
+  ValidationResults() : validationState(0) {
+  }
+
+  virtual ~ValidationResults() throw() {}
+
+  bool validationState;
+  std::vector<ValidatorResult>  validationResultList;
+
+  void __set_validationState(const bool val) {
+    validationState = val;
+  }
+
+  void __set_validationResultList(const std::vector<ValidatorResult> & val) {
+    validationResultList = val;
+  }
+
+  bool operator == (const ValidationResults & rhs) const
+  {
+    if (!(validationState == rhs.validationState))
+      return false;
+    if (!(validationResultList == rhs.validationResultList))
+      return false;
+    return true;
+  }
+  bool operator != (const ValidationResults &rhs) const {
+    return !(*this == rhs);
+  }
+
+  bool operator < (const ValidationResults & ) const;
+
+  uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+  uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+};
+
+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) {}
   bool creationTime;

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
index f5661c0..09b4679 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
@@ -804,7 +804,7 @@ class AiravataClient implements \Airavata\API\AiravataIf {
   public function launchExperiment($airavataExperimentId, $airavataCredStoreToken)
   {
     $this->send_launchExperiment($airavataExperimentId, $airavataCredStoreToken);
-    $this->recv_launchExperiment();
+    return $this->recv_launchExperiment();
   }
 
   public function send_launchExperiment($airavataExperimentId, $airavataCredStoreToken)
@@ -847,6 +847,9 @@ class AiravataClient implements \Airavata\API\AiravataIf {
       $result->read($this->input_);
       $this->input_->readMessageEnd();
     }
+    if ($result->success !== null) {
+      return $result->success;
+    }
     if ($result->ire !== null) {
       throw $result->ire;
     }
@@ -859,7 +862,7 @@ class AiravataClient implements \Airavata\API\AiravataIf {
     if ($result->ase !== null) {
       throw $result->ase;
     }
-    return;
+    throw new \Exception("launchExperiment failed: unknown result");
   }
 
   public function getExperimentStatus($airavataExperimentId)
@@ -3926,6 +3929,7 @@ class Airavata_launchExperiment_args {
 class Airavata_launchExperiment_result {
   static $_TSPEC;
 
+  public $success = null;
   public $ire = null;
   public $enf = null;
   public $ace = null;
@@ -3934,6 +3938,11 @@ class Airavata_launchExperiment_result {
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
       self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\ValidationResults',
+          ),
         1 => array(
           'var' => 'ire',
           'type' => TType::STRUCT,
@@ -3957,6 +3966,9 @@ class Airavata_launchExperiment_result {
         );
     }
     if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
       if (isset($vals['ire'])) {
         $this->ire = $vals['ire'];
       }
@@ -3991,6 +4003,14 @@ class Airavata_launchExperiment_result {
       }
       switch ($fid)
       {
+        case 0:
+          if ($ftype == TType::STRUCT) {
+            $this->success = new \Airavata\Model\Workspace\Experiment\ValidationResults();
+            $xfer += $this->success->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         case 1:
           if ($ftype == TType::STRUCT) {
             $this->ire = new \Airavata\API\Error\InvalidRequestException();
@@ -4036,6 +4056,14 @@ class Airavata_launchExperiment_result {
   public function write($output) {
     $xfer = 0;
     $xfer += $output->writeStructBegin('Airavata_launchExperiment_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->ire !== null) {
       $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
       $xfer += $this->ire->write($output);

http://git-wip-us.apache.org/repos/asf/airavata/blob/23628a6d/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 b8fc000..456ae7b 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
@@ -3124,6 +3124,218 @@ class WorkflowNodeDetails {
 
 }
 
+class ValidatorResult {
+  static $_TSPEC;
+
+  public $result = null;
+  public $errorDetails = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'result',
+          'type' => TType::BOOL,
+          ),
+        2 => array(
+          'var' => 'errorDetails',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['result'])) {
+        $this->result = $vals['result'];
+      }
+      if (isset($vals['errorDetails'])) {
+        $this->errorDetails = $vals['errorDetails'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ValidatorResult';
+  }
+
+  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::BOOL) {
+            $xfer += $input->readBool($this->result);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->errorDetails);
+          } 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('ValidatorResult');
+    if ($this->result !== null) {
+      $xfer += $output->writeFieldBegin('result', TType::BOOL, 1);
+      $xfer += $output->writeBool($this->result);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errorDetails !== null) {
+      $xfer += $output->writeFieldBegin('errorDetails', TType::STRING, 2);
+      $xfer += $output->writeString($this->errorDetails);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ValidationResults {
+  static $_TSPEC;
+
+  public $validationState = null;
+  public $validationResultList = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'validationState',
+          'type' => TType::BOOL,
+          ),
+        2 => array(
+          'var' => 'validationResultList',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workspace\Experiment\ValidatorResult',
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['validationState'])) {
+        $this->validationState = $vals['validationState'];
+      }
+      if (isset($vals['validationResultList'])) {
+        $this->validationResultList = $vals['validationResultList'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ValidationResults';
+  }
+
+  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::BOOL) {
+            $xfer += $input->readBool($this->validationState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::LST) {
+            $this->validationResultList = array();
+            $_size77 = 0;
+            $_etype80 = 0;
+            $xfer += $input->readListBegin($_etype80, $_size77);
+            for ($_i81 = 0; $_i81 < $_size77; ++$_i81)
+            {
+              $elem82 = null;
+              $elem82 = new \Airavata\Model\Workspace\Experiment\ValidatorResult();
+              $xfer += $elem82->read($input);
+              $this->validationResultList []= $elem82;
+            }
+            $xfer += $input->readListEnd();
+          } 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('ValidationResults');
+    if ($this->validationState !== null) {
+      $xfer += $output->writeFieldBegin('validationState', TType::BOOL, 1);
+      $xfer += $output->writeBool($this->validationState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->validationResultList !== null) {
+      if (!is_array($this->validationResultList)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('validationResultList', TType::LST, 2);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->validationResultList));
+        {
+          foreach ($this->validationResultList as $iter83)
+          {
+            $xfer += $iter83->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
 class Experiment {
   static $_TSPEC;
 
@@ -3415,15 +3627,15 @@ class Experiment {
         case 13:
           if ($ftype == TType::LST) {
             $this->experimentInputs = 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\DataObjectType();
-              $xfer += $elem82->read($input);
-              $this->experimentInputs []= $elem82;
+              $elem89 = null;
+              $elem89 = new \Airavata\Model\Workspace\Experiment\DataObjectType();
+              $xfer += $elem89->read($input);
+              $this->experimentInputs []= $elem89;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3433,15 +3645,15 @@ class Experiment {
         case 14:
           if ($ftype == TType::LST) {
             $this->experimentOutputs = array();
-            $_size83 = 0;
-            $_etype86 = 0;
-            $xfer += $input->readListBegin($_etype86, $_size83);
-            for ($_i87 = 0; $_i87 < $_size83; ++$_i87)
+            $_size90 = 0;
+            $_etype93 = 0;
+            $xfer += $input->readListBegin($_etype93, $_size90);
+            for ($_i94 = 0; $_i94 < $_size90; ++$_i94)
             {
-              $elem88 = null;
-              $elem88 = new \Airavata\Model\Workspace\Experiment\DataObjectType();
-              $xfer += $elem88->read($input);
-              $this->experimentOutputs []= $elem88;
+              $elem95 = null;
+              $elem95 = new \Airavata\Model\Workspace\Experiment\DataObjectType();
+              $xfer += $elem95->read($input);
+              $this->experimentOutputs []= $elem95;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3459,15 +3671,15 @@ class Experiment {
         case 16:
           if ($ftype == TType::LST) {
             $this->stateChangeList = array();
-            $_size89 = 0;
-            $_etype92 = 0;
-            $xfer += $input->readListBegin($_etype92, $_size89);
-            for ($_i93 = 0; $_i93 < $_size89; ++$_i93)
+            $_size96 = 0;
+            $_etype99 = 0;
+            $xfer += $input->readListBegin($_etype99, $_size96);
+            for ($_i100 = 0; $_i100 < $_size96; ++$_i100)
             {
-              $elem94 = null;
-              $elem94 = new \Airavata\Model\Workspace\Experiment\WorkflowNodeStatus();
-              $xfer += $elem94->read($input);
-              $this->stateChangeList []= $elem94;
+              $elem101 = null;
+              $elem101 = new \Airavata\Model\Workspace\Experiment\WorkflowNodeStatus();
+              $xfer += $elem101->read($input);
+              $this->stateChangeList []= $elem101;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3477,15 +3689,15 @@ class Experiment {
         case 17:
           if ($ftype == TType::LST) {
             $this->workflowNodeDetailsList = array();
-            $_size95 = 0;
-            $_etype98 = 0;
-            $xfer += $input->readListBegin($_etype98, $_size95);
-            for ($_i99 = 0; $_i99 < $_size95; ++$_i99)
+            $_size102 = 0;
+            $_etype105 = 0;
+            $xfer += $input->readListBegin($_etype105, $_size102);
+            for ($_i106 = 0; $_i106 < $_size102; ++$_i106)
             {
-              $elem100 = null;
-              $elem100 = new \Airavata\Model\Workspace\Experiment\WorkflowNodeDetails();
-              $xfer += $elem100->read($input);
-              $this->workflowNodeDetailsList []= $elem100;
+              $elem107 = null;
+              $elem107 = new \Airavata\Model\Workspace\Experiment\WorkflowNodeDetails();
+              $xfer += $elem107->read($input);
+              $this->workflowNodeDetailsList []= $elem107;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3495,15 +3707,15 @@ class Experiment {
         case 18:
           if ($ftype == TType::LST) {
             $this->errors = array();
-            $_size101 = 0;
-            $_etype104 = 0;
-            $xfer += $input->readListBegin($_etype104, $_size101);
-            for ($_i105 = 0; $_i105 < $_size101; ++$_i105)
+            $_size108 = 0;
+            $_etype111 = 0;
+            $xfer += $input->readListBegin($_etype111, $_size108);
+            for ($_i112 = 0; $_i112 < $_size108; ++$_i112)
             {
-              $elem106 = null;
-              $elem106 = new \Airavata\Model\Workspace\Experiment\ErrorDetails();
-              $xfer += $elem106->read($input);
-              $this->errors []= $elem106;
+              $elem113 = null;
+              $elem113 = new \Airavata\Model\Workspace\Experiment\ErrorDetails();
+              $xfer += $elem113->read($input);
+              $this->errors []= $elem113;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -3594,9 +3806,9 @@ class Experiment {
       {
         $output->writeListBegin(TType::STRUCT, count($this->experimentInputs));
         {
-          foreach ($this->experimentInputs as $iter107)
+          foreach ($this->experimentInputs as $iter114)
           {
-            $xfer += $iter107->write($output);
+            $xfer += $iter114->write($output);
           }
         }
         $output->writeListEnd();
@@ -3611,9 +3823,9 @@ class Experiment {
       {
         $output->writeListBegin(TType::STRUCT, count($this->experimentOutputs));
         {
-          foreach ($this->experimentOutputs as $iter108)
+          foreach ($this->experimentOutputs as $iter115)
           {
-            $xfer += $iter108->write($output);
+            $xfer += $iter115->write($output);
           }
         }
         $output->writeListEnd();
@@ -3636,9 +3848,9 @@ class Experiment {
       {
         $output->writeListBegin(TType::STRUCT, count($this->stateChangeList));
         {
-          foreach ($this->stateChangeList as $iter109)
+          foreach ($this->stateChangeList as $iter116)
           {
-            $xfer += $iter109->write($output);
+            $xfer += $iter116->write($output);
           }
         }
         $output->writeListEnd();
@@ -3653,9 +3865,9 @@ class Experiment {
       {
         $output->writeListBegin(TType::STRUCT, count($this->workflowNodeDetailsList));
         {
-          foreach ($this->workflowNodeDetailsList as $iter110)
+          foreach ($this->workflowNodeDetailsList as $iter117)
           {
-            $xfer += $iter110->write($output);
+            $xfer += $iter117->write($output);
           }
         }
         $output->writeListEnd();
@@ -3670,9 +3882,9 @@ class Experiment {
       {
         $output->writeListBegin(TType::STRUCT, count($this->errors));
         {
-          foreach ($this->errors as $iter111)
+          foreach ($this->errors as $iter118)
           {
-            $xfer += $iter111->write($output);
+            $xfer += $iter118->write($output);
           }
         }
         $output->writeListEnd();