Version 1
[yaffs-website] / vendor / doctrine / annotations / lib / Doctrine / Common / Annotations / Annotation / Enum.php
1 <?php
2
3 /*
4  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
5  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
8  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
9  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
10  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
12  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
13  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
14  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15  *
16  * This software consists of voluntary contributions made by many individuals
17  * and is licensed under the MIT license. For more information, see
18  * <http://www.doctrine-project.org>.
19  */
20
21 namespace Doctrine\Common\Annotations\Annotation;
22
23 /**
24  * Annotation that can be used to signal to the parser
25  * to check the available values during the parsing process.
26  *
27  * @since  2.4
28  * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
29  *
30  * @Annotation
31  * @Attributes({
32  *    @Attribute("value",   required = true,  type = "array"),
33  *    @Attribute("literal", required = false, type = "array")
34  * })
35  */
36 final class Enum
37 {
38     /**
39      * @var array
40      */
41     public $value;
42
43     /**
44      * Literal target declaration.
45      *
46      * @var array
47      */
48     public $literal;
49
50     /**
51      * Annotation constructor.
52      *
53      * @param array $values
54      *
55      * @throws \InvalidArgumentException
56      */
57     public function __construct(array $values)
58     {
59         if ( ! isset($values['literal'])) {
60             $values['literal'] = array();
61         }
62
63         foreach ($values['value'] as $var) {
64             if( ! is_scalar($var)) {
65                 throw new \InvalidArgumentException(sprintf(
66                     '@Enum supports only scalar values "%s" given.',
67                     is_object($var) ? get_class($var) : gettype($var)
68                 ));
69             }
70         }
71
72         foreach ($values['literal'] as $key => $var) {
73             if( ! in_array($key, $values['value'])) {
74                 throw new \InvalidArgumentException(sprintf(
75                     'Undefined enumerator value "%s" for literal "%s".',
76                     $key , $var
77                 ));
78             }
79         }
80
81         $this->value    = $values['value'];
82         $this->literal  = $values['literal'];
83     }
84 }