Ladsgroup has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/335616 )
Change subject: [Code experiment] Make RdfBuilder injectable ...................................................................... [Code experiment] Make RdfBuilder injectable Change-Id: I3f92326cdfbfc21de194123cdda093f791cfbd4c --- M lib/includes/EntityTypeDefinitions.php M repo/includes/Rdf/RdfBuilder.php M repo/includes/WikibaseRepo.php 3 files changed, 39 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/16/335616/1 diff --git a/lib/includes/EntityTypeDefinitions.php b/lib/includes/EntityTypeDefinitions.php index 336f534..7a3b1d1 100644 --- a/lib/includes/EntityTypeDefinitions.php +++ b/lib/includes/EntityTypeDefinitions.php @@ -164,4 +164,12 @@ return $this->getMapForDefinitionField( 'changeop-deserializer-callback' ); } + /** + * @return callable[] An array mapping entity type identifiers + * to callables instantiating an array of implementations of EntityRdfBuilder. + * Not guaranteed to contain all entity types. + */ + public function getRdfBuildersCallbacks() { + return $this->getMapForDefinitionField( 'rdf-builders-callback' ); + } } diff --git a/repo/includes/Rdf/RdfBuilder.php b/repo/includes/Rdf/RdfBuilder.php index 986b78f..dc0b673 100644 --- a/repo/includes/Rdf/RdfBuilder.php +++ b/repo/includes/Rdf/RdfBuilder.php @@ -2,6 +2,7 @@ namespace Wikibase\Rdf; +use Doctrine\Instantiator\Exception\UnexpectedValueException; use PageProps; use SiteList; use Wikibase\DataModel\Entity\EntityDocument; @@ -14,6 +15,8 @@ use Wikibase\DataModel\Term\LabelsProvider; use Wikibase\Lib\Store\EntityTitleLookup; use Wikibase\Lib\Store\RevisionedUnresolvedRedirectException; +use Wikibase\Repo\WikibaseRepo; +use Wikimedia\Assert\Assert; use Wikimedia\Purtle\RdfWriter; /** @@ -140,8 +143,28 @@ $builder->setDedupeBag( $this->dedupeBag ); $this->builders[] = $builder; } + + $this->addExtraBuilders(); } + private function addExtraBuilders() { + $rdfBuilderCallbacks = WikibaseRepo::getDefaultInstance()->getRdfBuildersCallbacks(); + foreach ( $rdfBuilderCallbacks as $entity => $rdfBuilderCallback ) { + foreach ( $rdfBuilderCallback as $rdfBuilder ) { + Assert::parameter( EntityRdfBuilder::class, $rdfBuilder, '$rdfBuilder' ); + + $this->builders[] = call_user_func_array( $rdfBuilder, [ + $this->vocabulary, + $this->propertyLookup, + $this->valueSnakRdfBuilderFactory, + $this->writer, + $this->produceWhat, + $this->dedupeBag, + $this->titleLookup + ] ); + } + } + } /** * @param int $flavorFlags Flavor flags to use for this builder * @return SnakRdfBuilder diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php index b00f0ad..47696ff 100644 --- a/repo/includes/WikibaseRepo.php +++ b/repo/includes/WikibaseRepo.php @@ -1847,4 +1847,12 @@ return $this->entityTypeDefinitions->getChangeOpDeserializerCallbacks(); } + /** + * @see EntityTypeDefinitions::getRdfBuildersCallbacks + * + * @return callable[] + */ + public function getRdfBuildersCallbacks() { + return $this->entityTypeDefinitions->getRdfBuildersCallbacks(); + } } -- To view, visit https://gerrit.wikimedia.org/r/335616 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3f92326cdfbfc21de194123cdda093f791cfbd4c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Ladsgroup <ladsgr...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits