1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 
<?php
/* --------------------------------------------------------------
   ManufacturerWriteService.inc.php 2018-01-24
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2018 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class ManufacturerWriteService
 *
 * @category   System
 * @package    Manufacturer
 */
class ManufacturerWriteService implements ManufacturerWriteServiceInterface
{
    /**
     * @var \ManufacturerRepositoryInterface
     */
    protected $repository;
    
    /**
     * @var \ImageFileStorage
     */
    protected $storage;
    
    
    public function __construct(ManufacturerRepositoryInterface $repository, ImageFileStorage $storage)
    {
        $this->repository = $repository;
        $this->storage    = $storage;
    }
    
    
    /**
     * Saves manufacturer entity in database.
     *
     * @param \ManufacturerInterface $manufacturer Manufacturer unit to be saved.
     *
     * @return $this|\ManufacturerWriteServiceInterface Same instance for chained method calls.
     */
    public function save(ManufacturerInterface $manufacturer)
    {
        $this->repository->save($manufacturer);
        
        return $this;
    }
    
    
    /**
     * Saves an existing image file with giving name.
     *
     * @param \ExistingFile       $sourceFile        existing file to save.
     *
     * @param \FilenameStringType $preferredFilename filename to saving file.
     *
     * @return $this |\ManufacturerWriteServiceInterface Same instance for chained method calls.
     */
    public function saveImage(ExistingFile $sourceFile, FilenameStringType $preferredFilename)
    {
        $this->storage->importFile($sourceFile, $preferredFilename);
        
        return $this;
    }
    
    
    /**
     * If the file is existing ,the filename get an unique id as prefix
     *
     * @param \FilenameStringType $preferredFilename filename of uploaded file.
     *
     * @return \FilenameStringType filename with or without unique id.
     */
    public function unifyFilename(FilenameStringType $preferredFilename)
    {
        if($this->storage->fileExists($preferredFilename))
        {
            return new FilenameStringType(uniqid() . $preferredFilename->asString());
        }
        
        return $preferredFilename;
    }
    
    
    /**
     * Delete an existing image from filesystem.
     *
     * @param \IdType $id manufacturer id to get the image name.
     *
     * @return $this
     */
    public function deleteImage(IdType $id)
    {
        $existingImage = MainFactory::create('FilenameStringType',
                                             basename($this->repository->getById($id)->getImage()));
        
        $this->storage->deleteFile($existingImage);
        
        return $this;
    }
    
    
    /**
     * Deletes manufacturer entity from database.
     *
     * @param \ManufacturerInterface $manufacturer Manufacturer unit to be deleted.
     *
     * @return $this|\ManufacturerWriteServiceInterface Same instance for chained method calls.
     */
    public function delete(ManufacturerInterface $manufacturer)
    {
        $this->repository->delete($manufacturer);
        
        return $this;
    }
    
    
    /**
     * Creates manufacturer entity.
     *
     * @return \Manufacturer New manufacturer entity.
     */
    public function createManufacturer()
    {
        return $this->repository->createManufacturer();
    }
}