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:34 UTC

[07/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/DataTransferDetails.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/DataTransferDetails.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/DataTransferDetails.java
new file mode 100644
index 0000000..a141c84
--- /dev/null
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/DataTransferDetails.java
@@ -0,0 +1,706 @@
+    /*
+     * 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;
+
+@SuppressWarnings("all") public class DataTransferDetails implements org.apache.thrift.TBase<DataTransferDetails, DataTransferDetails._Fields>, java.io.Serializable, Cloneable, Comparable<DataTransferDetails> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("DataTransferDetails");
+
+  private static final org.apache.thrift.protocol.TField TRANSFER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("transferID", org.apache.thrift.protocol.TType.STRING, (short)1);
+  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)2);
+  private static final org.apache.thrift.protocol.TField TRANSFER_DESCRIPTION_FIELD_DESC = new org.apache.thrift.protocol.TField("transferDescription", org.apache.thrift.protocol.TType.STRING, (short)3);
+  private static final org.apache.thrift.protocol.TField TRANSFER_STATUS_FIELD_DESC = new org.apache.thrift.protocol.TField("transferStatus", org.apache.thrift.protocol.TType.STRUCT, (short)4);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new DataTransferDetailsStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new DataTransferDetailsTupleSchemeFactory());
+  }
+
+  public String transferID; // required
+  public long creationTime; // optional
+  public String transferDescription; // required
+  public TransferStatus transferStatus; // 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 {
+    TRANSFER_ID((short)1, "transferID"),
+    CREATION_TIME((short)2, "creationTime"),
+    TRANSFER_DESCRIPTION((short)3, "transferDescription"),
+    TRANSFER_STATUS((short)4, "transferStatus");
+
+    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: // TRANSFER_ID
+          return TRANSFER_ID;
+        case 2: // CREATION_TIME
+          return CREATION_TIME;
+        case 3: // TRANSFER_DESCRIPTION
+          return TRANSFER_DESCRIPTION;
+        case 4: // TRANSFER_STATUS
+          return TRANSFER_STATUS;
+        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.TRANSFER_STATUS};
+  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.TRANSFER_ID, new org.apache.thrift.meta_data.FieldMetaData("transferID", 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.TRANSFER_DESCRIPTION, new org.apache.thrift.meta_data.FieldMetaData("transferDescription", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.TRANSFER_STATUS, new org.apache.thrift.meta_data.FieldMetaData("transferStatus", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TransferStatus.class)));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(DataTransferDetails.class, metaDataMap);
+  }
+
+  public DataTransferDetails() {
+    this.transferID = "DO_NOT_SET_AT_CLIENTS";
+
+  }
+
+  public DataTransferDetails(
+    String transferID,
+    String transferDescription)
+  {
+    this();
+    this.transferID = transferID;
+    this.transferDescription = transferDescription;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public DataTransferDetails(DataTransferDetails other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.isSetTransferID()) {
+      this.transferID = other.transferID;
+    }
+    this.creationTime = other.creationTime;
+    if (other.isSetTransferDescription()) {
+      this.transferDescription = other.transferDescription;
+    }
+    if (other.isSetTransferStatus()) {
+      this.transferStatus = new TransferStatus(other.transferStatus);
+    }
+  }
+
+  public DataTransferDetails deepCopy() {
+    return new DataTransferDetails(this);
+  }
+
+  @Override
+  public void clear() {
+    this.transferID = "DO_NOT_SET_AT_CLIENTS";
+
+    setCreationTimeIsSet(false);
+    this.creationTime = 0;
+    this.transferDescription = null;
+    this.transferStatus = null;
+  }
+
+  public String getTransferID() {
+    return this.transferID;
+  }
+
+  public DataTransferDetails setTransferID(String transferID) {
+    this.transferID = transferID;
+    return this;
+  }
+
+  public void unsetTransferID() {
+    this.transferID = null;
+  }
+
+  /** Returns true if field transferID is set (has been assigned a value) and false otherwise */
+  public boolean isSetTransferID() {
+    return this.transferID != null;
+  }
+
+  public void setTransferIDIsSet(boolean value) {
+    if (!value) {
+      this.transferID = null;
+    }
+  }
+
+  public long getCreationTime() {
+    return this.creationTime;
+  }
+
+  public DataTransferDetails 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 getTransferDescription() {
+    return this.transferDescription;
+  }
+
+  public DataTransferDetails setTransferDescription(String transferDescription) {
+    this.transferDescription = transferDescription;
+    return this;
+  }
+
+  public void unsetTransferDescription() {
+    this.transferDescription = null;
+  }
+
+  /** Returns true if field transferDescription is set (has been assigned a value) and false otherwise */
+  public boolean isSetTransferDescription() {
+    return this.transferDescription != null;
+  }
+
+  public void setTransferDescriptionIsSet(boolean value) {
+    if (!value) {
+      this.transferDescription = null;
+    }
+  }
+
+  public TransferStatus getTransferStatus() {
+    return this.transferStatus;
+  }
+
+  public DataTransferDetails setTransferStatus(TransferStatus transferStatus) {
+    this.transferStatus = transferStatus;
+    return this;
+  }
+
+  public void unsetTransferStatus() {
+    this.transferStatus = null;
+  }
+
+  /** Returns true if field transferStatus is set (has been assigned a value) and false otherwise */
+  public boolean isSetTransferStatus() {
+    return this.transferStatus != null;
+  }
+
+  public void setTransferStatusIsSet(boolean value) {
+    if (!value) {
+      this.transferStatus = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case TRANSFER_ID:
+      if (value == null) {
+        unsetTransferID();
+      } else {
+        setTransferID((String)value);
+      }
+      break;
+
+    case CREATION_TIME:
+      if (value == null) {
+        unsetCreationTime();
+      } else {
+        setCreationTime((Long)value);
+      }
+      break;
+
+    case TRANSFER_DESCRIPTION:
+      if (value == null) {
+        unsetTransferDescription();
+      } else {
+        setTransferDescription((String)value);
+      }
+      break;
+
+    case TRANSFER_STATUS:
+      if (value == null) {
+        unsetTransferStatus();
+      } else {
+        setTransferStatus((TransferStatus)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case TRANSFER_ID:
+      return getTransferID();
+
+    case CREATION_TIME:
+      return Long.valueOf(getCreationTime());
+
+    case TRANSFER_DESCRIPTION:
+      return getTransferDescription();
+
+    case TRANSFER_STATUS:
+      return getTransferStatus();
+
+    }
+    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 TRANSFER_ID:
+      return isSetTransferID();
+    case CREATION_TIME:
+      return isSetCreationTime();
+    case TRANSFER_DESCRIPTION:
+      return isSetTransferDescription();
+    case TRANSFER_STATUS:
+      return isSetTransferStatus();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof DataTransferDetails)
+      return this.equals((DataTransferDetails)that);
+    return false;
+  }
+
+  public boolean equals(DataTransferDetails that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_transferID = true && this.isSetTransferID();
+    boolean that_present_transferID = true && that.isSetTransferID();
+    if (this_present_transferID || that_present_transferID) {
+      if (!(this_present_transferID && that_present_transferID))
+        return false;
+      if (!this.transferID.equals(that.transferID))
+        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_transferDescription = true && this.isSetTransferDescription();
+    boolean that_present_transferDescription = true && that.isSetTransferDescription();
+    if (this_present_transferDescription || that_present_transferDescription) {
+      if (!(this_present_transferDescription && that_present_transferDescription))
+        return false;
+      if (!this.transferDescription.equals(that.transferDescription))
+        return false;
+    }
+
+    boolean this_present_transferStatus = true && this.isSetTransferStatus();
+    boolean that_present_transferStatus = true && that.isSetTransferStatus();
+    if (this_present_transferStatus || that_present_transferStatus) {
+      if (!(this_present_transferStatus && that_present_transferStatus))
+        return false;
+      if (!this.transferStatus.equals(that.transferStatus))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public int compareTo(DataTransferDetails other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(isSetTransferID()).compareTo(other.isSetTransferID());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetTransferID()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.transferID, other.transferID);
+      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(isSetTransferDescription()).compareTo(other.isSetTransferDescription());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetTransferDescription()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.transferDescription, other.transferDescription);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetTransferStatus()).compareTo(other.isSetTransferStatus());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetTransferStatus()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.transferStatus, other.transferStatus);
+      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("DataTransferDetails(");
+    boolean first = true;
+
+    sb.append("transferID:");
+    if (this.transferID == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.transferID);
+    }
+    first = false;
+    if (isSetCreationTime()) {
+      if (!first) sb.append(", ");
+      sb.append("creationTime:");
+      sb.append(this.creationTime);
+      first = false;
+    }
+    if (!first) sb.append(", ");
+    sb.append("transferDescription:");
+    if (this.transferDescription == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.transferDescription);
+    }
+    first = false;
+    if (isSetTransferStatus()) {
+      if (!first) sb.append(", ");
+      sb.append("transferStatus:");
+      if (this.transferStatus == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.transferStatus);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (transferID == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'transferID' was not present! Struct: " + toString());
+    }
+    if (transferDescription == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'transferDescription' was not present! Struct: " + toString());
+    }
+    // check for sub-struct validity
+    if (transferStatus != null) {
+      transferStatus.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 DataTransferDetailsStandardSchemeFactory implements SchemeFactory {
+    public DataTransferDetailsStandardScheme getScheme() {
+      return new DataTransferDetailsStandardScheme();
+    }
+  }
+
+  private static class DataTransferDetailsStandardScheme extends StandardScheme<DataTransferDetails> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, DataTransferDetails 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: // TRANSFER_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.transferID = iprot.readString();
+              struct.setTransferIDIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // 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 3: // TRANSFER_DESCRIPTION
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.transferDescription = iprot.readString();
+              struct.setTransferDescriptionIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // TRANSFER_STATUS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.transferStatus = new TransferStatus();
+              struct.transferStatus.read(iprot);
+              struct.setTransferStatusIsSet(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, DataTransferDetails struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.transferID != null) {
+        oprot.writeFieldBegin(TRANSFER_ID_FIELD_DESC);
+        oprot.writeString(struct.transferID);
+        oprot.writeFieldEnd();
+      }
+      if (struct.isSetCreationTime()) {
+        oprot.writeFieldBegin(CREATION_TIME_FIELD_DESC);
+        oprot.writeI64(struct.creationTime);
+        oprot.writeFieldEnd();
+      }
+      if (struct.transferDescription != null) {
+        oprot.writeFieldBegin(TRANSFER_DESCRIPTION_FIELD_DESC);
+        oprot.writeString(struct.transferDescription);
+        oprot.writeFieldEnd();
+      }
+      if (struct.transferStatus != null) {
+        if (struct.isSetTransferStatus()) {
+          oprot.writeFieldBegin(TRANSFER_STATUS_FIELD_DESC);
+          struct.transferStatus.write(oprot);
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class DataTransferDetailsTupleSchemeFactory implements SchemeFactory {
+    public DataTransferDetailsTupleScheme getScheme() {
+      return new DataTransferDetailsTupleScheme();
+    }
+  }
+
+  private static class DataTransferDetailsTupleScheme extends TupleScheme<DataTransferDetails> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, DataTransferDetails struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.transferID);
+      oprot.writeString(struct.transferDescription);
+      BitSet optionals = new BitSet();
+      if (struct.isSetCreationTime()) {
+        optionals.set(0);
+      }
+      if (struct.isSetTransferStatus()) {
+        optionals.set(1);
+      }
+      oprot.writeBitSet(optionals, 2);
+      if (struct.isSetCreationTime()) {
+        oprot.writeI64(struct.creationTime);
+      }
+      if (struct.isSetTransferStatus()) {
+        struct.transferStatus.write(oprot);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, DataTransferDetails struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.transferID = iprot.readString();
+      struct.setTransferIDIsSet(true);
+      struct.transferDescription = iprot.readString();
+      struct.setTransferDescriptionIsSet(true);
+      BitSet incoming = iprot.readBitSet(2);
+      if (incoming.get(0)) {
+        struct.creationTime = iprot.readI64();
+        struct.setCreationTimeIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.transferStatus = new TransferStatus();
+        struct.transferStatus.read(iprot);
+        struct.setTransferStatusIsSet(true);
+      }
+    }
+  }
+
+}
+

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/ErrorCategory.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/ErrorCategory.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/ErrorCategory.java
new file mode 100644
index 0000000..d2a6c12
--- /dev/null
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/ErrorCategory.java
@@ -0,0 +1,79 @@
+    /*
+     * 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 java.util.Map;
+import java.util.HashMap;
+import org.apache.thrift.TEnum;
+
+@SuppressWarnings("all") public enum ErrorCategory implements org.apache.thrift.TEnum {
+  FILE_SYSTEM_FAILURE(0),
+  APPLICATION_FAILURE(1),
+  RESOURCE_NODE_FAILURE(2),
+  DISK_FULL(3),
+  INSUFFICIENT_ALLOCATION(4),
+  SYSTEM_MAINTENANCE(5),
+  AIRAVATA_INTERNAL_ERROR(6),
+  CANNOT_BE_DETERMINED(7);
+
+  private final int value;
+
+  private ErrorCategory(int value) {
+    this.value = value;
+  }
+
+  /**
+   * Get the integer value of this enum value, as defined in the Thrift IDL.
+   */
+  public int getValue() {
+    return value;
+  }
+
+  /**
+   * Find a the enum type by its integer value, as defined in the Thrift IDL.
+   * @return null if the value is not found.
+   */
+  public static ErrorCategory findByValue(int value) { 
+    switch (value) {
+      case 0:
+        return FILE_SYSTEM_FAILURE;
+      case 1:
+        return APPLICATION_FAILURE;
+      case 2:
+        return RESOURCE_NODE_FAILURE;
+      case 3:
+        return DISK_FULL;
+      case 4:
+        return INSUFFICIENT_ALLOCATION;
+      case 5:
+        return SYSTEM_MAINTENANCE;
+      case 6:
+        return AIRAVATA_INTERNAL_ERROR;
+      case 7:
+        return CANNOT_BE_DETERMINED;
+      default:
+        return null;
+    }
+  }
+}

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/ErrorDetails.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/ErrorDetails.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/ErrorDetails.java
new file mode 100644
index 0000000..2e717e6
--- /dev/null
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/model/workspace/experiment/ErrorDetails.java
@@ -0,0 +1,1309 @@
+    /*
+     * 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;
+
+@SuppressWarnings("all") public class ErrorDetails implements org.apache.thrift.TBase<ErrorDetails, ErrorDetails._Fields>, java.io.Serializable, Cloneable, Comparable<ErrorDetails> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ErrorDetails");
+
+  private static final org.apache.thrift.protocol.TField ERROR_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("errorID", org.apache.thrift.protocol.TType.STRING, (short)1);
+  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)2);
+  private static final org.apache.thrift.protocol.TField ACTUAL_ERROR_MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("actualErrorMessage", org.apache.thrift.protocol.TType.STRING, (short)3);
+  private static final org.apache.thrift.protocol.TField USER_FRIENDLY_MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("userFriendlyMessage", org.apache.thrift.protocol.TType.STRING, (short)4);
+  private static final org.apache.thrift.protocol.TField ERROR_CATEGORY_FIELD_DESC = new org.apache.thrift.protocol.TField("errorCategory", org.apache.thrift.protocol.TType.I32, (short)5);
+  private static final org.apache.thrift.protocol.TField TRANSIENT_OR_PERSISTENT_FIELD_DESC = new org.apache.thrift.protocol.TField("transientOrPersistent", org.apache.thrift.protocol.TType.BOOL, (short)6);
+  private static final org.apache.thrift.protocol.TField CORRECTIVE_ACTION_FIELD_DESC = new org.apache.thrift.protocol.TField("correctiveAction", org.apache.thrift.protocol.TType.I32, (short)7);
+  private static final org.apache.thrift.protocol.TField ACTIONABLE_GROUP_FIELD_DESC = new org.apache.thrift.protocol.TField("actionableGroup", org.apache.thrift.protocol.TType.I32, (short)8);
+  private static final org.apache.thrift.protocol.TField ROOT_CAUSE_ERROR_ID_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("rootCauseErrorIdList", org.apache.thrift.protocol.TType.LIST, (short)9);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new ErrorDetailsStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new ErrorDetailsTupleSchemeFactory());
+  }
+
+  public String errorID; // required
+  public long creationTime; // optional
+  public String actualErrorMessage; // optional
+  public String userFriendlyMessage; // optional
+  /**
+   * 
+   * @see ErrorCategory
+   */
+  public ErrorCategory errorCategory; // optional
+  public boolean transientOrPersistent; // optional
+  /**
+   * 
+   * @see CorrectiveAction
+   */
+  public CorrectiveAction correctiveAction; // optional
+  /**
+   * 
+   * @see ActionableGroup
+   */
+  public ActionableGroup actionableGroup; // optional
+  public List<String> rootCauseErrorIdList; // 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 {
+    ERROR_ID((short)1, "errorID"),
+    CREATION_TIME((short)2, "creationTime"),
+    ACTUAL_ERROR_MESSAGE((short)3, "actualErrorMessage"),
+    USER_FRIENDLY_MESSAGE((short)4, "userFriendlyMessage"),
+    /**
+     * 
+     * @see ErrorCategory
+     */
+    ERROR_CATEGORY((short)5, "errorCategory"),
+    TRANSIENT_OR_PERSISTENT((short)6, "transientOrPersistent"),
+    /**
+     * 
+     * @see CorrectiveAction
+     */
+    CORRECTIVE_ACTION((short)7, "correctiveAction"),
+    /**
+     * 
+     * @see ActionableGroup
+     */
+    ACTIONABLE_GROUP((short)8, "actionableGroup"),
+    ROOT_CAUSE_ERROR_ID_LIST((short)9, "rootCauseErrorIdList");
+
+    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: // ERROR_ID
+          return ERROR_ID;
+        case 2: // CREATION_TIME
+          return CREATION_TIME;
+        case 3: // ACTUAL_ERROR_MESSAGE
+          return ACTUAL_ERROR_MESSAGE;
+        case 4: // USER_FRIENDLY_MESSAGE
+          return USER_FRIENDLY_MESSAGE;
+        case 5: // ERROR_CATEGORY
+          return ERROR_CATEGORY;
+        case 6: // TRANSIENT_OR_PERSISTENT
+          return TRANSIENT_OR_PERSISTENT;
+        case 7: // CORRECTIVE_ACTION
+          return CORRECTIVE_ACTION;
+        case 8: // ACTIONABLE_GROUP
+          return ACTIONABLE_GROUP;
+        case 9: // ROOT_CAUSE_ERROR_ID_LIST
+          return ROOT_CAUSE_ERROR_ID_LIST;
+        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 static final int __TRANSIENTORPERSISTENT_ISSET_ID = 1;
+  private byte __isset_bitfield = 0;
+  private _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.ACTUAL_ERROR_MESSAGE,_Fields.USER_FRIENDLY_MESSAGE,_Fields.ERROR_CATEGORY,_Fields.TRANSIENT_OR_PERSISTENT,_Fields.CORRECTIVE_ACTION,_Fields.ACTIONABLE_GROUP,_Fields.ROOT_CAUSE_ERROR_ID_LIST};
+  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.ERROR_ID, new org.apache.thrift.meta_data.FieldMetaData("errorID", 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.ACTUAL_ERROR_MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("actualErrorMessage", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.USER_FRIENDLY_MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("userFriendlyMessage", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.ERROR_CATEGORY, new org.apache.thrift.meta_data.FieldMetaData("errorCategory", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, ErrorCategory.class)));
+    tmpMap.put(_Fields.TRANSIENT_OR_PERSISTENT, new org.apache.thrift.meta_data.FieldMetaData("transientOrPersistent", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+    tmpMap.put(_Fields.CORRECTIVE_ACTION, new org.apache.thrift.meta_data.FieldMetaData("correctiveAction", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, CorrectiveAction.class)));
+    tmpMap.put(_Fields.ACTIONABLE_GROUP, new org.apache.thrift.meta_data.FieldMetaData("actionableGroup", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, ActionableGroup.class)));
+    tmpMap.put(_Fields.ROOT_CAUSE_ERROR_ID_LIST, new org.apache.thrift.meta_data.FieldMetaData("rootCauseErrorIdList", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ErrorDetails.class, metaDataMap);
+  }
+
+  public ErrorDetails() {
+    this.errorID = "DO_NOT_SET_AT_CLIENTS";
+
+    this.transientOrPersistent = false;
+
+  }
+
+  public ErrorDetails(
+    String errorID)
+  {
+    this();
+    this.errorID = errorID;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public ErrorDetails(ErrorDetails other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.isSetErrorID()) {
+      this.errorID = other.errorID;
+    }
+    this.creationTime = other.creationTime;
+    if (other.isSetActualErrorMessage()) {
+      this.actualErrorMessage = other.actualErrorMessage;
+    }
+    if (other.isSetUserFriendlyMessage()) {
+      this.userFriendlyMessage = other.userFriendlyMessage;
+    }
+    if (other.isSetErrorCategory()) {
+      this.errorCategory = other.errorCategory;
+    }
+    this.transientOrPersistent = other.transientOrPersistent;
+    if (other.isSetCorrectiveAction()) {
+      this.correctiveAction = other.correctiveAction;
+    }
+    if (other.isSetActionableGroup()) {
+      this.actionableGroup = other.actionableGroup;
+    }
+    if (other.isSetRootCauseErrorIdList()) {
+      List<String> __this__rootCauseErrorIdList = new ArrayList<String>(other.rootCauseErrorIdList);
+      this.rootCauseErrorIdList = __this__rootCauseErrorIdList;
+    }
+  }
+
+  public ErrorDetails deepCopy() {
+    return new ErrorDetails(this);
+  }
+
+  @Override
+  public void clear() {
+    this.errorID = "DO_NOT_SET_AT_CLIENTS";
+
+    setCreationTimeIsSet(false);
+    this.creationTime = 0;
+    this.actualErrorMessage = null;
+    this.userFriendlyMessage = null;
+    this.errorCategory = null;
+    this.transientOrPersistent = false;
+
+    this.correctiveAction = null;
+    this.actionableGroup = null;
+    this.rootCauseErrorIdList = null;
+  }
+
+  public String getErrorID() {
+    return this.errorID;
+  }
+
+  public ErrorDetails setErrorID(String errorID) {
+    this.errorID = errorID;
+    return this;
+  }
+
+  public void unsetErrorID() {
+    this.errorID = null;
+  }
+
+  /** Returns true if field errorID is set (has been assigned a value) and false otherwise */
+  public boolean isSetErrorID() {
+    return this.errorID != null;
+  }
+
+  public void setErrorIDIsSet(boolean value) {
+    if (!value) {
+      this.errorID = null;
+    }
+  }
+
+  public long getCreationTime() {
+    return this.creationTime;
+  }
+
+  public ErrorDetails 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 getActualErrorMessage() {
+    return this.actualErrorMessage;
+  }
+
+  public ErrorDetails setActualErrorMessage(String actualErrorMessage) {
+    this.actualErrorMessage = actualErrorMessage;
+    return this;
+  }
+
+  public void unsetActualErrorMessage() {
+    this.actualErrorMessage = null;
+  }
+
+  /** Returns true if field actualErrorMessage is set (has been assigned a value) and false otherwise */
+  public boolean isSetActualErrorMessage() {
+    return this.actualErrorMessage != null;
+  }
+
+  public void setActualErrorMessageIsSet(boolean value) {
+    if (!value) {
+      this.actualErrorMessage = null;
+    }
+  }
+
+  public String getUserFriendlyMessage() {
+    return this.userFriendlyMessage;
+  }
+
+  public ErrorDetails setUserFriendlyMessage(String userFriendlyMessage) {
+    this.userFriendlyMessage = userFriendlyMessage;
+    return this;
+  }
+
+  public void unsetUserFriendlyMessage() {
+    this.userFriendlyMessage = null;
+  }
+
+  /** Returns true if field userFriendlyMessage is set (has been assigned a value) and false otherwise */
+  public boolean isSetUserFriendlyMessage() {
+    return this.userFriendlyMessage != null;
+  }
+
+  public void setUserFriendlyMessageIsSet(boolean value) {
+    if (!value) {
+      this.userFriendlyMessage = null;
+    }
+  }
+
+  /**
+   * 
+   * @see ErrorCategory
+   */
+  public ErrorCategory getErrorCategory() {
+    return this.errorCategory;
+  }
+
+  /**
+   * 
+   * @see ErrorCategory
+   */
+  public ErrorDetails setErrorCategory(ErrorCategory errorCategory) {
+    this.errorCategory = errorCategory;
+    return this;
+  }
+
+  public void unsetErrorCategory() {
+    this.errorCategory = null;
+  }
+
+  /** Returns true if field errorCategory is set (has been assigned a value) and false otherwise */
+  public boolean isSetErrorCategory() {
+    return this.errorCategory != null;
+  }
+
+  public void setErrorCategoryIsSet(boolean value) {
+    if (!value) {
+      this.errorCategory = null;
+    }
+  }
+
+  public boolean isTransientOrPersistent() {
+    return this.transientOrPersistent;
+  }
+
+  public ErrorDetails setTransientOrPersistent(boolean transientOrPersistent) {
+    this.transientOrPersistent = transientOrPersistent;
+    setTransientOrPersistentIsSet(true);
+    return this;
+  }
+
+  public void unsetTransientOrPersistent() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __TRANSIENTORPERSISTENT_ISSET_ID);
+  }
+
+  /** Returns true if field transientOrPersistent is set (has been assigned a value) and false otherwise */
+  public boolean isSetTransientOrPersistent() {
+    return EncodingUtils.testBit(__isset_bitfield, __TRANSIENTORPERSISTENT_ISSET_ID);
+  }
+
+  public void setTransientOrPersistentIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __TRANSIENTORPERSISTENT_ISSET_ID, value);
+  }
+
+  /**
+   * 
+   * @see CorrectiveAction
+   */
+  public CorrectiveAction getCorrectiveAction() {
+    return this.correctiveAction;
+  }
+
+  /**
+   * 
+   * @see CorrectiveAction
+   */
+  public ErrorDetails setCorrectiveAction(CorrectiveAction correctiveAction) {
+    this.correctiveAction = correctiveAction;
+    return this;
+  }
+
+  public void unsetCorrectiveAction() {
+    this.correctiveAction = null;
+  }
+
+  /** Returns true if field correctiveAction is set (has been assigned a value) and false otherwise */
+  public boolean isSetCorrectiveAction() {
+    return this.correctiveAction != null;
+  }
+
+  public void setCorrectiveActionIsSet(boolean value) {
+    if (!value) {
+      this.correctiveAction = null;
+    }
+  }
+
+  /**
+   * 
+   * @see ActionableGroup
+   */
+  public ActionableGroup getActionableGroup() {
+    return this.actionableGroup;
+  }
+
+  /**
+   * 
+   * @see ActionableGroup
+   */
+  public ErrorDetails setActionableGroup(ActionableGroup actionableGroup) {
+    this.actionableGroup = actionableGroup;
+    return this;
+  }
+
+  public void unsetActionableGroup() {
+    this.actionableGroup = null;
+  }
+
+  /** Returns true if field actionableGroup is set (has been assigned a value) and false otherwise */
+  public boolean isSetActionableGroup() {
+    return this.actionableGroup != null;
+  }
+
+  public void setActionableGroupIsSet(boolean value) {
+    if (!value) {
+      this.actionableGroup = null;
+    }
+  }
+
+  public int getRootCauseErrorIdListSize() {
+    return (this.rootCauseErrorIdList == null) ? 0 : this.rootCauseErrorIdList.size();
+  }
+
+  public java.util.Iterator<String> getRootCauseErrorIdListIterator() {
+    return (this.rootCauseErrorIdList == null) ? null : this.rootCauseErrorIdList.iterator();
+  }
+
+  public void addToRootCauseErrorIdList(String elem) {
+    if (this.rootCauseErrorIdList == null) {
+      this.rootCauseErrorIdList = new ArrayList<String>();
+    }
+    this.rootCauseErrorIdList.add(elem);
+  }
+
+  public List<String> getRootCauseErrorIdList() {
+    return this.rootCauseErrorIdList;
+  }
+
+  public ErrorDetails setRootCauseErrorIdList(List<String> rootCauseErrorIdList) {
+    this.rootCauseErrorIdList = rootCauseErrorIdList;
+    return this;
+  }
+
+  public void unsetRootCauseErrorIdList() {
+    this.rootCauseErrorIdList = null;
+  }
+
+  /** Returns true if field rootCauseErrorIdList is set (has been assigned a value) and false otherwise */
+  public boolean isSetRootCauseErrorIdList() {
+    return this.rootCauseErrorIdList != null;
+  }
+
+  public void setRootCauseErrorIdListIsSet(boolean value) {
+    if (!value) {
+      this.rootCauseErrorIdList = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case ERROR_ID:
+      if (value == null) {
+        unsetErrorID();
+      } else {
+        setErrorID((String)value);
+      }
+      break;
+
+    case CREATION_TIME:
+      if (value == null) {
+        unsetCreationTime();
+      } else {
+        setCreationTime((Long)value);
+      }
+      break;
+
+    case ACTUAL_ERROR_MESSAGE:
+      if (value == null) {
+        unsetActualErrorMessage();
+      } else {
+        setActualErrorMessage((String)value);
+      }
+      break;
+
+    case USER_FRIENDLY_MESSAGE:
+      if (value == null) {
+        unsetUserFriendlyMessage();
+      } else {
+        setUserFriendlyMessage((String)value);
+      }
+      break;
+
+    case ERROR_CATEGORY:
+      if (value == null) {
+        unsetErrorCategory();
+      } else {
+        setErrorCategory((ErrorCategory)value);
+      }
+      break;
+
+    case TRANSIENT_OR_PERSISTENT:
+      if (value == null) {
+        unsetTransientOrPersistent();
+      } else {
+        setTransientOrPersistent((Boolean)value);
+      }
+      break;
+
+    case CORRECTIVE_ACTION:
+      if (value == null) {
+        unsetCorrectiveAction();
+      } else {
+        setCorrectiveAction((CorrectiveAction)value);
+      }
+      break;
+
+    case ACTIONABLE_GROUP:
+      if (value == null) {
+        unsetActionableGroup();
+      } else {
+        setActionableGroup((ActionableGroup)value);
+      }
+      break;
+
+    case ROOT_CAUSE_ERROR_ID_LIST:
+      if (value == null) {
+        unsetRootCauseErrorIdList();
+      } else {
+        setRootCauseErrorIdList((List<String>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case ERROR_ID:
+      return getErrorID();
+
+    case CREATION_TIME:
+      return Long.valueOf(getCreationTime());
+
+    case ACTUAL_ERROR_MESSAGE:
+      return getActualErrorMessage();
+
+    case USER_FRIENDLY_MESSAGE:
+      return getUserFriendlyMessage();
+
+    case ERROR_CATEGORY:
+      return getErrorCategory();
+
+    case TRANSIENT_OR_PERSISTENT:
+      return Boolean.valueOf(isTransientOrPersistent());
+
+    case CORRECTIVE_ACTION:
+      return getCorrectiveAction();
+
+    case ACTIONABLE_GROUP:
+      return getActionableGroup();
+
+    case ROOT_CAUSE_ERROR_ID_LIST:
+      return getRootCauseErrorIdList();
+
+    }
+    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 ERROR_ID:
+      return isSetErrorID();
+    case CREATION_TIME:
+      return isSetCreationTime();
+    case ACTUAL_ERROR_MESSAGE:
+      return isSetActualErrorMessage();
+    case USER_FRIENDLY_MESSAGE:
+      return isSetUserFriendlyMessage();
+    case ERROR_CATEGORY:
+      return isSetErrorCategory();
+    case TRANSIENT_OR_PERSISTENT:
+      return isSetTransientOrPersistent();
+    case CORRECTIVE_ACTION:
+      return isSetCorrectiveAction();
+    case ACTIONABLE_GROUP:
+      return isSetActionableGroup();
+    case ROOT_CAUSE_ERROR_ID_LIST:
+      return isSetRootCauseErrorIdList();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof ErrorDetails)
+      return this.equals((ErrorDetails)that);
+    return false;
+  }
+
+  public boolean equals(ErrorDetails that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_errorID = true && this.isSetErrorID();
+    boolean that_present_errorID = true && that.isSetErrorID();
+    if (this_present_errorID || that_present_errorID) {
+      if (!(this_present_errorID && that_present_errorID))
+        return false;
+      if (!this.errorID.equals(that.errorID))
+        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_actualErrorMessage = true && this.isSetActualErrorMessage();
+    boolean that_present_actualErrorMessage = true && that.isSetActualErrorMessage();
+    if (this_present_actualErrorMessage || that_present_actualErrorMessage) {
+      if (!(this_present_actualErrorMessage && that_present_actualErrorMessage))
+        return false;
+      if (!this.actualErrorMessage.equals(that.actualErrorMessage))
+        return false;
+    }
+
+    boolean this_present_userFriendlyMessage = true && this.isSetUserFriendlyMessage();
+    boolean that_present_userFriendlyMessage = true && that.isSetUserFriendlyMessage();
+    if (this_present_userFriendlyMessage || that_present_userFriendlyMessage) {
+      if (!(this_present_userFriendlyMessage && that_present_userFriendlyMessage))
+        return false;
+      if (!this.userFriendlyMessage.equals(that.userFriendlyMessage))
+        return false;
+    }
+
+    boolean this_present_errorCategory = true && this.isSetErrorCategory();
+    boolean that_present_errorCategory = true && that.isSetErrorCategory();
+    if (this_present_errorCategory || that_present_errorCategory) {
+      if (!(this_present_errorCategory && that_present_errorCategory))
+        return false;
+      if (!this.errorCategory.equals(that.errorCategory))
+        return false;
+    }
+
+    boolean this_present_transientOrPersistent = true && this.isSetTransientOrPersistent();
+    boolean that_present_transientOrPersistent = true && that.isSetTransientOrPersistent();
+    if (this_present_transientOrPersistent || that_present_transientOrPersistent) {
+      if (!(this_present_transientOrPersistent && that_present_transientOrPersistent))
+        return false;
+      if (this.transientOrPersistent != that.transientOrPersistent)
+        return false;
+    }
+
+    boolean this_present_correctiveAction = true && this.isSetCorrectiveAction();
+    boolean that_present_correctiveAction = true && that.isSetCorrectiveAction();
+    if (this_present_correctiveAction || that_present_correctiveAction) {
+      if (!(this_present_correctiveAction && that_present_correctiveAction))
+        return false;
+      if (!this.correctiveAction.equals(that.correctiveAction))
+        return false;
+    }
+
+    boolean this_present_actionableGroup = true && this.isSetActionableGroup();
+    boolean that_present_actionableGroup = true && that.isSetActionableGroup();
+    if (this_present_actionableGroup || that_present_actionableGroup) {
+      if (!(this_present_actionableGroup && that_present_actionableGroup))
+        return false;
+      if (!this.actionableGroup.equals(that.actionableGroup))
+        return false;
+    }
+
+    boolean this_present_rootCauseErrorIdList = true && this.isSetRootCauseErrorIdList();
+    boolean that_present_rootCauseErrorIdList = true && that.isSetRootCauseErrorIdList();
+    if (this_present_rootCauseErrorIdList || that_present_rootCauseErrorIdList) {
+      if (!(this_present_rootCauseErrorIdList && that_present_rootCauseErrorIdList))
+        return false;
+      if (!this.rootCauseErrorIdList.equals(that.rootCauseErrorIdList))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public int compareTo(ErrorDetails other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(isSetErrorID()).compareTo(other.isSetErrorID());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetErrorID()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.errorID, other.errorID);
+      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(isSetActualErrorMessage()).compareTo(other.isSetActualErrorMessage());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetActualErrorMessage()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.actualErrorMessage, other.actualErrorMessage);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetUserFriendlyMessage()).compareTo(other.isSetUserFriendlyMessage());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUserFriendlyMessage()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userFriendlyMessage, other.userFriendlyMessage);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetErrorCategory()).compareTo(other.isSetErrorCategory());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetErrorCategory()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.errorCategory, other.errorCategory);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetTransientOrPersistent()).compareTo(other.isSetTransientOrPersistent());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetTransientOrPersistent()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.transientOrPersistent, other.transientOrPersistent);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetCorrectiveAction()).compareTo(other.isSetCorrectiveAction());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCorrectiveAction()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.correctiveAction, other.correctiveAction);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetActionableGroup()).compareTo(other.isSetActionableGroup());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetActionableGroup()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.actionableGroup, other.actionableGroup);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetRootCauseErrorIdList()).compareTo(other.isSetRootCauseErrorIdList());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetRootCauseErrorIdList()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.rootCauseErrorIdList, other.rootCauseErrorIdList);
+      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("ErrorDetails(");
+    boolean first = true;
+
+    sb.append("errorID:");
+    if (this.errorID == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.errorID);
+    }
+    first = false;
+    if (isSetCreationTime()) {
+      if (!first) sb.append(", ");
+      sb.append("creationTime:");
+      sb.append(this.creationTime);
+      first = false;
+    }
+    if (isSetActualErrorMessage()) {
+      if (!first) sb.append(", ");
+      sb.append("actualErrorMessage:");
+      if (this.actualErrorMessage == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.actualErrorMessage);
+      }
+      first = false;
+    }
+    if (isSetUserFriendlyMessage()) {
+      if (!first) sb.append(", ");
+      sb.append("userFriendlyMessage:");
+      if (this.userFriendlyMessage == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.userFriendlyMessage);
+      }
+      first = false;
+    }
+    if (isSetErrorCategory()) {
+      if (!first) sb.append(", ");
+      sb.append("errorCategory:");
+      if (this.errorCategory == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.errorCategory);
+      }
+      first = false;
+    }
+    if (isSetTransientOrPersistent()) {
+      if (!first) sb.append(", ");
+      sb.append("transientOrPersistent:");
+      sb.append(this.transientOrPersistent);
+      first = false;
+    }
+    if (isSetCorrectiveAction()) {
+      if (!first) sb.append(", ");
+      sb.append("correctiveAction:");
+      if (this.correctiveAction == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.correctiveAction);
+      }
+      first = false;
+    }
+    if (isSetActionableGroup()) {
+      if (!first) sb.append(", ");
+      sb.append("actionableGroup:");
+      if (this.actionableGroup == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.actionableGroup);
+      }
+      first = false;
+    }
+    if (isSetRootCauseErrorIdList()) {
+      if (!first) sb.append(", ");
+      sb.append("rootCauseErrorIdList:");
+      if (this.rootCauseErrorIdList == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.rootCauseErrorIdList);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (errorID == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'errorID' was not present! Struct: " + toString());
+    }
+    // check for sub-struct validity
+  }
+
+  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 ErrorDetailsStandardSchemeFactory implements SchemeFactory {
+    public ErrorDetailsStandardScheme getScheme() {
+      return new ErrorDetailsStandardScheme();
+    }
+  }
+
+  private static class ErrorDetailsStandardScheme extends StandardScheme<ErrorDetails> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, ErrorDetails 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: // ERROR_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.errorID = iprot.readString();
+              struct.setErrorIDIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // 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 3: // ACTUAL_ERROR_MESSAGE
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.actualErrorMessage = iprot.readString();
+              struct.setActualErrorMessageIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // USER_FRIENDLY_MESSAGE
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.userFriendlyMessage = iprot.readString();
+              struct.setUserFriendlyMessageIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 5: // ERROR_CATEGORY
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.errorCategory = ErrorCategory.findByValue(iprot.readI32());
+              struct.setErrorCategoryIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 6: // TRANSIENT_OR_PERSISTENT
+            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+              struct.transientOrPersistent = iprot.readBool();
+              struct.setTransientOrPersistentIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 7: // CORRECTIVE_ACTION
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.correctiveAction = CorrectiveAction.findByValue(iprot.readI32());
+              struct.setCorrectiveActionIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 8: // ACTIONABLE_GROUP
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.actionableGroup = ActionableGroup.findByValue(iprot.readI32());
+              struct.setActionableGroupIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 9: // ROOT_CAUSE_ERROR_ID_LIST
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list0 = iprot.readListBegin();
+                struct.rootCauseErrorIdList = new ArrayList<String>(_list0.size);
+                for (int _i1 = 0; _i1 < _list0.size; ++_i1)
+                {
+                  String _elem2;
+                  _elem2 = iprot.readString();
+                  struct.rootCauseErrorIdList.add(_elem2);
+                }
+                iprot.readListEnd();
+              }
+              struct.setRootCauseErrorIdListIsSet(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, ErrorDetails struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.errorID != null) {
+        oprot.writeFieldBegin(ERROR_ID_FIELD_DESC);
+        oprot.writeString(struct.errorID);
+        oprot.writeFieldEnd();
+      }
+      if (struct.isSetCreationTime()) {
+        oprot.writeFieldBegin(CREATION_TIME_FIELD_DESC);
+        oprot.writeI64(struct.creationTime);
+        oprot.writeFieldEnd();
+      }
+      if (struct.actualErrorMessage != null) {
+        if (struct.isSetActualErrorMessage()) {
+          oprot.writeFieldBegin(ACTUAL_ERROR_MESSAGE_FIELD_DESC);
+          oprot.writeString(struct.actualErrorMessage);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.userFriendlyMessage != null) {
+        if (struct.isSetUserFriendlyMessage()) {
+          oprot.writeFieldBegin(USER_FRIENDLY_MESSAGE_FIELD_DESC);
+          oprot.writeString(struct.userFriendlyMessage);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.errorCategory != null) {
+        if (struct.isSetErrorCategory()) {
+          oprot.writeFieldBegin(ERROR_CATEGORY_FIELD_DESC);
+          oprot.writeI32(struct.errorCategory.getValue());
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.isSetTransientOrPersistent()) {
+        oprot.writeFieldBegin(TRANSIENT_OR_PERSISTENT_FIELD_DESC);
+        oprot.writeBool(struct.transientOrPersistent);
+        oprot.writeFieldEnd();
+      }
+      if (struct.correctiveAction != null) {
+        if (struct.isSetCorrectiveAction()) {
+          oprot.writeFieldBegin(CORRECTIVE_ACTION_FIELD_DESC);
+          oprot.writeI32(struct.correctiveAction.getValue());
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.actionableGroup != null) {
+        if (struct.isSetActionableGroup()) {
+          oprot.writeFieldBegin(ACTIONABLE_GROUP_FIELD_DESC);
+          oprot.writeI32(struct.actionableGroup.getValue());
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.rootCauseErrorIdList != null) {
+        if (struct.isSetRootCauseErrorIdList()) {
+          oprot.writeFieldBegin(ROOT_CAUSE_ERROR_ID_LIST_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.rootCauseErrorIdList.size()));
+            for (String _iter3 : struct.rootCauseErrorIdList)
+            {
+              oprot.writeString(_iter3);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class ErrorDetailsTupleSchemeFactory implements SchemeFactory {
+    public ErrorDetailsTupleScheme getScheme() {
+      return new ErrorDetailsTupleScheme();
+    }
+  }
+
+  private static class ErrorDetailsTupleScheme extends TupleScheme<ErrorDetails> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, ErrorDetails struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.errorID);
+      BitSet optionals = new BitSet();
+      if (struct.isSetCreationTime()) {
+        optionals.set(0);
+      }
+      if (struct.isSetActualErrorMessage()) {
+        optionals.set(1);
+      }
+      if (struct.isSetUserFriendlyMessage()) {
+        optionals.set(2);
+      }
+      if (struct.isSetErrorCategory()) {
+        optionals.set(3);
+      }
+      if (struct.isSetTransientOrPersistent()) {
+        optionals.set(4);
+      }
+      if (struct.isSetCorrectiveAction()) {
+        optionals.set(5);
+      }
+      if (struct.isSetActionableGroup()) {
+        optionals.set(6);
+      }
+      if (struct.isSetRootCauseErrorIdList()) {
+        optionals.set(7);
+      }
+      oprot.writeBitSet(optionals, 8);
+      if (struct.isSetCreationTime()) {
+        oprot.writeI64(struct.creationTime);
+      }
+      if (struct.isSetActualErrorMessage()) {
+        oprot.writeString(struct.actualErrorMessage);
+      }
+      if (struct.isSetUserFriendlyMessage()) {
+        oprot.writeString(struct.userFriendlyMessage);
+      }
+      if (struct.isSetErrorCategory()) {
+        oprot.writeI32(struct.errorCategory.getValue());
+      }
+      if (struct.isSetTransientOrPersistent()) {
+        oprot.writeBool(struct.transientOrPersistent);
+      }
+      if (struct.isSetCorrectiveAction()) {
+        oprot.writeI32(struct.correctiveAction.getValue());
+      }
+      if (struct.isSetActionableGroup()) {
+        oprot.writeI32(struct.actionableGroup.getValue());
+      }
+      if (struct.isSetRootCauseErrorIdList()) {
+        {
+          oprot.writeI32(struct.rootCauseErrorIdList.size());
+          for (String _iter4 : struct.rootCauseErrorIdList)
+          {
+            oprot.writeString(_iter4);
+          }
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, ErrorDetails struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.errorID = iprot.readString();
+      struct.setErrorIDIsSet(true);
+      BitSet incoming = iprot.readBitSet(8);
+      if (incoming.get(0)) {
+        struct.creationTime = iprot.readI64();
+        struct.setCreationTimeIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.actualErrorMessage = iprot.readString();
+        struct.setActualErrorMessageIsSet(true);
+      }
+      if (incoming.get(2)) {
+        struct.userFriendlyMessage = iprot.readString();
+        struct.setUserFriendlyMessageIsSet(true);
+      }
+      if (incoming.get(3)) {
+        struct.errorCategory = ErrorCategory.findByValue(iprot.readI32());
+        struct.setErrorCategoryIsSet(true);
+      }
+      if (incoming.get(4)) {
+        struct.transientOrPersistent = iprot.readBool();
+        struct.setTransientOrPersistentIsSet(true);
+      }
+      if (incoming.get(5)) {
+        struct.correctiveAction = CorrectiveAction.findByValue(iprot.readI32());
+        struct.setCorrectiveActionIsSet(true);
+      }
+      if (incoming.get(6)) {
+        struct.actionableGroup = ActionableGroup.findByValue(iprot.readI32());
+        struct.setActionableGroupIsSet(true);
+      }
+      if (incoming.get(7)) {
+        {
+          org.apache.thrift.protocol.TList _list5 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.rootCauseErrorIdList = new ArrayList<String>(_list5.size);
+          for (int _i6 = 0; _i6 < _list5.size; ++_i6)
+          {
+            String _elem7;
+            _elem7 = iprot.readString();
+            struct.rootCauseErrorIdList.add(_elem7);
+          }
+        }
+        struct.setRootCauseErrorIdListIsSet(true);
+      }
+    }
+  }
+
+}
+