<?php

namespace patest\StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for SysInfo.ConfigObject StructType
 * @subpackage Structs
 */
class SysInfo_ConfigObject extends SysInfoObject
{
    /**
     * The DefinedAt
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var \patest\StructType\RecordSetOfSysInfo_MetadataLocation
     */
    public $DefinedAt;
    /**
     * The DefinedAtString
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $DefinedAtString;
    /**
     * The FullName
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $FullName;
    /**
     * The IsAbstract
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var bool
     */
    public $IsAbstract;
    /**
     * The Name
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Name;
    /**
     * The Parent
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Parent;
    /**
     * The ResolvedXml
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $ResolvedXml;
    /**
     * The Type
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Type;
    /**
     * Constructor method for SysInfo.ConfigObject
     * @uses SysInfo_ConfigObject::setDefinedAt()
     * @uses SysInfo_ConfigObject::setDefinedAtString()
     * @uses SysInfo_ConfigObject::setFullName()
     * @uses SysInfo_ConfigObject::setIsAbstract()
     * @uses SysInfo_ConfigObject::setName()
     * @uses SysInfo_ConfigObject::setParent()
     * @uses SysInfo_ConfigObject::setResolvedXml()
     * @uses SysInfo_ConfigObject::setType()
     * @param \patest\StructType\RecordSetOfSysInfo_MetadataLocation $definedAt
     * @param string $definedAtString
     * @param string $fullName
     * @param bool $isAbstract
     * @param string $name
     * @param string $parent
     * @param string $resolvedXml
     * @param string $type
     */
    public function __construct(\patest\StructType\RecordSetOfSysInfo_MetadataLocation $definedAt = null, $definedAtString = null, $fullName = null, $isAbstract = null, $name = null, $parent = null, $resolvedXml = null, $type = null)
    {
        $this
            ->setDefinedAt($definedAt)
            ->setDefinedAtString($definedAtString)
            ->setFullName($fullName)
            ->setIsAbstract($isAbstract)
            ->setName($name)
            ->setParent($parent)
            ->setResolvedXml($resolvedXml)
            ->setType($type);
    }
    /**
     * Get DefinedAt 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 \patest\StructType\RecordSetOfSysInfo_MetadataLocation|null
     */
    public function getDefinedAt()
    {
        return isset($this->DefinedAt) ? $this->DefinedAt : null;
    }
    /**
     * Set DefinedAt 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 \patest\StructType\RecordSetOfSysInfo_MetadataLocation $definedAt
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    public function setDefinedAt(\patest\StructType\RecordSetOfSysInfo_MetadataLocation $definedAt = null)
    {
        if (is_null($definedAt) || (is_array($definedAt) && empty($definedAt))) {
            unset($this->DefinedAt);
        } else {
            $this->DefinedAt = $definedAt;
        }
        return $this;
    }
    /**
     * Get DefinedAtString 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 string|null
     */
    public function getDefinedAtString()
    {
        return isset($this->DefinedAtString) ? $this->DefinedAtString : null;
    }
    /**
     * Set DefinedAtString 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 string $definedAtString
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    public function setDefinedAtString($definedAtString = null)
    {
        // validation for constraint: string
        if (!is_null($definedAtString) && !is_string($definedAtString)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($definedAtString, true), gettype($definedAtString)), __LINE__);
        }
        if (is_null($definedAtString) || (is_array($definedAtString) && empty($definedAtString))) {
            unset($this->DefinedAtString);
        } else {
            $this->DefinedAtString = $definedAtString;
        }
        return $this;
    }
    /**
     * Get FullName 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 string|null
     */
    public function getFullName()
    {
        return isset($this->FullName) ? $this->FullName : null;
    }
    /**
     * Set FullName 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 string $fullName
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    public function setFullName($fullName = null)
    {
        // validation for constraint: string
        if (!is_null($fullName) && !is_string($fullName)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($fullName, true), gettype($fullName)), __LINE__);
        }
        if (is_null($fullName) || (is_array($fullName) && empty($fullName))) {
            unset($this->FullName);
        } else {
            $this->FullName = $fullName;
        }
        return $this;
    }
    /**
     * Get IsAbstract 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 bool|null
     */
    public function getIsAbstract()
    {
        return isset($this->IsAbstract) ? $this->IsAbstract : null;
    }
    /**
     * Set IsAbstract 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 bool $isAbstract
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    public function setIsAbstract($isAbstract = null)
    {
        // validation for constraint: boolean
        if (!is_null($isAbstract) && !is_bool($isAbstract)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($isAbstract, true), gettype($isAbstract)), __LINE__);
        }
        if (is_null($isAbstract) || (is_array($isAbstract) && empty($isAbstract))) {
            unset($this->IsAbstract);
        } else {
            $this->IsAbstract = $isAbstract;
        }
        return $this;
    }
    /**
     * Get Name 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 string|null
     */
    public function getName()
    {
        return isset($this->Name) ? $this->Name : null;
    }
    /**
     * Set Name 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 string $name
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    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__);
        }
        if (is_null($name) || (is_array($name) && empty($name))) {
            unset($this->Name);
        } else {
            $this->Name = $name;
        }
        return $this;
    }
    /**
     * Get Parent 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 string|null
     */
    public function getParent()
    {
        return isset($this->Parent) ? $this->Parent : null;
    }
    /**
     * Set Parent 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 string $parent
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    public function setParent($parent = null)
    {
        // validation for constraint: string
        if (!is_null($parent) && !is_string($parent)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($parent, true), gettype($parent)), __LINE__);
        }
        if (is_null($parent) || (is_array($parent) && empty($parent))) {
            unset($this->Parent);
        } else {
            $this->Parent = $parent;
        }
        return $this;
    }
    /**
     * Get ResolvedXml 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 string|null
     */
    public function getResolvedXml()
    {
        return isset($this->ResolvedXml) ? $this->ResolvedXml : null;
    }
    /**
     * Set ResolvedXml 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 string $resolvedXml
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    public function setResolvedXml($resolvedXml = null)
    {
        // validation for constraint: string
        if (!is_null($resolvedXml) && !is_string($resolvedXml)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($resolvedXml, true), gettype($resolvedXml)), __LINE__);
        }
        if (is_null($resolvedXml) || (is_array($resolvedXml) && empty($resolvedXml))) {
            unset($this->ResolvedXml);
        } else {
            $this->ResolvedXml = $resolvedXml;
        }
        return $this;
    }
    /**
     * Get Type 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 string|null
     */
    public function getType()
    {
        return isset($this->Type) ? $this->Type : null;
    }
    /**
     * Set Type 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 string $type
     * @return \patest\StructType\SysInfo_ConfigObject
     */
    public function setType($type = null)
    {
        // validation for constraint: string
        if (!is_null($type) && !is_string($type)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($type, true), gettype($type)), __LINE__);
        }
        if (is_null($type) || (is_array($type) && empty($type))) {
            unset($this->Type);
        } else {
            $this->Type = $type;
        }
        return $this;
    }
}
