<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for CapabilitiesResponseStructure StructType
 * Meta informations extracted from the WSDL
 * - documentation: Type for the capabilities of an implementation.
 * @subpackage Structs
 */
class CapabilitiesResponseStructure extends ProducerResponseStructure
{
    /**
     * The ProductionTimetableCapabilitiesResponse
     * @var \StructType\ProductionTimetableCapabilitiesResponseStructure
     */
    public $ProductionTimetableCapabilitiesResponse;
    /**
     * The EstimatedTimetableCapabilitiesResponse
     * @var \StructType\EstimatedTimetableCapabilitiesResponseStructure
     */
    public $EstimatedTimetableCapabilitiesResponse;
    /**
     * The StopTimetableCapabilitiesResponse
     * @var \StructType\StopTimetableCapabilitiesResponseStructure
     */
    public $StopTimetableCapabilitiesResponse;
    /**
     * The StopMonitoringCapabilitiesResponse
     * @var \StructType\StopMonitoringCapabilitiesResponseStructure
     */
    public $StopMonitoringCapabilitiesResponse;
    /**
     * The VehicleMonitoringCapabilitiesResponse
     * @var \StructType\VehicleMonitoringCapabilitiesResponseStructure
     */
    public $VehicleMonitoringCapabilitiesResponse;
    /**
     * The ConnectionTimetableCapabilitiesResponse
     * @var \StructType\ConnectionTimetableCapabilitiesResponseStructure
     */
    public $ConnectionTimetableCapabilitiesResponse;
    /**
     * The ConnectionMonitoringCapabilitiesResponse
     * @var \StructType\ConnectionMonitoringCapabilitiesResponseStructure
     */
    public $ConnectionMonitoringCapabilitiesResponse;
    /**
     * The GeneralMessageCapabilitiesResponse
     * @var \StructType\GeneralMessageCapabilitiesResponseStructure
     */
    public $GeneralMessageCapabilitiesResponse;
    /**
     * The FacilityMonitoringCapabilitiesResponse
     * @var \StructType\FacilityMonitoringCapabilitiesResponseStructure
     */
    public $FacilityMonitoringCapabilitiesResponse;
    /**
     * The SituationExchangeCapabilitiesResponse
     * @var \StructType\SituationExchangeCapabilitiesResponseStructure
     */
    public $SituationExchangeCapabilitiesResponse;
    /**
     * The version
     * Meta informations extracted from the WSDL
     * - default: 2.0
     * - documentation: A string indicating the versioin of a SIRI data structure.
     * @var string
     */
    public $version;
    /**
     * Constructor method for CapabilitiesResponseStructure
     * @uses CapabilitiesResponseStructure::setProductionTimetableCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setEstimatedTimetableCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setStopTimetableCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setStopMonitoringCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setVehicleMonitoringCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setConnectionTimetableCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setConnectionMonitoringCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setGeneralMessageCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setFacilityMonitoringCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setSituationExchangeCapabilitiesResponse()
     * @uses CapabilitiesResponseStructure::setVersion()
     * @param \StructType\ProductionTimetableCapabilitiesResponseStructure $productionTimetableCapabilitiesResponse
     * @param \StructType\EstimatedTimetableCapabilitiesResponseStructure $estimatedTimetableCapabilitiesResponse
     * @param \StructType\StopTimetableCapabilitiesResponseStructure $stopTimetableCapabilitiesResponse
     * @param \StructType\StopMonitoringCapabilitiesResponseStructure $stopMonitoringCapabilitiesResponse
     * @param \StructType\VehicleMonitoringCapabilitiesResponseStructure $vehicleMonitoringCapabilitiesResponse
     * @param \StructType\ConnectionTimetableCapabilitiesResponseStructure $connectionTimetableCapabilitiesResponse
     * @param \StructType\ConnectionMonitoringCapabilitiesResponseStructure $connectionMonitoringCapabilitiesResponse
     * @param \StructType\GeneralMessageCapabilitiesResponseStructure $generalMessageCapabilitiesResponse
     * @param \StructType\FacilityMonitoringCapabilitiesResponseStructure $facilityMonitoringCapabilitiesResponse
     * @param \StructType\SituationExchangeCapabilitiesResponseStructure $situationExchangeCapabilitiesResponse
     * @param string $version
     */
    public function __construct(\StructType\ProductionTimetableCapabilitiesResponseStructure $productionTimetableCapabilitiesResponse = null, \StructType\EstimatedTimetableCapabilitiesResponseStructure $estimatedTimetableCapabilitiesResponse = null, \StructType\StopTimetableCapabilitiesResponseStructure $stopTimetableCapabilitiesResponse = null, \StructType\StopMonitoringCapabilitiesResponseStructure $stopMonitoringCapabilitiesResponse = null, \StructType\VehicleMonitoringCapabilitiesResponseStructure $vehicleMonitoringCapabilitiesResponse = null, \StructType\ConnectionTimetableCapabilitiesResponseStructure $connectionTimetableCapabilitiesResponse = null, \StructType\ConnectionMonitoringCapabilitiesResponseStructure $connectionMonitoringCapabilitiesResponse = null, \StructType\GeneralMessageCapabilitiesResponseStructure $generalMessageCapabilitiesResponse = null, \StructType\FacilityMonitoringCapabilitiesResponseStructure $facilityMonitoringCapabilitiesResponse = null, \StructType\SituationExchangeCapabilitiesResponseStructure $situationExchangeCapabilitiesResponse = null, $version = '2.0')
    {
        $this
            ->setProductionTimetableCapabilitiesResponse($productionTimetableCapabilitiesResponse)
            ->setEstimatedTimetableCapabilitiesResponse($estimatedTimetableCapabilitiesResponse)
            ->setStopTimetableCapabilitiesResponse($stopTimetableCapabilitiesResponse)
            ->setStopMonitoringCapabilitiesResponse($stopMonitoringCapabilitiesResponse)
            ->setVehicleMonitoringCapabilitiesResponse($vehicleMonitoringCapabilitiesResponse)
            ->setConnectionTimetableCapabilitiesResponse($connectionTimetableCapabilitiesResponse)
            ->setConnectionMonitoringCapabilitiesResponse($connectionMonitoringCapabilitiesResponse)
            ->setGeneralMessageCapabilitiesResponse($generalMessageCapabilitiesResponse)
            ->setFacilityMonitoringCapabilitiesResponse($facilityMonitoringCapabilitiesResponse)
            ->setSituationExchangeCapabilitiesResponse($situationExchangeCapabilitiesResponse)
            ->setVersion($version);
    }
    /**
     * Get ProductionTimetableCapabilitiesResponse value
     * @return \StructType\ProductionTimetableCapabilitiesResponseStructure|null
     */
    public function getProductionTimetableCapabilitiesResponse()
    {
        return $this->ProductionTimetableCapabilitiesResponse;
    }
    /**
     * Set ProductionTimetableCapabilitiesResponse value
     * @param \StructType\ProductionTimetableCapabilitiesResponseStructure $productionTimetableCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setProductionTimetableCapabilitiesResponse(\StructType\ProductionTimetableCapabilitiesResponseStructure $productionTimetableCapabilitiesResponse = null)
    {
        $this->ProductionTimetableCapabilitiesResponse = $productionTimetableCapabilitiesResponse;
        return $this;
    }
    /**
     * Get EstimatedTimetableCapabilitiesResponse value
     * @return \StructType\EstimatedTimetableCapabilitiesResponseStructure|null
     */
    public function getEstimatedTimetableCapabilitiesResponse()
    {
        return $this->EstimatedTimetableCapabilitiesResponse;
    }
    /**
     * Set EstimatedTimetableCapabilitiesResponse value
     * @param \StructType\EstimatedTimetableCapabilitiesResponseStructure $estimatedTimetableCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setEstimatedTimetableCapabilitiesResponse(\StructType\EstimatedTimetableCapabilitiesResponseStructure $estimatedTimetableCapabilitiesResponse = null)
    {
        $this->EstimatedTimetableCapabilitiesResponse = $estimatedTimetableCapabilitiesResponse;
        return $this;
    }
    /**
     * Get StopTimetableCapabilitiesResponse value
     * @return \StructType\StopTimetableCapabilitiesResponseStructure|null
     */
    public function getStopTimetableCapabilitiesResponse()
    {
        return $this->StopTimetableCapabilitiesResponse;
    }
    /**
     * Set StopTimetableCapabilitiesResponse value
     * @param \StructType\StopTimetableCapabilitiesResponseStructure $stopTimetableCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setStopTimetableCapabilitiesResponse(\StructType\StopTimetableCapabilitiesResponseStructure $stopTimetableCapabilitiesResponse = null)
    {
        $this->StopTimetableCapabilitiesResponse = $stopTimetableCapabilitiesResponse;
        return $this;
    }
    /**
     * Get StopMonitoringCapabilitiesResponse value
     * @return \StructType\StopMonitoringCapabilitiesResponseStructure|null
     */
    public function getStopMonitoringCapabilitiesResponse()
    {
        return $this->StopMonitoringCapabilitiesResponse;
    }
    /**
     * Set StopMonitoringCapabilitiesResponse value
     * @param \StructType\StopMonitoringCapabilitiesResponseStructure $stopMonitoringCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setStopMonitoringCapabilitiesResponse(\StructType\StopMonitoringCapabilitiesResponseStructure $stopMonitoringCapabilitiesResponse = null)
    {
        $this->StopMonitoringCapabilitiesResponse = $stopMonitoringCapabilitiesResponse;
        return $this;
    }
    /**
     * Get VehicleMonitoringCapabilitiesResponse value
     * @return \StructType\VehicleMonitoringCapabilitiesResponseStructure|null
     */
    public function getVehicleMonitoringCapabilitiesResponse()
    {
        return $this->VehicleMonitoringCapabilitiesResponse;
    }
    /**
     * Set VehicleMonitoringCapabilitiesResponse value
     * @param \StructType\VehicleMonitoringCapabilitiesResponseStructure $vehicleMonitoringCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setVehicleMonitoringCapabilitiesResponse(\StructType\VehicleMonitoringCapabilitiesResponseStructure $vehicleMonitoringCapabilitiesResponse = null)
    {
        $this->VehicleMonitoringCapabilitiesResponse = $vehicleMonitoringCapabilitiesResponse;
        return $this;
    }
    /**
     * Get ConnectionTimetableCapabilitiesResponse value
     * @return \StructType\ConnectionTimetableCapabilitiesResponseStructure|null
     */
    public function getConnectionTimetableCapabilitiesResponse()
    {
        return $this->ConnectionTimetableCapabilitiesResponse;
    }
    /**
     * Set ConnectionTimetableCapabilitiesResponse value
     * @param \StructType\ConnectionTimetableCapabilitiesResponseStructure $connectionTimetableCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setConnectionTimetableCapabilitiesResponse(\StructType\ConnectionTimetableCapabilitiesResponseStructure $connectionTimetableCapabilitiesResponse = null)
    {
        $this->ConnectionTimetableCapabilitiesResponse = $connectionTimetableCapabilitiesResponse;
        return $this;
    }
    /**
     * Get ConnectionMonitoringCapabilitiesResponse value
     * @return \StructType\ConnectionMonitoringCapabilitiesResponseStructure|null
     */
    public function getConnectionMonitoringCapabilitiesResponse()
    {
        return $this->ConnectionMonitoringCapabilitiesResponse;
    }
    /**
     * Set ConnectionMonitoringCapabilitiesResponse value
     * @param \StructType\ConnectionMonitoringCapabilitiesResponseStructure $connectionMonitoringCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setConnectionMonitoringCapabilitiesResponse(\StructType\ConnectionMonitoringCapabilitiesResponseStructure $connectionMonitoringCapabilitiesResponse = null)
    {
        $this->ConnectionMonitoringCapabilitiesResponse = $connectionMonitoringCapabilitiesResponse;
        return $this;
    }
    /**
     * Get GeneralMessageCapabilitiesResponse value
     * @return \StructType\GeneralMessageCapabilitiesResponseStructure|null
     */
    public function getGeneralMessageCapabilitiesResponse()
    {
        return $this->GeneralMessageCapabilitiesResponse;
    }
    /**
     * Set GeneralMessageCapabilitiesResponse value
     * @param \StructType\GeneralMessageCapabilitiesResponseStructure $generalMessageCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setGeneralMessageCapabilitiesResponse(\StructType\GeneralMessageCapabilitiesResponseStructure $generalMessageCapabilitiesResponse = null)
    {
        $this->GeneralMessageCapabilitiesResponse = $generalMessageCapabilitiesResponse;
        return $this;
    }
    /**
     * Get FacilityMonitoringCapabilitiesResponse value
     * @return \StructType\FacilityMonitoringCapabilitiesResponseStructure|null
     */
    public function getFacilityMonitoringCapabilitiesResponse()
    {
        return $this->FacilityMonitoringCapabilitiesResponse;
    }
    /**
     * Set FacilityMonitoringCapabilitiesResponse value
     * @param \StructType\FacilityMonitoringCapabilitiesResponseStructure $facilityMonitoringCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setFacilityMonitoringCapabilitiesResponse(\StructType\FacilityMonitoringCapabilitiesResponseStructure $facilityMonitoringCapabilitiesResponse = null)
    {
        $this->FacilityMonitoringCapabilitiesResponse = $facilityMonitoringCapabilitiesResponse;
        return $this;
    }
    /**
     * Get SituationExchangeCapabilitiesResponse value
     * @return \StructType\SituationExchangeCapabilitiesResponseStructure|null
     */
    public function getSituationExchangeCapabilitiesResponse()
    {
        return $this->SituationExchangeCapabilitiesResponse;
    }
    /**
     * Set SituationExchangeCapabilitiesResponse value
     * @param \StructType\SituationExchangeCapabilitiesResponseStructure $situationExchangeCapabilitiesResponse
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setSituationExchangeCapabilitiesResponse(\StructType\SituationExchangeCapabilitiesResponseStructure $situationExchangeCapabilitiesResponse = null)
    {
        $this->SituationExchangeCapabilitiesResponse = $situationExchangeCapabilitiesResponse;
        return $this;
    }
    /**
     * Get version value
     * @return string|null
     */
    public function getVersion()
    {
        return $this->version;
    }
    /**
     * Set version value
     * @param string $version
     * @return \StructType\CapabilitiesResponseStructure
     */
    public function setVersion($version = '2.0')
    {
        // validation for constraint: string
        if (!is_null($version) && !is_string($version)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($version)), __LINE__);
        }
        $this->version = $version;
        return $this;
    }
    /**
     * Method called when an object has been exported with var_export() functions
     * It allows to return an object instantiated with the values
     * @see AbstractStructBase::__set_state()
     * @uses AbstractStructBase::__set_state()
     * @param array $array the exported values
     * @return \StructType\CapabilitiesResponseStructure
     */
    public static function __set_state(array $array)
    {
        return parent::__set_state($array);
    }
    /**
     * Method returning the class name
     * @return string __CLASS__
     */
    public function __toString()
    {
        return __CLASS__;
    }
}
