<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for JP_HotelOptionalElements StructType
 * @subpackage Structs
 */
class JP_HotelOptionalElements extends AbstractStructBase
{
    /**
     * The Comments
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJP_Comment
     */
    public $Comments;
    /**
     * The HotelSupplements
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJP_HotelAdditionalElement
     */
    public $HotelSupplements;
    /**
     * The Preferences
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJP_HotelPreference
     */
    public $Preferences;
    /**
     * The AllowedCreditCards
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJP_CreditCard
     */
    public $AllowedCreditCards;
    /**
     * Constructor method for JP_HotelOptionalElements
     * @uses JP_HotelOptionalElements::setComments()
     * @uses JP_HotelOptionalElements::setHotelSupplements()
     * @uses JP_HotelOptionalElements::setPreferences()
     * @uses JP_HotelOptionalElements::setAllowedCreditCards()
     * @param \ArrayType\ArrayOfJP_Comment $comments
     * @param \ArrayType\ArrayOfJP_HotelAdditionalElement $hotelSupplements
     * @param \ArrayType\ArrayOfJP_HotelPreference $preferences
     * @param \ArrayType\ArrayOfJP_CreditCard $allowedCreditCards
     */
    public function __construct(\ArrayType\ArrayOfJP_Comment $comments = null, \ArrayType\ArrayOfJP_HotelAdditionalElement $hotelSupplements = null, \ArrayType\ArrayOfJP_HotelPreference $preferences = null, \ArrayType\ArrayOfJP_CreditCard $allowedCreditCards = null)
    {
        $this
            ->setComments($comments)
            ->setHotelSupplements($hotelSupplements)
            ->setPreferences($preferences)
            ->setAllowedCreditCards($allowedCreditCards);
    }
    /**
     * Get Comments value
     * @return \ArrayType\ArrayOfJP_Comment|null
     */
    public function getComments()
    {
        return $this->Comments;
    }
    /**
     * Set Comments value
     * @param \ArrayType\ArrayOfJP_Comment $comments
     * @return \StructType\JP_HotelOptionalElements
     */
    public function setComments(\ArrayType\ArrayOfJP_Comment $comments = null)
    {
        $this->Comments = $comments;
        return $this;
    }
    /**
     * Get HotelSupplements value
     * @return \ArrayType\ArrayOfJP_HotelAdditionalElement|null
     */
    public function getHotelSupplements()
    {
        return $this->HotelSupplements;
    }
    /**
     * Set HotelSupplements value
     * @param \ArrayType\ArrayOfJP_HotelAdditionalElement $hotelSupplements
     * @return \StructType\JP_HotelOptionalElements
     */
    public function setHotelSupplements(\ArrayType\ArrayOfJP_HotelAdditionalElement $hotelSupplements = null)
    {
        $this->HotelSupplements = $hotelSupplements;
        return $this;
    }
    /**
     * Get Preferences value
     * @return \ArrayType\ArrayOfJP_HotelPreference|null
     */
    public function getPreferences()
    {
        return $this->Preferences;
    }
    /**
     * Set Preferences value
     * @param \ArrayType\ArrayOfJP_HotelPreference $preferences
     * @return \StructType\JP_HotelOptionalElements
     */
    public function setPreferences(\ArrayType\ArrayOfJP_HotelPreference $preferences = null)
    {
        $this->Preferences = $preferences;
        return $this;
    }
    /**
     * Get AllowedCreditCards value
     * @return \ArrayType\ArrayOfJP_CreditCard|null
     */
    public function getAllowedCreditCards()
    {
        return $this->AllowedCreditCards;
    }
    /**
     * Set AllowedCreditCards value
     * @param \ArrayType\ArrayOfJP_CreditCard $allowedCreditCards
     * @return \StructType\JP_HotelOptionalElements
     */
    public function setAllowedCreditCards(\ArrayType\ArrayOfJP_CreditCard $allowedCreditCards = null)
    {
        $this->AllowedCreditCards = $allowedCreditCards;
        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\JP_HotelOptionalElements
     */
    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__;
    }
}
