ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
TMBOY
Date:
Tue Jul 18 16:27:22 2017 +0800
Revision:
44:c1d8923072ba
?

Who changed what in which revision?

UserRevisionLine numberNew 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 }