<?php 
 
namespace League\Flysystem; 
 
use BadMethodCallException; 
 
abstract class Handler 
{ 
    /** 
     * @var string 
     */ 
    protected $path; 
 
    /** 
     * @var FilesystemInterface 
     */ 
    protected $filesystem; 
 
    /** 
     * Constructor. 
     * 
     * @param FilesystemInterface $filesystem 
     * @param string              $path 
     */ 
    public function __construct(FilesystemInterface $filesystem = null, $path = null) 
    { 
        $this->path = $path; 
        $this->filesystem = $filesystem; 
    } 
 
    /** 
     * Check whether the entree is a directory. 
     * 
     * @return bool 
     */ 
    public function isDir() 
    { 
        return $this->getType() === 'dir'; 
    } 
 
    /** 
     * Check whether the entree is a file. 
     * 
     * @return bool 
     */ 
    public function isFile() 
    { 
        return $this->getType() === 'file'; 
    } 
 
    /** 
     * Retrieve the entree type (file|dir). 
     * 
     * @return string file or dir 
     */ 
    public function getType() 
    { 
        $metadata = $this->filesystem->getMetadata($this->path); 
 
        return $metadata['type']; 
    } 
 
    /** 
     * Set the Filesystem object. 
     * 
     * @param FilesystemInterface $filesystem 
     * 
     * @return $this 
     */ 
    public function setFilesystem(FilesystemInterface $filesystem) 
    { 
        $this->filesystem = $filesystem; 
 
        return $this; 
    } 
     
    /** 
     * Retrieve the Filesystem object. 
     * 
     * @return FilesystemInterface 
     */ 
    public function getFilesystem() 
    { 
        return $this->filesystem; 
    } 
 
    /** 
     * Set the entree path. 
     * 
     * @param string $path 
     * 
     * @return $this 
     */ 
    public function setPath($path) 
    { 
        $this->path = $path; 
 
        return $this; 
    } 
 
    /** 
     * Retrieve the entree path. 
     * 
     * @return string path 
     */ 
    public function getPath() 
    { 
        return $this->path; 
    } 
 
    /** 
     * Plugins pass-through. 
     * 
     * @param string $method 
     * @param array  $arguments 
     * 
     * @return mixed 
     */ 
    public function __call($method, array $arguments) 
    { 
        array_unshift($arguments, $this->path); 
        $callback = [$this->filesystem, $method]; 
 
        try { 
            return call_user_func_array($callback, $arguments); 
        } catch (BadMethodCallException $e) { 
            throw new BadMethodCallException( 
                'Call to undefined method ' 
                . get_called_class() 
                . '::' . $method 
            ); 
        } 
    } 
} 
 
 |