ex
Fork of mbed-os-example-mbed5-blinky by
dumi_doc-master/schema/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php@44:c1d8923072ba, 2017-07-18 (annotated)
- Committer:
- TMBOY
- Date:
- Tue Jul 18 16:27:22 2017 +0800
- Revision:
- 44:c1d8923072ba
?
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| TMBOY | 44:c1d8923072ba | 1 | <?php |
| TMBOY | 44:c1d8923072ba | 2 | |
| TMBOY | 44:c1d8923072ba | 3 | /* |
| TMBOY | 44:c1d8923072ba | 4 | * This file is part of the JsonSchema package. |
| TMBOY | 44:c1d8923072ba | 5 | * |
| TMBOY | 44:c1d8923072ba | 6 | * For the full copyright and license information, please view the LICENSE |
| TMBOY | 44:c1d8923072ba | 7 | * file that was distributed with this source code. |
| TMBOY | 44:c1d8923072ba | 8 | */ |
| TMBOY | 44:c1d8923072ba | 9 | |
| TMBOY | 44:c1d8923072ba | 10 | namespace JsonSchema\Constraints; |
| TMBOY | 44:c1d8923072ba | 11 | |
| TMBOY | 44:c1d8923072ba | 12 | use JsonSchema\Exception\InvalidArgumentException; |
| TMBOY | 44:c1d8923072ba | 13 | use JsonSchema\SchemaStorage; |
| TMBOY | 44:c1d8923072ba | 14 | use JsonSchema\Uri\UriRetriever; |
| TMBOY | 44:c1d8923072ba | 15 | use JsonSchema\UriRetrieverInterface; |
| TMBOY | 44:c1d8923072ba | 16 | |
| TMBOY | 44:c1d8923072ba | 17 | /** |
| TMBOY | 44:c1d8923072ba | 18 | * Factory for centralize constraint initialization. |
| TMBOY | 44:c1d8923072ba | 19 | */ |
| TMBOY | 44:c1d8923072ba | 20 | class Factory |
| TMBOY | 44:c1d8923072ba | 21 | { |
| TMBOY | 44:c1d8923072ba | 22 | /** |
| TMBOY | 44:c1d8923072ba | 23 | * @var SchemaStorage |
| TMBOY | 44:c1d8923072ba | 24 | */ |
| TMBOY | 44:c1d8923072ba | 25 | protected $schemaStorage; |
| TMBOY | 44:c1d8923072ba | 26 | |
| TMBOY | 44:c1d8923072ba | 27 | /** |
| TMBOY | 44:c1d8923072ba | 28 | * @var UriRetriever $uriRetriever |
| TMBOY | 44:c1d8923072ba | 29 | */ |
| TMBOY | 44:c1d8923072ba | 30 | protected $uriRetriever; |
| TMBOY | 44:c1d8923072ba | 31 | |
| TMBOY | 44:c1d8923072ba | 32 | /** |
| TMBOY | 44:c1d8923072ba | 33 | * @var int |
| TMBOY | 44:c1d8923072ba | 34 | */ |
| TMBOY | 44:c1d8923072ba | 35 | private $checkMode; |
| TMBOY | 44:c1d8923072ba | 36 | |
| TMBOY | 44:c1d8923072ba | 37 | /** |
| TMBOY | 44:c1d8923072ba | 38 | * @var TypeCheck\TypeCheckInterface[] |
| TMBOY | 44:c1d8923072ba | 39 | */ |
| TMBOY | 44:c1d8923072ba | 40 | private $typeCheck = array(); |
| TMBOY | 44:c1d8923072ba | 41 | |
| TMBOY | 44:c1d8923072ba | 42 | /** |
| TMBOY | 44:c1d8923072ba | 43 | * @var array $constraintMap |
| TMBOY | 44:c1d8923072ba | 44 | */ |
| TMBOY | 44:c1d8923072ba | 45 | protected $constraintMap = array( |
| TMBOY | 44:c1d8923072ba | 46 | 'array' => 'JsonSchema\Constraints\CollectionConstraint', |
| TMBOY | 44:c1d8923072ba | 47 | 'collection' => 'JsonSchema\Constraints\CollectionConstraint', |
| TMBOY | 44:c1d8923072ba | 48 | 'object' => 'JsonSchema\Constraints\ObjectConstraint', |
| TMBOY | 44:c1d8923072ba | 49 | 'type' => 'JsonSchema\Constraints\TypeConstraint', |
| TMBOY | 44:c1d8923072ba | 50 | 'undefined' => 'JsonSchema\Constraints\UndefinedConstraint', |
| TMBOY | 44:c1d8923072ba | 51 | 'string' => 'JsonSchema\Constraints\StringConstraint', |
| TMBOY | 44:c1d8923072ba | 52 | 'number' => 'JsonSchema\Constraints\NumberConstraint', |
| TMBOY | 44:c1d8923072ba | 53 | 'enum' => 'JsonSchema\Constraints\EnumConstraint', |
| TMBOY | 44:c1d8923072ba | 54 | 'format' => 'JsonSchema\Constraints\FormatConstraint', |
| TMBOY | 44:c1d8923072ba | 55 | 'schema' => 'JsonSchema\Constraints\SchemaConstraint', |
| TMBOY | 44:c1d8923072ba | 56 | 'validator' => 'JsonSchema\Validator', |
| TMBOY | 44:c1d8923072ba | 57 | 'coercer' => 'JsonSchema\Coerce' |
| TMBOY | 44:c1d8923072ba | 58 | ); |
| TMBOY | 44:c1d8923072ba | 59 | |
| TMBOY | 44:c1d8923072ba | 60 | /** |
| TMBOY | 44:c1d8923072ba | 61 | * @var array<ConstraintInterface> |
| TMBOY | 44:c1d8923072ba | 62 | */ |
| TMBOY | 44:c1d8923072ba | 63 | private $instanceCache = array(); |
| TMBOY | 44:c1d8923072ba | 64 | |
| TMBOY | 44:c1d8923072ba | 65 | /** |
| TMBOY | 44:c1d8923072ba | 66 | * @param SchemaStorage $schemaStorage |
| TMBOY | 44:c1d8923072ba | 67 | * @param UriRetrieverInterface $uriRetriever |
| TMBOY | 44:c1d8923072ba | 68 | * @param int $checkMode |
| TMBOY | 44:c1d8923072ba | 69 | */ |
| TMBOY | 44:c1d8923072ba | 70 | public function __construct( |
| TMBOY | 44:c1d8923072ba | 71 | SchemaStorage $schemaStorage = null, |
| TMBOY | 44:c1d8923072ba | 72 | UriRetrieverInterface $uriRetriever = null, |
| TMBOY | 44:c1d8923072ba | 73 | $checkMode = Constraint::CHECK_MODE_NORMAL |
| TMBOY | 44:c1d8923072ba | 74 | ) { |
| TMBOY | 44:c1d8923072ba | 75 | $this->uriRetriever = $uriRetriever ?: new UriRetriever; |
| TMBOY | 44:c1d8923072ba | 76 | $this->schemaStorage = $schemaStorage ?: new SchemaStorage($this->uriRetriever); |
| TMBOY | 44:c1d8923072ba | 77 | $this->checkMode = $checkMode; |
| TMBOY | 44:c1d8923072ba | 78 | } |
| TMBOY | 44:c1d8923072ba | 79 | |
| TMBOY | 44:c1d8923072ba | 80 | /** |
| TMBOY | 44:c1d8923072ba | 81 | * @return UriRetrieverInterface |
| TMBOY | 44:c1d8923072ba | 82 | */ |
| TMBOY | 44:c1d8923072ba | 83 | public function getUriRetriever() |
| TMBOY | 44:c1d8923072ba | 84 | { |
| TMBOY | 44:c1d8923072ba | 85 | return $this->uriRetriever; |
| TMBOY | 44:c1d8923072ba | 86 | } |
| TMBOY | 44:c1d8923072ba | 87 | |
| TMBOY | 44:c1d8923072ba | 88 | public function getSchemaStorage() |
| TMBOY | 44:c1d8923072ba | 89 | { |
| TMBOY | 44:c1d8923072ba | 90 | return $this->schemaStorage; |
| TMBOY | 44:c1d8923072ba | 91 | } |
| TMBOY | 44:c1d8923072ba | 92 | |
| TMBOY | 44:c1d8923072ba | 93 | public function getTypeCheck() |
| TMBOY | 44:c1d8923072ba | 94 | { |
| TMBOY | 44:c1d8923072ba | 95 | if (!isset($this->typeCheck[$this->checkMode])) { |
| TMBOY | 44:c1d8923072ba | 96 | $this->typeCheck[$this->checkMode] = ($this->checkMode & Constraint::CHECK_MODE_TYPE_CAST) |
| TMBOY | 44:c1d8923072ba | 97 | ? new TypeCheck\LooseTypeCheck |
| TMBOY | 44:c1d8923072ba | 98 | : new TypeCheck\StrictTypeCheck; |
| TMBOY | 44:c1d8923072ba | 99 | } |
| TMBOY | 44:c1d8923072ba | 100 | |
| TMBOY | 44:c1d8923072ba | 101 | return $this->typeCheck[$this->checkMode]; |
| TMBOY | 44:c1d8923072ba | 102 | } |
| TMBOY | 44:c1d8923072ba | 103 | |
| TMBOY | 44:c1d8923072ba | 104 | /** |
| TMBOY | 44:c1d8923072ba | 105 | * @param string $name |
| TMBOY | 44:c1d8923072ba | 106 | * @param string $class |
| TMBOY | 44:c1d8923072ba | 107 | * @return Factory |
| TMBOY | 44:c1d8923072ba | 108 | */ |
| TMBOY | 44:c1d8923072ba | 109 | public function setConstraintClass($name, $class) |
| TMBOY | 44:c1d8923072ba | 110 | { |
| TMBOY | 44:c1d8923072ba | 111 | // Ensure class exists |
| TMBOY | 44:c1d8923072ba | 112 | if (!class_exists($class)) { |
| TMBOY | 44:c1d8923072ba | 113 | throw new InvalidArgumentException('Unknown constraint ' . $name); |
| TMBOY | 44:c1d8923072ba | 114 | } |
| TMBOY | 44:c1d8923072ba | 115 | // Ensure class is appropriate |
| TMBOY | 44:c1d8923072ba | 116 | if (!in_array('JsonSchema\Constraints\ConstraintInterface', class_implements($class))) { |
| TMBOY | 44:c1d8923072ba | 117 | throw new InvalidArgumentException('Invalid class ' . $name); |
| TMBOY | 44:c1d8923072ba | 118 | } |
| TMBOY | 44:c1d8923072ba | 119 | $this->constraintMap[$name] = $class; |
| TMBOY | 44:c1d8923072ba | 120 | return $this; |
| TMBOY | 44:c1d8923072ba | 121 | } |
| TMBOY | 44:c1d8923072ba | 122 | |
| TMBOY | 44:c1d8923072ba | 123 | /** |
| TMBOY | 44:c1d8923072ba | 124 | * Create a constraint instance for the given constraint name. |
| TMBOY | 44:c1d8923072ba | 125 | * |
| TMBOY | 44:c1d8923072ba | 126 | * @param string $constraintName |
| TMBOY | 44:c1d8923072ba | 127 | * @return ConstraintInterface|ObjectConstraint |
| TMBOY | 44:c1d8923072ba | 128 | * @throws InvalidArgumentException if is not possible create the constraint instance. |
| TMBOY | 44:c1d8923072ba | 129 | */ |
| TMBOY | 44:c1d8923072ba | 130 | public function createInstanceFor($constraintName) |
| TMBOY | 44:c1d8923072ba | 131 | { |
| TMBOY | 44:c1d8923072ba | 132 | if (!isset($this->constraintMap[$constraintName])) { |
| TMBOY | 44:c1d8923072ba | 133 | throw new InvalidArgumentException('Unknown constraint ' . $constraintName); |
| TMBOY | 44:c1d8923072ba | 134 | } |
| TMBOY | 44:c1d8923072ba | 135 | |
| TMBOY | 44:c1d8923072ba | 136 | if (!isset($this->instanceCache[$constraintName])) { |
| TMBOY | 44:c1d8923072ba | 137 | $this->instanceCache[$constraintName] = new $this->constraintMap[$constraintName]($this); |
| TMBOY | 44:c1d8923072ba | 138 | } |
| TMBOY | 44:c1d8923072ba | 139 | |
| TMBOY | 44:c1d8923072ba | 140 | return clone $this->instanceCache[$constraintName]; |
| TMBOY | 44:c1d8923072ba | 141 | } |
| TMBOY | 44:c1d8923072ba | 142 | |
| TMBOY | 44:c1d8923072ba | 143 | /** |
| TMBOY | 44:c1d8923072ba | 144 | * @return int |
| TMBOY | 44:c1d8923072ba | 145 | */ |
| TMBOY | 44:c1d8923072ba | 146 | public function getCheckMode() |
| TMBOY | 44:c1d8923072ba | 147 | { |
| TMBOY | 44:c1d8923072ba | 148 | return $this->checkMode; |
| TMBOY | 44:c1d8923072ba | 149 | } |
| TMBOY | 44:c1d8923072ba | 150 | } |
