StorageLocator   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 95%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 2
dl 0
loc 61
ccs 19
cts 20
cp 0.95
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A register() 0 4 1
A get() 0 8 2
A selectStorage() 0 8 1
A getStorage() 0 11 2
1
<?php
2
3
namespace Mathielen\ImportEngine\Storage;
4
5
use Mathielen\ImportEngine\Storage\Provider\StorageProviderInterface;
6
use Mathielen\ImportEngine\ValueObject\StorageSelection;
7
8
class StorageLocator
9
{
10
    /**
11
     * @var StorageProviderInterface[]
12
     */
13
    private $providers = array();
14
15
    /**
16
     * @var \SplObjectStorage
17
     */
18
    private $storageCache;
19
20 1
    public function __construct()
21
    {
22 1
        $this->storageCache = new \SplObjectStorage();
23 1
    }
24
25 1
    public function register($idProvider, StorageProviderInterface $provider)
26
    {
27 1
        $this->providers[$idProvider] = $provider;
28 1
    }
29
30
    /**
31
     * @return StorageProviderInterface
32
     */
33 1
    public function get($idProvider)
34
    {
35 1
        if (!isset($this->providers[$idProvider])) {
36
            throw new \InvalidArgumentException("Provider with id '$idProvider' does not exist!");
37
        }
38
39 1
        return $this->providers[$idProvider];
40
    }
41
42
    /**
43
     * @return StorageSelection
44
     */
45 1
    public function selectStorage($idProvider, $id)
46
    {
47 1
        $provider = $this->get($idProvider);
48
49
        return $provider
50 1
            ->select($id)
51 1
            ->setProviderId($idProvider);
52
    }
53
54
    /**
55
     * @return StorageInterface
56
     */
57 1
    public function getStorage(StorageSelection $selection)
58
    {
59 1
        if (!isset($this->storageCache[$selection])) {
60 1
            $provider = $this->get($selection->getProviderId());
61 1
            $storage = $provider->storage($selection);
62
63 1
            $this->storageCache[$selection] = $storage;
64
        }
65
66 1
        return $this->storageCache[$selection];
67
    }
68
}
69