<?php

namespace Pepitelabs\PWS\ServiceAvailabilityService;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for GetServiceRulesResponseContainer
 * ServiceAvailabilityService
 * Meta information extracted from the WSDL
 * - documentation: GetServiceRulesResponse
 * - nillable: true
 * - type: tns:GetServiceRulesResponseContainer
 * @subpackage Structs
 */
class GetServiceRulesResponseContainer extends ResponseContainer
{
    /**
     * The ServiceRules
     * Meta information extracted from the WSDL
     * - documentation: ServiceRules - ServiceRules[]
     * - minOccurs: 0
     * - nillable: true
     * @var \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceRule
     */
    public $ServiceRules;
    /**
     * The ServiceOptionRules
     * Meta information extracted from the WSDL
     * - documentation: ServiceOptionRules - ServiceOptionRules[]
     * - minOccurs: 0
     * - nillable: true
     * @var \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceOptionRules
     */
    public $ServiceOptionRules;
    /**
     * The OptionRules
     * Meta information extracted from the WSDL
     * - documentation: OptionRules - OptionRule[]
     * - minOccurs: 0
     * - nillable: true
     * @var \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfOptionRule
     */
    public $OptionRules;
    /**
     * Constructor method for GetServiceRulesResponseContainer
     * @uses GetServiceRulesResponseContainer::setServiceRules()
     * @uses GetServiceRulesResponseContainer::setServiceOptionRules()
     * @uses GetServiceRulesResponseContainer::setOptionRules()
     * @param \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceRule $serviceRules
     * @param \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceOptionRules $serviceOptionRules
     * @param \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfOptionRule $optionRules
     */
    public function __construct(\Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceRule $serviceRules = null, \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceOptionRules $serviceOptionRules = null, \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfOptionRule $optionRules = null)
    {
        $this
            ->setServiceRules($serviceRules)
            ->setServiceOptionRules($serviceOptionRules)
            ->setOptionRules($optionRules);
    }
    /**
     * Get ServiceRules value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceRule|null
     */
    public function getServiceRules()
    {
        return isset($this->ServiceRules) ? $this->ServiceRules : null;
    }
    /**
     * Set ServiceRules value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceRule $serviceRules
     * @return \Pepitelabs\PWS\ServiceAvailabilityService\GetServiceRulesResponseContainer
     */
    public function setServiceRules(\Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceRule $serviceRules = null)
    {
        if (is_null($serviceRules) || (is_array($serviceRules) && empty($serviceRules))) {
            unset($this->ServiceRules);
        } else {
            $this->ServiceRules = $serviceRules;
        }
        return $this;
    }
    /**
     * Get ServiceOptionRules value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceOptionRules|null
     */
    public function getServiceOptionRules()
    {
        return isset($this->ServiceOptionRules) ? $this->ServiceOptionRules : null;
    }
    /**
     * Set ServiceOptionRules value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceOptionRules $serviceOptionRules
     * @return \Pepitelabs\PWS\ServiceAvailabilityService\GetServiceRulesResponseContainer
     */
    public function setServiceOptionRules(\Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfServiceOptionRules $serviceOptionRules = null)
    {
        if (is_null($serviceOptionRules) || (is_array($serviceOptionRules) && empty($serviceOptionRules))) {
            unset($this->ServiceOptionRules);
        } else {
            $this->ServiceOptionRules = $serviceOptionRules;
        }
        return $this;
    }
    /**
     * Get OptionRules value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfOptionRule|null
     */
    public function getOptionRules()
    {
        return isset($this->OptionRules) ? $this->OptionRules : null;
    }
    /**
     * Set OptionRules value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfOptionRule $optionRules
     * @return \Pepitelabs\PWS\ServiceAvailabilityService\GetServiceRulesResponseContainer
     */
    public function setOptionRules(\Pepitelabs\PWS\ServiceAvailabilityService\ArrayOfOptionRule $optionRules = null)
    {
        if (is_null($optionRules) || (is_array($optionRules) && empty($optionRules))) {
            unset($this->OptionRules);
        } else {
            $this->OptionRules = $optionRules;
        }
        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 \Pepitelabs\PWS\ServiceAvailabilityService\GetServiceRulesResponseContainer
     */
    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__;
    }
}
