Passed
Push — dev ( b71888...30f77e )
by Romain
09:47 queued 06:19
created

PropertyEntry::__toString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
/*
4
 * Copyright (C) 2017
5
 * Nathan Boiron <[email protected]>
6
 * Romain Canon <[email protected]>
7
 *
8
 * This file is part of the TYPO3 NotiZ project.
9
 * It is free software; you can redistribute it and/or modify it
10
 * under the terms of the GNU General Public License, either
11
 * version 3 of the License, or any later version.
12
 *
13
 * For the full copyright and license information, see:
14
 * http://www.gnu.org/licenses/gpl-3.0.html
15
 */
16
17
namespace CuyZ\Notiz\Property;
18
19
use CuyZ\Notiz\Exception\PropertyNotAccessibleException;
20
use CuyZ\Notiz\Service\LocalizationService;
21
22
/**
23
 * An entry of a property definition, that is created in an event:
24
 *
25
 * @see \CuyZ\Notiz\Event\Event::buildPropertyDefinition
26
 *
27
 * An entry must be named, and can contain a label. You may add more class
28
 * properties with own getters/setters, that can be filled during the definition
29
 * build and used during the notification dispatching.
30
 *
31
 * You may set its value with arbitrary data that can later be used by a
32
 * notification, but you wont be able to force a value after the method below
33
 * was called:
34
 *
35
 * @see \CuyZ\Notiz\Event\Event::fillPropertyEntries
36
 */
37
abstract class PropertyEntry
38
{
39
    /**
40
     * @var string
41
     */
42
    private $name;
43
44
    /**
45
     * @var string
46
     */
47
    private $value;
48
49
    /**
50
     * @var string
51
     */
52
    protected $label;
53
54
    /**
55
     * @var bool
56
     */
57
    private $frozen = false;
58
59
    /**
60
     * @param string $name
61
     */
62
    public function __construct($name)
63
    {
64
        $this->name = $name;
65
    }
66
67
    /**
68
     * @return string
69
     */
70
    final public function getName()
71
    {
72
        return $this->name;
73
    }
74
75
    /**
76
     * @return string
77
     */
78
    final public function getValue()
79
    {
80
        return $this->value;
81
    }
82
83
    /**
84
     * @param string $value
85
     * @return $this
86
     *
87
     * @throws PropertyNotAccessibleException
88
     */
89
    final public function setValue($value)
90
    {
91
        if ($this->frozen) {
92
            throw PropertyNotAccessibleException::propertyEntryValueNotAccessible($this);
93
        }
94
95
        $this->value = $value;
96
97
        return $this;
98
    }
99
100
    /**
101
     * @return string
102
     */
103
    public function getLabel()
104
    {
105
        return LocalizationService::localize($this->label);
106
    }
107
108
    /**
109
     * @param string $label
110
     * @return $this
111
     */
112
    public function setLabel($label)
113
    {
114
        $this->label = $label;
115
116
        return $this;
117
    }
118
119
    /**
120
     * Once the entry has been processed by the event, we freeze this entry to
121
     * prevent external value changes.
122
     *
123
     * @internal
124
     */
125
    final public function freeze()
126
    {
127
        $this->frozen = true;
128
    }
129
130
    /**
131
     * @return string
132
     */
133
    public function __toString()
134
    {
135
        return $this->getValue();
136
    }
137
}
138