| Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/includes/BuilderBasedDataTypeValidatorFactory.php |
<?php
namespace Wikibase\Repo;
use OutOfBoundsException;
use ValueValidators\ValueValidator;
use Wikimedia\Assert\Assert;
/**
* A factory providing ValueValidators based on factory callbacks.
*
* @author Adrian Heine <adrian.heine@wikimedia.de>
*/
class BuilderBasedDataTypeValidatorFactory implements DataTypeValidatorFactory {
/**
* @var callable[]
*/
private $validatorBuilders;
/**
* @param callable[] $validatorBuilders
*/
public function __construct( array $validatorBuilders ) {
Assert::parameterElementType( 'callable', $validatorBuilders, '$validatorBuilders' );
$this->validatorBuilders = $validatorBuilders;
}
/**
* @param string $dataTypeId
*
* @throws OutOfBoundsException
* @return ValueValidator[]
*/
public function getValidators( $dataTypeId ) {
if ( !isset( $this->validatorBuilders[ $dataTypeId ] ) ) {
// NOTE: fail hard, to avoid bypassing validators if the data type is mistyped or some such.
throw new OutOfBoundsException( 'No validators known for data type ' . $dataTypeId );
}
$validators = call_user_func(
$this->validatorBuilders[ $dataTypeId ]
);
Assert::postcondition(
is_array( $validators ),
"Factory function for $dataTypeId did not return an array of ValueValidator objects."
);
foreach ( $validators as $v ) {
Assert::postcondition(
$v instanceof ValueValidator,
"Factory function for $dataTypeId did not return an array of ValueValidator objects."
);
}
return $validators;
}
}