Completed
Push — master ( 70a832...17d4dd )
by Hannes
02:23
created

MessageVisitor::setMessageAttr()   B

Complexity

Conditions 4
Paths 5

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 8.9197
c 0
b 0
f 0
cc 4
eloc 13
nc 5
nop 2
1
<?php
2
/**
3
 * This file is part of byrokrat\autogiro.
4
 *
5
 * byrokrat\autogiro is free software: you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License as published
7
 * by the Free Software Foundation, either version 3 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * byrokrat\autogiro is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with byrokrat\autogiro. If not, see <http://www.gnu.org/licenses/>.
17
 *
18
 * Copyright 2016-18 Hannes Forsgård
19
 */
20
21
declare(strict_types = 1);
22
23
namespace byrokrat\autogiro\Visitor;
24
25
use byrokrat\autogiro\Tree\MessageNode;
26
use byrokrat\autogiro\Tree\IntervalNode;
27
use byrokrat\autogiro\Messages;
28
use byrokrat\autogiro\Intervals;
29
30
/**
31
 * Visitor of message nodes in tree
32
 */
33
class MessageVisitor extends ErrorAwareVisitor
34
{
35
    public function beforeMessageNode(MessageNode $node): void
36
    {
37
        $this->setMessageAttr($node, Messages::MESSAGE_MAP);
38
    }
39
40
    public function beforeIntervalNode(IntervalNode $node): void
41
    {
42
        $this->setMessageAttr($node, Intervals::MESSAGE_MAP);
43
    }
44
45
    private function setMessageAttr(MessageNode $node, array $messageMap): void
46
    {
47
        if ($node->hasAttribute('message')) {
48
            return;
49
        }
50
51
        $messageId = $node->hasAttribute('message_id') ? $node->getAttribute('message_id') : $node->getValue();
52
53
        if (!isset($messageMap[$messageId])) {
54
            $this->getErrorObject()->addError(
55
                "Invalid message id %s on line %s",
56
                $messageId,
57
                (string)$node->getLineNr()
58
            );
59
            return;
60
        }
61
62
        $node->setAttribute(
63
            'message',
64
            $messageMap[$messageId]
65
        );
66
    }
67
}
68