Completed
Push — 16.x ( bd3602...588b8a )
by Tim
02:11
created

AbstractFileResolver::reset()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 0
cts 4
cp 0
rs 10
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
/**
4
 * TechDivision\Import\Subjects\FileResolver\AbstractFileResolver
5
 *
6
 * NOTICE OF LICENSE
7
 *
8
 * This source file is subject to the Open Software License (OSL 3.0)
9
 * that is available through the world-wide-web at this URL:
10
 * http://opensource.org/licenses/osl-3.0.php
11
 *
12
 * PHP version 5
13
 *
14
 * @author    Tim Wagner <[email protected]>
15
 * @copyright 2016 TechDivision GmbH <[email protected]>
16
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
 * @link      https://github.com/techdivision/import
18
 * @link      http://www.techdivision.com
19
 */
20
21
namespace TechDivision\Import\Subjects\FileResolver;
22
23
use TechDivision\Import\Utils\RegistryKeys;
24
use TechDivision\Import\Adapter\FilesystemAdapterInterface;
25
use TechDivision\Import\Services\RegistryProcessorInterface;
26
use TechDivision\Import\Loaders\PregMatchFilteredLoaderInterface;
27
use TechDivision\Import\Configuration\SubjectConfigurationInterface;
28
use TechDivision\Import\Configuration\Subject\FileResolverConfigurationInterface;
29
30
/**
31
 * Abstract file resolver implementation.
32
 *
33
 * @author    Tim Wagner <[email protected]>
34
 * @copyright 2016 TechDivision GmbH <[email protected]>
35
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
36
 * @link      https://github.com/techdivision/import
37
 * @link      http://www.techdivision.com
38
 */
39
abstract class AbstractFileResolver implements FileResolverInterface
40
{
41
42
    /**
43
     * The registry processor instance.
44
     *
45
     * @var \TechDivision\Import\Services\RegistryProcessorInterface
46
     */
47
    private $registryProcessor;
48
49
    /**
50
     * The actual source directory to load the files from.
51
     *
52
     * @var string
53
     */
54
    private $sourceDir;
55
56
    /**
57
     * The subject configuraiton instance.
58
     *
59
     * @var \TechDivision\Import\Configuration\SubjectConfigurationInterface
60
     */
61
    private $subjectConfiguration;
62
63
    /**
64
     * The filesystem adapter instance.
65
     *
66
     * @var \TechDivision\Import\Adapter\PhpFilesystemAdapterInterface
67
     */
68
    private $filesystemAdapter;
69
70
    /**
71
     * The filesystem loader instance.
72
     *
73
     * @var \TechDivision\Import\Loaders\PregMatchFilteredLoaderInterface
74
     */
75
    private $filesystemLoader;
76
77
    /**
78
     * Initializes the file resolver with the application and the registry instance.
79
     *
80
     * @param \TechDivision\Import\Services\RegistryProcessorInterface $registryProcessor The registry instance
81
     */
82
    public function __construct(RegistryProcessorInterface $registryProcessor)
83
    {
84
        $this->registryProcessor = $registryProcessor;
85
    }
86
87
    /**
88
     * Return's the registry processor instance.
89
     *
90
     * @return \TechDivision\Import\Services\RegistryProcessorInterface The processor instance
91
     */
92
    protected function getRegistryProcessor() : RegistryProcessorInterface
93
    {
94
        return $this->registryProcessor;
95
    }
96
97
    /**
98
     * Return's the filesystem loader instance.
99
     *
100
     * @return \TechDivision\Import\Loaders\PregMatchFilteredLoaderInterface The loader instance
101
     */
102
    protected function getFilesystemLoader() : PregMatchFilteredLoaderInterface
103
    {
104
        return $this->filesystemLoader;
105
    }
106
107
    /**
108
     * Sets the actual source directory to load the files from.
109
     *
110
     * @param string $sourceDir The actual source directory
111
     *
112
     * @return void
113
     */
114
    protected function setSourceDir(string $sourceDir) : void
115
    {
116
        $this->sourceDir = $sourceDir;
117
    }
118
119
    /**
120
     * Returns the actual source directory to load the files from.
121
     *
122
     * @return string The actual source directory
123
     */
124
    protected function getSourceDir() : string
125
    {
126
        return $this->sourceDir;
127
    }
128
129
    /**
130
     * Returns the file resolver configuration instance.
131
     *
132
     * @return \TechDivision\Import\Configuration\Subject\FileResolverConfigurationInterface The configuration instance
133
     */
134
    protected function getFileResolverConfiguration() : FileResolverConfigurationInterface
135
    {
136
        return $this->getSubjectConfiguration()->getFileResolver();
137
    }
138
139
    /**
140
     * Returns the suffix for the import files.
141
     *
142
     * @return string The suffix
143
     */
144
    protected function getSuffix() : string
145
    {
146
        return $this->getFileResolverConfiguration()->getSuffix();
147
    }
148
149
    /**
150
     * Initializes the file resolver for the import process with the passed serial.
151
     *
152
     * @param string $serial The unique identifier of the actual import process
153
     *
154
     * @return void
155
     * @throws \Exception Is thrown if the configured source directory is not available
156
     */
157
    protected function initialize(string $serial) : void
0 ignored issues
show
Unused Code introduced by
The parameter $serial is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
158
    {
159
160
        // load the actual status
161
        $status = $this->getRegistryProcessor()->getAttribute(RegistryKeys::STATUS);
162
163
        // query whether or not the configured source directory is available
164
        if ($this->getFilesystemAdapter()->isDir($sourceDir = $status[RegistryKeys::SOURCE_DIRECTORY])) {
165
            // set the source directory, if it is accessible
166
            $this->setSourceDir($sourceDir);
167
            // return immediately
168
            return;
169
        }
170
171
        // throw an exception otherwise
172
        throw new \Exception(sprintf('Configured source directory "%s" is not available!', $sourceDir));
173
    }
174
175
    /**
176
     * Set's the filesystem loader used to resolve the file that has to be processed.
177
     *
178
     * @param \TechDivision\Import\Loaders\PregMatchFilteredLoaderInterface $loader The filesystem loader instance
179
     *
180
     * @return void
181
     */
182
    public function setLoader(PregMatchFilteredLoaderInterface $loader) : void
183
    {
184
        $this->filesystemLoader = $loader;
185
    }
186
187
    /**
188
     * Sets the subject configuration instance.
189
     *
190
     * @param \TechDivision\Import\Configuration\SubjectConfigurationInterface $subjectConfiguration The subject configuration
191
     *
192
     * @return void
193
     */
194
    public function setSubjectConfiguration(SubjectConfigurationInterface $subjectConfiguration) : void
195
    {
196
        $this->subjectConfiguration = $subjectConfiguration;
197
    }
198
199
    /**
200
     * Returns the subject configuration instance.
201
     *
202
     * @return \TechDivision\Import\Configuration\SubjectConfigurationInterface The subject configuration
203
     */
204
    public function getSubjectConfiguration() : SubjectConfigurationInterface
205
    {
206
        return $this->subjectConfiguration;
207
    }
208
209
    /**
210
     * Set's the filesystem adapter instance.
211
     *
212
     * @param \TechDivision\Import\Adapter\FilesystemAdapterInterface $filesystemAdapter The filesystem adapter instance
213
     *
214
     * @return void
215
     */
216
    public function setFilesystemAdapter(FilesystemAdapterInterface $filesystemAdapter) : void
217
    {
218
        $this->filesystemAdapter = $filesystemAdapter;
0 ignored issues
show
Documentation Bug introduced by
$filesystemAdapter is of type object<TechDivision\Impo...systemAdapterInterface>, but the property $filesystemAdapter was declared to be of type object<TechDivision\Impo...systemAdapterInterface>. Are you sure that you always receive this specific sub-class here, or does it make sense to add an instanceof check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a given class or a super-class is assigned to a property that is type hinted more strictly.

Either this assignment is in error or an instanceof check should be added for that assignment.

class Alien {}

class Dalek extends Alien {}

class Plot
{
    /** @var  Dalek */
    public $villain;
}

$alien = new Alien();
$plot = new Plot();
if ($alien instanceof Dalek) {
    $plot->villain = $alien;
}
Loading history...
219
    }
220
221
    /**
222
     * Return's the filesystem adapter instance.
223
     *
224
     * @return \TechDivision\Import\Adapter\FilesystemAdapterInterface The filesystem adapter instance
225
     */
226
    public function getFilesystemAdapter() : FilesystemAdapterInterface
227
    {
228
        return $this->filesystemAdapter;
229
    }
230
231
    /**
232
     * Return's the matches of all filters.
233
     *
234
     * @return array The array with the matches
235
     */
236
    public function getMatches() : array
237
    {
238
        return $this->getFilesystemLoader()->getMatches();
239
    }
240
241
    /**
242
     * Reset's the registered filters.
243
     *
244
     * @return void
245
     */
246
    public function reset() : void
247
    {
248
        $this->getFilesystemLoader()->reset();
249
    }
250
251
    /**
252
     * Loads the files from the source directory and return's them sorted.
253
     *
254
     * @param string $serial The unique identifier of the actual import process
255
     *
256
     * @return array The array with the files matching the subjects suffix
257
     * @throws \Exception Is thrown, when the source directory is NOT available
258
     */
259
    public function loadFiles(string $serial) : array
260
    {
261
262
        // initialize the resolver
263
        // @TODO Check if the method can not be moved to object initialization
264
        $this->initialize($serial);
265
266
        // initialize the array with the files matching the suffix found in the source directory
267
        return $this->getFilesystemLoader()->load(sprintf('%s/*.%s', $this->getSourceDir(), $this->getSuffix()));
0 ignored issues
show
Unused Code introduced by
The call to PregMatchFilteredLoaderInterface::load() has too many arguments starting with sprintf('%s/*.%s', $this...(), $this->getSuffix()).

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
268
    }
269
}
270