source: pro-violet-viettel/sourcecode/application/libraries/Doctrine/Common/Annotations/Annotation/Target.php @ 356

Last change on this file since 356 was 345, checked in by quyenla, 11 years ago

collaborator page

File size: 3.2 KB
Line 
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 LGPL. For more information, see
18 * <http://www.doctrine-project.org>.
19 */
20
21namespace Doctrine\Common\Annotations\Annotation;
22
23/**
24 * Annotation that can be used to signal to the parser
25 * to check the annotation target during the parsing process.
26 *
27 * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
28 *
29 * @Annotation
30 */
31final class Target
32{
33    const TARGET_CLASS              = 1;
34    const TARGET_METHOD             = 2;
35    const TARGET_PROPERTY           = 4;
36    const TARGET_ANNOTATION         = 8;
37    const TARGET_ALL                = 15;
38
39    /**
40     * @var array
41     */
42    private static $map = array(
43        'ALL'         => self::TARGET_ALL,
44        'CLASS'       => self::TARGET_CLASS,
45        'METHOD'      => self::TARGET_METHOD,
46        'PROPERTY'    => self::TARGET_PROPERTY,
47        'ANNOTATION'  => self::TARGET_ANNOTATION,
48    );
49
50    /**
51     * @var array
52     */
53    public $value;
54
55    /**
56     * Targets as bitmask.
57     *
58     * @var integer
59     */
60    public $targets;
61
62    /**
63     * Literal target declaration.
64     *
65     * @var integer
66     */
67    public $literal;
68
69    /**
70     * Annotation construct
71     *
72     * @param array $values
73     */
74    public function __construct(array $values)
75    {
76        if (!isset($values['value'])){
77            $values['value'] = null;
78        }
79        if (is_string($values['value'])){
80            $values['value'] = array($values['value']);
81        }
82        if (!is_array($values['value'])){
83            throw new \InvalidArgumentException(
84                sprintf('@Target expects either a string value, or an array of strings, "%s" given.',
85                    is_object($values['value']) ? get_class($values['value']) : gettype($values['value'])
86                )
87            );
88        }
89
90        $bitmask = 0;
91        foreach ($values['value'] as $literal) {
92            if(!isset(self::$map[$literal])){
93                throw new \InvalidArgumentException(
94                    sprintf('Invalid Target "%s". Available targets: [%s]',
95                            $literal,  implode(', ', array_keys(self::$map)))
96                );
97            }
98            $bitmask += self::$map[$literal];
99        }
100
101        $this->targets  = $bitmask;
102        $this->value    = $values['value'];
103        $this->literal  = implode(', ', $this->value);
104    }
105}
Note: See TracBrowser for help on using the repository browser.