Completed
Branch full-rewrite (4754d3)
by Thibaud
03:13
created

PackagedResource::getReaderResolver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Alchemy\Zippy\Package;
4
5
use Alchemy\Zippy\Resource\ResourceReader;
6
use Alchemy\Zippy\Resource\ResourceReaderResolver;
7
use Alchemy\Zippy\Resource\ResourceUri;
8
use Alchemy\Zippy\Resource\ResourceTransport;
9
use Alchemy\Zippy\Resource\ResourceWriterResolver;
10
11
class PackagedResource
12
{
13
    /**
14
     * @var PackagedResource
15
     */
16
    private $parent;
17
18
    /**
19
     * @var ResourceUri
20
     */
21
    private $relativeUri;
22
23
    /**
24
     * @var ResourceReaderResolver
25
     */
26
    private $readerResolver;
27
28
    /**
29
     * @var ResourceWriterResolver
30
     */
31
    private $writerResolver;
32
33
    /**
34
     * @param ResourceUri $resourceUri
35
     * @param ResourceReaderResolver $readerResolver
36
     * @param ResourceWriterResolver $writerResolver
37
     * @param PackagedResource $parent
38
     */
39
    public function __construct(
40
        ResourceUri $resourceUri,
41
        ResourceReaderResolver $readerResolver,
42
        ResourceWriterResolver $writerResolver,
43
        PackagedResource $parent = null
44
    ) {
45
        $this->relativeUri = $resourceUri;
46
        $this->parent = $parent;
47
        $this->readerResolver = $readerResolver;
48
        $this->writerResolver = $writerResolver;
49
    }
50
51
    /**
52
     * @return ResourceUri
53
     */
54
    public function getRelativeUri()
55
    {
56
        return $this->relativeUri;
57
    }
58
59
    /**
60
     * @return ResourceReader
61
     */
62
    public function getReader()
63
    {
64
        return $this->readerResolver->resolveReader($this->getRelativeUri());
65
    }
66
67
    /**
68
     * @return ResourceTransport
69
     */
70
    public function getTransport()
71
    {
72
        return new ResourceTransport($this->readerResolver, $this->writerResolver, $this->getRelativeUri());
73
    }
74
75
    /**
76
     * @return ResourceReaderResolver
77
     */
78
    public function getReaderResolver()
79
    {
80
        return $this->readerResolver;
81
    }
82
83
    /**
84
     * @return ResourceWriterResolver
85
     */
86
    public function getWriterResolver()
87
    {
88
        return $this->writerResolver;
89
    }
90
91
    /**
92
     * return ResourceUri
93
     */
94
    public function getAbsoluteUri()
95
    {
96
        $uri = $this->relativeUri->getUri();
97
98
        if ($this->parent && $this->parent->isRoot()) {
99
            $uri = $this->parent->getAbsoluteUri() . '#/' . $this->relativeUri->getResource();
100
        }
101
102
        return new ResourceUri($uri);
103
    }
104
105
    /**
106
     * @return bool
107
     */
108
    public function isRoot()
109
    {
110
        return $this->parent == null;
111
    }
112
}
113