Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / symfony / console / Symfony / Component / Console / Input / InputOption.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Console\Input;
13
14 /**
15  * Represents a command line option.
16  *
17  * @author Fabien Potencier <fabien@symfony.com>
18  *
19  * @api
20  */
21 class InputOption
22 {
23     const VALUE_NONE     = 1;
24     const VALUE_REQUIRED = 2;
25     const VALUE_OPTIONAL = 4;
26     const VALUE_IS_ARRAY = 8;
27
28     private $name;
29     private $shortcut;
30     private $mode;
31     private $default;
32     private $description;
33
34     /**
35      * Constructor.
36      *
37      * @param string  $name        The option name
38      * @param string  $shortcut    The shortcut (can be null)
39      * @param integer $mode        The option mode: One of the VALUE_* constants
40      * @param string  $description A description text
41      * @param mixed   $default     The default value (must be null for self::VALUE_REQUIRED or self::VALUE_NONE)
42      *
43      * @throws \InvalidArgumentException If option mode is invalid or incompatible
44      *
45      * @api
46      */
47     public function __construct($name, $shortcut = null, $mode = null, $description = '', $default = null)
48     {
49         if (0 === strpos($name, '--')) {
50             $name = substr($name, 2);
51         }
52
53         if (empty($name)) {
54             throw new \InvalidArgumentException('An option name cannot be empty.');
55         }
56
57         if (empty($shortcut)) {
58             $shortcut = null;
59         }
60
61         if (null !== $shortcut) {
62             if ('-' === $shortcut[0]) {
63                 $shortcut = substr($shortcut, 1);
64             }
65
66             if (empty($shortcut)) {
67                 throw new \InvalidArgumentException('An option shortcut cannot be empty.');
68             }
69         }
70
71         if (null === $mode) {
72             $mode = self::VALUE_NONE;
73         } elseif (!is_int($mode) || $mode > 15 || $mode < 1) {
74             throw new \InvalidArgumentException(sprintf('Option mode "%s" is not valid.', $mode));
75         }
76
77         $this->name        = $name;
78         $this->shortcut    = $shortcut;
79         $this->mode        = $mode;
80         $this->description = $description;
81
82         if ($this->isArray() && !$this->acceptValue()) {
83             throw new \InvalidArgumentException('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.');
84         }
85
86         $this->setDefault($default);
87     }
88
89     /**
90      * Returns the option shortcut.
91      *
92      * @return string The shortcut
93      */
94     public function getShortcut()
95     {
96         return $this->shortcut;
97     }
98
99     /**
100      * Returns the option name.
101      *
102      * @return string The name
103      */
104     public function getName()
105     {
106         return $this->name;
107     }
108
109     /**
110      * Returns true if the option accepts a value.
111      *
112      * @return Boolean true if value mode is not self::VALUE_NONE, false otherwise
113      */
114     public function acceptValue()
115     {
116         return $this->isValueRequired() || $this->isValueOptional();
117     }
118
119     /**
120      * Returns true if the option requires a value.
121      *
122      * @return Boolean true if value mode is self::VALUE_REQUIRED, false otherwise
123      */
124     public function isValueRequired()
125     {
126         return self::VALUE_REQUIRED === (self::VALUE_REQUIRED & $this->mode);
127     }
128
129     /**
130      * Returns true if the option takes an optional value.
131      *
132      * @return Boolean true if value mode is self::VALUE_OPTIONAL, false otherwise
133      */
134     public function isValueOptional()
135     {
136         return self::VALUE_OPTIONAL === (self::VALUE_OPTIONAL & $this->mode);
137     }
138
139     /**
140      * Returns true if the option can take multiple values.
141      *
142      * @return Boolean true if mode is self::VALUE_IS_ARRAY, false otherwise
143      */
144     public function isArray()
145     {
146         return self::VALUE_IS_ARRAY === (self::VALUE_IS_ARRAY & $this->mode);
147     }
148
149     /**
150      * Sets the default value.
151      *
152      * @param mixed $default The default value
153      *
154      * @throws \LogicException When incorrect default value is given
155      */
156     public function setDefault($default = null)
157     {
158         if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) {
159             throw new \LogicException('Cannot set a default value when using Option::VALUE_NONE mode.');
160         }
161
162         if ($this->isArray()) {
163             if (null === $default) {
164                 $default = array();
165             } elseif (!is_array($default)) {
166                 throw new \LogicException('A default value for an array option must be an array.');
167             }
168         }
169
170         $this->default = $this->acceptValue() ? $default : false;
171     }
172
173     /**
174      * Returns the default value.
175      *
176      * @return mixed The default value
177      */
178     public function getDefault()
179     {
180         return $this->default;
181     }
182
183     /**
184      * Returns the description text.
185      *
186      * @return string The description text
187      */
188     public function getDescription()
189     {
190         return $this->description;
191     }
192
193     /**
194      * Checks whether the given option equals this one
195      *
196      * @param InputOption $option option to compare
197      * @return Boolean
198      */
199     public function equals(InputOption $option)
200     {
201         return $option->getName() === $this->getName()
202             && $option->getShortcut() === $this->getShortcut()
203             && $option->getDefault() === $this->getDefault()
204             && $option->isArray() === $this->isArray()
205             && $option->isValueRequired() === $this->isValueRequired()
206             && $option->isValueOptional() === $this->isValueOptional()
207         ;
208     }
209 }