You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sm...@apache.org on 2014/02/25 22:22:33 UTC

[06/13] Adding API Methods to create and fetch basic experiment status - AIRAVATA-991

http://git-wip-us.apache.org/repos/asf/airavata/blob/5f6d80a8/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java
new file mode 100644
index 0000000..f9c4a51
--- /dev/null
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/Experiment.java
@@ -0,0 +1,2416 @@
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.airavata.model.workspace.experiment;
+
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A structure holding the experiment metadata and its child models.
+ * 
+ * userName:
+ *   The user name of the targeted gateway end user on whose behalf the experiment is being created.
+ *     the associated gateway identity can only be inferred from the security hand-shake so as to avoid
+ *     authorized Airavata Clients mimicking an unauthorized request. If a gateway is not registered with
+ *     Airavata, an authorization exception is thrown.
+ * 
+ * experimentName:
+ *   The name of the experiment as defined by the user. The name need not be unique as uniqueness is enforced
+ *      by the generated experiment id.
+ * 
+ * experimentDescription:
+ *    The verbose description of the experiment. This is an optional parameter.
+ */
+@SuppressWarnings("all") public class Experiment implements org.apache.thrift.TBase<Experiment, Experiment._Fields>, java.io.Serializable, Cloneable, Comparable<Experiment> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("Experiment");
+
+  private static final org.apache.thrift.protocol.TField EXPERIMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentID", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField PROJECT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("projectID", org.apache.thrift.protocol.TType.STRING, (short)2);
+  private static final org.apache.thrift.protocol.TField CREATION_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("creationTime", org.apache.thrift.protocol.TType.I64, (short)3);
+  private static final org.apache.thrift.protocol.TField USER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("userName", org.apache.thrift.protocol.TType.STRING, (short)4);
+  private static final org.apache.thrift.protocol.TField NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("name", org.apache.thrift.protocol.TType.STRING, (short)5);
+  private static final org.apache.thrift.protocol.TField DESCRIPTION_FIELD_DESC = new org.apache.thrift.protocol.TField("description", org.apache.thrift.protocol.TType.STRING, (short)6);
+  private static final org.apache.thrift.protocol.TField APPLICATION_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("applicationId", org.apache.thrift.protocol.TType.STRING, (short)7);
+  private static final org.apache.thrift.protocol.TField APPLICATION_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("applicationVersion", org.apache.thrift.protocol.TType.STRING, (short)8);
+  private static final org.apache.thrift.protocol.TField WORKFLOW_TEMPLATE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowTemplateId", org.apache.thrift.protocol.TType.STRING, (short)9);
+  private static final org.apache.thrift.protocol.TField WORKFLOW_TEMPLATE_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowTemplateVersion", org.apache.thrift.protocol.TType.STRING, (short)10);
+  private static final org.apache.thrift.protocol.TField USER_CONFIGURATION_DATA_FIELD_DESC = new org.apache.thrift.protocol.TField("userConfigurationData", org.apache.thrift.protocol.TType.STRUCT, (short)11);
+  private static final org.apache.thrift.protocol.TField WORKFLOW_EXECUTION_INSTANCE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowExecutionInstanceId", org.apache.thrift.protocol.TType.STRING, (short)12);
+  private static final org.apache.thrift.protocol.TField EXPERIMENT_INPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentInputs", org.apache.thrift.protocol.TType.LIST, (short)13);
+  private static final org.apache.thrift.protocol.TField EXPERIMENT_OUTPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentOutputs", org.apache.thrift.protocol.TType.LIST, (short)14);
+  private static final org.apache.thrift.protocol.TField EXPERIMENT_STATUS_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentStatus", org.apache.thrift.protocol.TType.STRUCT, (short)15);
+  private static final org.apache.thrift.protocol.TField STATE_CHANGE_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("stateChangeList", org.apache.thrift.protocol.TType.LIST, (short)16);
+  private static final org.apache.thrift.protocol.TField WORKFLOW_NODE_DETAILS_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("workflowNodeDetailsList", org.apache.thrift.protocol.TType.LIST, (short)17);
+  private static final org.apache.thrift.protocol.TField ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("errors", org.apache.thrift.protocol.TType.LIST, (short)18);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new ExperimentStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new ExperimentTupleSchemeFactory());
+  }
+
+  public String experimentID; // required
+  public String projectID; // required
+  public long creationTime; // optional
+  public String userName; // required
+  public String name; // required
+  public String description; // optional
+  public String applicationId; // optional
+  public String applicationVersion; // optional
+  public String workflowTemplateId; // optional
+  public String workflowTemplateVersion; // optional
+  public UserConfigurationData userConfigurationData; // optional
+  public String workflowExecutionInstanceId; // optional
+  public List<DataObjectType> experimentInputs; // optional
+  public List<DataObjectType> experimentOutputs; // optional
+  public ExperimentStatus experimentStatus; // optional
+  public List<WorkflowNodeStatus> stateChangeList; // optional
+  public List<WorkflowNodeDetails> workflowNodeDetailsList; // optional
+  public List<ErrorDetails> errors; // optional
+
+  /** 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 {
+    EXPERIMENT_ID((short)1, "experimentID"),
+    PROJECT_ID((short)2, "projectID"),
+    CREATION_TIME((short)3, "creationTime"),
+    USER_NAME((short)4, "userName"),
+    NAME((short)5, "name"),
+    DESCRIPTION((short)6, "description"),
+    APPLICATION_ID((short)7, "applicationId"),
+    APPLICATION_VERSION((short)8, "applicationVersion"),
+    WORKFLOW_TEMPLATE_ID((short)9, "workflowTemplateId"),
+    WORKFLOW_TEMPLATE_VERSION((short)10, "workflowTemplateVersion"),
+    USER_CONFIGURATION_DATA((short)11, "userConfigurationData"),
+    WORKFLOW_EXECUTION_INSTANCE_ID((short)12, "workflowExecutionInstanceId"),
+    EXPERIMENT_INPUTS((short)13, "experimentInputs"),
+    EXPERIMENT_OUTPUTS((short)14, "experimentOutputs"),
+    EXPERIMENT_STATUS((short)15, "experimentStatus"),
+    STATE_CHANGE_LIST((short)16, "stateChangeList"),
+    WORKFLOW_NODE_DETAILS_LIST((short)17, "workflowNodeDetailsList"),
+    ERRORS((short)18, "errors");
+
+    private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+
+    static {
+      for (_Fields field : EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // EXPERIMENT_ID
+          return EXPERIMENT_ID;
+        case 2: // PROJECT_ID
+          return PROJECT_ID;
+        case 3: // CREATION_TIME
+          return CREATION_TIME;
+        case 4: // USER_NAME
+          return USER_NAME;
+        case 5: // NAME
+          return NAME;
+        case 6: // DESCRIPTION
+          return DESCRIPTION;
+        case 7: // APPLICATION_ID
+          return APPLICATION_ID;
+        case 8: // APPLICATION_VERSION
+          return APPLICATION_VERSION;
+        case 9: // WORKFLOW_TEMPLATE_ID
+          return WORKFLOW_TEMPLATE_ID;
+        case 10: // WORKFLOW_TEMPLATE_VERSION
+          return WORKFLOW_TEMPLATE_VERSION;
+        case 11: // USER_CONFIGURATION_DATA
+          return USER_CONFIGURATION_DATA;
+        case 12: // WORKFLOW_EXECUTION_INSTANCE_ID
+          return WORKFLOW_EXECUTION_INSTANCE_ID;
+        case 13: // EXPERIMENT_INPUTS
+          return EXPERIMENT_INPUTS;
+        case 14: // EXPERIMENT_OUTPUTS
+          return EXPERIMENT_OUTPUTS;
+        case 15: // EXPERIMENT_STATUS
+          return EXPERIMENT_STATUS;
+        case 16: // STATE_CHANGE_LIST
+          return STATE_CHANGE_LIST;
+        case 17: // WORKFLOW_NODE_DETAILS_LIST
+          return WORKFLOW_NODE_DETAILS_LIST;
+        case 18: // ERRORS
+          return ERRORS;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final int __CREATIONTIME_ISSET_ID = 0;
+  private byte __isset_bitfield = 0;
+  private _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.DESCRIPTION,_Fields.APPLICATION_ID,_Fields.APPLICATION_VERSION,_Fields.WORKFLOW_TEMPLATE_ID,_Fields.WORKFLOW_TEMPLATE_VERSION,_Fields.USER_CONFIGURATION_DATA,_Fields.WORKFLOW_EXECUTION_INSTANCE_ID,_Fields.EXPERIMENT_INPUTS,_Fields.EXPERIMENT_OUTPUTS,_Fields.EXPERIMENT_STATUS,_Fields.STATE_CHANGE_LIST,_Fields.WORKFLOW_NODE_DETAILS_LIST,_Fields.ERRORS};
+  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.EXPERIMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("experimentID", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.PROJECT_ID, new org.apache.thrift.meta_data.FieldMetaData("projectID", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.CREATION_TIME, new org.apache.thrift.meta_data.FieldMetaData("creationTime", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.USER_NAME, new org.apache.thrift.meta_data.FieldMetaData("userName", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.NAME, new org.apache.thrift.meta_data.FieldMetaData("name", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.DESCRIPTION, new org.apache.thrift.meta_data.FieldMetaData("description", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.APPLICATION_ID, new org.apache.thrift.meta_data.FieldMetaData("applicationId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.APPLICATION_VERSION, new org.apache.thrift.meta_data.FieldMetaData("applicationVersion", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.WORKFLOW_TEMPLATE_ID, new org.apache.thrift.meta_data.FieldMetaData("workflowTemplateId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.WORKFLOW_TEMPLATE_VERSION, new org.apache.thrift.meta_data.FieldMetaData("workflowTemplateVersion", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.USER_CONFIGURATION_DATA, new org.apache.thrift.meta_data.FieldMetaData("userConfigurationData", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, UserConfigurationData.class)));
+    tmpMap.put(_Fields.WORKFLOW_EXECUTION_INSTANCE_ID, new org.apache.thrift.meta_data.FieldMetaData("workflowExecutionInstanceId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.EXPERIMENT_INPUTS, new org.apache.thrift.meta_data.FieldMetaData("experimentInputs", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, DataObjectType.class))));
+    tmpMap.put(_Fields.EXPERIMENT_OUTPUTS, new org.apache.thrift.meta_data.FieldMetaData("experimentOutputs", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, DataObjectType.class))));
+    tmpMap.put(_Fields.EXPERIMENT_STATUS, new org.apache.thrift.meta_data.FieldMetaData("experimentStatus", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, ExperimentStatus.class)));
+    tmpMap.put(_Fields.STATE_CHANGE_LIST, new org.apache.thrift.meta_data.FieldMetaData("stateChangeList", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowNodeStatus.class))));
+    tmpMap.put(_Fields.WORKFLOW_NODE_DETAILS_LIST, new org.apache.thrift.meta_data.FieldMetaData("workflowNodeDetailsList", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowNodeDetails.class))));
+    tmpMap.put(_Fields.ERRORS, new org.apache.thrift.meta_data.FieldMetaData("errors", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, ErrorDetails.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(Experiment.class, metaDataMap);
+  }
+
+  public Experiment() {
+    this.experimentID = "DO_NOT_SET_AT_CLIENTS";
+
+    this.projectID = "DEFAULT";
+
+  }
+
+  public Experiment(
+    String experimentID,
+    String projectID,
+    String userName,
+    String name)
+  {
+    this();
+    this.experimentID = experimentID;
+    this.projectID = projectID;
+    this.userName = userName;
+    this.name = name;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public Experiment(Experiment other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.isSetExperimentID()) {
+      this.experimentID = other.experimentID;
+    }
+    if (other.isSetProjectID()) {
+      this.projectID = other.projectID;
+    }
+    this.creationTime = other.creationTime;
+    if (other.isSetUserName()) {
+      this.userName = other.userName;
+    }
+    if (other.isSetName()) {
+      this.name = other.name;
+    }
+    if (other.isSetDescription()) {
+      this.description = other.description;
+    }
+    if (other.isSetApplicationId()) {
+      this.applicationId = other.applicationId;
+    }
+    if (other.isSetApplicationVersion()) {
+      this.applicationVersion = other.applicationVersion;
+    }
+    if (other.isSetWorkflowTemplateId()) {
+      this.workflowTemplateId = other.workflowTemplateId;
+    }
+    if (other.isSetWorkflowTemplateVersion()) {
+      this.workflowTemplateVersion = other.workflowTemplateVersion;
+    }
+    if (other.isSetUserConfigurationData()) {
+      this.userConfigurationData = new UserConfigurationData(other.userConfigurationData);
+    }
+    if (other.isSetWorkflowExecutionInstanceId()) {
+      this.workflowExecutionInstanceId = other.workflowExecutionInstanceId;
+    }
+    if (other.isSetExperimentInputs()) {
+      List<DataObjectType> __this__experimentInputs = new ArrayList<DataObjectType>(other.experimentInputs.size());
+      for (DataObjectType other_element : other.experimentInputs) {
+        __this__experimentInputs.add(new DataObjectType(other_element));
+      }
+      this.experimentInputs = __this__experimentInputs;
+    }
+    if (other.isSetExperimentOutputs()) {
+      List<DataObjectType> __this__experimentOutputs = new ArrayList<DataObjectType>(other.experimentOutputs.size());
+      for (DataObjectType other_element : other.experimentOutputs) {
+        __this__experimentOutputs.add(new DataObjectType(other_element));
+      }
+      this.experimentOutputs = __this__experimentOutputs;
+    }
+    if (other.isSetExperimentStatus()) {
+      this.experimentStatus = new ExperimentStatus(other.experimentStatus);
+    }
+    if (other.isSetStateChangeList()) {
+      List<WorkflowNodeStatus> __this__stateChangeList = new ArrayList<WorkflowNodeStatus>(other.stateChangeList.size());
+      for (WorkflowNodeStatus other_element : other.stateChangeList) {
+        __this__stateChangeList.add(new WorkflowNodeStatus(other_element));
+      }
+      this.stateChangeList = __this__stateChangeList;
+    }
+    if (other.isSetWorkflowNodeDetailsList()) {
+      List<WorkflowNodeDetails> __this__workflowNodeDetailsList = new ArrayList<WorkflowNodeDetails>(other.workflowNodeDetailsList.size());
+      for (WorkflowNodeDetails other_element : other.workflowNodeDetailsList) {
+        __this__workflowNodeDetailsList.add(new WorkflowNodeDetails(other_element));
+      }
+      this.workflowNodeDetailsList = __this__workflowNodeDetailsList;
+    }
+    if (other.isSetErrors()) {
+      List<ErrorDetails> __this__errors = new ArrayList<ErrorDetails>(other.errors.size());
+      for (ErrorDetails other_element : other.errors) {
+        __this__errors.add(new ErrorDetails(other_element));
+      }
+      this.errors = __this__errors;
+    }
+  }
+
+  public Experiment deepCopy() {
+    return new Experiment(this);
+  }
+
+  @Override
+  public void clear() {
+    this.experimentID = "DO_NOT_SET_AT_CLIENTS";
+
+    this.projectID = "DEFAULT";
+
+    setCreationTimeIsSet(false);
+    this.creationTime = 0;
+    this.userName = null;
+    this.name = null;
+    this.description = null;
+    this.applicationId = null;
+    this.applicationVersion = null;
+    this.workflowTemplateId = null;
+    this.workflowTemplateVersion = null;
+    this.userConfigurationData = null;
+    this.workflowExecutionInstanceId = null;
+    this.experimentInputs = null;
+    this.experimentOutputs = null;
+    this.experimentStatus = null;
+    this.stateChangeList = null;
+    this.workflowNodeDetailsList = null;
+    this.errors = null;
+  }
+
+  public String getExperimentID() {
+    return this.experimentID;
+  }
+
+  public Experiment setExperimentID(String experimentID) {
+    this.experimentID = experimentID;
+    return this;
+  }
+
+  public void unsetExperimentID() {
+    this.experimentID = null;
+  }
+
+  /** Returns true if field experimentID is set (has been assigned a value) and false otherwise */
+  public boolean isSetExperimentID() {
+    return this.experimentID != null;
+  }
+
+  public void setExperimentIDIsSet(boolean value) {
+    if (!value) {
+      this.experimentID = null;
+    }
+  }
+
+  public String getProjectID() {
+    return this.projectID;
+  }
+
+  public Experiment setProjectID(String projectID) {
+    this.projectID = projectID;
+    return this;
+  }
+
+  public void unsetProjectID() {
+    this.projectID = null;
+  }
+
+  /** Returns true if field projectID is set (has been assigned a value) and false otherwise */
+  public boolean isSetProjectID() {
+    return this.projectID != null;
+  }
+
+  public void setProjectIDIsSet(boolean value) {
+    if (!value) {
+      this.projectID = null;
+    }
+  }
+
+  public long getCreationTime() {
+    return this.creationTime;
+  }
+
+  public Experiment setCreationTime(long creationTime) {
+    this.creationTime = creationTime;
+    setCreationTimeIsSet(true);
+    return this;
+  }
+
+  public void unsetCreationTime() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __CREATIONTIME_ISSET_ID);
+  }
+
+  /** Returns true if field creationTime is set (has been assigned a value) and false otherwise */
+  public boolean isSetCreationTime() {
+    return EncodingUtils.testBit(__isset_bitfield, __CREATIONTIME_ISSET_ID);
+  }
+
+  public void setCreationTimeIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __CREATIONTIME_ISSET_ID, value);
+  }
+
+  public String getUserName() {
+    return this.userName;
+  }
+
+  public Experiment setUserName(String userName) {
+    this.userName = userName;
+    return this;
+  }
+
+  public void unsetUserName() {
+    this.userName = null;
+  }
+
+  /** Returns true if field userName is set (has been assigned a value) and false otherwise */
+  public boolean isSetUserName() {
+    return this.userName != null;
+  }
+
+  public void setUserNameIsSet(boolean value) {
+    if (!value) {
+      this.userName = null;
+    }
+  }
+
+  public String getName() {
+    return this.name;
+  }
+
+  public Experiment setName(String name) {
+    this.name = name;
+    return this;
+  }
+
+  public void unsetName() {
+    this.name = null;
+  }
+
+  /** Returns true if field name is set (has been assigned a value) and false otherwise */
+  public boolean isSetName() {
+    return this.name != null;
+  }
+
+  public void setNameIsSet(boolean value) {
+    if (!value) {
+      this.name = null;
+    }
+  }
+
+  public String getDescription() {
+    return this.description;
+  }
+
+  public Experiment setDescription(String description) {
+    this.description = description;
+    return this;
+  }
+
+  public void unsetDescription() {
+    this.description = null;
+  }
+
+  /** Returns true if field description is set (has been assigned a value) and false otherwise */
+  public boolean isSetDescription() {
+    return this.description != null;
+  }
+
+  public void setDescriptionIsSet(boolean value) {
+    if (!value) {
+      this.description = null;
+    }
+  }
+
+  public String getApplicationId() {
+    return this.applicationId;
+  }
+
+  public Experiment setApplicationId(String applicationId) {
+    this.applicationId = applicationId;
+    return this;
+  }
+
+  public void unsetApplicationId() {
+    this.applicationId = null;
+  }
+
+  /** Returns true if field applicationId is set (has been assigned a value) and false otherwise */
+  public boolean isSetApplicationId() {
+    return this.applicationId != null;
+  }
+
+  public void setApplicationIdIsSet(boolean value) {
+    if (!value) {
+      this.applicationId = null;
+    }
+  }
+
+  public String getApplicationVersion() {
+    return this.applicationVersion;
+  }
+
+  public Experiment setApplicationVersion(String applicationVersion) {
+    this.applicationVersion = applicationVersion;
+    return this;
+  }
+
+  public void unsetApplicationVersion() {
+    this.applicationVersion = null;
+  }
+
+  /** Returns true if field applicationVersion is set (has been assigned a value) and false otherwise */
+  public boolean isSetApplicationVersion() {
+    return this.applicationVersion != null;
+  }
+
+  public void setApplicationVersionIsSet(boolean value) {
+    if (!value) {
+      this.applicationVersion = null;
+    }
+  }
+
+  public String getWorkflowTemplateId() {
+    return this.workflowTemplateId;
+  }
+
+  public Experiment setWorkflowTemplateId(String workflowTemplateId) {
+    this.workflowTemplateId = workflowTemplateId;
+    return this;
+  }
+
+  public void unsetWorkflowTemplateId() {
+    this.workflowTemplateId = null;
+  }
+
+  /** Returns true if field workflowTemplateId is set (has been assigned a value) and false otherwise */
+  public boolean isSetWorkflowTemplateId() {
+    return this.workflowTemplateId != null;
+  }
+
+  public void setWorkflowTemplateIdIsSet(boolean value) {
+    if (!value) {
+      this.workflowTemplateId = null;
+    }
+  }
+
+  public String getWorkflowTemplateVersion() {
+    return this.workflowTemplateVersion;
+  }
+
+  public Experiment setWorkflowTemplateVersion(String workflowTemplateVersion) {
+    this.workflowTemplateVersion = workflowTemplateVersion;
+    return this;
+  }
+
+  public void unsetWorkflowTemplateVersion() {
+    this.workflowTemplateVersion = null;
+  }
+
+  /** Returns true if field workflowTemplateVersion is set (has been assigned a value) and false otherwise */
+  public boolean isSetWorkflowTemplateVersion() {
+    return this.workflowTemplateVersion != null;
+  }
+
+  public void setWorkflowTemplateVersionIsSet(boolean value) {
+    if (!value) {
+      this.workflowTemplateVersion = null;
+    }
+  }
+
+  public UserConfigurationData getUserConfigurationData() {
+    return this.userConfigurationData;
+  }
+
+  public Experiment setUserConfigurationData(UserConfigurationData userConfigurationData) {
+    this.userConfigurationData = userConfigurationData;
+    return this;
+  }
+
+  public void unsetUserConfigurationData() {
+    this.userConfigurationData = null;
+  }
+
+  /** Returns true if field userConfigurationData is set (has been assigned a value) and false otherwise */
+  public boolean isSetUserConfigurationData() {
+    return this.userConfigurationData != null;
+  }
+
+  public void setUserConfigurationDataIsSet(boolean value) {
+    if (!value) {
+      this.userConfigurationData = null;
+    }
+  }
+
+  public String getWorkflowExecutionInstanceId() {
+    return this.workflowExecutionInstanceId;
+  }
+
+  public Experiment setWorkflowExecutionInstanceId(String workflowExecutionInstanceId) {
+    this.workflowExecutionInstanceId = workflowExecutionInstanceId;
+    return this;
+  }
+
+  public void unsetWorkflowExecutionInstanceId() {
+    this.workflowExecutionInstanceId = null;
+  }
+
+  /** Returns true if field workflowExecutionInstanceId is set (has been assigned a value) and false otherwise */
+  public boolean isSetWorkflowExecutionInstanceId() {
+    return this.workflowExecutionInstanceId != null;
+  }
+
+  public void setWorkflowExecutionInstanceIdIsSet(boolean value) {
+    if (!value) {
+      this.workflowExecutionInstanceId = null;
+    }
+  }
+
+  public int getExperimentInputsSize() {
+    return (this.experimentInputs == null) ? 0 : this.experimentInputs.size();
+  }
+
+  public java.util.Iterator<DataObjectType> getExperimentInputsIterator() {
+    return (this.experimentInputs == null) ? null : this.experimentInputs.iterator();
+  }
+
+  public void addToExperimentInputs(DataObjectType elem) {
+    if (this.experimentInputs == null) {
+      this.experimentInputs = new ArrayList<DataObjectType>();
+    }
+    this.experimentInputs.add(elem);
+  }
+
+  public List<DataObjectType> getExperimentInputs() {
+    return this.experimentInputs;
+  }
+
+  public Experiment setExperimentInputs(List<DataObjectType> experimentInputs) {
+    this.experimentInputs = experimentInputs;
+    return this;
+  }
+
+  public void unsetExperimentInputs() {
+    this.experimentInputs = null;
+  }
+
+  /** Returns true if field experimentInputs is set (has been assigned a value) and false otherwise */
+  public boolean isSetExperimentInputs() {
+    return this.experimentInputs != null;
+  }
+
+  public void setExperimentInputsIsSet(boolean value) {
+    if (!value) {
+      this.experimentInputs = null;
+    }
+  }
+
+  public int getExperimentOutputsSize() {
+    return (this.experimentOutputs == null) ? 0 : this.experimentOutputs.size();
+  }
+
+  public java.util.Iterator<DataObjectType> getExperimentOutputsIterator() {
+    return (this.experimentOutputs == null) ? null : this.experimentOutputs.iterator();
+  }
+
+  public void addToExperimentOutputs(DataObjectType elem) {
+    if (this.experimentOutputs == null) {
+      this.experimentOutputs = new ArrayList<DataObjectType>();
+    }
+    this.experimentOutputs.add(elem);
+  }
+
+  public List<DataObjectType> getExperimentOutputs() {
+    return this.experimentOutputs;
+  }
+
+  public Experiment setExperimentOutputs(List<DataObjectType> experimentOutputs) {
+    this.experimentOutputs = experimentOutputs;
+    return this;
+  }
+
+  public void unsetExperimentOutputs() {
+    this.experimentOutputs = null;
+  }
+
+  /** Returns true if field experimentOutputs is set (has been assigned a value) and false otherwise */
+  public boolean isSetExperimentOutputs() {
+    return this.experimentOutputs != null;
+  }
+
+  public void setExperimentOutputsIsSet(boolean value) {
+    if (!value) {
+      this.experimentOutputs = null;
+    }
+  }
+
+  public ExperimentStatus getExperimentStatus() {
+    return this.experimentStatus;
+  }
+
+  public Experiment setExperimentStatus(ExperimentStatus experimentStatus) {
+    this.experimentStatus = experimentStatus;
+    return this;
+  }
+
+  public void unsetExperimentStatus() {
+    this.experimentStatus = null;
+  }
+
+  /** Returns true if field experimentStatus is set (has been assigned a value) and false otherwise */
+  public boolean isSetExperimentStatus() {
+    return this.experimentStatus != null;
+  }
+
+  public void setExperimentStatusIsSet(boolean value) {
+    if (!value) {
+      this.experimentStatus = null;
+    }
+  }
+
+  public int getStateChangeListSize() {
+    return (this.stateChangeList == null) ? 0 : this.stateChangeList.size();
+  }
+
+  public java.util.Iterator<WorkflowNodeStatus> getStateChangeListIterator() {
+    return (this.stateChangeList == null) ? null : this.stateChangeList.iterator();
+  }
+
+  public void addToStateChangeList(WorkflowNodeStatus elem) {
+    if (this.stateChangeList == null) {
+      this.stateChangeList = new ArrayList<WorkflowNodeStatus>();
+    }
+    this.stateChangeList.add(elem);
+  }
+
+  public List<WorkflowNodeStatus> getStateChangeList() {
+    return this.stateChangeList;
+  }
+
+  public Experiment setStateChangeList(List<WorkflowNodeStatus> stateChangeList) {
+    this.stateChangeList = stateChangeList;
+    return this;
+  }
+
+  public void unsetStateChangeList() {
+    this.stateChangeList = null;
+  }
+
+  /** Returns true if field stateChangeList is set (has been assigned a value) and false otherwise */
+  public boolean isSetStateChangeList() {
+    return this.stateChangeList != null;
+  }
+
+  public void setStateChangeListIsSet(boolean value) {
+    if (!value) {
+      this.stateChangeList = null;
+    }
+  }
+
+  public int getWorkflowNodeDetailsListSize() {
+    return (this.workflowNodeDetailsList == null) ? 0 : this.workflowNodeDetailsList.size();
+  }
+
+  public java.util.Iterator<WorkflowNodeDetails> getWorkflowNodeDetailsListIterator() {
+    return (this.workflowNodeDetailsList == null) ? null : this.workflowNodeDetailsList.iterator();
+  }
+
+  public void addToWorkflowNodeDetailsList(WorkflowNodeDetails elem) {
+    if (this.workflowNodeDetailsList == null) {
+      this.workflowNodeDetailsList = new ArrayList<WorkflowNodeDetails>();
+    }
+    this.workflowNodeDetailsList.add(elem);
+  }
+
+  public List<WorkflowNodeDetails> getWorkflowNodeDetailsList() {
+    return this.workflowNodeDetailsList;
+  }
+
+  public Experiment setWorkflowNodeDetailsList(List<WorkflowNodeDetails> workflowNodeDetailsList) {
+    this.workflowNodeDetailsList = workflowNodeDetailsList;
+    return this;
+  }
+
+  public void unsetWorkflowNodeDetailsList() {
+    this.workflowNodeDetailsList = null;
+  }
+
+  /** Returns true if field workflowNodeDetailsList is set (has been assigned a value) and false otherwise */
+  public boolean isSetWorkflowNodeDetailsList() {
+    return this.workflowNodeDetailsList != null;
+  }
+
+  public void setWorkflowNodeDetailsListIsSet(boolean value) {
+    if (!value) {
+      this.workflowNodeDetailsList = null;
+    }
+  }
+
+  public int getErrorsSize() {
+    return (this.errors == null) ? 0 : this.errors.size();
+  }
+
+  public java.util.Iterator<ErrorDetails> getErrorsIterator() {
+    return (this.errors == null) ? null : this.errors.iterator();
+  }
+
+  public void addToErrors(ErrorDetails elem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<ErrorDetails>();
+    }
+    this.errors.add(elem);
+  }
+
+  public List<ErrorDetails> getErrors() {
+    return this.errors;
+  }
+
+  public Experiment setErrors(List<ErrorDetails> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public void unsetErrors() {
+    this.errors = null;
+  }
+
+  /** Returns true if field errors is set (has been assigned a value) and false otherwise */
+  public boolean isSetErrors() {
+    return this.errors != null;
+  }
+
+  public void setErrorsIsSet(boolean value) {
+    if (!value) {
+      this.errors = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case EXPERIMENT_ID:
+      if (value == null) {
+        unsetExperimentID();
+      } else {
+        setExperimentID((String)value);
+      }
+      break;
+
+    case PROJECT_ID:
+      if (value == null) {
+        unsetProjectID();
+      } else {
+        setProjectID((String)value);
+      }
+      break;
+
+    case CREATION_TIME:
+      if (value == null) {
+        unsetCreationTime();
+      } else {
+        setCreationTime((Long)value);
+      }
+      break;
+
+    case USER_NAME:
+      if (value == null) {
+        unsetUserName();
+      } else {
+        setUserName((String)value);
+      }
+      break;
+
+    case NAME:
+      if (value == null) {
+        unsetName();
+      } else {
+        setName((String)value);
+      }
+      break;
+
+    case DESCRIPTION:
+      if (value == null) {
+        unsetDescription();
+      } else {
+        setDescription((String)value);
+      }
+      break;
+
+    case APPLICATION_ID:
+      if (value == null) {
+        unsetApplicationId();
+      } else {
+        setApplicationId((String)value);
+      }
+      break;
+
+    case APPLICATION_VERSION:
+      if (value == null) {
+        unsetApplicationVersion();
+      } else {
+        setApplicationVersion((String)value);
+      }
+      break;
+
+    case WORKFLOW_TEMPLATE_ID:
+      if (value == null) {
+        unsetWorkflowTemplateId();
+      } else {
+        setWorkflowTemplateId((String)value);
+      }
+      break;
+
+    case WORKFLOW_TEMPLATE_VERSION:
+      if (value == null) {
+        unsetWorkflowTemplateVersion();
+      } else {
+        setWorkflowTemplateVersion((String)value);
+      }
+      break;
+
+    case USER_CONFIGURATION_DATA:
+      if (value == null) {
+        unsetUserConfigurationData();
+      } else {
+        setUserConfigurationData((UserConfigurationData)value);
+      }
+      break;
+
+    case WORKFLOW_EXECUTION_INSTANCE_ID:
+      if (value == null) {
+        unsetWorkflowExecutionInstanceId();
+      } else {
+        setWorkflowExecutionInstanceId((String)value);
+      }
+      break;
+
+    case EXPERIMENT_INPUTS:
+      if (value == null) {
+        unsetExperimentInputs();
+      } else {
+        setExperimentInputs((List<DataObjectType>)value);
+      }
+      break;
+
+    case EXPERIMENT_OUTPUTS:
+      if (value == null) {
+        unsetExperimentOutputs();
+      } else {
+        setExperimentOutputs((List<DataObjectType>)value);
+      }
+      break;
+
+    case EXPERIMENT_STATUS:
+      if (value == null) {
+        unsetExperimentStatus();
+      } else {
+        setExperimentStatus((ExperimentStatus)value);
+      }
+      break;
+
+    case STATE_CHANGE_LIST:
+      if (value == null) {
+        unsetStateChangeList();
+      } else {
+        setStateChangeList((List<WorkflowNodeStatus>)value);
+      }
+      break;
+
+    case WORKFLOW_NODE_DETAILS_LIST:
+      if (value == null) {
+        unsetWorkflowNodeDetailsList();
+      } else {
+        setWorkflowNodeDetailsList((List<WorkflowNodeDetails>)value);
+      }
+      break;
+
+    case ERRORS:
+      if (value == null) {
+        unsetErrors();
+      } else {
+        setErrors((List<ErrorDetails>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case EXPERIMENT_ID:
+      return getExperimentID();
+
+    case PROJECT_ID:
+      return getProjectID();
+
+    case CREATION_TIME:
+      return Long.valueOf(getCreationTime());
+
+    case USER_NAME:
+      return getUserName();
+
+    case NAME:
+      return getName();
+
+    case DESCRIPTION:
+      return getDescription();
+
+    case APPLICATION_ID:
+      return getApplicationId();
+
+    case APPLICATION_VERSION:
+      return getApplicationVersion();
+
+    case WORKFLOW_TEMPLATE_ID:
+      return getWorkflowTemplateId();
+
+    case WORKFLOW_TEMPLATE_VERSION:
+      return getWorkflowTemplateVersion();
+
+    case USER_CONFIGURATION_DATA:
+      return getUserConfigurationData();
+
+    case WORKFLOW_EXECUTION_INSTANCE_ID:
+      return getWorkflowExecutionInstanceId();
+
+    case EXPERIMENT_INPUTS:
+      return getExperimentInputs();
+
+    case EXPERIMENT_OUTPUTS:
+      return getExperimentOutputs();
+
+    case EXPERIMENT_STATUS:
+      return getExperimentStatus();
+
+    case STATE_CHANGE_LIST:
+      return getStateChangeList();
+
+    case WORKFLOW_NODE_DETAILS_LIST:
+      return getWorkflowNodeDetailsList();
+
+    case ERRORS:
+      return getErrors();
+
+    }
+    throw new IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new IllegalArgumentException();
+    }
+
+    switch (field) {
+    case EXPERIMENT_ID:
+      return isSetExperimentID();
+    case PROJECT_ID:
+      return isSetProjectID();
+    case CREATION_TIME:
+      return isSetCreationTime();
+    case USER_NAME:
+      return isSetUserName();
+    case NAME:
+      return isSetName();
+    case DESCRIPTION:
+      return isSetDescription();
+    case APPLICATION_ID:
+      return isSetApplicationId();
+    case APPLICATION_VERSION:
+      return isSetApplicationVersion();
+    case WORKFLOW_TEMPLATE_ID:
+      return isSetWorkflowTemplateId();
+    case WORKFLOW_TEMPLATE_VERSION:
+      return isSetWorkflowTemplateVersion();
+    case USER_CONFIGURATION_DATA:
+      return isSetUserConfigurationData();
+    case WORKFLOW_EXECUTION_INSTANCE_ID:
+      return isSetWorkflowExecutionInstanceId();
+    case EXPERIMENT_INPUTS:
+      return isSetExperimentInputs();
+    case EXPERIMENT_OUTPUTS:
+      return isSetExperimentOutputs();
+    case EXPERIMENT_STATUS:
+      return isSetExperimentStatus();
+    case STATE_CHANGE_LIST:
+      return isSetStateChangeList();
+    case WORKFLOW_NODE_DETAILS_LIST:
+      return isSetWorkflowNodeDetailsList();
+    case ERRORS:
+      return isSetErrors();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof Experiment)
+      return this.equals((Experiment)that);
+    return false;
+  }
+
+  public boolean equals(Experiment that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_experimentID = true && this.isSetExperimentID();
+    boolean that_present_experimentID = true && that.isSetExperimentID();
+    if (this_present_experimentID || that_present_experimentID) {
+      if (!(this_present_experimentID && that_present_experimentID))
+        return false;
+      if (!this.experimentID.equals(that.experimentID))
+        return false;
+    }
+
+    boolean this_present_projectID = true && this.isSetProjectID();
+    boolean that_present_projectID = true && that.isSetProjectID();
+    if (this_present_projectID || that_present_projectID) {
+      if (!(this_present_projectID && that_present_projectID))
+        return false;
+      if (!this.projectID.equals(that.projectID))
+        return false;
+    }
+
+    boolean this_present_creationTime = true && this.isSetCreationTime();
+    boolean that_present_creationTime = true && that.isSetCreationTime();
+    if (this_present_creationTime || that_present_creationTime) {
+      if (!(this_present_creationTime && that_present_creationTime))
+        return false;
+      if (this.creationTime != that.creationTime)
+        return false;
+    }
+
+    boolean this_present_userName = true && this.isSetUserName();
+    boolean that_present_userName = true && that.isSetUserName();
+    if (this_present_userName || that_present_userName) {
+      if (!(this_present_userName && that_present_userName))
+        return false;
+      if (!this.userName.equals(that.userName))
+        return false;
+    }
+
+    boolean this_present_name = true && this.isSetName();
+    boolean that_present_name = true && that.isSetName();
+    if (this_present_name || that_present_name) {
+      if (!(this_present_name && that_present_name))
+        return false;
+      if (!this.name.equals(that.name))
+        return false;
+    }
+
+    boolean this_present_description = true && this.isSetDescription();
+    boolean that_present_description = true && that.isSetDescription();
+    if (this_present_description || that_present_description) {
+      if (!(this_present_description && that_present_description))
+        return false;
+      if (!this.description.equals(that.description))
+        return false;
+    }
+
+    boolean this_present_applicationId = true && this.isSetApplicationId();
+    boolean that_present_applicationId = true && that.isSetApplicationId();
+    if (this_present_applicationId || that_present_applicationId) {
+      if (!(this_present_applicationId && that_present_applicationId))
+        return false;
+      if (!this.applicationId.equals(that.applicationId))
+        return false;
+    }
+
+    boolean this_present_applicationVersion = true && this.isSetApplicationVersion();
+    boolean that_present_applicationVersion = true && that.isSetApplicationVersion();
+    if (this_present_applicationVersion || that_present_applicationVersion) {
+      if (!(this_present_applicationVersion && that_present_applicationVersion))
+        return false;
+      if (!this.applicationVersion.equals(that.applicationVersion))
+        return false;
+    }
+
+    boolean this_present_workflowTemplateId = true && this.isSetWorkflowTemplateId();
+    boolean that_present_workflowTemplateId = true && that.isSetWorkflowTemplateId();
+    if (this_present_workflowTemplateId || that_present_workflowTemplateId) {
+      if (!(this_present_workflowTemplateId && that_present_workflowTemplateId))
+        return false;
+      if (!this.workflowTemplateId.equals(that.workflowTemplateId))
+        return false;
+    }
+
+    boolean this_present_workflowTemplateVersion = true && this.isSetWorkflowTemplateVersion();
+    boolean that_present_workflowTemplateVersion = true && that.isSetWorkflowTemplateVersion();
+    if (this_present_workflowTemplateVersion || that_present_workflowTemplateVersion) {
+      if (!(this_present_workflowTemplateVersion && that_present_workflowTemplateVersion))
+        return false;
+      if (!this.workflowTemplateVersion.equals(that.workflowTemplateVersion))
+        return false;
+    }
+
+    boolean this_present_userConfigurationData = true && this.isSetUserConfigurationData();
+    boolean that_present_userConfigurationData = true && that.isSetUserConfigurationData();
+    if (this_present_userConfigurationData || that_present_userConfigurationData) {
+      if (!(this_present_userConfigurationData && that_present_userConfigurationData))
+        return false;
+      if (!this.userConfigurationData.equals(that.userConfigurationData))
+        return false;
+    }
+
+    boolean this_present_workflowExecutionInstanceId = true && this.isSetWorkflowExecutionInstanceId();
+    boolean that_present_workflowExecutionInstanceId = true && that.isSetWorkflowExecutionInstanceId();
+    if (this_present_workflowExecutionInstanceId || that_present_workflowExecutionInstanceId) {
+      if (!(this_present_workflowExecutionInstanceId && that_present_workflowExecutionInstanceId))
+        return false;
+      if (!this.workflowExecutionInstanceId.equals(that.workflowExecutionInstanceId))
+        return false;
+    }
+
+    boolean this_present_experimentInputs = true && this.isSetExperimentInputs();
+    boolean that_present_experimentInputs = true && that.isSetExperimentInputs();
+    if (this_present_experimentInputs || that_present_experimentInputs) {
+      if (!(this_present_experimentInputs && that_present_experimentInputs))
+        return false;
+      if (!this.experimentInputs.equals(that.experimentInputs))
+        return false;
+    }
+
+    boolean this_present_experimentOutputs = true && this.isSetExperimentOutputs();
+    boolean that_present_experimentOutputs = true && that.isSetExperimentOutputs();
+    if (this_present_experimentOutputs || that_present_experimentOutputs) {
+      if (!(this_present_experimentOutputs && that_present_experimentOutputs))
+        return false;
+      if (!this.experimentOutputs.equals(that.experimentOutputs))
+        return false;
+    }
+
+    boolean this_present_experimentStatus = true && this.isSetExperimentStatus();
+    boolean that_present_experimentStatus = true && that.isSetExperimentStatus();
+    if (this_present_experimentStatus || that_present_experimentStatus) {
+      if (!(this_present_experimentStatus && that_present_experimentStatus))
+        return false;
+      if (!this.experimentStatus.equals(that.experimentStatus))
+        return false;
+    }
+
+    boolean this_present_stateChangeList = true && this.isSetStateChangeList();
+    boolean that_present_stateChangeList = true && that.isSetStateChangeList();
+    if (this_present_stateChangeList || that_present_stateChangeList) {
+      if (!(this_present_stateChangeList && that_present_stateChangeList))
+        return false;
+      if (!this.stateChangeList.equals(that.stateChangeList))
+        return false;
+    }
+
+    boolean this_present_workflowNodeDetailsList = true && this.isSetWorkflowNodeDetailsList();
+    boolean that_present_workflowNodeDetailsList = true && that.isSetWorkflowNodeDetailsList();
+    if (this_present_workflowNodeDetailsList || that_present_workflowNodeDetailsList) {
+      if (!(this_present_workflowNodeDetailsList && that_present_workflowNodeDetailsList))
+        return false;
+      if (!this.workflowNodeDetailsList.equals(that.workflowNodeDetailsList))
+        return false;
+    }
+
+    boolean this_present_errors = true && this.isSetErrors();
+    boolean that_present_errors = true && that.isSetErrors();
+    if (this_present_errors || that_present_errors) {
+      if (!(this_present_errors && that_present_errors))
+        return false;
+      if (!this.errors.equals(that.errors))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public int compareTo(Experiment other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(isSetExperimentID()).compareTo(other.isSetExperimentID());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetExperimentID()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.experimentID, other.experimentID);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetProjectID()).compareTo(other.isSetProjectID());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetProjectID()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.projectID, other.projectID);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetCreationTime()).compareTo(other.isSetCreationTime());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCreationTime()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.creationTime, other.creationTime);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetUserName()).compareTo(other.isSetUserName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUserName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userName, other.userName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetName()).compareTo(other.isSetName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.name, other.name);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetDescription()).compareTo(other.isSetDescription());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetDescription()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.description, other.description);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetApplicationId()).compareTo(other.isSetApplicationId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetApplicationId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.applicationId, other.applicationId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetApplicationVersion()).compareTo(other.isSetApplicationVersion());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetApplicationVersion()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.applicationVersion, other.applicationVersion);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetWorkflowTemplateId()).compareTo(other.isSetWorkflowTemplateId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetWorkflowTemplateId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.workflowTemplateId, other.workflowTemplateId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetWorkflowTemplateVersion()).compareTo(other.isSetWorkflowTemplateVersion());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetWorkflowTemplateVersion()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.workflowTemplateVersion, other.workflowTemplateVersion);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetUserConfigurationData()).compareTo(other.isSetUserConfigurationData());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUserConfigurationData()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userConfigurationData, other.userConfigurationData);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetWorkflowExecutionInstanceId()).compareTo(other.isSetWorkflowExecutionInstanceId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetWorkflowExecutionInstanceId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.workflowExecutionInstanceId, other.workflowExecutionInstanceId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetExperimentInputs()).compareTo(other.isSetExperimentInputs());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetExperimentInputs()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.experimentInputs, other.experimentInputs);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetExperimentOutputs()).compareTo(other.isSetExperimentOutputs());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetExperimentOutputs()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.experimentOutputs, other.experimentOutputs);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetExperimentStatus()).compareTo(other.isSetExperimentStatus());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetExperimentStatus()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.experimentStatus, other.experimentStatus);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetStateChangeList()).compareTo(other.isSetStateChangeList());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetStateChangeList()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.stateChangeList, other.stateChangeList);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetWorkflowNodeDetailsList()).compareTo(other.isSetWorkflowNodeDetailsList());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetWorkflowNodeDetailsList()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.workflowNodeDetailsList, other.workflowNodeDetailsList);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetErrors()).compareTo(other.isSetErrors());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetErrors()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.errors, other.errors);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("Experiment(");
+    boolean first = true;
+
+    sb.append("experimentID:");
+    if (this.experimentID == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.experimentID);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("projectID:");
+    if (this.projectID == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.projectID);
+    }
+    first = false;
+    if (isSetCreationTime()) {
+      if (!first) sb.append(", ");
+      sb.append("creationTime:");
+      sb.append(this.creationTime);
+      first = false;
+    }
+    if (!first) sb.append(", ");
+    sb.append("userName:");
+    if (this.userName == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.userName);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("name:");
+    if (this.name == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.name);
+    }
+    first = false;
+    if (isSetDescription()) {
+      if (!first) sb.append(", ");
+      sb.append("description:");
+      if (this.description == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.description);
+      }
+      first = false;
+    }
+    if (isSetApplicationId()) {
+      if (!first) sb.append(", ");
+      sb.append("applicationId:");
+      if (this.applicationId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.applicationId);
+      }
+      first = false;
+    }
+    if (isSetApplicationVersion()) {
+      if (!first) sb.append(", ");
+      sb.append("applicationVersion:");
+      if (this.applicationVersion == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.applicationVersion);
+      }
+      first = false;
+    }
+    if (isSetWorkflowTemplateId()) {
+      if (!first) sb.append(", ");
+      sb.append("workflowTemplateId:");
+      if (this.workflowTemplateId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.workflowTemplateId);
+      }
+      first = false;
+    }
+    if (isSetWorkflowTemplateVersion()) {
+      if (!first) sb.append(", ");
+      sb.append("workflowTemplateVersion:");
+      if (this.workflowTemplateVersion == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.workflowTemplateVersion);
+      }
+      first = false;
+    }
+    if (isSetUserConfigurationData()) {
+      if (!first) sb.append(", ");
+      sb.append("userConfigurationData:");
+      if (this.userConfigurationData == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.userConfigurationData);
+      }
+      first = false;
+    }
+    if (isSetWorkflowExecutionInstanceId()) {
+      if (!first) sb.append(", ");
+      sb.append("workflowExecutionInstanceId:");
+      if (this.workflowExecutionInstanceId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.workflowExecutionInstanceId);
+      }
+      first = false;
+    }
+    if (isSetExperimentInputs()) {
+      if (!first) sb.append(", ");
+      sb.append("experimentInputs:");
+      if (this.experimentInputs == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.experimentInputs);
+      }
+      first = false;
+    }
+    if (isSetExperimentOutputs()) {
+      if (!first) sb.append(", ");
+      sb.append("experimentOutputs:");
+      if (this.experimentOutputs == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.experimentOutputs);
+      }
+      first = false;
+    }
+    if (isSetExperimentStatus()) {
+      if (!first) sb.append(", ");
+      sb.append("experimentStatus:");
+      if (this.experimentStatus == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.experimentStatus);
+      }
+      first = false;
+    }
+    if (isSetStateChangeList()) {
+      if (!first) sb.append(", ");
+      sb.append("stateChangeList:");
+      if (this.stateChangeList == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.stateChangeList);
+      }
+      first = false;
+    }
+    if (isSetWorkflowNodeDetailsList()) {
+      if (!first) sb.append(", ");
+      sb.append("workflowNodeDetailsList:");
+      if (this.workflowNodeDetailsList == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.workflowNodeDetailsList);
+      }
+      first = false;
+    }
+    if (isSetErrors()) {
+      if (!first) sb.append(", ");
+      sb.append("errors:");
+      if (this.errors == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.errors);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (experimentID == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'experimentID' was not present! Struct: " + toString());
+    }
+    if (projectID == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'projectID' was not present! Struct: " + toString());
+    }
+    if (userName == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'userName' was not present! Struct: " + toString());
+    }
+    if (name == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'name' was not present! Struct: " + toString());
+    }
+    // check for sub-struct validity
+    if (userConfigurationData != null) {
+      userConfigurationData.validate();
+    }
+    if (experimentStatus != null) {
+      experimentStatus.validate();
+    }
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+    try {
+      // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class ExperimentStandardSchemeFactory implements SchemeFactory {
+    public ExperimentStandardScheme getScheme() {
+      return new ExperimentStandardScheme();
+    }
+  }
+
+  private static class ExperimentStandardScheme extends StandardScheme<Experiment> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, Experiment struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // EXPERIMENT_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.experimentID = iprot.readString();
+              struct.setExperimentIDIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // PROJECT_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.projectID = iprot.readString();
+              struct.setProjectIDIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // CREATION_TIME
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.creationTime = iprot.readI64();
+              struct.setCreationTimeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // USER_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.userName = iprot.readString();
+              struct.setUserNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 5: // NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.name = iprot.readString();
+              struct.setNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 6: // DESCRIPTION
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.description = iprot.readString();
+              struct.setDescriptionIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 7: // APPLICATION_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.applicationId = iprot.readString();
+              struct.setApplicationIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 8: // APPLICATION_VERSION
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.applicationVersion = iprot.readString();
+              struct.setApplicationVersionIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 9: // WORKFLOW_TEMPLATE_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.workflowTemplateId = iprot.readString();
+              struct.setWorkflowTemplateIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 10: // WORKFLOW_TEMPLATE_VERSION
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.workflowTemplateVersion = iprot.readString();
+              struct.setWorkflowTemplateVersionIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 11: // USER_CONFIGURATION_DATA
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.userConfigurationData = new UserConfigurationData();
+              struct.userConfigurationData.read(iprot);
+              struct.setUserConfigurationDataIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 12: // WORKFLOW_EXECUTION_INSTANCE_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.workflowExecutionInstanceId = iprot.readString();
+              struct.setWorkflowExecutionInstanceIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 13: // EXPERIMENT_INPUTS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list88 = iprot.readListBegin();
+                struct.experimentInputs = new ArrayList<DataObjectType>(_list88.size);
+                for (int _i89 = 0; _i89 < _list88.size; ++_i89)
+                {
+                  DataObjectType _elem90;
+                  _elem90 = new DataObjectType();
+                  _elem90.read(iprot);
+                  struct.experimentInputs.add(_elem90);
+                }
+                iprot.readListEnd();
+              }
+              struct.setExperimentInputsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 14: // EXPERIMENT_OUTPUTS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list91 = iprot.readListBegin();
+                struct.experimentOutputs = new ArrayList<DataObjectType>(_list91.size);
+                for (int _i92 = 0; _i92 < _list91.size; ++_i92)
+                {
+                  DataObjectType _elem93;
+                  _elem93 = new DataObjectType();
+                  _elem93.read(iprot);
+                  struct.experimentOutputs.add(_elem93);
+                }
+                iprot.readListEnd();
+              }
+              struct.setExperimentOutputsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 15: // EXPERIMENT_STATUS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.experimentStatus = new ExperimentStatus();
+              struct.experimentStatus.read(iprot);
+              struct.setExperimentStatusIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 16: // STATE_CHANGE_LIST
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list94 = iprot.readListBegin();
+                struct.stateChangeList = new ArrayList<WorkflowNodeStatus>(_list94.size);
+                for (int _i95 = 0; _i95 < _list94.size; ++_i95)
+                {
+                  WorkflowNodeStatus _elem96;
+                  _elem96 = new WorkflowNodeStatus();
+                  _elem96.read(iprot);
+                  struct.stateChangeList.add(_elem96);
+                }
+                iprot.readListEnd();
+              }
+              struct.setStateChangeListIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 17: // WORKFLOW_NODE_DETAILS_LIST
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list97 = iprot.readListBegin();
+                struct.workflowNodeDetailsList = new ArrayList<WorkflowNodeDetails>(_list97.size);
+                for (int _i98 = 0; _i98 < _list97.size; ++_i98)
+                {
+                  WorkflowNodeDetails _elem99;
+                  _elem99 = new WorkflowNodeDetails();
+                  _elem99.read(iprot);
+                  struct.workflowNodeDetailsList.add(_elem99);
+                }
+                iprot.readListEnd();
+              }
+              struct.setWorkflowNodeDetailsListIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 18: // ERRORS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list100 = iprot.readListBegin();
+                struct.errors = new ArrayList<ErrorDetails>(_list100.size);
+                for (int _i101 = 0; _i101 < _list100.size; ++_i101)
+                {
+                  ErrorDetails _elem102;
+                  _elem102 = new ErrorDetails();
+                  _elem102.read(iprot);
+                  struct.errors.add(_elem102);
+                }
+                iprot.readListEnd();
+              }
+              struct.setErrorsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, Experiment struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.experimentID != null) {
+        oprot.writeFieldBegin(EXPERIMENT_ID_FIELD_DESC);
+        oprot.writeString(struct.experimentID);
+        oprot.writeFieldEnd();
+      }
+      if (struct.projectID != null) {
+        oprot.writeFieldBegin(PROJECT_ID_FIELD_DESC);
+        oprot.writeString(struct.projectID);
+        oprot.writeFieldEnd();
+      }
+      if (struct.isSetCreationTime()) {
+        oprot.writeFieldBegin(CREATION_TIME_FIELD_DESC);
+        oprot.writeI64(struct.creationTime);
+        oprot.writeFieldEnd();
+      }
+      if (struct.userName != null) {
+        oprot.writeFieldBegin(USER_NAME_FIELD_DESC);
+        oprot.writeString(struct.userName);
+        oprot.writeFieldEnd();
+      }
+      if (struct.name != null) {
+        oprot.writeFieldBegin(NAME_FIELD_DESC);
+        oprot.writeString(struct.name);
+        oprot.writeFieldEnd();
+      }
+      if (struct.description != null) {
+        if (struct.isSetDescription()) {
+          oprot.writeFieldBegin(DESCRIPTION_FIELD_DESC);
+          oprot.writeString(struct.description);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.applicationId != null) {
+        if (struct.isSetApplicationId()) {
+          oprot.writeFieldBegin(APPLICATION_ID_FIELD_DESC);
+          oprot.writeString(struct.applicationId);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.applicationVersion != null) {
+        if (struct.isSetApplicationVersion()) {
+          oprot.writeFieldBegin(APPLICATION_VERSION_FIELD_DESC);
+          oprot.writeString(struct.applicationVersion);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.workflowTemplateId != null) {
+        if (struct.isSetWorkflowTemplateId()) {
+          oprot.writeFieldBegin(WORKFLOW_TEMPLATE_ID_FIELD_DESC);
+          oprot.writeString(struct.workflowTemplateId);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.workflowTemplateVersion != null) {
+        if (struct.isSetWorkflowTemplateVersion()) {
+          oprot.writeFieldBegin(WORKFLOW_TEMPLATE_VERSION_FIELD_DESC);
+          oprot.writeString(struct.workflowTemplateVersion);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.userConfigurationData != null) {
+        if (struct.isSetUserConfigurationData()) {
+          oprot.writeFieldBegin(USER_CONFIGURATION_DATA_FIELD_DESC);
+          struct.userConfigurationData.write(oprot);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.workflowExecutionInstanceId != null) {
+        if (struct.isSetWorkflowExecutionInstanceId()) {
+          oprot.writeFieldBegin(WORKFLOW_EXECUTION_INSTANCE_ID_FIELD_DESC);
+          oprot.writeString(struct.workflowExecutionInstanceId);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.experimentInputs != null) {
+        if (struct.isSetExperimentInputs()) {
+          oprot.writeFieldBegin(EXPERIMENT_INPUTS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.experimentInputs.size()));
+            for (DataObjectType _iter103 : struct.experimentInputs)
+            {
+              _iter103.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.experimentOutputs != null) {
+        if (struct.isSetExperimentOutputs()) {
+          oprot.writeFieldBegin(EXPERIMENT_OUTPUTS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.experimentOutputs.size()));
+            for (DataObjectType _iter104 : struct.experimentOutputs)
+            {
+              _iter104.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.experimentStatus != null) {
+        if (struct.isSetExperimentStatus()) {
+          oprot.writeFieldBegin(EXPERIMENT_STATUS_FIELD_DESC);
+          struct.experimentStatus.write(oprot);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.stateChangeList != null) {
+        if (struct.isSetStateChangeList()) {
+          oprot.writeFieldBegin(STATE_CHANGE_LIST_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.stateChangeList.size()));
+            for (WorkflowNodeStatus _iter105 : struct.stateChangeList)
+            {
+              _iter105.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.workflowNodeDetailsList != null) {
+        if (struct.isSetWorkflowNodeDetailsList()) {
+          oprot.writeFieldBegin(WORKFLOW_NODE_DETAILS_LIST_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.workflowNodeDetailsList.size()));
+            for (WorkflowNodeDetails _iter106 : struct.workflowNodeDetailsList)
+            {
+              _iter106.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.errors != null) {
+        if (struct.isSetErrors()) {
+          oprot.writeFieldBegin(ERRORS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.errors.size()));
+            for (ErrorDetails _iter107 : struct.errors)
+            {
+              _iter107.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class ExperimentTupleSchemeFactory implements SchemeFactory {
+    public ExperimentTupleScheme getScheme() {
+      return new ExperimentTupleScheme();
+    }
+  }
+
+  private static class ExperimentTupleScheme extends TupleScheme<Experiment> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, Experiment struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.experimentID);
+      oprot.writeString(struct.projectID);
+      oprot.writeString(struct.userName);
+      oprot.writeString(struct.name);
+      BitSet optionals = new BitSet();
+      if (struct.isSetCreationTime()) {
+        optionals.set(0);
+      }
+      if (struct.isSetDescription()) {
+        optionals.set(1);
+      }
+      if (struct.isSetApplicationId()) {
+        optionals.set(2);
+      }
+      if (struct.isSetApplicationVersion()) {
+        optionals.set(3);
+      }
+      if (struct.isSetWorkflowTemplateId()) {
+        optionals.set(4);
+      }
+      if (struct.isSetWorkflowTemplateVersion()) {
+        optionals.set(5);
+      }
+      if (struct.isSetUserConfigurationData()) {
+        optionals.set(6);
+      }
+      if (struct.isSetWorkflowExecutionInstanceId()) {
+        optionals.set(7);
+      }
+      if (struct.isSetExperimentInputs()) {
+        optionals.set(8);
+      }
+      if (struct.isSetExperimentOutputs()) {
+        optionals.set(9);
+      }
+      if (struct.isSetExperimentStatus()) {
+        optionals.set(10);
+      }
+      if (struct.isSetStateChangeList()) {
+        optionals.set(11);
+      }
+      if (struct.isSetWorkflowNodeDetailsList()) {
+        optionals.set(12);
+      }
+      if (struct.isSetErrors()) {
+        optionals.set(13);
+      }
+      oprot.writeBitSet(optionals, 14);
+      if (struct.isSetCreationTime()) {
+        oprot.writeI64(struct.creationTime);
+      }
+      if (struct.isSetDescription()) {
+        oprot.writeString(struct.description);
+      }
+      if (struct.isSetApplicationId()) {
+        oprot.writeString(struct.applicationId);
+      }
+      if (struct.isSetApplicationVersion()) {
+        oprot.writeString(struct.applicationVersion);
+      }
+      if (struct.isSetWorkflowTemplateId()) {
+        oprot.writeString(struct.workflowTemplateId);
+      }
+      if (struct.isSetWorkflowTemplateVersion()) {
+        oprot.writeString(struct.workflowTemplateVersion);
+      }
+      if (struct.isSetUserConfigurationData()) {
+        struct.userConfigurationData.write(oprot);
+      }
+      if (struct.isSetWorkflowExecutionInstanceId()) {
+        oprot.writeString(struct.workflowExecutionInstanceId);
+      }
+      if (struct.isSetExperimentInputs()) {
+        {
+          oprot.writeI32(struct.experimentInputs.size());
+          for (DataObjectType _iter108 : struct.experimentInputs)
+          {
+            _iter108.write(oprot);
+          }
+        }
+      }
+      if (struct.isSetExperimentOutputs()) {
+        {
+          oprot.writeI32(struct.experimentOutputs.size());
+          for (DataObjectType _iter109 : struct.experimentOutputs)
+          {
+            _iter109.write(oprot);
+          }
+        }
+      }
+      if (struct.isSetExperimentStatus()) {
+        struct.experimentStatus.write(oprot);
+      }
+      if (struct.isSetStateChangeList()) {
+        {
+          oprot.writeI32(struct.stateChangeList.size());
+          for (WorkflowNodeStatus _iter110 : struct.stateChangeList)
+          {
+            _iter110.write(oprot);
+          }
+        }
+      }
+      if (struct.isSetWorkflowNodeDetailsList()) {
+        {
+          oprot.writeI32(struct.workflowNodeDetailsList.size());
+          for (WorkflowNodeDetails _iter111 : struct.workflowNodeDetailsList)
+          {
+            _iter111.write(oprot);
+          }
+        }
+      }
+      if (struct.isSetErrors()) {
+        {
+          oprot.writeI32(struct.errors.size());
+          for (ErrorDetails _iter112 : struct.errors)
+          {
+            _iter112.write(oprot);
+          }
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, Experiment struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.experimentID = iprot.readString();
+      struct.setExperimentIDIsSet(true);
+      struct.projectID = iprot.readString();
+      struct.setProjectIDIsSet(true);
+      struct.userName = iprot.readString();
+      struct.setUserNameIsSet(true);
+      struct.name = iprot.readString();
+      struct.setNameIsSet(true);
+      BitSet incoming = iprot.readBitSet(14);
+      if (incoming.get(0)) {
+        struct.creationTime = iprot.readI64();
+        struct.setCreationTimeIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.description = iprot.readString();
+        struct.setDescriptionIsSet(true);
+      }
+      if (incoming.get(2)) {
+        struct.applicationId = iprot.readString();
+        struct.setApplicationIdIsSet(true);
+      }
+      if (incoming.get(3)) {
+        struct.applicationVersion = iprot.readString();
+        struct.setApplicationVersionIsSet(true);
+      }
+      if (incoming.get(4)) {
+        struct.workflowTemplateId = iprot.readString();
+        struct.setWorkflowTemplateIdIsSet(true);
+      }
+      if (incoming.get(5)) {
+        struct.workflowTemplateVersion = iprot.readString();
+        struct.setWorkflowTemplateVersionIsSet(true);
+      }
+      if (incoming.get(6)) {
+        struct.userConfigurationData = new UserConfigurationData();
+        struct.userConfigurationData.read(iprot);
+        struct.setUserConfigurationDataIsSet(true);
+      }
+      if (incoming.get(7)) {
+        struct.workflowExecutionInstanceId = iprot.readString();
+        struct.setWorkflowExecutionInstanceIdIsSet(true);
+      }
+      if (incoming.get(8)) {
+        {
+          org.apache.thrift.protocol.TList _list113 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.experimentInputs = new ArrayList<DataObjectType>(_list113.size);
+          for (int _i114 = 0; _i114 < _list113.size; ++_i114)
+          {
+            DataObjectType _elem115;
+            _elem115 = new DataObjectType();
+            _elem115.read(iprot);
+            struct.experimentInputs.add(_elem115);
+          }
+        }
+        struct.setExperimentInputsIsSet(true);
+      }
+      if (incoming.get(9)) {
+        {
+          org.apache.thrift.protocol.TList _list116 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.experimentOutputs = new ArrayList<DataObjectType>(_list116.size);
+          for (int _i117 = 0; _i117 < _list116.size; ++_i117)
+          {
+            DataObjectType _elem118;
+            _elem118 = new DataObjectType();
+            _elem118.read(iprot);
+     

<TRUNCATED>