Completed
Push — master ( be72f0...b6ccc1 )
by Alex
17s queued 14s
created

LinkProcessor::handleStartNode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 3
dl 0
loc 5
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
6
namespace POData\Readers\Atom\Processors\Entry;
7
8
use POData\Common\ODataConstants;
9
use POData\ObjectModel\ODataEntry;
10
use POData\ObjectModel\ODataExpandedResult;
11
use POData\ObjectModel\ODataFeed;
12
use POData\ObjectModel\ODataLink;
13
use POData\ObjectModel\ODataMediaLink;
14
use POData\Readers\Atom\Processors\BaseNodeHandler;
15
16
class LinkProcessor extends BaseNodeHandler
17
{
18
    /**
19
     * @var ODataLink|ODataMediaLink
20
     */
21
    private $link;
22
23
    public function __construct($attributes)
24
    {
25
        switch ($this->arrayKeyOrDefault($attributes, ODataConstants::ATOM_LINK_RELATION_ATTRIBUTE_NAME, null)) {
26
            case ODataConstants::ATOM_EDIT_RELATION_ATTRIBUTE_VALUE:
27
            case ODataConstants::ODATA_RELATED_NAMESPACE .
28
                 $this->arrayKeyOrDefault($attributes, ODataConstants::ATOM_TITLE_ELELMET_NAME, ''):
29
                $object = ODataLink::class;
30
                break;
31
            case ODataConstants::ATOM_EDIT_MEDIA_RELATION_ATTRIBUTE_VALUE:
32
                $object = ODataMediaLink::class;
33
                break;
34
            default:
35
                $object = ODataLink::class;
36
        }
37
        $this->link = new $object(
38
            $this->arrayKeyOrDefault($attributes, ODataConstants::ATOM_LINK_RELATION_ATTRIBUTE_NAME, ''),
39
            $this->arrayKeyOrDefault($attributes, ODataConstants::ATOM_TITLE_ELELMET_NAME, ''),
40
            $this->arrayKeyOrDefault($attributes, ODataConstants::ATOM_TYPE_ATTRIBUTE_NAME, ''),
41
            $this->arrayKeyOrDefault($attributes, ODataConstants::ATOM_HREF_ATTRIBUTE_NAME, '')
42
        );
43
    }
44
45
    public function handleStartNode($tagNamespace, $tagName, $attributes)
46
    {
47
        //The only sub notes that will exist will be the inline ones before we process the feed or entity.
48
        assert($tagNamespace  === strtolower(ODataConstants::ODATA_METADATA_NAMESPACE));
49
        assert($tagName === strtolower(ODataConstants::ATOM_INLINE_ELEMENT_NAME));
50
    }
51
52
    public function handleEndNode($tagNamespace, $tagName)
53
    {
54
        //The only sub notes that will exist will be the inline ones before we process the feed or entity.
55
        assert($tagNamespace  === strtolower(ODataConstants::ODATA_METADATA_NAMESPACE));
56
        assert($tagName === strtolower(ODataConstants::ATOM_INLINE_ELEMENT_NAME));
57
    }
58
59
    public function handleChildComplete($objectModel)
60
    {
61
        assert(!$this->link instanceof ODataMediaLink);
62
        if ($objectModel instanceof ODataFeed) {
63
            $expandResult = new ODataExpandedResult(null, $objectModel);
64
        } else {
65
            assert($objectModel instanceof ODataEntry); // its an assumption but lets check it
66
            $expandResult = new ODataExpandedResult($objectModel, null);
67
        }
68
        $this->link->setExpandResult($expandResult);
69
    }
70
71
    /**
72
     * @return ODataLink|ODataMediaLink
73
     */
74
    public function getObjetModelObject()
75
    {
76
        return $this->link;
77
    }
78
}
79