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

/**
 * 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;


/**
 * * Enumeration of local resource job manager types supported by Airavata
 * *
 * * FORK:
 * *  Forking of commands without any job manager
 * *
 * * PBS:
 * *  Job manager supporting the Portal Batch System (PBS) protocol. Some examples include TORQUE, PBSPro, Grid Engine.
 * *
 * * SLURM:
 * *  The Simple Linux Utility for Resource Management is a open source workload manager.
 *  *
 *  * UGE:
 *  *  Univa Grid Engine, a variation of PBS implementation.
 *  *
 *  * LSF:
 *  *  IBM Platform Load Sharing Facility is dominantly installed on IBM clusters.
 * *
 */
final class ResourceJobManagerType {
  const FORK = 0;
  const PBS = 1;
  const SLURM = 2;
  const LSF = 3;
  const UGE = 4;
  const CLOUD = 5;
  const AIRAVATA_CUSTOM = 6;
  const HTCONDOR = 7;
  static public $__names = array(
    0 => 'FORK',
    1 => 'PBS',
    2 => 'SLURM',
    3 => 'LSF',
    4 => 'UGE',
    5 => 'CLOUD',
    6 => 'AIRAVATA_CUSTOM',
    7 => 'HTCONDOR',
  );
}

/**
 * Enumeration of resource job manager commands
 * 
 * SUBMISSION:
 *  Ex: qsub, sbatch
 * 
 * JOBMONITORING:
 *  Ex: qstat, squeue
 * 
 * DELETION:
 *  Ex: qdel, scancel
 * 
 * CHECK_JOB:
 *  Detailed Status about the Job. Ex: checkjob
 * 
 * SHOW_QUEUE:
 *  List of Queued Job by the schedular. Ex: showq
 * 
 * SHOW_RESERVATION:
 *  List all reservations. Ex:showres, show_res
 * 
 * SHOW_START:
 *  Display the start time of the specified job. Ex: showstart
 * 
 */
final class JobManagerCommand {
  const SUBMISSION = 0;
  const JOB_MONITORING = 1;
  const DELETION = 2;
  const CHECK_JOB = 3;
  const SHOW_QUEUE = 4;
  const SHOW_RESERVATION = 5;
  const SHOW_START = 6;
  const SHOW_CLUSTER_INFO = 7;
  const SHOW_NO_OF_RUNNING_JOBS = 8;
  const SHOW_NO_OF_PENDING_JOBS = 9;
  static public $__names = array(
    0 => 'SUBMISSION',
    1 => 'JOB_MONITORING',
    2 => 'DELETION',
    3 => 'CHECK_JOB',
    4 => 'SHOW_QUEUE',
    5 => 'SHOW_RESERVATION',
    6 => 'SHOW_START',
    7 => 'SHOW_CLUSTER_INFO',
    8 => 'SHOW_NO_OF_RUNNING_JOBS',
    9 => 'SHOW_NO_OF_PENDING_JOBS',
  );
}

/**
 * Enumeration of File Systems on the resource
 * 
 * FORK:
 *  Forking of commands without any job manager
 * 
 * PBS:
 *  Job manager supporting the Portal Batch System (PBS) protocol. Some examples include TORQUE, PBSPro, Grid Engine.
 * 
 * UGE:
 *  Univa Grid Engine, a variation of PBS implementation.
 * 
 * SLURM:
 *  The Simple Linux Utility for Resource Management is a open source workload manager.
 * 
 */
final class FileSystems {
  const HOME = 0;
  const WORK = 1;
  const LOCALTMP = 2;
  const SCRATCH = 3;
  const ARCHIVE = 4;
  static public $__names = array(
    0 => 'HOME',
    1 => 'WORK',
    2 => 'LOCALTMP',
    3 => 'SCRATCH',
    4 => 'ARCHIVE',
  );
}

/**
 * Enumeration of Airavata supported Job Submission Mechanisms for High Performance Computing Clusters.
 * 
 * SSH:
 *  Execute remote job submission commands using via secure shell protocol.
 * 
 * GRAM:
 *  Execute remote jobs via Globus GRAM service.
 * 
 * UNICORE:
 *  Execute remote jobs via Unicore services
 * 
 */
final class JobSubmissionProtocol {
  const LOCAL = 0;
  const SSH = 1;
  const GLOBUS = 2;
  const UNICORE = 3;
  const CLOUD = 4;
  const SSH_FORK = 5;
  const LOCAL_FORK = 6;
  static public $__names = array(
    0 => 'LOCAL',
    1 => 'SSH',
    2 => 'GLOBUS',
    3 => 'UNICORE',
    4 => 'CLOUD',
    5 => 'SSH_FORK',
    6 => 'LOCAL_FORK',
  );
}

/**
 * Monitoring modes
 * 
 * POLL_JOB_MANAGER:
 * GFac need to pull job status changes.
 * 
 * XSEDE_AMQP_SUBSCRIBE:
 * Server will publish job status changes to amqp servert.
 * 
 * 
 */
final class MonitorMode {
  const POLL_JOB_MANAGER = 0;
  const CLOUD_JOB_MONITOR = 1;
  const JOB_EMAIL_NOTIFICATION_MONITOR = 2;
  const XSEDE_AMQP_SUBSCRIBE = 3;
  const FORK = 4;
  const LOCAL = 5;
  static public $__names = array(
    0 => 'POLL_JOB_MANAGER',
    1 => 'CLOUD_JOB_MONITOR',
    2 => 'JOB_EMAIL_NOTIFICATION_MONITOR',
    3 => 'XSEDE_AMQP_SUBSCRIBE',
    4 => 'FORK',
    5 => 'LOCAL',
  );
}

final class DMType {
  const COMPUTE_RESOURCE = 0;
  const STORAGE_RESOURCE = 1;
  static public $__names = array(
    0 => 'COMPUTE_RESOURCE',
    1 => 'STORAGE_RESOURCE',
  );
}

/**
 * Provider name
 * 
 */
final class ProviderName {
  const EC2 = 0;
  const AWSEC2 = 1;
  const RACKSPACE = 2;
  static public $__names = array(
    0 => 'EC2',
    1 => 'AWSEC2',
    2 => 'RACKSPACE',
  );
}

/**
 * Resource Job Manager Information
 * 
 * resourceJobManagerType:
 *  A typical HPC cluster has a single Job Manager to manage the resources.
 * 
 * pushMonitoringEndpoint:
 *  If the job manager pushes out state changes to a database or bus, specify the service endpoint.
 *   Ex: Moab Web Service, Moab MongoDB URL, AMQP (GLUE2) Broker
 * 
 * jobManagerBinPath:
 *  Path to the Job Manager Installation Binary directory.
 * 
 * jobManagerCommands:
 *  An enumeration of commonly used manager commands.
 * 
 */
class ResourceJobManager {
  static $_TSPEC;

  /**
   * @var string
   */
  public $resourceJobManagerId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var int
   */
  public $resourceJobManagerType = null;
  /**
   * @var string
   */
  public $pushMonitoringEndpoint = null;
  /**
   * @var string
   */
  public $jobManagerBinPath = null;
  /**
   * @var array
   */
  public $jobManagerCommands = null;
  /**
   * @var array
   */
  public $parallelismPrefix = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'resourceJobManagerId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'resourceJobManagerType',
          'type' => TType::I32,
          ),
        3 => array(
          'var' => 'pushMonitoringEndpoint',
          'type' => TType::STRING,
          ),
        4 => array(
          'var' => 'jobManagerBinPath',
          'type' => TType::STRING,
          ),
        5 => array(
          'var' => 'jobManagerCommands',
          'type' => TType::MAP,
          'ktype' => TType::I32,
          'vtype' => TType::STRING,
          'key' => array(
            'type' => TType::I32,
          ),
          'val' => array(
            'type' => TType::STRING,
            ),
          ),
        6 => array(
          'var' => 'parallelismPrefix',
          'type' => TType::MAP,
          'ktype' => TType::I32,
          'vtype' => TType::STRING,
          'key' => array(
            'type' => TType::I32,
          ),
          'val' => array(
            'type' => TType::STRING,
            ),
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['resourceJobManagerId'])) {
        $this->resourceJobManagerId = $vals['resourceJobManagerId'];
      }
      if (isset($vals['resourceJobManagerType'])) {
        $this->resourceJobManagerType = $vals['resourceJobManagerType'];
      }
      if (isset($vals['pushMonitoringEndpoint'])) {
        $this->pushMonitoringEndpoint = $vals['pushMonitoringEndpoint'];
      }
      if (isset($vals['jobManagerBinPath'])) {
        $this->jobManagerBinPath = $vals['jobManagerBinPath'];
      }
      if (isset($vals['jobManagerCommands'])) {
        $this->jobManagerCommands = $vals['jobManagerCommands'];
      }
      if (isset($vals['parallelismPrefix'])) {
        $this->parallelismPrefix = $vals['parallelismPrefix'];
      }
    }
  }

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

  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->resourceJobManagerId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->resourceJobManagerType);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->pushMonitoringEndpoint);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 4:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->jobManagerBinPath);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 5:
          if ($ftype == TType::MAP) {
            $this->jobManagerCommands = array();
            $_size0 = 0;
            $_ktype1 = 0;
            $_vtype2 = 0;
            $xfer += $input->readMapBegin($_ktype1, $_vtype2, $_size0);
            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
            {
              $key5 = 0;
              $val6 = '';
              $xfer += $input->readI32($key5);
              $xfer += $input->readString($val6);
              $this->jobManagerCommands[$key5] = $val6;
            }
            $xfer += $input->readMapEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 6:
          if ($ftype == TType::MAP) {
            $this->parallelismPrefix = array();
            $_size7 = 0;
            $_ktype8 = 0;
            $_vtype9 = 0;
            $xfer += $input->readMapBegin($_ktype8, $_vtype9, $_size7);
            for ($_i11 = 0; $_i11 < $_size7; ++$_i11)
            {
              $key12 = 0;
              $val13 = '';
              $xfer += $input->readI32($key12);
              $xfer += $input->readString($val13);
              $this->parallelismPrefix[$key12] = $val13;
            }
            $xfer += $input->readMapEnd();
          } 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('ResourceJobManager');
    if ($this->resourceJobManagerId !== null) {
      $xfer += $output->writeFieldBegin('resourceJobManagerId', TType::STRING, 1);
      $xfer += $output->writeString($this->resourceJobManagerId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->resourceJobManagerType !== null) {
      $xfer += $output->writeFieldBegin('resourceJobManagerType', TType::I32, 2);
      $xfer += $output->writeI32($this->resourceJobManagerType);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->pushMonitoringEndpoint !== null) {
      $xfer += $output->writeFieldBegin('pushMonitoringEndpoint', TType::STRING, 3);
      $xfer += $output->writeString($this->pushMonitoringEndpoint);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->jobManagerBinPath !== null) {
      $xfer += $output->writeFieldBegin('jobManagerBinPath', TType::STRING, 4);
      $xfer += $output->writeString($this->jobManagerBinPath);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->jobManagerCommands !== null) {
      if (!is_array($this->jobManagerCommands)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('jobManagerCommands', TType::MAP, 5);
      {
        $output->writeMapBegin(TType::I32, TType::STRING, count($this->jobManagerCommands));
        {
          foreach ($this->jobManagerCommands as $kiter14 => $viter15)
          {
            $xfer += $output->writeI32($kiter14);
            $xfer += $output->writeString($viter15);
          }
        }
        $output->writeMapEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->parallelismPrefix !== null) {
      if (!is_array($this->parallelismPrefix)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('parallelismPrefix', TType::MAP, 6);
      {
        $output->writeMapBegin(TType::I32, TType::STRING, count($this->parallelismPrefix));
        {
          foreach ($this->parallelismPrefix as $kiter16 => $viter17)
          {
            $xfer += $output->writeI32($kiter16);
            $xfer += $output->writeString($viter17);
          }
        }
        $output->writeMapEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Batch Queue Information on SuperComputers
 * 
 * maxRunTime:
 *  Maximum allowed run time in hours.
 */
class BatchQueue {
  static $_TSPEC;

  /**
   * @var string
   */
  public $queueName = null;
  /**
   * @var string
   */
  public $queueDescription = null;
  /**
   * @var int
   */
  public $maxRunTime = null;
  /**
   * @var int
   */
  public $maxNodes = null;
  /**
   * @var int
   */
  public $maxProcessors = null;
  /**
   * @var int
   */
  public $maxJobsInQueue = null;
  /**
   * @var int
   */
  public $maxMemory = null;
  /**
   * @var int
   */
  public $cpuPerNode = null;
  /**
   * @var int
   */
  public $defaultNodeCount = null;
  /**
   * @var int
   */
  public $defaultCPUCount = null;
  /**
   * @var int
   */
  public $defaultWalltime = null;
  /**
   * @var string
   */
  public $queueSpecificMacros = null;
  /**
   * @var bool
   */
  public $isDefaultQueue = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'queueName',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'queueDescription',
          'type' => TType::STRING,
          ),
        3 => array(
          'var' => 'maxRunTime',
          'type' => TType::I32,
          ),
        4 => array(
          'var' => 'maxNodes',
          'type' => TType::I32,
          ),
        5 => array(
          'var' => 'maxProcessors',
          'type' => TType::I32,
          ),
        6 => array(
          'var' => 'maxJobsInQueue',
          'type' => TType::I32,
          ),
        7 => array(
          'var' => 'maxMemory',
          'type' => TType::I32,
          ),
        8 => array(
          'var' => 'cpuPerNode',
          'type' => TType::I32,
          ),
        9 => array(
          'var' => 'defaultNodeCount',
          'type' => TType::I32,
          ),
        10 => array(
          'var' => 'defaultCPUCount',
          'type' => TType::I32,
          ),
        11 => array(
          'var' => 'defaultWalltime',
          'type' => TType::I32,
          ),
        12 => array(
          'var' => 'queueSpecificMacros',
          'type' => TType::STRING,
          ),
        13 => array(
          'var' => 'isDefaultQueue',
          'type' => TType::BOOL,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['queueName'])) {
        $this->queueName = $vals['queueName'];
      }
      if (isset($vals['queueDescription'])) {
        $this->queueDescription = $vals['queueDescription'];
      }
      if (isset($vals['maxRunTime'])) {
        $this->maxRunTime = $vals['maxRunTime'];
      }
      if (isset($vals['maxNodes'])) {
        $this->maxNodes = $vals['maxNodes'];
      }
      if (isset($vals['maxProcessors'])) {
        $this->maxProcessors = $vals['maxProcessors'];
      }
      if (isset($vals['maxJobsInQueue'])) {
        $this->maxJobsInQueue = $vals['maxJobsInQueue'];
      }
      if (isset($vals['maxMemory'])) {
        $this->maxMemory = $vals['maxMemory'];
      }
      if (isset($vals['cpuPerNode'])) {
        $this->cpuPerNode = $vals['cpuPerNode'];
      }
      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['queueSpecificMacros'])) {
        $this->queueSpecificMacros = $vals['queueSpecificMacros'];
      }
      if (isset($vals['isDefaultQueue'])) {
        $this->isDefaultQueue = $vals['isDefaultQueue'];
      }
    }
  }

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

  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->queueName);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->queueDescription);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->maxRunTime);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 4:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->maxNodes);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 5:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->maxProcessors);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 6:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->maxJobsInQueue);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 7:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->maxMemory);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 8:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->cpuPerNode);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 9:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultNodeCount);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 10:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultCPUCount);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 11:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultWalltime);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 12:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->queueSpecificMacros);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 13:
          if ($ftype == TType::BOOL) {
            $xfer += $input->readBool($this->isDefaultQueue);
          } 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('BatchQueue');
    if ($this->queueName !== null) {
      $xfer += $output->writeFieldBegin('queueName', TType::STRING, 1);
      $xfer += $output->writeString($this->queueName);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->queueDescription !== null) {
      $xfer += $output->writeFieldBegin('queueDescription', TType::STRING, 2);
      $xfer += $output->writeString($this->queueDescription);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->maxRunTime !== null) {
      $xfer += $output->writeFieldBegin('maxRunTime', TType::I32, 3);
      $xfer += $output->writeI32($this->maxRunTime);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->maxNodes !== null) {
      $xfer += $output->writeFieldBegin('maxNodes', TType::I32, 4);
      $xfer += $output->writeI32($this->maxNodes);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->maxProcessors !== null) {
      $xfer += $output->writeFieldBegin('maxProcessors', TType::I32, 5);
      $xfer += $output->writeI32($this->maxProcessors);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->maxJobsInQueue !== null) {
      $xfer += $output->writeFieldBegin('maxJobsInQueue', TType::I32, 6);
      $xfer += $output->writeI32($this->maxJobsInQueue);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->maxMemory !== null) {
      $xfer += $output->writeFieldBegin('maxMemory', TType::I32, 7);
      $xfer += $output->writeI32($this->maxMemory);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->cpuPerNode !== null) {
      $xfer += $output->writeFieldBegin('cpuPerNode', TType::I32, 8);
      $xfer += $output->writeI32($this->cpuPerNode);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultNodeCount !== null) {
      $xfer += $output->writeFieldBegin('defaultNodeCount', TType::I32, 9);
      $xfer += $output->writeI32($this->defaultNodeCount);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultCPUCount !== null) {
      $xfer += $output->writeFieldBegin('defaultCPUCount', TType::I32, 10);
      $xfer += $output->writeI32($this->defaultCPUCount);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultWalltime !== null) {
      $xfer += $output->writeFieldBegin('defaultWalltime', TType::I32, 11);
      $xfer += $output->writeI32($this->defaultWalltime);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->queueSpecificMacros !== null) {
      $xfer += $output->writeFieldBegin('queueSpecificMacros', TType::STRING, 12);
      $xfer += $output->writeString($this->queueSpecificMacros);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->isDefaultQueue !== null) {
      $xfer += $output->writeFieldBegin('isDefaultQueue', TType::BOOL, 13);
      $xfer += $output->writeBool($this->isDefaultQueue);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Locally Fork Jobs as OS processes
 * 
 * alternativeSSHHostName:
 *  If the login to ssh is different than the hostname itself, specify it here
 * 
 * sshPort:
 *  If a non-default port needs to used, specify it.
 */
class LOCALSubmission {
  static $_TSPEC;

  /**
   * @var string
   */
  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var \Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager
   */
  public $resourceJobManager = null;
  /**
   * @var int
   */
  public $securityProtocol = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'jobSubmissionInterfaceId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'resourceJobManager',
          'type' => TType::STRUCT,
          'class' => '\Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager',
          ),
        3 => array(
          'var' => 'securityProtocol',
          'type' => TType::I32,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['jobSubmissionInterfaceId'])) {
        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
      }
      if (isset($vals['resourceJobManager'])) {
        $this->resourceJobManager = $vals['resourceJobManager'];
      }
      if (isset($vals['securityProtocol'])) {
        $this->securityProtocol = $vals['securityProtocol'];
      }
    }
  }

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

  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->jobSubmissionInterfaceId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::STRUCT) {
            $this->resourceJobManager = new \Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager();
            $xfer += $this->resourceJobManager->read($input);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->securityProtocol);
          } 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('LOCALSubmission');
    if ($this->jobSubmissionInterfaceId !== null) {
      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->resourceJobManager !== null) {
      if (!is_object($this->resourceJobManager)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('resourceJobManager', TType::STRUCT, 2);
      $xfer += $this->resourceJobManager->write($output);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->securityProtocol !== null) {
      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 3);
      $xfer += $output->writeI32($this->securityProtocol);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Authenticate using Secured Shell
 * 
 * alternativeSSHHostName:
 *  If the login to ssh is different than the hostname itself, specify it here
 * 
 * sshPort:
 *  If a non-default port needs to used, specify it.
 * 
 * batchQueueEmailSenders:
 *  If a resource always sends the monitoring from a specific address, specify the
 *   full email address. If a resource sends emails from multiple addresses (
 *    example: based on the submitted login node) then use the wildchar * to indicate
 *    the same. Example: *@*.example.com or *@example.com
 * 
 */
class SSHJobSubmission {
  static $_TSPEC;

  /**
   * @var string
   */
  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var int
   */
  public $securityProtocol = null;
  /**
   * @var \Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager
   */
  public $resourceJobManager = null;
  /**
   * @var string
   */
  public $alternativeSSHHostName = null;
  /**
   * @var int
   */
  public $sshPort = 22;
  /**
   * @var int
   */
  public $monitorMode = null;
  /**
   * @var string[]
   */
  public $batchQueueEmailSenders = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'jobSubmissionInterfaceId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'securityProtocol',
          'type' => TType::I32,
          ),
        3 => array(
          'var' => 'resourceJobManager',
          'type' => TType::STRUCT,
          'class' => '\Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager',
          ),
        4 => array(
          'var' => 'alternativeSSHHostName',
          'type' => TType::STRING,
          ),
        5 => array(
          'var' => 'sshPort',
          'type' => TType::I32,
          ),
        6 => array(
          'var' => 'monitorMode',
          'type' => TType::I32,
          ),
        7 => array(
          'var' => 'batchQueueEmailSenders',
          'type' => TType::LST,
          'etype' => TType::STRING,
          'elem' => array(
            'type' => TType::STRING,
            ),
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['jobSubmissionInterfaceId'])) {
        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
      }
      if (isset($vals['securityProtocol'])) {
        $this->securityProtocol = $vals['securityProtocol'];
      }
      if (isset($vals['resourceJobManager'])) {
        $this->resourceJobManager = $vals['resourceJobManager'];
      }
      if (isset($vals['alternativeSSHHostName'])) {
        $this->alternativeSSHHostName = $vals['alternativeSSHHostName'];
      }
      if (isset($vals['sshPort'])) {
        $this->sshPort = $vals['sshPort'];
      }
      if (isset($vals['monitorMode'])) {
        $this->monitorMode = $vals['monitorMode'];
      }
      if (isset($vals['batchQueueEmailSenders'])) {
        $this->batchQueueEmailSenders = $vals['batchQueueEmailSenders'];
      }
    }
  }

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

  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->jobSubmissionInterfaceId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->securityProtocol);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::STRUCT) {
            $this->resourceJobManager = new \Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager();
            $xfer += $this->resourceJobManager->read($input);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 4:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->alternativeSSHHostName);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 5:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->sshPort);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 6:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->monitorMode);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 7:
          if ($ftype == TType::LST) {
            $this->batchQueueEmailSenders = array();
            $_size18 = 0;
            $_etype21 = 0;
            $xfer += $input->readListBegin($_etype21, $_size18);
            for ($_i22 = 0; $_i22 < $_size18; ++$_i22)
            {
              $elem23 = null;
              $xfer += $input->readString($elem23);
              $this->batchQueueEmailSenders []= $elem23;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        default:
          $xfer += $input->skip($ftype);
          break;
      }
      $xfer += $input->readFieldEnd();
    }
    $xfer += $input->readStructEnd();
    return $xfer;
  }

  public function write($output) {
    $xfer = 0;
    $xfer += $output->writeStructBegin('SSHJobSubmission');
    if ($this->jobSubmissionInterfaceId !== null) {
      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->securityProtocol !== null) {
      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
      $xfer += $output->writeI32($this->securityProtocol);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->resourceJobManager !== null) {
      if (!is_object($this->resourceJobManager)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('resourceJobManager', TType::STRUCT, 3);
      $xfer += $this->resourceJobManager->write($output);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->alternativeSSHHostName !== null) {
      $xfer += $output->writeFieldBegin('alternativeSSHHostName', TType::STRING, 4);
      $xfer += $output->writeString($this->alternativeSSHHostName);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->sshPort !== null) {
      $xfer += $output->writeFieldBegin('sshPort', TType::I32, 5);
      $xfer += $output->writeI32($this->sshPort);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->monitorMode !== null) {
      $xfer += $output->writeFieldBegin('monitorMode', TType::I32, 6);
      $xfer += $output->writeI32($this->monitorMode);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->batchQueueEmailSenders !== null) {
      if (!is_array($this->batchQueueEmailSenders)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('batchQueueEmailSenders', TType::LST, 7);
      {
        $output->writeListBegin(TType::STRING, count($this->batchQueueEmailSenders));
        {
          foreach ($this->batchQueueEmailSenders as $iter24)
          {
            $xfer += $output->writeString($iter24);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

class GlobusJobSubmission {
  static $_TSPEC;

  /**
   * @var string
   */
  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var int
   */
  public $securityProtocol = null;
  /**
   * @var string[]
   */
  public $globusGateKeeperEndPoint = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'jobSubmissionInterfaceId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'securityProtocol',
          'type' => TType::I32,
          ),
        3 => array(
          'var' => 'globusGateKeeperEndPoint',
          'type' => TType::LST,
          'etype' => TType::STRING,
          'elem' => array(
            'type' => TType::STRING,
            ),
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['jobSubmissionInterfaceId'])) {
        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
      }
      if (isset($vals['securityProtocol'])) {
        $this->securityProtocol = $vals['securityProtocol'];
      }
      if (isset($vals['globusGateKeeperEndPoint'])) {
        $this->globusGateKeeperEndPoint = $vals['globusGateKeeperEndPoint'];
      }
    }
  }

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

  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->jobSubmissionInterfaceId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->securityProtocol);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::LST) {
            $this->globusGateKeeperEndPoint = array();
            $_size25 = 0;
            $_etype28 = 0;
            $xfer += $input->readListBegin($_etype28, $_size25);
            for ($_i29 = 0; $_i29 < $_size25; ++$_i29)
            {
              $elem30 = null;
              $xfer += $input->readString($elem30);
              $this->globusGateKeeperEndPoint []= $elem30;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        default:
          $xfer += $input->skip($ftype);
          break;
      }
      $xfer += $input->readFieldEnd();
    }
    $xfer += $input->readStructEnd();
    return $xfer;
  }

  public function write($output) {
    $xfer = 0;
    $xfer += $output->writeStructBegin('GlobusJobSubmission');
    if ($this->jobSubmissionInterfaceId !== null) {
      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->securityProtocol !== null) {
      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
      $xfer += $output->writeI32($this->securityProtocol);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->globusGateKeeperEndPoint !== null) {
      if (!is_array($this->globusGateKeeperEndPoint)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('globusGateKeeperEndPoint', TType::LST, 3);
      {
        $output->writeListBegin(TType::STRING, count($this->globusGateKeeperEndPoint));
        {
          foreach ($this->globusGateKeeperEndPoint as $iter31)
          {
            $xfer += $output->writeString($iter31);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Unicore Job Submission
 * 
 * unicoreEndPointURL:
 *  unicoreGateway End Point. The provider will query this service to fetch required service end points.
 * authenticationMode
 *  The authenticationMode defines the way certificate is fetched.
 */
class UnicoreJobSubmission {
  static $_TSPEC;

  /**
   * @var string
   */
  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var int
   */
  public $securityProtocol = null;
  /**
   * @var string
   */
  public $unicoreEndPointURL = null;

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

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

  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->jobSubmissionInterfaceId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->securityProtocol);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->unicoreEndPointURL);
          } 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('UnicoreJobSubmission');
    if ($this->jobSubmissionInterfaceId !== null) {
      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->securityProtocol !== null) {
      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
      $xfer += $output->writeI32($this->securityProtocol);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->unicoreEndPointURL !== null) {
      $xfer += $output->writeFieldBegin('unicoreEndPointURL', TType::STRING, 3);
      $xfer += $output->writeString($this->unicoreEndPointURL);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Cloud Job Submission
 * 
 * 
 */
class CloudJobSubmission {
  static $_TSPEC;

  /**
   * @var string
   */
  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var int
   */
  public $securityProtocol = null;
  /**
   * @var string
   */
  public $nodeId = null;
  /**
   * @var string
   */
  public $executableType = null;
  /**
   * @var int
   */
  public $providerName = null;
  /**
   * @var string
   */
  public $userAccountName = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'jobSubmissionInterfaceId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'securityProtocol',
          'type' => TType::I32,
          ),
        3 => array(
          'var' => 'nodeId',
          'type' => TType::STRING,
          ),
        4 => array(
          'var' => 'executableType',
          'type' => TType::STRING,
          ),
        5 => array(
          'var' => 'providerName',
          'type' => TType::I32,
          ),
        6 => array(
          'var' => 'userAccountName',
          'type' => TType::STRING,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['jobSubmissionInterfaceId'])) {
        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
      }
      if (isset($vals['securityProtocol'])) {
        $this->securityProtocol = $vals['securityProtocol'];
      }
      if (isset($vals['nodeId'])) {
        $this->nodeId = $vals['nodeId'];
      }
      if (isset($vals['executableType'])) {
        $this->executableType = $vals['executableType'];
      }
      if (isset($vals['providerName'])) {
        $this->providerName = $vals['providerName'];
      }
      if (isset($vals['userAccountName'])) {
        $this->userAccountName = $vals['userAccountName'];
      }
    }
  }

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

  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->jobSubmissionInterfaceId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->securityProtocol);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->nodeId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 4:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->executableType);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 5:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->providerName);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 6:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->userAccountName);
          } 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('CloudJobSubmission');
    if ($this->jobSubmissionInterfaceId !== null) {
      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->securityProtocol !== null) {
      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
      $xfer += $output->writeI32($this->securityProtocol);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->nodeId !== null) {
      $xfer += $output->writeFieldBegin('nodeId', TType::STRING, 3);
      $xfer += $output->writeString($this->nodeId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->executableType !== null) {
      $xfer += $output->writeFieldBegin('executableType', TType::STRING, 4);
      $xfer += $output->writeString($this->executableType);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->providerName !== null) {
      $xfer += $output->writeFieldBegin('providerName', TType::I32, 5);
      $xfer += $output->writeI32($this->providerName);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->userAccountName !== null) {
      $xfer += $output->writeFieldBegin('userAccountName', TType::STRING, 6);
      $xfer += $output->writeString($this->userAccountName);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Job Submission Interfaces
 * 
 * jobSubmissionInterfaceId: The Job Submission Interface has to be previously registered and referenced here.
 * 
 * priorityOrder:
 *  For resources with multiple interfaces, the priority order should be selected.
 *   Lower the numerical number, higher the priority
 * 
 */
class JobSubmissionInterface {
  static $_TSPEC;

  /**
   * @var string
   */
  public $jobSubmissionInterfaceId = null;
  /**
   * @var int
   */
  public $jobSubmissionProtocol = null;
  /**
   * @var int
   */
  public $priorityOrder = 0;

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

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

  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->jobSubmissionInterfaceId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->jobSubmissionProtocol);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->priorityOrder);
          } 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('JobSubmissionInterface');
    if ($this->jobSubmissionInterfaceId !== null) {
      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->jobSubmissionProtocol !== null) {
      $xfer += $output->writeFieldBegin('jobSubmissionProtocol', TType::I32, 2);
      $xfer += $output->writeI32($this->jobSubmissionProtocol);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->priorityOrder !== null) {
      $xfer += $output->writeFieldBegin('priorityOrder', TType::I32, 3);
      $xfer += $output->writeI32($this->priorityOrder);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}

/**
 * Computational Resource Description
 * 
 * computeResourceId: Airavata Internal Unique Identifier to distinguish Compute Resource.
 * 
 * hostName:
 *   Fully Qualified Host Name.
 * 
 * hostAliases:
 *   Aliases if any.
 * 
 * ipAddress:
 *   IP Addresses of the Resource.
 * 
 * resourceDescription:
 *  A user friendly description of the resource.
 * 
 * JobSubmissionProtocols:
 *  A computational resources may have one or more ways of submitting Jobs. This structure
 *    will hold all available mechanisms to interact with the resource.
 *  The key is the priority
 * 
 * DataMovementProtocol:
 *  Option to specify a prefered data movement mechanism of the available options.
 * 
 * fileSystems:
 *  Map of file systems type and the path.
 * 
 */
class ComputeResourceDescription {
  static $_TSPEC;

  /**
   * @var string
   */
  public $computeResourceId = "DO_NOT_SET_AT_CLIENTS";
  /**
   * @var string
   */
  public $hostName = null;
  /**
   * @var string[]
   */
  public $hostAliases = null;
  /**
   * @var string[]
   */
  public $ipAddresses = null;
  /**
   * @var string
   */
  public $resourceDescription = null;
  /**
   * @var bool
   */
  public $enabled = null;
  /**
   * @var \Airavata\Model\AppCatalog\ComputeResource\BatchQueue[]
   */
  public $batchQueues = null;
  /**
   * @var array
   */
  public $fileSystems = null;
  /**
   * @var \Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface[]
   */
  public $jobSubmissionInterfaces = null;
  /**
   * @var \Airavata\Model\Data\Movement\DataMovementInterface[]
   */
  public $dataMovementInterfaces = null;
  /**
   * @var int
   */
  public $maxMemoryPerNode = null;
  /**
   * @var bool
   */
  public $gatewayUsageReporting = null;
  /**
   * @var string
   */
  public $gatewayUsageModuleLoadCommand = null;
  /**
   * @var string
   */
  public $gatewayUsageExecutable = null;
  /**
   * @var int
   */
  public $cpusPerNode = null;
  /**
   * @var int
   */
  public $defaultNodeCount = null;
  /**
   * @var int
   */
  public $defaultCPUCount = null;
  /**
   * @var int
   */
  public $defaultWalltime = null;

  public function __construct($vals=null) {
    if (!isset(self::$_TSPEC)) {
      self::$_TSPEC = array(
        1 => array(
          'var' => 'computeResourceId',
          'type' => TType::STRING,
          ),
        2 => array(
          'var' => 'hostName',
          'type' => TType::STRING,
          ),
        3 => array(
          'var' => 'hostAliases',
          'type' => TType::LST,
          'etype' => TType::STRING,
          'elem' => array(
            'type' => TType::STRING,
            ),
          ),
        4 => array(
          'var' => 'ipAddresses',
          'type' => TType::LST,
          'etype' => TType::STRING,
          'elem' => array(
            'type' => TType::STRING,
            ),
          ),
        5 => array(
          'var' => 'resourceDescription',
          'type' => TType::STRING,
          ),
        6 => array(
          'var' => 'enabled',
          'type' => TType::BOOL,
          ),
        7 => array(
          'var' => 'batchQueues',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\ComputeResource\BatchQueue',
            ),
          ),
        8 => array(
          'var' => 'fileSystems',
          'type' => TType::MAP,
          'ktype' => TType::I32,
          'vtype' => TType::STRING,
          'key' => array(
            'type' => TType::I32,
          ),
          'val' => array(
            'type' => TType::STRING,
            ),
          ),
        9 => array(
          'var' => 'jobSubmissionInterfaces',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface',
            ),
          ),
        10 => array(
          'var' => 'dataMovementInterfaces',
          'type' => TType::LST,
          'etype' => TType::STRUCT,
          'elem' => array(
            'type' => TType::STRUCT,
            'class' => '\Airavata\Model\Data\Movement\DataMovementInterface',
            ),
          ),
        11 => array(
          'var' => 'maxMemoryPerNode',
          'type' => TType::I32,
          ),
        12 => array(
          'var' => 'gatewayUsageReporting',
          'type' => TType::BOOL,
          ),
        13 => array(
          'var' => 'gatewayUsageModuleLoadCommand',
          'type' => TType::STRING,
          ),
        14 => array(
          'var' => 'gatewayUsageExecutable',
          'type' => TType::STRING,
          ),
        15 => array(
          'var' => 'cpusPerNode',
          'type' => TType::I32,
          ),
        16 => array(
          'var' => 'defaultNodeCount',
          'type' => TType::I32,
          ),
        17 => array(
          'var' => 'defaultCPUCount',
          'type' => TType::I32,
          ),
        18 => array(
          'var' => 'defaultWalltime',
          'type' => TType::I32,
          ),
        );
    }
    if (is_array($vals)) {
      if (isset($vals['computeResourceId'])) {
        $this->computeResourceId = $vals['computeResourceId'];
      }
      if (isset($vals['hostName'])) {
        $this->hostName = $vals['hostName'];
      }
      if (isset($vals['hostAliases'])) {
        $this->hostAliases = $vals['hostAliases'];
      }
      if (isset($vals['ipAddresses'])) {
        $this->ipAddresses = $vals['ipAddresses'];
      }
      if (isset($vals['resourceDescription'])) {
        $this->resourceDescription = $vals['resourceDescription'];
      }
      if (isset($vals['enabled'])) {
        $this->enabled = $vals['enabled'];
      }
      if (isset($vals['batchQueues'])) {
        $this->batchQueues = $vals['batchQueues'];
      }
      if (isset($vals['fileSystems'])) {
        $this->fileSystems = $vals['fileSystems'];
      }
      if (isset($vals['jobSubmissionInterfaces'])) {
        $this->jobSubmissionInterfaces = $vals['jobSubmissionInterfaces'];
      }
      if (isset($vals['dataMovementInterfaces'])) {
        $this->dataMovementInterfaces = $vals['dataMovementInterfaces'];
      }
      if (isset($vals['maxMemoryPerNode'])) {
        $this->maxMemoryPerNode = $vals['maxMemoryPerNode'];
      }
      if (isset($vals['gatewayUsageReporting'])) {
        $this->gatewayUsageReporting = $vals['gatewayUsageReporting'];
      }
      if (isset($vals['gatewayUsageModuleLoadCommand'])) {
        $this->gatewayUsageModuleLoadCommand = $vals['gatewayUsageModuleLoadCommand'];
      }
      if (isset($vals['gatewayUsageExecutable'])) {
        $this->gatewayUsageExecutable = $vals['gatewayUsageExecutable'];
      }
      if (isset($vals['cpusPerNode'])) {
        $this->cpusPerNode = $vals['cpusPerNode'];
      }
      if (isset($vals['defaultNodeCount'])) {
        $this->defaultNodeCount = $vals['defaultNodeCount'];
      }
      if (isset($vals['defaultCPUCount'])) {
        $this->defaultCPUCount = $vals['defaultCPUCount'];
      }
      if (isset($vals['defaultWalltime'])) {
        $this->defaultWalltime = $vals['defaultWalltime'];
      }
    }
  }

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

  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->computeResourceId);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 2:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->hostName);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 3:
          if ($ftype == TType::LST) {
            $this->hostAliases = array();
            $_size32 = 0;
            $_etype35 = 0;
            $xfer += $input->readListBegin($_etype35, $_size32);
            for ($_i36 = 0; $_i36 < $_size32; ++$_i36)
            {
              $elem37 = null;
              $xfer += $input->readString($elem37);
              $this->hostAliases []= $elem37;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 4:
          if ($ftype == TType::LST) {
            $this->ipAddresses = array();
            $_size38 = 0;
            $_etype41 = 0;
            $xfer += $input->readListBegin($_etype41, $_size38);
            for ($_i42 = 0; $_i42 < $_size38; ++$_i42)
            {
              $elem43 = null;
              $xfer += $input->readString($elem43);
              $this->ipAddresses []= $elem43;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 5:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->resourceDescription);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 6:
          if ($ftype == TType::BOOL) {
            $xfer += $input->readBool($this->enabled);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 7:
          if ($ftype == TType::LST) {
            $this->batchQueues = array();
            $_size44 = 0;
            $_etype47 = 0;
            $xfer += $input->readListBegin($_etype47, $_size44);
            for ($_i48 = 0; $_i48 < $_size44; ++$_i48)
            {
              $elem49 = null;
              $elem49 = new \Airavata\Model\AppCatalog\ComputeResource\BatchQueue();
              $xfer += $elem49->read($input);
              $this->batchQueues []= $elem49;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 8:
          if ($ftype == TType::MAP) {
            $this->fileSystems = array();
            $_size50 = 0;
            $_ktype51 = 0;
            $_vtype52 = 0;
            $xfer += $input->readMapBegin($_ktype51, $_vtype52, $_size50);
            for ($_i54 = 0; $_i54 < $_size50; ++$_i54)
            {
              $key55 = 0;
              $val56 = '';
              $xfer += $input->readI32($key55);
              $xfer += $input->readString($val56);
              $this->fileSystems[$key55] = $val56;
            }
            $xfer += $input->readMapEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 9:
          if ($ftype == TType::LST) {
            $this->jobSubmissionInterfaces = array();
            $_size57 = 0;
            $_etype60 = 0;
            $xfer += $input->readListBegin($_etype60, $_size57);
            for ($_i61 = 0; $_i61 < $_size57; ++$_i61)
            {
              $elem62 = null;
              $elem62 = new \Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface();
              $xfer += $elem62->read($input);
              $this->jobSubmissionInterfaces []= $elem62;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 10:
          if ($ftype == TType::LST) {
            $this->dataMovementInterfaces = array();
            $_size63 = 0;
            $_etype66 = 0;
            $xfer += $input->readListBegin($_etype66, $_size63);
            for ($_i67 = 0; $_i67 < $_size63; ++$_i67)
            {
              $elem68 = null;
              $elem68 = new \Airavata\Model\Data\Movement\DataMovementInterface();
              $xfer += $elem68->read($input);
              $this->dataMovementInterfaces []= $elem68;
            }
            $xfer += $input->readListEnd();
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 11:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->maxMemoryPerNode);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 12:
          if ($ftype == TType::BOOL) {
            $xfer += $input->readBool($this->gatewayUsageReporting);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 13:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->gatewayUsageModuleLoadCommand);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 14:
          if ($ftype == TType::STRING) {
            $xfer += $input->readString($this->gatewayUsageExecutable);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 15:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->cpusPerNode);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 16:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultNodeCount);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 17:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultCPUCount);
          } else {
            $xfer += $input->skip($ftype);
          }
          break;
        case 18:
          if ($ftype == TType::I32) {
            $xfer += $input->readI32($this->defaultWalltime);
          } 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('ComputeResourceDescription');
    if ($this->computeResourceId !== null) {
      $xfer += $output->writeFieldBegin('computeResourceId', TType::STRING, 1);
      $xfer += $output->writeString($this->computeResourceId);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->hostName !== null) {
      $xfer += $output->writeFieldBegin('hostName', TType::STRING, 2);
      $xfer += $output->writeString($this->hostName);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->hostAliases !== null) {
      if (!is_array($this->hostAliases)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('hostAliases', TType::LST, 3);
      {
        $output->writeListBegin(TType::STRING, count($this->hostAliases));
        {
          foreach ($this->hostAliases as $iter69)
          {
            $xfer += $output->writeString($iter69);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->ipAddresses !== null) {
      if (!is_array($this->ipAddresses)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('ipAddresses', TType::LST, 4);
      {
        $output->writeListBegin(TType::STRING, count($this->ipAddresses));
        {
          foreach ($this->ipAddresses as $iter70)
          {
            $xfer += $output->writeString($iter70);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->resourceDescription !== null) {
      $xfer += $output->writeFieldBegin('resourceDescription', TType::STRING, 5);
      $xfer += $output->writeString($this->resourceDescription);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->enabled !== null) {
      $xfer += $output->writeFieldBegin('enabled', TType::BOOL, 6);
      $xfer += $output->writeBool($this->enabled);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->batchQueues !== null) {
      if (!is_array($this->batchQueues)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('batchQueues', TType::LST, 7);
      {
        $output->writeListBegin(TType::STRUCT, count($this->batchQueues));
        {
          foreach ($this->batchQueues as $iter71)
          {
            $xfer += $iter71->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->fileSystems !== null) {
      if (!is_array($this->fileSystems)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('fileSystems', TType::MAP, 8);
      {
        $output->writeMapBegin(TType::I32, TType::STRING, count($this->fileSystems));
        {
          foreach ($this->fileSystems as $kiter72 => $viter73)
          {
            $xfer += $output->writeI32($kiter72);
            $xfer += $output->writeString($viter73);
          }
        }
        $output->writeMapEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->jobSubmissionInterfaces !== null) {
      if (!is_array($this->jobSubmissionInterfaces)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('jobSubmissionInterfaces', TType::LST, 9);
      {
        $output->writeListBegin(TType::STRUCT, count($this->jobSubmissionInterfaces));
        {
          foreach ($this->jobSubmissionInterfaces as $iter74)
          {
            $xfer += $iter74->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->dataMovementInterfaces !== null) {
      if (!is_array($this->dataMovementInterfaces)) {
        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
      }
      $xfer += $output->writeFieldBegin('dataMovementInterfaces', TType::LST, 10);
      {
        $output->writeListBegin(TType::STRUCT, count($this->dataMovementInterfaces));
        {
          foreach ($this->dataMovementInterfaces as $iter75)
          {
            $xfer += $iter75->write($output);
          }
        }
        $output->writeListEnd();
      }
      $xfer += $output->writeFieldEnd();
    }
    if ($this->maxMemoryPerNode !== null) {
      $xfer += $output->writeFieldBegin('maxMemoryPerNode', TType::I32, 11);
      $xfer += $output->writeI32($this->maxMemoryPerNode);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->gatewayUsageReporting !== null) {
      $xfer += $output->writeFieldBegin('gatewayUsageReporting', TType::BOOL, 12);
      $xfer += $output->writeBool($this->gatewayUsageReporting);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->gatewayUsageModuleLoadCommand !== null) {
      $xfer += $output->writeFieldBegin('gatewayUsageModuleLoadCommand', TType::STRING, 13);
      $xfer += $output->writeString($this->gatewayUsageModuleLoadCommand);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->gatewayUsageExecutable !== null) {
      $xfer += $output->writeFieldBegin('gatewayUsageExecutable', TType::STRING, 14);
      $xfer += $output->writeString($this->gatewayUsageExecutable);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->cpusPerNode !== null) {
      $xfer += $output->writeFieldBegin('cpusPerNode', TType::I32, 15);
      $xfer += $output->writeI32($this->cpusPerNode);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultNodeCount !== null) {
      $xfer += $output->writeFieldBegin('defaultNodeCount', TType::I32, 16);
      $xfer += $output->writeI32($this->defaultNodeCount);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultCPUCount !== null) {
      $xfer += $output->writeFieldBegin('defaultCPUCount', TType::I32, 17);
      $xfer += $output->writeI32($this->defaultCPUCount);
      $xfer += $output->writeFieldEnd();
    }
    if ($this->defaultWalltime !== null) {
      $xfer += $output->writeFieldBegin('defaultWalltime', TType::I32, 18);
      $xfer += $output->writeI32($this->defaultWalltime);
      $xfer += $output->writeFieldEnd();
    }
    $xfer += $output->writeFieldStop();
    $xfer += $output->writeStructEnd();
    return $xfer;
  }

}


