<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for ActivityInfo_With_Version_Info StructType
 * @subpackage Structs
 */
class ActivityInfo_With_Version_Info extends AbstractStructBase
{
    /**
     * The ID
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var int
     */
    public $ID;
    /**
     * The IsPlanning
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var bool
     */
    public $IsPlanning;
    /**
     * The ActivityType
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var string
     */
    public $ActivityType;
    /**
     * The InstructionSetVersion
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var int
     */
    public $InstructionSetVersion;
    /**
     * The Name
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Name;
    /**
     * The PathInfos
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfPath
     */
    public $PathInfos;
    /**
     * Constructor method for ActivityInfo_With_Version_Info
     * @uses ActivityInfo_With_Version_Info::setID()
     * @uses ActivityInfo_With_Version_Info::setIsPlanning()
     * @uses ActivityInfo_With_Version_Info::setActivityType()
     * @uses ActivityInfo_With_Version_Info::setInstructionSetVersion()
     * @uses ActivityInfo_With_Version_Info::setName()
     * @uses ActivityInfo_With_Version_Info::setPathInfos()
     * @param int $iD
     * @param bool $isPlanning
     * @param string $activityType
     * @param int $instructionSetVersion
     * @param string $name
     * @param \ArrayType\ArrayOfPath $pathInfos
     */
    public function __construct($iD = null, $isPlanning = null, $activityType = null, $instructionSetVersion = null, $name = null, \ArrayType\ArrayOfPath $pathInfos = null)
    {
        $this
            ->setID($iD)
            ->setIsPlanning($isPlanning)
            ->setActivityType($activityType)
            ->setInstructionSetVersion($instructionSetVersion)
            ->setName($name)
            ->setPathInfos($pathInfos);
    }
    /**
     * Get ID value
     * @return int
     */
    public function getID()
    {
        return $this->ID;
    }
    /**
     * Set ID value
     * @param int $iD
     * @return \StructType\ActivityInfo_With_Version_Info
     */
    public function setID($iD = null)
    {
        // validation for constraint: int
        if (!is_null($iD) && !(is_int($iD) || ctype_digit($iD))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide an integer value, %s given', var_export($iD, true), gettype($iD)), __LINE__);
        }
        $this->ID = $iD;
        return $this;
    }
    /**
     * Get IsPlanning value
     * @return bool
     */
    public function getIsPlanning()
    {
        return $this->IsPlanning;
    }
    /**
     * Set IsPlanning value
     * @param bool $isPlanning
     * @return \StructType\ActivityInfo_With_Version_Info
     */
    public function setIsPlanning($isPlanning = null)
    {
        // validation for constraint: boolean
        if (!is_null($isPlanning) && !is_bool($isPlanning)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($isPlanning, true), gettype($isPlanning)), __LINE__);
        }
        $this->IsPlanning = $isPlanning;
        return $this;
    }
    /**
     * Get ActivityType value
     * @return string
     */
    public function getActivityType()
    {
        return $this->ActivityType;
    }
    /**
     * Set ActivityType value
     * @uses \EnumType\EnumActivityType::valueIsValid()
     * @uses \EnumType\EnumActivityType::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $activityType
     * @return \StructType\ActivityInfo_With_Version_Info
     */
    public function setActivityType($activityType = null)
    {
        // validation for constraint: enumeration
        if (!\EnumType\EnumActivityType::valueIsValid($activityType)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \EnumType\EnumActivityType', is_array($activityType) ? implode(', ', $activityType) : var_export($activityType, true), implode(', ', \EnumType\EnumActivityType::getValidValues())), __LINE__);
        }
        $this->ActivityType = $activityType;
        return $this;
    }
    /**
     * Get InstructionSetVersion value
     * @return int
     */
    public function getInstructionSetVersion()
    {
        return $this->InstructionSetVersion;
    }
    /**
     * Set InstructionSetVersion value
     * @param int $instructionSetVersion
     * @return \StructType\ActivityInfo_With_Version_Info
     */
    public function setInstructionSetVersion($instructionSetVersion = null)
    {
        // validation for constraint: int
        if (!is_null($instructionSetVersion) && !(is_int($instructionSetVersion) || ctype_digit($instructionSetVersion))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide an integer value, %s given', var_export($instructionSetVersion, true), gettype($instructionSetVersion)), __LINE__);
        }
        $this->InstructionSetVersion = $instructionSetVersion;
        return $this;
    }
    /**
     * Get Name value
     * @return string|null
     */
    public function getName()
    {
        return $this->Name;
    }
    /**
     * Set Name value
     * @param string $name
     * @return \StructType\ActivityInfo_With_Version_Info
     */
    public function setName($name = null)
    {
        // validation for constraint: string
        if (!is_null($name) && !is_string($name)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($name, true), gettype($name)), __LINE__);
        }
        $this->Name = $name;
        return $this;
    }
    /**
     * Get PathInfos value
     * @return \ArrayType\ArrayOfPath|null
     */
    public function getPathInfos()
    {
        return $this->PathInfos;
    }
    /**
     * Set PathInfos value
     * @param \ArrayType\ArrayOfPath $pathInfos
     * @return \StructType\ActivityInfo_With_Version_Info
     */
    public function setPathInfos(\ArrayType\ArrayOfPath $pathInfos = null)
    {
        $this->PathInfos = $pathInfos;
        return $this;
    }
}
