<?php

namespace patest\StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for Security.UserJournalSessionSummaryFilter StructType
 * @subpackage Structs
 */
class Security_UserJournalSessionSummaryFilter extends FilterEntity
{
    /**
     * The Client
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Client;
    /**
     * The ContextEndDateFrom
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $ContextEndDateFrom;
    /**
     * The ContextEndDateTo
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $ContextEndDateTo;
    /**
     * The Session
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Session;
    /**
     * Constructor method for Security.UserJournalSessionSummaryFilter
     * @uses Security_UserJournalSessionSummaryFilter::setClient()
     * @uses Security_UserJournalSessionSummaryFilter::setContextEndDateFrom()
     * @uses Security_UserJournalSessionSummaryFilter::setContextEndDateTo()
     * @uses Security_UserJournalSessionSummaryFilter::setSession()
     * @param string $client
     * @param string $contextEndDateFrom
     * @param string $contextEndDateTo
     * @param string $session
     */
    public function __construct($client = null, $contextEndDateFrom = null, $contextEndDateTo = null, $session = null)
    {
        $this
            ->setClient($client)
            ->setContextEndDateFrom($contextEndDateFrom)
            ->setContextEndDateTo($contextEndDateTo)
            ->setSession($session);
    }
    /**
     * Get Client 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 getClient()
    {
        return isset($this->Client) ? $this->Client : null;
    }
    /**
     * Set Client 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 $client
     * @return \patest\StructType\Security_UserJournalSessionSummaryFilter
     */
    public function setClient($client = null)
    {
        // validation for constraint: string
        if (!is_null($client) && !is_string($client)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($client, true), gettype($client)), __LINE__);
        }
        if (is_null($client) || (is_array($client) && empty($client))) {
            unset($this->Client);
        } else {
            $this->Client = $client;
        }
        return $this;
    }
    /**
     * Get ContextEndDateFrom 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 getContextEndDateFrom()
    {
        return isset($this->ContextEndDateFrom) ? $this->ContextEndDateFrom : null;
    }
    /**
     * Set ContextEndDateFrom 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 $contextEndDateFrom
     * @return \patest\StructType\Security_UserJournalSessionSummaryFilter
     */
    public function setContextEndDateFrom($contextEndDateFrom = null)
    {
        // validation for constraint: string
        if (!is_null($contextEndDateFrom) && !is_string($contextEndDateFrom)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($contextEndDateFrom, true), gettype($contextEndDateFrom)), __LINE__);
        }
        if (is_null($contextEndDateFrom) || (is_array($contextEndDateFrom) && empty($contextEndDateFrom))) {
            unset($this->ContextEndDateFrom);
        } else {
            $this->ContextEndDateFrom = $contextEndDateFrom;
        }
        return $this;
    }
    /**
     * Get ContextEndDateTo 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 getContextEndDateTo()
    {
        return isset($this->ContextEndDateTo) ? $this->ContextEndDateTo : null;
    }
    /**
     * Set ContextEndDateTo 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 $contextEndDateTo
     * @return \patest\StructType\Security_UserJournalSessionSummaryFilter
     */
    public function setContextEndDateTo($contextEndDateTo = null)
    {
        // validation for constraint: string
        if (!is_null($contextEndDateTo) && !is_string($contextEndDateTo)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($contextEndDateTo, true), gettype($contextEndDateTo)), __LINE__);
        }
        if (is_null($contextEndDateTo) || (is_array($contextEndDateTo) && empty($contextEndDateTo))) {
            unset($this->ContextEndDateTo);
        } else {
            $this->ContextEndDateTo = $contextEndDateTo;
        }
        return $this;
    }
    /**
     * Get Session 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 getSession()
    {
        return isset($this->Session) ? $this->Session : null;
    }
    /**
     * Set Session 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 $session
     * @return \patest\StructType\Security_UserJournalSessionSummaryFilter
     */
    public function setSession($session = null)
    {
        // validation for constraint: string
        if (!is_null($session) && !is_string($session)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($session, true), gettype($session)), __LINE__);
        }
        if (is_null($session) || (is_array($session) && empty($session))) {
            unset($this->Session);
        } else {
            $this->Session = $session;
        }
        return $this;
    }
}
