<?php

namespace Sabre\OTAAirPrice\Structs;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for SpecificPenalty Structs
 * @subpackage Structs
 */
class SpecificPenalty extends AbstractStructBase
{
    /**
     * The Changeable
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \Sabre\OTAAirPrice\Structs\Changeable
     */
    public $Changeable;
    /**
     * The EitherOr
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \Sabre\OTAAirPrice\Structs\EitherOr
     */
    public $EitherOr;
    /**
     * The Refundable
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \Sabre\OTAAirPrice\Structs\Refundable
     */
    public $Refundable;
    /**
     * The AdditionalInfo
     * Meta informations extracted from the WSDL
     * - use: optional
     * @var bool
     */
    public $AdditionalInfo;
    /**
     * The PenaltyInformation
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var \Sabre\OTAAirPrice\Structs\PenaltyInformation
     */
    public $PenaltyInformation;
    /**
     * Constructor method for SpecificPenalty
     * @uses SpecificPenalty::setChangeable()
     * @uses SpecificPenalty::setEitherOr()
     * @uses SpecificPenalty::setRefundable()
     * @uses SpecificPenalty::setAdditionalInfo()
     * @uses SpecificPenalty::setPenaltyInformation()
     * @param \Sabre\OTAAirPrice\Structs\Changeable $changeable
     * @param \Sabre\OTAAirPrice\Structs\EitherOr $eitherOr
     * @param \Sabre\OTAAirPrice\Structs\Refundable $refundable
     * @param bool $additionalInfo
     * @param \Sabre\OTAAirPrice\Structs\PenaltyInformation $penaltyInformation
     */
    public function __construct(\Sabre\OTAAirPrice\Structs\Changeable $changeable = null, \Sabre\OTAAirPrice\Structs\EitherOr $eitherOr = null, \Sabre\OTAAirPrice\Structs\Refundable $refundable = null, $additionalInfo = null, \Sabre\OTAAirPrice\Structs\PenaltyInformation $penaltyInformation = null)
    {
        $this
            ->setChangeable($changeable)
            ->setEitherOr($eitherOr)
            ->setRefundable($refundable)
            ->setAdditionalInfo($additionalInfo)
            ->setPenaltyInformation($penaltyInformation);
    }
    /**
     * Get Changeable value
     * @return \Sabre\OTAAirPrice\Structs\Changeable|null
     */
    public function getChangeable()
    {
        return $this->Changeable;
    }
    /**
     * Set Changeable value
     * @param \Sabre\OTAAirPrice\Structs\Changeable $changeable
     * @return \Sabre\OTAAirPrice\Structs\SpecificPenalty
     */
    public function setChangeable(\Sabre\OTAAirPrice\Structs\Changeable $changeable = null)
    {
        $this->Changeable = $changeable;
        return $this;
    }
    /**
     * Get EitherOr value
     * @return \Sabre\OTAAirPrice\Structs\EitherOr|null
     */
    public function getEitherOr()
    {
        return $this->EitherOr;
    }
    /**
     * Set EitherOr value
     * @param \Sabre\OTAAirPrice\Structs\EitherOr $eitherOr
     * @return \Sabre\OTAAirPrice\Structs\SpecificPenalty
     */
    public function setEitherOr(\Sabre\OTAAirPrice\Structs\EitherOr $eitherOr = null)
    {
        $this->EitherOr = $eitherOr;
        return $this;
    }
    /**
     * Get Refundable value
     * @return \Sabre\OTAAirPrice\Structs\Refundable|null
     */
    public function getRefundable()
    {
        return $this->Refundable;
    }
    /**
     * Set Refundable value
     * @param \Sabre\OTAAirPrice\Structs\Refundable $refundable
     * @return \Sabre\OTAAirPrice\Structs\SpecificPenalty
     */
    public function setRefundable(\Sabre\OTAAirPrice\Structs\Refundable $refundable = null)
    {
        $this->Refundable = $refundable;
        return $this;
    }
    /**
     * Get AdditionalInfo value
     * @return bool|null
     */
    public function getAdditionalInfo()
    {
        return $this->AdditionalInfo;
    }
    /**
     * Set AdditionalInfo value
     * @param bool $additionalInfo
     * @return \Sabre\OTAAirPrice\Structs\SpecificPenalty
     */
    public function setAdditionalInfo($additionalInfo = null)
    {
        $this->AdditionalInfo = $additionalInfo;
        return $this;
    }
    /**
     * Get PenaltyInformation value
     * @return \Sabre\OTAAirPrice\Structs\PenaltyInformation|null
     */
    public function getPenaltyInformation()
    {
        return $this->PenaltyInformation;
    }
    /**
     * Set PenaltyInformation value
     * @param \Sabre\OTAAirPrice\Structs\PenaltyInformation $penaltyInformation
     * @return \Sabre\OTAAirPrice\Structs\SpecificPenalty
     */
    public function setPenaltyInformation(\Sabre\OTAAirPrice\Structs\PenaltyInformation $penaltyInformation = null)
    {
        $this->PenaltyInformation = $penaltyInformation;
        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 \Sabre\OTAAirPrice\Structs\SpecificPenalty
     */
    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__;
    }
}
