diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/Deserializers/DVDescriptionDeserializer/DispatchingDescriptionDeserializer.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/src/Deserializers/DVDescriptionDeserializer/DispatchingDescriptionDeserializer.php | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/Deserializers/DVDescriptionDeserializer/DispatchingDescriptionDeserializer.php b/www/wiki/extensions/SemanticMediaWiki/src/Deserializers/DVDescriptionDeserializer/DispatchingDescriptionDeserializer.php new file mode 100644 index 00000000..5d803064 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/src/Deserializers/DVDescriptionDeserializer/DispatchingDescriptionDeserializer.php @@ -0,0 +1,71 @@ +<?php + +namespace SMW\Deserializers\DVDescriptionDeserializer; + +use RuntimeException; +use SMWDataValue as DataValue; + +/** + * @private + * + * @license GNU GPL v2+ + * @since 2.3 + * + * @author mwjames + */ +class DispatchingDescriptionDeserializer { + + /** + * @var DescriptionDeserializer[] + */ + private $descriptionDeserializers = []; + + /** + * @var DescriptionDeserializer + */ + private $defaultDescriptionDeserializer = null; + + /** + * @since 2.3 + * + * @param DescriptionDeserializer $descriptionDeserializer + */ + public function addDescriptionDeserializer( DescriptionDeserializer $descriptionDeserializer ) { + $this->descriptionDeserializers[] = $descriptionDeserializer; + } + + /** + * @since 2.3 + * + * @param DescriptionDeserializer $defaultDescriptionDeserializer + */ + public function addDefaultDescriptionDeserializer( DescriptionDeserializer $defaultDescriptionDeserializer ) { + $this->defaultDescriptionDeserializer = $defaultDescriptionDeserializer; + } + + /** + * @since 2.3 + * + * @param DataValue $dataValue + * + * @return DescriptionDeserializer + * @throws RuntimeException + */ + public function getDescriptionDeserializerBy( DataValue $dataValue ) { + + foreach ( $this->descriptionDeserializers as $descriptionDeserializer ) { + if ( $descriptionDeserializer->isDeserializerFor( $dataValue ) ) { + $descriptionDeserializer->setDataValue( $dataValue ); + return $descriptionDeserializer; + } + } + + if ( $this->defaultDescriptionDeserializer !== null && $this->defaultDescriptionDeserializer->isDeserializerFor( $dataValue ) ) { + $this->defaultDescriptionDeserializer->setDataValue( $dataValue ); + return $this->defaultDescriptionDeserializer; + } + + throw new RuntimeException( "Missing registered DescriptionDeserializer." ); + } + +} |