FileSystem::assertHasFile()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
c 0
b 0
f 0
rs 9.4285
cc 2
eloc 3
nc 2
nop 1
1
<?php
2
3
namespace Partnermarketing\FileSystemBundle\FileSystem;
4
5
use Partnermarketing\FileSystemBundle\Adapter\AdapterInterface;
6
use Partnermarketing\FileSystemBundle\Exception\FileAlreadyExistsException;
7
use Partnermarketing\FileSystemBundle\Exception\FileDoesNotExistException;
8
9
class FileSystem implements AdapterInterface
10
{
11
    protected $adapter;
12
13
    /**
14
     * @param AdapterInterface $adapter
15
     */
16
    public function __construct(AdapterInterface $adapter)
17
    {
18
        $this->adapter = $adapter;
19
    }
20
21
    /**
22
     * {@inheritDoc}
23
     */
24
    public function read($path)
25
    {
26
        $content = $this->adapter->read($path);
27
28
        if (false === $content) {
29
            throw new \RuntimeException(sprintf('Could not read the "%s" content.', $path));
30
        }
31
32
        return $content;
33
    }
34
35
    /**
36
     * {@inheritDoc}
37
     */
38
    public function write($path, $source)
39
    {
40
        $url = $this->adapter->write($path, $source);
41
42
        if (empty($url)) {
43
            throw new \RuntimeException(sprintf('Could not write the "%s" key content.', $path));
44
        }
45
46
        return $url;
47
    }
48
49
    /**
50
     * {@inheritDoc}
51
     */
52
    public function writeContent($path, $content)
53
    {
54
        $url = $this->adapter->writeContent($path, $content);
55
56
        if (empty($url)) {
57
            throw new \RuntimeException(sprintf('Could not write the "%s" key content.', $path));
58
        }
59
60
        return $url;
61
    }
62
63
    /**
64
     * {@inheritDoc}
65
     */
66
    public function rename($sourcePath, $targetPath)
67
    {
68
        $this->assertHasFile($sourcePath);
69
70
        if ($this->exists($targetPath)) {
71
            throw new FileAlreadyExistsException($targetPath);
72
        }
73
74
        if (!$this->adapter->rename($sourcePath, $targetPath)) {
75
            throw new \RuntimeException(sprintf('Could not rename the "%s" key to "%s".', $sourcePath, $targetPath));
76
        }
77
78
        return true;
79
    }
80
81
    /**
82
     * {@inheritDoc}
83
     */
84
    public function delete($path)
85
    {
86
        $this->assertHasFile($path);
87
88
        if ($this->adapter->delete($path)) {
89
            return true;
90
        }
91
92
        throw new \RuntimeException(sprintf('Could not remove the "%s" key.', $path));
93
    }
94
95
    /**
96
     * {@inheritDoc}
97
     */
98
    public function getFiles($directory = "")
99
    {
100
        return $this->adapter->getFiles($directory);
101
    }
102
103
    /**
104
     * {@inheritDoc}
105
     */
106
    public function copyFiles($sourceDir, $targetDir)
107
    {
108
        return $this->adapter->copyFiles($sourceDir, $targetDir);
109
    }
110
111
    /**
112
     * {@inheritDoc}
113
     */
114
    public function exists($path)
115
    {
116
        return $this->adapter->exists($path);
117
    }
118
119
    /**
120
     * {@inheritDoc}
121
     */
122
    public function isDirectory($path)
123
    {
124
        return $this->adapter->isDirectory($path);
125
    }
126
127
    /**
128
     * {@inheritDoc}
129
     */
130
    public function getURL($path)
131
    {
132
        return $this->adapter->getURL($path);
133
    }
134
135
    /**
136
     * {@inheritDoc}
137
     */
138
    public function getFileSize($path)
139
    {
140
        return $this->adapter->getFileSize($path);
141
    }
142
143
    /**
144
     * {@inheritDoc}
145
     */
146
    public function copyToLocalTemporaryFile($path)
147
    {
148
        return $this->adapter->copyToLocalTemporaryFile($path);
149
    }
150
    
151
    /**
152
     * {@inheritDoc}
153
     */
154
    public function getService()
155
    {
156
        return $this->adapter->getService();
157
    }
158
159
    /**
160
     * Checks if a file exists, throws an error if it doesn't.
161
     *
162
     * @param $path
163
     * @throws FileDoesNotExistException
164
     */
165
    private function assertHasFile($path)
166
    {
167
        if (!$this->exists($path)) {
168
            throw new FileDoesNotExistException($path);
169
        }
170
    }
171
}
172