<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for Personal_Information_Common_DataType StructType
 * Meta information extracted from the WSDL
 * - documentation: The Additional Nationalities is not tracked for the specified Location Context. The Location Context is derived from the Country of the Location. | The Nationality type is not tracked for the specified Location Context. The Location
 * Context is derived from the Country of the Location for the Position. | City of Birth is not tracked for the specified Location Context. The Location Context is derived from the Country of the Location for the Position. | Medical exam history is not
 * tracked for the specified Location Context. The Location Context is derived from the Country of the Location for the Position | Last Medical Exam Valid To Date must be after Last Medical Exam Date | The country region of birth is not tracked for the
 * specified Location Context. The Location Context is derived from the Country of the Location for the Position | The field Date of Birth is not tracked for the specified Location Context. The Location Context is derived from the Country of the
 * Location for the Position. | The Citizenship Status is not tracked for the specified Location Context. The Location Context is derived from the Country of the Location for the Position. | The Blood Type is not tracked for the specified Location
 * Context. The Location Context is derived from the Country of the Location for the Position | The country of birth is not tracked for the specified Location Context. The Location Context is derived from the Country of the Location for the Position |
 * Last Medical Exam Date cannot be in the future | Personal Information Data
 * @subpackage Structs
 */
class Personal_Information_Common_DataType extends AbstractStructBase
{
    /**
     * The Personal_Information_For_Country_Data
     * Meta information extracted from the WSDL
     * - documentation: Country Specific Personal Information
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Personal_Information_For_Country_DataType[]
     */
    public $Personal_Information_For_Country_Data;
    /**
     * The Birth_Date
     * Meta information extracted from the WSDL
     * - documentation: Date of Birth
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Birth_Date;
    /**
     * The Date_of_Death
     * Meta information extracted from the WSDL
     * - documentation: Date of Death
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Date_of_Death;
    /**
     * The Country_of_Birth_Reference
     * Meta information extracted from the WSDL
     * - documentation: Country of Birth
     * - minOccurs: 0
     * @var \StructType\CountryObjectType
     */
    public $Country_of_Birth_Reference;
    /**
     * The Country_Region_of_Birth_Reference
     * Meta information extracted from the WSDL
     * - documentation: Country Region of Birth
     * - minOccurs: 0
     * @var \StructType\Country_RegionObjectType
     */
    public $Country_Region_of_Birth_Reference;
    /**
     * The Region_of_Birth_Descriptor
     * Meta information extracted from the WSDL
     * - documentation: Birth Country Region Name
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Region_of_Birth_Descriptor;
    /**
     * The City_of_Birth
     * Meta information extracted from the WSDL
     * - documentation: City of Birth
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $City_of_Birth;
    /**
     * The City_of_Birth_Reference
     * Meta information extracted from the WSDL
     * - documentation: City of Birth
     * - minOccurs: 0
     * @var \StructType\Country_CityObjectType
     */
    public $City_of_Birth_Reference;
    /**
     * The Citizenship_Status_Reference
     * Meta information extracted from the WSDL
     * - documentation: Citizenship Status
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Citizenship_StatusObjectType[]
     */
    public $Citizenship_Status_Reference;
    /**
     * The Primary_Nationality_Reference
     * Meta information extracted from the WSDL
     * - documentation: Primary Nationality
     * - minOccurs: 0
     * @var \StructType\CountryObjectType
     */
    public $Primary_Nationality_Reference;
    /**
     * The Additional_Nationalities_Reference
     * Meta information extracted from the WSDL
     * - documentation: Additional Nationalities
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\CountryObjectType[]
     */
    public $Additional_Nationalities_Reference;
    /**
     * The Last_Medical_Exam_Valid_To
     * Meta information extracted from the WSDL
     * - documentation: Last Medical Exam Valid to
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Last_Medical_Exam_Valid_To;
    /**
     * The Last_Medical_Exam_Date
     * Meta information extracted from the WSDL
     * - documentation: Last Medical Exam Date
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Last_Medical_Exam_Date;
    /**
     * The Medical_Exam_Notes
     * Meta information extracted from the WSDL
     * - documentation: Medical Exam Notes
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Medical_Exam_Notes;
    /**
     * The Blood_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: Blood Type
     * - minOccurs: 0
     * @var \StructType\Blood_TypeObjectType
     */
    public $Blood_Type_Reference;
    /**
     * The Military_Service_Data
     * Meta information extracted from the WSDL
     * - documentation: Military Service Data
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Person_Military_Service_DataType[]
     */
    public $Military_Service_Data;
    /**
     * The Sexual_Orientation_Reference
     * Meta information extracted from the WSDL
     * - documentation: Sexual Orientation
     * - minOccurs: 0
     * @var \StructType\Sexual_OrientationObjectType
     */
    public $Sexual_Orientation_Reference;
    /**
     * The Gender_Identity_Reference
     * Meta information extracted from the WSDL
     * - documentation: Gender Identity
     * - minOccurs: 0
     * @var \StructType\Gender_IdentityObjectType
     */
    public $Gender_Identity_Reference;
    /**
     * The Pronoun_Reference
     * Meta information extracted from the WSDL
     * - documentation: Pronoun
     * - minOccurs: 0
     * @var \StructType\PronounObjectType
     */
    public $Pronoun_Reference;
    /**
     * Constructor method for Personal_Information_Common_DataType
     * @uses Personal_Information_Common_DataType::setPersonal_Information_For_Country_Data()
     * @uses Personal_Information_Common_DataType::setBirth_Date()
     * @uses Personal_Information_Common_DataType::setDate_of_Death()
     * @uses Personal_Information_Common_DataType::setCountry_of_Birth_Reference()
     * @uses Personal_Information_Common_DataType::setCountry_Region_of_Birth_Reference()
     * @uses Personal_Information_Common_DataType::setRegion_of_Birth_Descriptor()
     * @uses Personal_Information_Common_DataType::setCity_of_Birth()
     * @uses Personal_Information_Common_DataType::setCity_of_Birth_Reference()
     * @uses Personal_Information_Common_DataType::setCitizenship_Status_Reference()
     * @uses Personal_Information_Common_DataType::setPrimary_Nationality_Reference()
     * @uses Personal_Information_Common_DataType::setAdditional_Nationalities_Reference()
     * @uses Personal_Information_Common_DataType::setLast_Medical_Exam_Valid_To()
     * @uses Personal_Information_Common_DataType::setLast_Medical_Exam_Date()
     * @uses Personal_Information_Common_DataType::setMedical_Exam_Notes()
     * @uses Personal_Information_Common_DataType::setBlood_Type_Reference()
     * @uses Personal_Information_Common_DataType::setMilitary_Service_Data()
     * @uses Personal_Information_Common_DataType::setSexual_Orientation_Reference()
     * @uses Personal_Information_Common_DataType::setGender_Identity_Reference()
     * @uses Personal_Information_Common_DataType::setPronoun_Reference()
     * @param \StructType\Personal_Information_For_Country_DataType[] $personal_Information_For_Country_Data
     * @param string $birth_Date
     * @param string $date_of_Death
     * @param \StructType\CountryObjectType $country_of_Birth_Reference
     * @param \StructType\Country_RegionObjectType $country_Region_of_Birth_Reference
     * @param string $region_of_Birth_Descriptor
     * @param string $city_of_Birth
     * @param \StructType\Country_CityObjectType $city_of_Birth_Reference
     * @param \StructType\Citizenship_StatusObjectType[] $citizenship_Status_Reference
     * @param \StructType\CountryObjectType $primary_Nationality_Reference
     * @param \StructType\CountryObjectType[] $additional_Nationalities_Reference
     * @param string $last_Medical_Exam_Valid_To
     * @param string $last_Medical_Exam_Date
     * @param string $medical_Exam_Notes
     * @param \StructType\Blood_TypeObjectType $blood_Type_Reference
     * @param \StructType\Person_Military_Service_DataType[] $military_Service_Data
     * @param \StructType\Sexual_OrientationObjectType $sexual_Orientation_Reference
     * @param \StructType\Gender_IdentityObjectType $gender_Identity_Reference
     * @param \StructType\PronounObjectType $pronoun_Reference
     */
    public function __construct(array $personal_Information_For_Country_Data = array(), $birth_Date = null, $date_of_Death = null, \StructType\CountryObjectType $country_of_Birth_Reference = null, \StructType\Country_RegionObjectType $country_Region_of_Birth_Reference = null, $region_of_Birth_Descriptor = null, $city_of_Birth = null, \StructType\Country_CityObjectType $city_of_Birth_Reference = null, array $citizenship_Status_Reference = array(), \StructType\CountryObjectType $primary_Nationality_Reference = null, array $additional_Nationalities_Reference = array(), $last_Medical_Exam_Valid_To = null, $last_Medical_Exam_Date = null, $medical_Exam_Notes = null, \StructType\Blood_TypeObjectType $blood_Type_Reference = null, array $military_Service_Data = array(), \StructType\Sexual_OrientationObjectType $sexual_Orientation_Reference = null, \StructType\Gender_IdentityObjectType $gender_Identity_Reference = null, \StructType\PronounObjectType $pronoun_Reference = null)
    {
        $this
            ->setPersonal_Information_For_Country_Data($personal_Information_For_Country_Data)
            ->setBirth_Date($birth_Date)
            ->setDate_of_Death($date_of_Death)
            ->setCountry_of_Birth_Reference($country_of_Birth_Reference)
            ->setCountry_Region_of_Birth_Reference($country_Region_of_Birth_Reference)
            ->setRegion_of_Birth_Descriptor($region_of_Birth_Descriptor)
            ->setCity_of_Birth($city_of_Birth)
            ->setCity_of_Birth_Reference($city_of_Birth_Reference)
            ->setCitizenship_Status_Reference($citizenship_Status_Reference)
            ->setPrimary_Nationality_Reference($primary_Nationality_Reference)
            ->setAdditional_Nationalities_Reference($additional_Nationalities_Reference)
            ->setLast_Medical_Exam_Valid_To($last_Medical_Exam_Valid_To)
            ->setLast_Medical_Exam_Date($last_Medical_Exam_Date)
            ->setMedical_Exam_Notes($medical_Exam_Notes)
            ->setBlood_Type_Reference($blood_Type_Reference)
            ->setMilitary_Service_Data($military_Service_Data)
            ->setSexual_Orientation_Reference($sexual_Orientation_Reference)
            ->setGender_Identity_Reference($gender_Identity_Reference)
            ->setPronoun_Reference($pronoun_Reference);
    }
    /**
     * Get Personal_Information_For_Country_Data value
     * @return \StructType\Personal_Information_For_Country_DataType[]|null
     */
    public function getPersonal_Information_For_Country_Data()
    {
        return $this->Personal_Information_For_Country_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setPersonal_Information_For_Country_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setPersonal_Information_For_Country_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validatePersonal_Information_For_Country_DataForArrayConstraintsFromSetPersonal_Information_For_Country_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $personal_Information_Common_DataTypePersonal_Information_For_Country_DataItem) {
            // validation for constraint: itemType
            if (!$personal_Information_Common_DataTypePersonal_Information_For_Country_DataItem instanceof \StructType\Personal_Information_For_Country_DataType) {
                $invalidValues[] = is_object($personal_Information_Common_DataTypePersonal_Information_For_Country_DataItem) ? get_class($personal_Information_Common_DataTypePersonal_Information_For_Country_DataItem) : sprintf('%s(%s)', gettype($personal_Information_Common_DataTypePersonal_Information_For_Country_DataItem), var_export($personal_Information_Common_DataTypePersonal_Information_For_Country_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Personal_Information_For_Country_Data property can only contain items of type \StructType\Personal_Information_For_Country_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Personal_Information_For_Country_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Personal_Information_For_Country_DataType[] $personal_Information_For_Country_Data
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setPersonal_Information_For_Country_Data(array $personal_Information_For_Country_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($personal_Information_For_Country_DataArrayErrorMessage = self::validatePersonal_Information_For_Country_DataForArrayConstraintsFromSetPersonal_Information_For_Country_Data($personal_Information_For_Country_Data))) {
            throw new \InvalidArgumentException($personal_Information_For_Country_DataArrayErrorMessage, __LINE__);
        }
        $this->Personal_Information_For_Country_Data = $personal_Information_For_Country_Data;
        return $this;
    }
    /**
     * Add item to Personal_Information_For_Country_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Personal_Information_For_Country_DataType $item
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function addToPersonal_Information_For_Country_Data(\StructType\Personal_Information_For_Country_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Personal_Information_For_Country_DataType) {
            throw new \InvalidArgumentException(sprintf('The Personal_Information_For_Country_Data property can only contain items of type \StructType\Personal_Information_For_Country_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Personal_Information_For_Country_Data[] = $item;
        return $this;
    }
    /**
     * Get Birth_Date value
     * @return string|null
     */
    public function getBirth_Date()
    {
        return $this->Birth_Date;
    }
    /**
     * Set Birth_Date value
     * @param string $birth_Date
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setBirth_Date($birth_Date = null)
    {
        // validation for constraint: string
        if (!is_null($birth_Date) && !is_string($birth_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($birth_Date, true), gettype($birth_Date)), __LINE__);
        }
        $this->Birth_Date = $birth_Date;
        return $this;
    }
    /**
     * Get Date_of_Death value
     * @return string|null
     */
    public function getDate_of_Death()
    {
        return $this->Date_of_Death;
    }
    /**
     * Set Date_of_Death value
     * @param string $date_of_Death
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setDate_of_Death($date_of_Death = null)
    {
        // validation for constraint: string
        if (!is_null($date_of_Death) && !is_string($date_of_Death)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($date_of_Death, true), gettype($date_of_Death)), __LINE__);
        }
        $this->Date_of_Death = $date_of_Death;
        return $this;
    }
    /**
     * Get Country_of_Birth_Reference value
     * @return \StructType\CountryObjectType|null
     */
    public function getCountry_of_Birth_Reference()
    {
        return $this->Country_of_Birth_Reference;
    }
    /**
     * Set Country_of_Birth_Reference value
     * @param \StructType\CountryObjectType $country_of_Birth_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setCountry_of_Birth_Reference(\StructType\CountryObjectType $country_of_Birth_Reference = null)
    {
        $this->Country_of_Birth_Reference = $country_of_Birth_Reference;
        return $this;
    }
    /**
     * Get Country_Region_of_Birth_Reference value
     * @return \StructType\Country_RegionObjectType|null
     */
    public function getCountry_Region_of_Birth_Reference()
    {
        return $this->Country_Region_of_Birth_Reference;
    }
    /**
     * Set Country_Region_of_Birth_Reference value
     * @param \StructType\Country_RegionObjectType $country_Region_of_Birth_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setCountry_Region_of_Birth_Reference(\StructType\Country_RegionObjectType $country_Region_of_Birth_Reference = null)
    {
        $this->Country_Region_of_Birth_Reference = $country_Region_of_Birth_Reference;
        return $this;
    }
    /**
     * Get Region_of_Birth_Descriptor value
     * @return string|null
     */
    public function getRegion_of_Birth_Descriptor()
    {
        return $this->Region_of_Birth_Descriptor;
    }
    /**
     * Set Region_of_Birth_Descriptor value
     * @param string $region_of_Birth_Descriptor
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setRegion_of_Birth_Descriptor($region_of_Birth_Descriptor = null)
    {
        // validation for constraint: string
        if (!is_null($region_of_Birth_Descriptor) && !is_string($region_of_Birth_Descriptor)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($region_of_Birth_Descriptor, true), gettype($region_of_Birth_Descriptor)), __LINE__);
        }
        $this->Region_of_Birth_Descriptor = $region_of_Birth_Descriptor;
        return $this;
    }
    /**
     * Get City_of_Birth value
     * @return string|null
     */
    public function getCity_of_Birth()
    {
        return $this->City_of_Birth;
    }
    /**
     * Set City_of_Birth value
     * @param string $city_of_Birth
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setCity_of_Birth($city_of_Birth = null)
    {
        // validation for constraint: string
        if (!is_null($city_of_Birth) && !is_string($city_of_Birth)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($city_of_Birth, true), gettype($city_of_Birth)), __LINE__);
        }
        $this->City_of_Birth = $city_of_Birth;
        return $this;
    }
    /**
     * Get City_of_Birth_Reference value
     * @return \StructType\Country_CityObjectType|null
     */
    public function getCity_of_Birth_Reference()
    {
        return $this->City_of_Birth_Reference;
    }
    /**
     * Set City_of_Birth_Reference value
     * @param \StructType\Country_CityObjectType $city_of_Birth_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setCity_of_Birth_Reference(\StructType\Country_CityObjectType $city_of_Birth_Reference = null)
    {
        $this->City_of_Birth_Reference = $city_of_Birth_Reference;
        return $this;
    }
    /**
     * Get Citizenship_Status_Reference value
     * @return \StructType\Citizenship_StatusObjectType[]|null
     */
    public function getCitizenship_Status_Reference()
    {
        return $this->Citizenship_Status_Reference;
    }
    /**
     * This method is responsible for validating the values passed to the setCitizenship_Status_Reference method
     * This method is willingly generated in order to preserve the one-line inline validation within the setCitizenship_Status_Reference method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateCitizenship_Status_ReferenceForArrayConstraintsFromSetCitizenship_Status_Reference(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $personal_Information_Common_DataTypeCitizenship_Status_ReferenceItem) {
            // validation for constraint: itemType
            if (!$personal_Information_Common_DataTypeCitizenship_Status_ReferenceItem instanceof \StructType\Citizenship_StatusObjectType) {
                $invalidValues[] = is_object($personal_Information_Common_DataTypeCitizenship_Status_ReferenceItem) ? get_class($personal_Information_Common_DataTypeCitizenship_Status_ReferenceItem) : sprintf('%s(%s)', gettype($personal_Information_Common_DataTypeCitizenship_Status_ReferenceItem), var_export($personal_Information_Common_DataTypeCitizenship_Status_ReferenceItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Citizenship_Status_Reference property can only contain items of type \StructType\Citizenship_StatusObjectType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Citizenship_Status_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\Citizenship_StatusObjectType[] $citizenship_Status_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setCitizenship_Status_Reference(array $citizenship_Status_Reference = array())
    {
        // validation for constraint: array
        if ('' !== ($citizenship_Status_ReferenceArrayErrorMessage = self::validateCitizenship_Status_ReferenceForArrayConstraintsFromSetCitizenship_Status_Reference($citizenship_Status_Reference))) {
            throw new \InvalidArgumentException($citizenship_Status_ReferenceArrayErrorMessage, __LINE__);
        }
        $this->Citizenship_Status_Reference = $citizenship_Status_Reference;
        return $this;
    }
    /**
     * Add item to Citizenship_Status_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\Citizenship_StatusObjectType $item
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function addToCitizenship_Status_Reference(\StructType\Citizenship_StatusObjectType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Citizenship_StatusObjectType) {
            throw new \InvalidArgumentException(sprintf('The Citizenship_Status_Reference property can only contain items of type \StructType\Citizenship_StatusObjectType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Citizenship_Status_Reference[] = $item;
        return $this;
    }
    /**
     * Get Primary_Nationality_Reference value
     * @return \StructType\CountryObjectType|null
     */
    public function getPrimary_Nationality_Reference()
    {
        return $this->Primary_Nationality_Reference;
    }
    /**
     * Set Primary_Nationality_Reference value
     * @param \StructType\CountryObjectType $primary_Nationality_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setPrimary_Nationality_Reference(\StructType\CountryObjectType $primary_Nationality_Reference = null)
    {
        $this->Primary_Nationality_Reference = $primary_Nationality_Reference;
        return $this;
    }
    /**
     * Get Additional_Nationalities_Reference value
     * @return \StructType\CountryObjectType[]|null
     */
    public function getAdditional_Nationalities_Reference()
    {
        return $this->Additional_Nationalities_Reference;
    }
    /**
     * This method is responsible for validating the values passed to the setAdditional_Nationalities_Reference method
     * This method is willingly generated in order to preserve the one-line inline validation within the setAdditional_Nationalities_Reference method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateAdditional_Nationalities_ReferenceForArrayConstraintsFromSetAdditional_Nationalities_Reference(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $personal_Information_Common_DataTypeAdditional_Nationalities_ReferenceItem) {
            // validation for constraint: itemType
            if (!$personal_Information_Common_DataTypeAdditional_Nationalities_ReferenceItem instanceof \StructType\CountryObjectType) {
                $invalidValues[] = is_object($personal_Information_Common_DataTypeAdditional_Nationalities_ReferenceItem) ? get_class($personal_Information_Common_DataTypeAdditional_Nationalities_ReferenceItem) : sprintf('%s(%s)', gettype($personal_Information_Common_DataTypeAdditional_Nationalities_ReferenceItem), var_export($personal_Information_Common_DataTypeAdditional_Nationalities_ReferenceItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Additional_Nationalities_Reference property can only contain items of type \StructType\CountryObjectType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Additional_Nationalities_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\CountryObjectType[] $additional_Nationalities_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setAdditional_Nationalities_Reference(array $additional_Nationalities_Reference = array())
    {
        // validation for constraint: array
        if ('' !== ($additional_Nationalities_ReferenceArrayErrorMessage = self::validateAdditional_Nationalities_ReferenceForArrayConstraintsFromSetAdditional_Nationalities_Reference($additional_Nationalities_Reference))) {
            throw new \InvalidArgumentException($additional_Nationalities_ReferenceArrayErrorMessage, __LINE__);
        }
        $this->Additional_Nationalities_Reference = $additional_Nationalities_Reference;
        return $this;
    }
    /**
     * Add item to Additional_Nationalities_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\CountryObjectType $item
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function addToAdditional_Nationalities_Reference(\StructType\CountryObjectType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\CountryObjectType) {
            throw new \InvalidArgumentException(sprintf('The Additional_Nationalities_Reference property can only contain items of type \StructType\CountryObjectType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Additional_Nationalities_Reference[] = $item;
        return $this;
    }
    /**
     * Get Last_Medical_Exam_Valid_To value
     * @return string|null
     */
    public function getLast_Medical_Exam_Valid_To()
    {
        return $this->Last_Medical_Exam_Valid_To;
    }
    /**
     * Set Last_Medical_Exam_Valid_To value
     * @param string $last_Medical_Exam_Valid_To
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setLast_Medical_Exam_Valid_To($last_Medical_Exam_Valid_To = null)
    {
        // validation for constraint: string
        if (!is_null($last_Medical_Exam_Valid_To) && !is_string($last_Medical_Exam_Valid_To)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($last_Medical_Exam_Valid_To, true), gettype($last_Medical_Exam_Valid_To)), __LINE__);
        }
        $this->Last_Medical_Exam_Valid_To = $last_Medical_Exam_Valid_To;
        return $this;
    }
    /**
     * Get Last_Medical_Exam_Date value
     * @return string|null
     */
    public function getLast_Medical_Exam_Date()
    {
        return $this->Last_Medical_Exam_Date;
    }
    /**
     * Set Last_Medical_Exam_Date value
     * @param string $last_Medical_Exam_Date
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setLast_Medical_Exam_Date($last_Medical_Exam_Date = null)
    {
        // validation for constraint: string
        if (!is_null($last_Medical_Exam_Date) && !is_string($last_Medical_Exam_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($last_Medical_Exam_Date, true), gettype($last_Medical_Exam_Date)), __LINE__);
        }
        $this->Last_Medical_Exam_Date = $last_Medical_Exam_Date;
        return $this;
    }
    /**
     * Get Medical_Exam_Notes value
     * @return string|null
     */
    public function getMedical_Exam_Notes()
    {
        return $this->Medical_Exam_Notes;
    }
    /**
     * Set Medical_Exam_Notes value
     * @param string $medical_Exam_Notes
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setMedical_Exam_Notes($medical_Exam_Notes = null)
    {
        // validation for constraint: string
        if (!is_null($medical_Exam_Notes) && !is_string($medical_Exam_Notes)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($medical_Exam_Notes, true), gettype($medical_Exam_Notes)), __LINE__);
        }
        $this->Medical_Exam_Notes = $medical_Exam_Notes;
        return $this;
    }
    /**
     * Get Blood_Type_Reference value
     * @return \StructType\Blood_TypeObjectType|null
     */
    public function getBlood_Type_Reference()
    {
        return $this->Blood_Type_Reference;
    }
    /**
     * Set Blood_Type_Reference value
     * @param \StructType\Blood_TypeObjectType $blood_Type_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setBlood_Type_Reference(\StructType\Blood_TypeObjectType $blood_Type_Reference = null)
    {
        $this->Blood_Type_Reference = $blood_Type_Reference;
        return $this;
    }
    /**
     * Get Military_Service_Data value
     * @return \StructType\Person_Military_Service_DataType[]|null
     */
    public function getMilitary_Service_Data()
    {
        return $this->Military_Service_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setMilitary_Service_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setMilitary_Service_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateMilitary_Service_DataForArrayConstraintsFromSetMilitary_Service_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $personal_Information_Common_DataTypeMilitary_Service_DataItem) {
            // validation for constraint: itemType
            if (!$personal_Information_Common_DataTypeMilitary_Service_DataItem instanceof \StructType\Person_Military_Service_DataType) {
                $invalidValues[] = is_object($personal_Information_Common_DataTypeMilitary_Service_DataItem) ? get_class($personal_Information_Common_DataTypeMilitary_Service_DataItem) : sprintf('%s(%s)', gettype($personal_Information_Common_DataTypeMilitary_Service_DataItem), var_export($personal_Information_Common_DataTypeMilitary_Service_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Military_Service_Data property can only contain items of type \StructType\Person_Military_Service_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Military_Service_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Person_Military_Service_DataType[] $military_Service_Data
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setMilitary_Service_Data(array $military_Service_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($military_Service_DataArrayErrorMessage = self::validateMilitary_Service_DataForArrayConstraintsFromSetMilitary_Service_Data($military_Service_Data))) {
            throw new \InvalidArgumentException($military_Service_DataArrayErrorMessage, __LINE__);
        }
        $this->Military_Service_Data = $military_Service_Data;
        return $this;
    }
    /**
     * Add item to Military_Service_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Person_Military_Service_DataType $item
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function addToMilitary_Service_Data(\StructType\Person_Military_Service_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Person_Military_Service_DataType) {
            throw new \InvalidArgumentException(sprintf('The Military_Service_Data property can only contain items of type \StructType\Person_Military_Service_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Military_Service_Data[] = $item;
        return $this;
    }
    /**
     * Get Sexual_Orientation_Reference value
     * @return \StructType\Sexual_OrientationObjectType|null
     */
    public function getSexual_Orientation_Reference()
    {
        return $this->Sexual_Orientation_Reference;
    }
    /**
     * Set Sexual_Orientation_Reference value
     * @param \StructType\Sexual_OrientationObjectType $sexual_Orientation_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setSexual_Orientation_Reference(\StructType\Sexual_OrientationObjectType $sexual_Orientation_Reference = null)
    {
        $this->Sexual_Orientation_Reference = $sexual_Orientation_Reference;
        return $this;
    }
    /**
     * Get Gender_Identity_Reference value
     * @return \StructType\Gender_IdentityObjectType|null
     */
    public function getGender_Identity_Reference()
    {
        return $this->Gender_Identity_Reference;
    }
    /**
     * Set Gender_Identity_Reference value
     * @param \StructType\Gender_IdentityObjectType $gender_Identity_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setGender_Identity_Reference(\StructType\Gender_IdentityObjectType $gender_Identity_Reference = null)
    {
        $this->Gender_Identity_Reference = $gender_Identity_Reference;
        return $this;
    }
    /**
     * Get Pronoun_Reference value
     * @return \StructType\PronounObjectType|null
     */
    public function getPronoun_Reference()
    {
        return $this->Pronoun_Reference;
    }
    /**
     * Set Pronoun_Reference value
     * @param \StructType\PronounObjectType $pronoun_Reference
     * @return \StructType\Personal_Information_Common_DataType
     */
    public function setPronoun_Reference(\StructType\PronounObjectType $pronoun_Reference = null)
    {
        $this->Pronoun_Reference = $pronoun_Reference;
        return $this;
    }
}
