<?php
namespace Airavata\Model\AppCatalog\AppDeployment;

/**
 * Autogenerated by Thrift Compiler (0.10.0)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
use Thrift\Base\TBase;
use Thrift\Type\TType;
use Thrift\Type\TMessageType;
use Thrift\Exception\TException;
use Thrift\Exception\TProtocolException;
use Thrift\Protocol\TProtocol;
use Thrift\Protocol\TBinaryProtocolAccelerated;
use Thrift\Exception\TApplicationException;


/**
 * Key Value pairs to be used to set environments
 * 
 * name:
 *   Name of the environment variable such as PATH, LD_LIBRARY_PATH, NETCDF_HOME.
 * 
 * value:
 *   Value of the environment variable to set
 * 
 * envPathOrder:
 *   The order of the setting of the env variables when there are multiple env variables
 */
class SetEnvPaths {
  static $_TSPEC;

  /**
   * @var string
   */
  public $name = null;
  /**
   * @var string
   */
  public $value = null;
  /**
   * @var int
   */
  public $envPathOrder = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'name',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'value',
          'type' => TType::STRING,
          ),
        3 => array(
          'var' => 'envPathOrder',
          'type' => TType::I32,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['name'])) {
        $this->name = $vals['name'];
      }
      if (isset($vals['value'])) {
        $this->value = $vals['value'];
      }
      if (isset($vals['envPathOrder'])) {
        $this->envPathOrder = $vals['envPathOrder'];
      }
    }
  }

  public function getName() {
    return 'SetEnvPaths';
  }

  public function read($input)
  {
    $xfer = 0;
    $fname = null;
    $ftype = 0;
    $fid = 0;
    $xfer += $input->readStructBegin($fname);
    while (true)
    {
      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
      if ($ftype == TType::STOP) {
        break;
      }
      switch ($fid)
      {
        case 1:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->name);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->value);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->envPathOrder);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        default:
          $xfer += $input->skip($ftype);
          break;
      }
      $xfer += $input->readFieldEnd();
    }
    $xfer += $input->readStructEnd();
    return $xfer;
  }

  public function write($output) {
    $xfer = 0;
    $xfer += $output->writeStructBegin('SetEnvPaths');
    if ($this->name !== null) {
      $xfer += $output->writeFieldBegin('name', TType::STRING, 1);
      $xfer += $output->writeString($this->name);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->value !== null) {
      $xfer += $output->writeFieldBegin('value', TType::STRING, 2);
      $xfer += $output->writeString($this->value);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->envPathOrder !== null) {
      $xfer += $output->writeFieldBegin('envPathOrder', TType::I32, 3);
      $xfer += $output->writeI32($this->envPathOrder);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Job commands to be used in Pre Job, Post Job and Module Load Commands
 * 
 * command:
 *   The actual command in string format
 * 
 * commandOrder:
 *   Order of the command in the multiple command situation
 */
class CommandObject {
  static $_TSPEC;

  /**
   * @var string
   */
  public $command = null;
  /**
   * @var int
   */
  public $commandOrder = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'command',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'commandOrder',
          'type' => TType::I32,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['command'])) {
        $this->command = $vals['command'];
      }
      if (isset($vals['commandOrder'])) {
        $this->commandOrder = $vals['commandOrder'];
      }
    }
  }

  public function getName() {
    return 'CommandObject';
  }

  public function read($input)
  {
    $xfer = 0;
    $fname = null;
    $ftype = 0;
    $fid = 0;
    $xfer += $input->readStructBegin($fname);
    while (true)
    {
      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
      if ($ftype == TType::STOP) {
        break;
      }
      switch ($fid)
      {
        case 1:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->command);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->commandOrder);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        default:
          $xfer += $input->skip($ftype);
          break;
      }
      $xfer += $input->readFieldEnd();
    }
    $xfer += $input->readStructEnd();
    return $xfer;
  }

  public function write($output) {
    $xfer = 0;
    $xfer += $output->writeStructBegin('CommandObject');
    if ($this->command !== null) {
      $xfer += $output->writeFieldBegin('command', TType::STRING, 1);
      $xfer += $output->writeString($this->command);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->commandOrder !== null) {
      $xfer += $output->writeFieldBegin('commandOrder', TType::I32, 2);
      $xfer += $output->writeI32($this->commandOrder);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Application Module Information. A module has to be registered before registering a deployment.
 * 
 * appModuleId: Airavata Internal Unique Job ID. This is set by the registry.
 * 
 * appModuleName:
 *   Name of the application module.
 * 
 * appModuleVersion:
 *   Version of the application.
 * 
 * appModuleDescription:
 *    Descriprion of the Module
 * 
 */
class ApplicationModule {
  static $_TSPEC;

  /**
   * @var string
   */
  public $appModuleId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var string
   */
  public $appModuleName = null;
  /**
   * @var string
   */
  public $appModuleVersion = null;
  /**
   * @var string
   */
  public $appModuleDescription = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'appModuleId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'appModuleName',
          'type' => TType::STRING,
          ),
        3 => array(
          'var' => 'appModuleVersion',
          'type' => TType::STRING,
          ),
        4 => array(
          'var' => 'appModuleDescription',
          'type' => TType::STRING,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['appModuleId'])) {
        $this->appModuleId = $vals['appModuleId'];
      }
      if (isset($vals['appModuleName'])) {
        $this->appModuleName = $vals['appModuleName'];
      }
      if (isset($vals['appModuleVersion'])) {
        $this->appModuleVersion = $vals['appModuleVersion'];
      }
      if (isset($vals['appModuleDescription'])) {
        $this->appModuleDescription = $vals['appModuleDescription'];
      }
    }
  }

  public function getName() {
    return 'ApplicationModule';
  }

  public function read($input)
  {
    $xfer = 0;
    $fname = null;
    $ftype = 0;
    $fid = 0;
    $xfer += $input->readStructBegin($fname);
    while (true)
    {
      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
      if ($ftype == TType::STOP) {
        break;
      }
      switch ($fid)
      {
        case 1:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->appModuleId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->appModuleName);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->appModuleVersion);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 4:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->appModuleDescription);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        default:
          $xfer += $input->skip($ftype);
          break;
      }
      $xfer += $input->readFieldEnd();
    }
    $xfer += $input->readStructEnd();
    return $xfer;
  }

  public function write($output) {
    $xfer = 0;
    $xfer += $output->writeStructBegin('ApplicationModule');
    if ($this->appModuleId !== null) {
      $xfer += $output->writeFieldBegin('appModuleId', TType::STRING, 1);
      $xfer += $output->writeString($this->appModuleId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->appModuleName !== null) {
      $xfer += $output->writeFieldBegin('appModuleName', TType::STRING, 2);
      $xfer += $output->writeString($this->appModuleName);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->appModuleVersion !== null) {
      $xfer += $output->writeFieldBegin('appModuleVersion', TType::STRING, 3);
      $xfer += $output->writeString($this->appModuleVersion);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->appModuleDescription !== null) {
      $xfer += $output->writeFieldBegin('appModuleDescription', TType::STRING, 4);
      $xfer += $output->writeString($this->appModuleDescription);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Application Deployment Description
 * 
 * appDeploymentId: Airavata Internal Unique Job ID. This is set by the registry.
 * 
 * appModuleName:
 *   Application Module Name. This has to be precise describing the binary.
 * 
 * computeHostId:
 *   This ID maps application deployment to a particular resource previously described within Airavata.
 *   Example: Stampede is first registered and refered when registering WRF.
 * 
 * moduleLoadCmd:
 *  Command string to load modules. This will be placed in the job submisison
 *  Ex: module load amber
 * 
 * libPrependPaths:
 *  prepend to a path variable the value
 * 
 * libAppendPaths:
 *  append to a path variable the value
 * 
 * setEnvironment:
 *  assigns to the environment variable "NAME" the value
 * 
 */
class ApplicationDeploymentDescription {
  static $_TSPEC;

  /**
   * @var string
   */
  public $appDeploymentId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var string
   */
  public $appModuleId = null;
  /**
   * @var string
   */
  public $computeHostId = null;
  /**
   * @var string
   */
  public $executablePath = null;
  /**
   * @var int
   */
  public $parallelism =   0;
  /**
   * @var string
   */
  public $appDeploymentDescription = null;
  /**
   * @var \Airavata\Model\AppCatalog\AppDeployment\CommandObject[]
   */
  public $moduleLoadCmds = null;
  /**
   * @var \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths[]
   */
  public $libPrependPaths = null;
  /**
   * @var \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths[]
   */
  public $libAppendPaths = null;
  /**
   * @var \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths[]
   */
  public $setEnvironment = null;
  /**
   * @var \Airavata\Model\AppCatalog\AppDeployment\CommandObject[]
   */
  public $preJobCommands = null;
  /**
   * @var \Airavata\Model\AppCatalog\AppDeployment\CommandObject[]
   */
  public $postJobCommands = null;
  /**
   * @var string
   */
  public $defaultQueueName = null;
  /**
   * @var int
   */
  public $defaultNodeCount = null;
  /**
   * @var int
   */
  public $defaultCPUCount = null;
  /**
   * @var int
   */
  public $defaultWalltime = null;
  /**
   * @var bool
   */
  public $editableByUser = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'appDeploymentId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'appModuleId',
          'type' => TType::STRING,
          ),
        3 => array(
          'var' => 'computeHostId',
          'type' => TType::STRING,
          ),
        4 => array(
          'var' => 'executablePath',
          'type' => TType::STRING,
          ),
        5 => array(
          'var' => 'parallelism',
          'type' => TType::I32,
          ),
        6 => array(
          'var' => 'appDeploymentDescription',
          'type' => TType::STRING,
          ),
        7 => array(
          'var' => 'moduleLoadCmds',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\AppDeployment\CommandObject',
            ),
          ),
        8 => array(
          'var' => 'libPrependPaths',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths',
            ),
          ),
        9 => array(
          'var' => 'libAppendPaths',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths',
            ),
          ),
        10 => array(
          'var' => 'setEnvironment',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths',
            ),
          ),
        11 => array(
          'var' => 'preJobCommands',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\AppDeployment\CommandObject',
            ),
          ),
        12 => array(
          'var' => 'postJobCommands',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\AppDeployment\CommandObject',
            ),
          ),
        13 => array(
          'var' => 'defaultQueueName',
          'type' => TType::STRING,
          ),
        14 => array(
          'var' => 'defaultNodeCount',
          'type' => TType::I32,
          ),
        15 => array(
          'var' => 'defaultCPUCount',
          'type' => TType::I32,
          ),
        16 => array(
          'var' => 'defaultWalltime',
          'type' => TType::I32,
          ),
        17 => array(
          'var' => 'editableByUser',
          'type' => TType::BOOL,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['appDeploymentId'])) {
        $this->appDeploymentId = $vals['appDeploymentId'];
      }
      if (isset($vals['appModuleId'])) {
        $this->appModuleId = $vals['appModuleId'];
      }
      if (isset($vals['computeHostId'])) {
        $this->computeHostId = $vals['computeHostId'];
      }
      if (isset($vals['executablePath'])) {
        $this->executablePath = $vals['executablePath'];
      }
      if (isset($vals['parallelism'])) {
        $this->parallelism = $vals['parallelism'];
      }
      if (isset($vals['appDeploymentDescription'])) {
        $this->appDeploymentDescription = $vals['appDeploymentDescription'];
      }
      if (isset($vals['moduleLoadCmds'])) {
        $this->moduleLoadCmds = $vals['moduleLoadCmds'];
      }
      if (isset($vals['libPrependPaths'])) {
        $this->libPrependPaths = $vals['libPrependPaths'];
      }
      if (isset($vals['libAppendPaths'])) {
        $this->libAppendPaths = $vals['libAppendPaths'];
      }
      if (isset($vals['setEnvironment'])) {
        $this->setEnvironment = $vals['setEnvironment'];
      }
      if (isset($vals['preJobCommands'])) {
        $this->preJobCommands = $vals['preJobCommands'];
      }
      if (isset($vals['postJobCommands'])) {
        $this->postJobCommands = $vals['postJobCommands'];
      }
      if (isset($vals['defaultQueueName'])) {
        $this->defaultQueueName = $vals['defaultQueueName'];
      }
      if (isset($vals['defaultNodeCount'])) {
        $this->defaultNodeCount = $vals['defaultNodeCount'];
      }
      if (isset($vals['defaultCPUCount'])) {
        $this->defaultCPUCount = $vals['defaultCPUCount'];
      }
      if (isset($vals['defaultWalltime'])) {
        $this->defaultWalltime = $vals['defaultWalltime'];
      }
      if (isset($vals['editableByUser'])) {
        $this->editableByUser = $vals['editableByUser'];
      }
    }
  }

  public function getName() {
    return 'ApplicationDeploymentDescription';
  }

  public function read($input)
  {
    $xfer = 0;
    $fname = null;
    $ftype = 0;
    $fid = 0;
    $xfer += $input->readStructBegin($fname);
    while (true)
    {
      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
      if ($ftype == TType::STOP) {
        break;
      }
      switch ($fid)
      {
        case 1:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->appDeploymentId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->appModuleId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->computeHostId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 4:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->executablePath);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 5:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->parallelism);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 6:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->appDeploymentDescription);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 7:
          if ($ftype == TType::LST) {
            $this->moduleLoadCmds = array();
            $_size0 = 0;
            $_etype3 = 0;
            $xfer += $input->readListBegin($_etype3, $_size0);
            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
            {
              $elem5 = null;
              $elem5 = new \Airavata\Model\AppCatalog\AppDeployment\CommandObject();
              $xfer += $elem5->read($input);
              $this->moduleLoadCmds []= $elem5;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 8:
          if ($ftype == TType::LST) {
            $this->libPrependPaths = array();
            $_size6 = 0;
            $_etype9 = 0;
            $xfer += $input->readListBegin($_etype9, $_size6);
            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
            {
              $elem11 = null;
              $elem11 = new \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths();
              $xfer += $elem11->read($input);
              $this->libPrependPaths []= $elem11;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 9:
          if ($ftype == TType::LST) {
            $this->libAppendPaths = array();
            $_size12 = 0;
            $_etype15 = 0;
            $xfer += $input->readListBegin($_etype15, $_size12);
            for ($_i16 = 0; $_i16 < $_size12; ++$_i16)
            {
              $elem17 = null;
              $elem17 = new \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths();
              $xfer += $elem17->read($input);
              $this->libAppendPaths []= $elem17;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 10:
          if ($ftype == TType::LST) {
            $this->setEnvironment = array();
            $_size18 = 0;
            $_etype21 = 0;
            $xfer += $input->readListBegin($_etype21, $_size18);
            for ($_i22 = 0; $_i22 < $_size18; ++$_i22)
            {
              $elem23 = null;
              $elem23 = new \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths();
              $xfer += $elem23->read($input);
              $this->setEnvironment []= $elem23;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 11:
          if ($ftype == TType::LST) {
            $this->preJobCommands = array();
            $_size24 = 0;
            $_etype27 = 0;
            $xfer += $input->readListBegin($_etype27, $_size24);
            for ($_i28 = 0; $_i28 < $_size24; ++$_i28)
            {
              $elem29 = null;
              $elem29 = new \Airavata\Model\AppCatalog\AppDeployment\CommandObject();
              $xfer += $elem29->read($input);
              $this->preJobCommands []= $elem29;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 12:
          if ($ftype == TType::LST) {
            $this->postJobCommands = array();
            $_size30 = 0;
            $_etype33 = 0;
            $xfer += $input->readListBegin($_etype33, $_size30);
            for ($_i34 = 0; $_i34 < $_size30; ++$_i34)
            {
              $elem35 = null;
              $elem35 = new \Airavata\Model\AppCatalog\AppDeployment\CommandObject();
              $xfer += $elem35->read($input);
              $this->postJobCommands []= $elem35;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 13:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->defaultQueueName);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 14:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultNodeCount);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 15:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultCPUCount);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 16:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultWalltime);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 17:
          if ($ftype == TType::BOOL) {
            $xfer += $input->readBool($this->editableByUser);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        default:
          $xfer += $input->skip($ftype);
          break;
      }
      $xfer += $input->readFieldEnd();
    }
    $xfer += $input->readStructEnd();
    return $xfer;
  }

  public function write($output) {
    $xfer = 0;
    $xfer += $output->writeStructBegin('ApplicationDeploymentDescription');
    if ($this->appDeploymentId !== null) {
      $xfer += $output->writeFieldBegin('appDeploymentId', TType::STRING, 1);
      $xfer += $output->writeString($this->appDeploymentId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->appModuleId !== null) {
      $xfer += $output->writeFieldBegin('appModuleId', TType::STRING, 2);
      $xfer += $output->writeString($this->appModuleId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->computeHostId !== null) {
      $xfer += $output->writeFieldBegin('computeHostId', TType::STRING, 3);
      $xfer += $output->writeString($this->computeHostId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->executablePath !== null) {
      $xfer += $output->writeFieldBegin('executablePath', TType::STRING, 4);
      $xfer += $output->writeString($this->executablePath);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->parallelism !== null) {
      $xfer += $output->writeFieldBegin('parallelism', TType::I32, 5);
      $xfer += $output->writeI32($this->parallelism);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->appDeploymentDescription !== null) {
      $xfer += $output->writeFieldBegin('appDeploymentDescription', TType::STRING, 6);
      $xfer += $output->writeString($this->appDeploymentDescription);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->moduleLoadCmds !== null) {
      if (!is_array($this->moduleLoadCmds)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('moduleLoadCmds', TType::LST, 7);
      {
        $output->writeListBegin(TType::STRUCT, count($this->moduleLoadCmds));
        {
          foreach ($this->moduleLoadCmds as $iter36)
          {
            $xfer += $iter36->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->libPrependPaths !== null) {
      if (!is_array($this->libPrependPaths)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('libPrependPaths', TType::LST, 8);
      {
        $output->writeListBegin(TType::STRUCT, count($this->libPrependPaths));
        {
          foreach ($this->libPrependPaths as $iter37)
          {
            $xfer += $iter37->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->libAppendPaths !== null) {
      if (!is_array($this->libAppendPaths)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('libAppendPaths', TType::LST, 9);
      {
        $output->writeListBegin(TType::STRUCT, count($this->libAppendPaths));
        {
          foreach ($this->libAppendPaths as $iter38)
          {
            $xfer += $iter38->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->setEnvironment !== null) {
      if (!is_array($this->setEnvironment)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('setEnvironment', TType::LST, 10);
      {
        $output->writeListBegin(TType::STRUCT, count($this->setEnvironment));
        {
          foreach ($this->setEnvironment as $iter39)
          {
            $xfer += $iter39->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->preJobCommands !== null) {
      if (!is_array($this->preJobCommands)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('preJobCommands', TType::LST, 11);
      {
        $output->writeListBegin(TType::STRUCT, count($this->preJobCommands));
        {
          foreach ($this->preJobCommands as $iter40)
          {
            $xfer += $iter40->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->postJobCommands !== null) {
      if (!is_array($this->postJobCommands)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('postJobCommands', TType::LST, 12);
      {
        $output->writeListBegin(TType::STRUCT, count($this->postJobCommands));
        {
          foreach ($this->postJobCommands as $iter41)
          {
            $xfer += $iter41->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultQueueName !== null) {
      $xfer += $output->writeFieldBegin('defaultQueueName', TType::STRING, 13);
      $xfer += $output->writeString($this->defaultQueueName);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultNodeCount !== null) {
      $xfer += $output->writeFieldBegin('defaultNodeCount', TType::I32, 14);
      $xfer += $output->writeI32($this->defaultNodeCount);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultCPUCount !== null) {
      $xfer += $output->writeFieldBegin('defaultCPUCount', TType::I32, 15);
      $xfer += $output->writeI32($this->defaultCPUCount);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultWalltime !== null) {
      $xfer += $output->writeFieldBegin('defaultWalltime', TType::I32, 16);
      $xfer += $output->writeI32($this->defaultWalltime);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->editableByUser !== null) {
      $xfer += $output->writeFieldBegin('editableByUser', TType::BOOL, 17);
      $xfer += $output->writeBool($this->editableByUser);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}


