<?php
/**
 * Location
 *
 * 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;
/**
 * Location Class Doc Comment
 *
 * @category    Class
 * @description A consolidated mechanism for identifying something that generally has a path in the system.\n\nEach location references either a depot, a dir, or a file.
 * @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 Location implements ArrayAccess
{
    /**
      * Array of property to type mappings. Used for (de)serialization
      * @var string[]
      */
    static $swaggerTypes = array(
        'depot_path' => 'string',
        'depot' => '\HelixWebServices\Model\DepotsCommand',
        'dir' => '\HelixWebServices\Model\DirsCommand',
        'file' => '\HelixWebServices\Model\FilesCommand',
        'fstat' => '\HelixWebServices\Model\FstatCommand',
        'content' => 'string'
    );

    /**
      * Array of attributes where the key is the local name, and the value is the original name
      * @var string[]
      */
    static $attributeMap = array(
        'depot_path' => 'depotPath',
        'depot' => 'depot',
        'dir' => 'dir',
        'file' => 'file',
        'fstat' => 'fstat',
        'content' => 'content'
    );

    /**
      * Array of attributes to setter functions (for deserialization of responses)
      * @var string[]
      */
    static $setters = array(
        'depot_path' => 'setDepotPath',
        'depot' => 'setDepot',
        'dir' => 'setDir',
        'file' => 'setFile',
        'fstat' => 'setFstat',
        'content' => 'setContent'
    );

    /**
      * Array of attributes to getter functions (for serialization of requests)
      * @var string[]
      */
    static $getters = array(
        'depot_path' => 'getDepotPath',
        'depot' => 'getDepot',
        'dir' => 'getDir',
        'file' => 'getFile',
        'fstat' => 'getFstat',
        'content' => 'getContent'
    );

    
    /**
      * $depot_path An absolute depot path specification.
      * @var string
      */
    protected $depot_path;
    
    /**
      * $depot 
      * @var \HelixWebServices\Model\DepotsCommand
      */
    protected $depot;
    
    /**
      * $dir 
      * @var \HelixWebServices\Model\DirsCommand
      */
    protected $dir;
    
    /**
      * $file 
      * @var \HelixWebServices\Model\FilesCommand
      */
    protected $file;
    
    /**
      * $fstat 
      * @var \HelixWebServices\Model\FstatCommand
      */
    protected $fstat;
    
    /**
      * $content If this location indicates a single file, this can be set with the Base64-encoded content of the file.
      * @var string
      */
    protected $content;
    

    /**
     * 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_path"])) {
              $this->depot_path = $data["depot_path"];
            }
            if (isset($data["depot"])) {
              $this->depot = $data["depot"];
            }
            if (isset($data["dir"])) {
              $this->dir = $data["dir"];
            }
            if (isset($data["file"])) {
              $this->file = $data["file"];
            }
            if (isset($data["fstat"])) {
              $this->fstat = $data["fstat"];
            }
            if (isset($data["content"])) {
              $this->content = $data["content"];
            }
        }
    }
    
    /**
     * Gets depot_path
     * @return string
     */
    public function getDepotPath()
    {
        return $this->depot_path;
    }

    /**
     * Sets depot_path
     * @param string $depot_path An absolute depot path specification.
     * @return $this
     */
    public function setDepotPath($depot_path)
    {
        
        $this->depot_path = $depot_path;
        return $this;
    }
    
    /**
     * Gets depot
     * @return \HelixWebServices\Model\DepotsCommand
     */
    public function getDepot()
    {
        return $this->depot;
    }

    /**
     * Sets depot
     * @param \HelixWebServices\Model\DepotsCommand $depot 
     * @return $this
     */
    public function setDepot($depot)
    {
        
        $this->depot = $depot;
        return $this;
    }
    
    /**
     * Gets dir
     * @return \HelixWebServices\Model\DirsCommand
     */
    public function getDir()
    {
        return $this->dir;
    }

    /**
     * Sets dir
     * @param \HelixWebServices\Model\DirsCommand $dir 
     * @return $this
     */
    public function setDir($dir)
    {
        
        $this->dir = $dir;
        return $this;
    }
    
    /**
     * Gets file
     * @return \HelixWebServices\Model\FilesCommand
     */
    public function getFile()
    {
        return $this->file;
    }

    /**
     * Sets file
     * @param \HelixWebServices\Model\FilesCommand $file 
     * @return $this
     */
    public function setFile($file)
    {
        
        $this->file = $file;
        return $this;
    }
    
    /**
     * Gets fstat
     * @return \HelixWebServices\Model\FstatCommand
     */
    public function getFstat()
    {
        return $this->fstat;
    }

    /**
     * Sets fstat
     * @param \HelixWebServices\Model\FstatCommand $fstat 
     * @return $this
     */
    public function setFstat($fstat)
    {
        
        $this->fstat = $fstat;
        return $this;
    }
    
    /**
     * Gets content
     * @return string
     */
    public function getContent()
    {
        return $this->content;
    }

    /**
     * Sets content
     * @param string $content If this location indicates a single file, this can be set with the Base64-encoded content of the file.
     * @return $this
     */
    public function setContent($content)
    {
        
        $this->content = $content;
        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));
        }
    }
}