<?php
/**
 * FstatCommand
 *
 * PHP version 5
 *
 * @category Class
 * @package  HelixWebServices
 * @author   http://github.com/swagger-api/swagger-codegen
 * @license  http://www.apache.org/licenses/LICENSE-2.0 Apache Licene v2
 * @link     https://github.com/swagger-api/swagger-codegen
 */
/**
 *  Copyright 2015 SmartBear Software
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
/**
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */

namespace HelixWebServices\Model;

use \ArrayAccess;
/**
 * FstatCommand Class Doc Comment
 *
 * @category    Class
 * @description Detailed information about each file, as provided by the `p4 fstat` command.
 * @package     HelixWebServices
 * @author      http://github.com/swagger-api/swagger-codegen
 * @license     http://www.apache.org/licenses/LICENSE-2.0 Apache Licene v2
 * @link        https://github.com/swagger-api/swagger-codegen
 */
class FstatCommand implements ArrayAccess
{
    /**
      * Array of property to type mappings. Used for (de)serialization
      * @var string[]
      */
    static $swaggerTypes = array(
        'depot_file' => 'string',
        'moved_file' => 'string',
        'shelved' => 'string',
        'head_action' => 'string',
        'head_change' => 'string',
        'head_rev' => 'string',
        'head_type' => 'string',
        'head_charset' => 'string',
        'head_time' => '\DateTime',
        'head_mod_time' => '\DateTime',
        'moved_rev' => 'string',
        'digest' => 'string',
        'file_size' => 'string',
        'action_owner' => 'string',
        'resolved' => 'string',
        'unresolved' => 'string',
        'reresolvable' => 'string',
        'other_opens' => 'string[]',
        'other_locks' => 'string[]',
        'other_actions' => 'string[]',
        'other_changes' => 'string[]',
        'resolve_actions' => 'string[]',
        'resolve_base_files' => 'string[]',
        'resolve_base_revs' => 'string[]',
        'resolve_from_files' => 'string[]',
        'resolve_start_from_revs' => 'string[]',
        'resolve_end_from_revs' => 'string[]'
    );

    /**
      * Array of attributes where the key is the local name, and the value is the original name
      * @var string[]
      */
    static $attributeMap = array(
        'depot_file' => 'depotFile',
        'moved_file' => 'movedFile',
        'shelved' => 'shelved',
        'head_action' => 'headAction',
        'head_change' => 'headChange',
        'head_rev' => 'headRev',
        'head_type' => 'headType',
        'head_charset' => 'headCharset',
        'head_time' => 'headTime',
        'head_mod_time' => 'headModTime',
        'moved_rev' => 'movedRev',
        'digest' => 'digest',
        'file_size' => 'fileSize',
        'action_owner' => 'actionOwner',
        'resolved' => 'resolved',
        'unresolved' => 'unresolved',
        'reresolvable' => 'reresolvable',
        'other_opens' => 'otherOpens',
        'other_locks' => 'otherLocks',
        'other_actions' => 'otherActions',
        'other_changes' => 'otherChanges',
        'resolve_actions' => 'resolveActions',
        'resolve_base_files' => 'resolveBaseFiles',
        'resolve_base_revs' => 'resolveBaseRevs',
        'resolve_from_files' => 'resolveFromFiles',
        'resolve_start_from_revs' => 'resolveStartFromRevs',
        'resolve_end_from_revs' => 'resolveEndFromRevs'
    );

    /**
      * Array of attributes to setter functions (for deserialization of responses)
      * @var string[]
      */
    static $setters = array(
        'depot_file' => 'setDepotFile',
        'moved_file' => 'setMovedFile',
        'shelved' => 'setShelved',
        'head_action' => 'setHeadAction',
        'head_change' => 'setHeadChange',
        'head_rev' => 'setHeadRev',
        'head_type' => 'setHeadType',
        'head_charset' => 'setHeadCharset',
        'head_time' => 'setHeadTime',
        'head_mod_time' => 'setHeadModTime',
        'moved_rev' => 'setMovedRev',
        'digest' => 'setDigest',
        'file_size' => 'setFileSize',
        'action_owner' => 'setActionOwner',
        'resolved' => 'setResolved',
        'unresolved' => 'setUnresolved',
        'reresolvable' => 'setReresolvable',
        'other_opens' => 'setOtherOpens',
        'other_locks' => 'setOtherLocks',
        'other_actions' => 'setOtherActions',
        'other_changes' => 'setOtherChanges',
        'resolve_actions' => 'setResolveActions',
        'resolve_base_files' => 'setResolveBaseFiles',
        'resolve_base_revs' => 'setResolveBaseRevs',
        'resolve_from_files' => 'setResolveFromFiles',
        'resolve_start_from_revs' => 'setResolveStartFromRevs',
        'resolve_end_from_revs' => 'setResolveEndFromRevs'
    );

    /**
      * Array of attributes to getter functions (for serialization of requests)
      * @var string[]
      */
    static $getters = array(
        'depot_file' => 'getDepotFile',
        'moved_file' => 'getMovedFile',
        'shelved' => 'getShelved',
        'head_action' => 'getHeadAction',
        'head_change' => 'getHeadChange',
        'head_rev' => 'getHeadRev',
        'head_type' => 'getHeadType',
        'head_charset' => 'getHeadCharset',
        'head_time' => 'getHeadTime',
        'head_mod_time' => 'getHeadModTime',
        'moved_rev' => 'getMovedRev',
        'digest' => 'getDigest',
        'file_size' => 'getFileSize',
        'action_owner' => 'getActionOwner',
        'resolved' => 'getResolved',
        'unresolved' => 'getUnresolved',
        'reresolvable' => 'getReresolvable',
        'other_opens' => 'getOtherOpens',
        'other_locks' => 'getOtherLocks',
        'other_actions' => 'getOtherActions',
        'other_changes' => 'getOtherChanges',
        'resolve_actions' => 'getResolveActions',
        'resolve_base_files' => 'getResolveBaseFiles',
        'resolve_base_revs' => 'getResolveBaseRevs',
        'resolve_from_files' => 'getResolveFromFiles',
        'resolve_start_from_revs' => 'getResolveStartFromRevs',
        'resolve_end_from_revs' => 'getResolveEndFromRevs'
    );

    
    /**
      * $depot_file Depot path to file.\nFor files containing special characters, the filename is displayed containing the ASCII expression of the character’s hexadecimal value.
      * @var string
      */
    protected $depot_file;
    
    /**
      * $moved_file Name in depot of moved to/from file.
      * @var string
      */
    protected $moved_file;
    
    /**
      * $shelved Set to `shelved` if file is shelved.
      * @var string
      */
    protected $shelved;
    
    /**
      * $head_action Action taken at head revision, if in depot.\n\nOne of: add, edit, delete, branch, move/add, move/delete, integrate, import, purge, or archive.
      * @var string
      */
    protected $head_action;
    
    /**
      * $head_change Head revision changelist number, if in depot.
      * @var string
      */
    protected $head_change;
    
    /**
      * $head_rev Head revision number, if in depot.
      * @var string
      */
    protected $head_rev;
    
    /**
      * $head_type Head revision type, if in depot.
      * @var string
      */
    protected $head_type;
    
    /**
      * $head_charset Head charset, for unicode files.
      * @var string
      */
    protected $head_charset;
    
    /**
      * $head_time Head revision changelist time, if in depot.\nTime is measured in seconds since 00:00:00 UTC, January 1, 1970.
      * @var \DateTime
      */
    protected $head_time;
    
    /**
      * $head_mod_time Head revision modification time (the time that the file was last modified on the client before submit), if in depot.
      * @var \DateTime
      */
    protected $head_mod_time;
    
    /**
      * $moved_rev Head revision of moved file.
      * @var string
      */
    protected $moved_rev;
    
    /**
      * $digest MD5 digest of a file.
      * @var string
      */
    protected $digest;
    
    /**
      * $file_size File length in bytes.
      * @var string
      */
    protected $file_size;
    
    /**
      * $action_owner User who opened the file, if open.
      * @var string
      */
    protected $action_owner;
    
    /**
      * $resolved The number, if any, of resovled integration records.
      * @var string
      */
    protected $resolved;
    
    /**
      * $unresolved The number, if any, of unresolved integration records.
      * @var string
      */
    protected $unresolved;
    
    /**
      * $reresolvable The number, if any, of re-resolvable integration records.
      * @var string
      */
    protected $reresolvable;
    
    /**
      * $other_opens For each user with the file open, the workspace and user with the open file.
      * @var string[]
      */
    protected $other_opens;
    
    /**
      * $other_locks For each user with the file locked, the workspace and user holding the lock.
      * @var string[]
      */
    protected $other_locks;
    
    /**
      * $other_actions For each user with the file open, the action taken.
      * @var string[]
      */
    protected $other_actions;
    
    /**
      * $other_changes The changelist number with this file open.
      * @var string[]
      */
    protected $other_changes;
    
    /**
      * $resolve_actions Pending integration action.
      * @var string[]
      */
    protected $resolve_actions;
    
    /**
      * $resolve_base_files Pending base files.
      * @var string[]
      */
    protected $resolve_base_files;
    
    /**
      * $resolve_base_revs Pending base revision numbers.
      * @var string[]
      */
    protected $resolve_base_revs;
    
    /**
      * $resolve_from_files Pending from files.
      * @var string[]
      */
    protected $resolve_from_files;
    
    /**
      * $resolve_start_from_revs Pending starting revisions.
      * @var string[]
      */
    protected $resolve_start_from_revs;
    
    /**
      * $resolve_end_from_revs Pending ending revisions.
      * @var string[]
      */
    protected $resolve_end_from_revs;
    

    /**
     * Constructor
     * @param mixed[] $data Associated array of property value initalizing the model
     */
    public function __construct(array $data = null)
    {
        if ($data != null) {
            if (isset($data["depot_file"])) {
              $this->depot_file = $data["depot_file"];
            }
            if (isset($data["moved_file"])) {
              $this->moved_file = $data["moved_file"];
            }
            if (isset($data["shelved"])) {
              $this->shelved = $data["shelved"];
            }
            if (isset($data["head_action"])) {
              $this->head_action = $data["head_action"];
            }
            if (isset($data["head_change"])) {
              $this->head_change = $data["head_change"];
            }
            if (isset($data["head_rev"])) {
              $this->head_rev = $data["head_rev"];
            }
            if (isset($data["head_type"])) {
              $this->head_type = $data["head_type"];
            }
            if (isset($data["head_charset"])) {
              $this->head_charset = $data["head_charset"];
            }
            if (isset($data["head_time"])) {
              $this->head_time = $data["head_time"];
            }
            if (isset($data["head_mod_time"])) {
              $this->head_mod_time = $data["head_mod_time"];
            }
            if (isset($data["moved_rev"])) {
              $this->moved_rev = $data["moved_rev"];
            }
            if (isset($data["digest"])) {
              $this->digest = $data["digest"];
            }
            if (isset($data["file_size"])) {
              $this->file_size = $data["file_size"];
            }
            if (isset($data["action_owner"])) {
              $this->action_owner = $data["action_owner"];
            }
            if (isset($data["resolved"])) {
              $this->resolved = $data["resolved"];
            }
            if (isset($data["unresolved"])) {
              $this->unresolved = $data["unresolved"];
            }
            if (isset($data["reresolvable"])) {
              $this->reresolvable = $data["reresolvable"];
            }
            if (isset($data["other_opens"])) {
              $this->other_opens = $data["other_opens"];
            }
            if (isset($data["other_locks"])) {
              $this->other_locks = $data["other_locks"];
            }
            if (isset($data["other_actions"])) {
              $this->other_actions = $data["other_actions"];
            }
            if (isset($data["other_changes"])) {
              $this->other_changes = $data["other_changes"];
            }
            if (isset($data["resolve_actions"])) {
              $this->resolve_actions = $data["resolve_actions"];
            }
            if (isset($data["resolve_base_files"])) {
              $this->resolve_base_files = $data["resolve_base_files"];
            }
            if (isset($data["resolve_base_revs"])) {
              $this->resolve_base_revs = $data["resolve_base_revs"];
            }
            if (isset($data["resolve_from_files"])) {
              $this->resolve_from_files = $data["resolve_from_files"];
            }
            if (isset($data["resolve_start_from_revs"])) {
              $this->resolve_start_from_revs = $data["resolve_start_from_revs"];
            }
            if (isset($data["resolve_end_from_revs"])) {
              $this->resolve_end_from_revs = $data["resolve_end_from_revs"];
            }
        }
    }
    
    /**
     * Gets depot_file
     * @return string
     */
    public function getDepotFile()
    {
        return $this->depot_file;
    }

    /**
     * Sets depot_file
     * @param string $depot_file Depot path to file.\nFor files containing special characters, the filename is displayed containing the ASCII expression of the character’s hexadecimal value.
     * @return $this
     */
    public function setDepotFile($depot_file)
    {
        
        $this->depot_file = $depot_file;
        return $this;
    }
    
    /**
     * Gets moved_file
     * @return string
     */
    public function getMovedFile()
    {
        return $this->moved_file;
    }

    /**
     * Sets moved_file
     * @param string $moved_file Name in depot of moved to/from file.
     * @return $this
     */
    public function setMovedFile($moved_file)
    {
        
        $this->moved_file = $moved_file;
        return $this;
    }
    
    /**
     * Gets shelved
     * @return string
     */
    public function getShelved()
    {
        return $this->shelved;
    }

    /**
     * Sets shelved
     * @param string $shelved Set to `shelved` if file is shelved.
     * @return $this
     */
    public function setShelved($shelved)
    {
        
        $this->shelved = $shelved;
        return $this;
    }
    
    /**
     * Gets head_action
     * @return string
     */
    public function getHeadAction()
    {
        return $this->head_action;
    }

    /**
     * Sets head_action
     * @param string $head_action Action taken at head revision, if in depot.\n\nOne of: add, edit, delete, branch, move/add, move/delete, integrate, import, purge, or archive.
     * @return $this
     */
    public function setHeadAction($head_action)
    {
        
        $this->head_action = $head_action;
        return $this;
    }
    
    /**
     * Gets head_change
     * @return string
     */
    public function getHeadChange()
    {
        return $this->head_change;
    }

    /**
     * Sets head_change
     * @param string $head_change Head revision changelist number, if in depot.
     * @return $this
     */
    public function setHeadChange($head_change)
    {
        
        $this->head_change = $head_change;
        return $this;
    }
    
    /**
     * Gets head_rev
     * @return string
     */
    public function getHeadRev()
    {
        return $this->head_rev;
    }

    /**
     * Sets head_rev
     * @param string $head_rev Head revision number, if in depot.
     * @return $this
     */
    public function setHeadRev($head_rev)
    {
        
        $this->head_rev = $head_rev;
        return $this;
    }
    
    /**
     * Gets head_type
     * @return string
     */
    public function getHeadType()
    {
        return $this->head_type;
    }

    /**
     * Sets head_type
     * @param string $head_type Head revision type, if in depot.
     * @return $this
     */
    public function setHeadType($head_type)
    {
        
        $this->head_type = $head_type;
        return $this;
    }
    
    /**
     * Gets head_charset
     * @return string
     */
    public function getHeadCharset()
    {
        return $this->head_charset;
    }

    /**
     * Sets head_charset
     * @param string $head_charset Head charset, for unicode files.
     * @return $this
     */
    public function setHeadCharset($head_charset)
    {
        
        $this->head_charset = $head_charset;
        return $this;
    }
    
    /**
     * Gets head_time
     * @return \DateTime
     */
    public function getHeadTime()
    {
        return $this->head_time;
    }

    /**
     * Sets head_time
     * @param \DateTime $head_time Head revision changelist time, if in depot.\nTime is measured in seconds since 00:00:00 UTC, January 1, 1970.
     * @return $this
     */
    public function setHeadTime($head_time)
    {
        
        $this->head_time = $head_time;
        return $this;
    }
    
    /**
     * Gets head_mod_time
     * @return \DateTime
     */
    public function getHeadModTime()
    {
        return $this->head_mod_time;
    }

    /**
     * Sets head_mod_time
     * @param \DateTime $head_mod_time Head revision modification time (the time that the file was last modified on the client before submit), if in depot.
     * @return $this
     */
    public function setHeadModTime($head_mod_time)
    {
        
        $this->head_mod_time = $head_mod_time;
        return $this;
    }
    
    /**
     * Gets moved_rev
     * @return string
     */
    public function getMovedRev()
    {
        return $this->moved_rev;
    }

    /**
     * Sets moved_rev
     * @param string $moved_rev Head revision of moved file.
     * @return $this
     */
    public function setMovedRev($moved_rev)
    {
        
        $this->moved_rev = $moved_rev;
        return $this;
    }
    
    /**
     * Gets digest
     * @return string
     */
    public function getDigest()
    {
        return $this->digest;
    }

    /**
     * Sets digest
     * @param string $digest MD5 digest of a file.
     * @return $this
     */
    public function setDigest($digest)
    {
        
        $this->digest = $digest;
        return $this;
    }
    
    /**
     * Gets file_size
     * @return string
     */
    public function getFileSize()
    {
        return $this->file_size;
    }

    /**
     * Sets file_size
     * @param string $file_size File length in bytes.
     * @return $this
     */
    public function setFileSize($file_size)
    {
        
        $this->file_size = $file_size;
        return $this;
    }
    
    /**
     * Gets action_owner
     * @return string
     */
    public function getActionOwner()
    {
        return $this->action_owner;
    }

    /**
     * Sets action_owner
     * @param string $action_owner User who opened the file, if open.
     * @return $this
     */
    public function setActionOwner($action_owner)
    {
        
        $this->action_owner = $action_owner;
        return $this;
    }
    
    /**
     * Gets resolved
     * @return string
     */
    public function getResolved()
    {
        return $this->resolved;
    }

    /**
     * Sets resolved
     * @param string $resolved The number, if any, of resovled integration records.
     * @return $this
     */
    public function setResolved($resolved)
    {
        
        $this->resolved = $resolved;
        return $this;
    }
    
    /**
     * Gets unresolved
     * @return string
     */
    public function getUnresolved()
    {
        return $this->unresolved;
    }

    /**
     * Sets unresolved
     * @param string $unresolved The number, if any, of unresolved integration records.
     * @return $this
     */
    public function setUnresolved($unresolved)
    {
        
        $this->unresolved = $unresolved;
        return $this;
    }
    
    /**
     * Gets reresolvable
     * @return string
     */
    public function getReresolvable()
    {
        return $this->reresolvable;
    }

    /**
     * Sets reresolvable
     * @param string $reresolvable The number, if any, of re-resolvable integration records.
     * @return $this
     */
    public function setReresolvable($reresolvable)
    {
        
        $this->reresolvable = $reresolvable;
        return $this;
    }
    
    /**
     * Gets other_opens
     * @return string[]
     */
    public function getOtherOpens()
    {
        return $this->other_opens;
    }

    /**
     * Sets other_opens
     * @param string[] $other_opens For each user with the file open, the workspace and user with the open file.
     * @return $this
     */
    public function setOtherOpens($other_opens)
    {
        
        $this->other_opens = $other_opens;
        return $this;
    }
    
    /**
     * Gets other_locks
     * @return string[]
     */
    public function getOtherLocks()
    {
        return $this->other_locks;
    }

    /**
     * Sets other_locks
     * @param string[] $other_locks For each user with the file locked, the workspace and user holding the lock.
     * @return $this
     */
    public function setOtherLocks($other_locks)
    {
        
        $this->other_locks = $other_locks;
        return $this;
    }
    
    /**
     * Gets other_actions
     * @return string[]
     */
    public function getOtherActions()
    {
        return $this->other_actions;
    }

    /**
     * Sets other_actions
     * @param string[] $other_actions For each user with the file open, the action taken.
     * @return $this
     */
    public function setOtherActions($other_actions)
    {
        
        $this->other_actions = $other_actions;
        return $this;
    }
    
    /**
     * Gets other_changes
     * @return string[]
     */
    public function getOtherChanges()
    {
        return $this->other_changes;
    }

    /**
     * Sets other_changes
     * @param string[] $other_changes The changelist number with this file open.
     * @return $this
     */
    public function setOtherChanges($other_changes)
    {
        
        $this->other_changes = $other_changes;
        return $this;
    }
    
    /**
     * Gets resolve_actions
     * @return string[]
     */
    public function getResolveActions()
    {
        return $this->resolve_actions;
    }

    /**
     * Sets resolve_actions
     * @param string[] $resolve_actions Pending integration action.
     * @return $this
     */
    public function setResolveActions($resolve_actions)
    {
        
        $this->resolve_actions = $resolve_actions;
        return $this;
    }
    
    /**
     * Gets resolve_base_files
     * @return string[]
     */
    public function getResolveBaseFiles()
    {
        return $this->resolve_base_files;
    }

    /**
     * Sets resolve_base_files
     * @param string[] $resolve_base_files Pending base files.
     * @return $this
     */
    public function setResolveBaseFiles($resolve_base_files)
    {
        
        $this->resolve_base_files = $resolve_base_files;
        return $this;
    }
    
    /**
     * Gets resolve_base_revs
     * @return string[]
     */
    public function getResolveBaseRevs()
    {
        return $this->resolve_base_revs;
    }

    /**
     * Sets resolve_base_revs
     * @param string[] $resolve_base_revs Pending base revision numbers.
     * @return $this
     */
    public function setResolveBaseRevs($resolve_base_revs)
    {
        
        $this->resolve_base_revs = $resolve_base_revs;
        return $this;
    }
    
    /**
     * Gets resolve_from_files
     * @return string[]
     */
    public function getResolveFromFiles()
    {
        return $this->resolve_from_files;
    }

    /**
     * Sets resolve_from_files
     * @param string[] $resolve_from_files Pending from files.
     * @return $this
     */
    public function setResolveFromFiles($resolve_from_files)
    {
        
        $this->resolve_from_files = $resolve_from_files;
        return $this;
    }
    
    /**
     * Gets resolve_start_from_revs
     * @return string[]
     */
    public function getResolveStartFromRevs()
    {
        return $this->resolve_start_from_revs;
    }

    /**
     * Sets resolve_start_from_revs
     * @param string[] $resolve_start_from_revs Pending starting revisions.
     * @return $this
     */
    public function setResolveStartFromRevs($resolve_start_from_revs)
    {
        
        $this->resolve_start_from_revs = $resolve_start_from_revs;
        return $this;
    }
    
    /**
     * Gets resolve_end_from_revs
     * @return string[]
     */
    public function getResolveEndFromRevs()
    {
        return $this->resolve_end_from_revs;
    }

    /**
     * Sets resolve_end_from_revs
     * @param string[] $resolve_end_from_revs Pending ending revisions.
     * @return $this
     */
    public function setResolveEndFromRevs($resolve_end_from_revs)
    {
        
        $this->resolve_end_from_revs = $resolve_end_from_revs;
        return $this;
    }
    
    /**
     * Returns true if offset exists. False otherwise.
     * @param  integer $offset Offset
     * @return boolean
     */
    public function offsetExists($offset)
    {
        return isset($this->$offset);
    }

    /**
     * Gets offset.
     * @param  integer $offset Offset
     * @return mixed
     */
    public function offsetGet($offset)
    {
        return $this->$offset;
    }

    /**
     * Sets value based on offset.
     * @param  integer $offset Offset
     * @param  mixed   $value  Value to be set
     * @return void
     */
    public function offsetSet($offset, $value)
    {
        $this->$offset = $value;
    }

    /**
     * Unsets offset.
     * @param  integer $offset Offset
     * @return void
     */
    public function offsetUnset($offset)
    {
        unset($this->$offset);
    }

    /**
     * Gets the string presentation of the object
     * @return string
     */
    public function __toString()
    {
        if (defined('JSON_PRETTY_PRINT')) {
            return json_encode(get_object_vars($this), JSON_PRETTY_PRINT);
        } else {
            return json_encode(get_object_vars($this));
        }
    }
}