jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/343025 )

Change subject: Move SiteLinkRdfBuilder from RdfBuilder to Item entitytype 
definition
......................................................................


Move SiteLinkRdfBuilder from RdfBuilder to Item entitytype definition

Bug: T160623
Change-Id: I5fc25575348ed09562c4c1541765f0ea35b4f812
---
M repo/WikibaseRepo.entitytypes.php
A repo/includes/Rdf/NullEntityRdfBuilder.php
M repo/includes/Rdf/RdfBuilder.php
M repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
M repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
M repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
M repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
7 files changed, 168 insertions(+), 25 deletions(-)

Approvals:
  jenkins-bot: Verified
  Thiemo Mättig (WMDE): Looks good to me, approved



diff --git a/repo/WikibaseRepo.entitytypes.php 
b/repo/WikibaseRepo.entitytypes.php
index 846885f..953066f 100644
--- a/repo/WikibaseRepo.entitytypes.php
+++ b/repo/WikibaseRepo.entitytypes.php
@@ -20,8 +20,11 @@
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
 use Wikibase\LanguageFallbackChain;
+use Wikibase\Rdf\NullEntityRdfBuilder;
 use Wikibase\Rdf\PropertyRdfBuilder;
+use Wikibase\Rdf\RdfProducer;
 use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
 use Wikibase\Repo\ChangeOp\Deserialization\ItemChangeOpDeserializer;
 use Wikibase\Repo\ChangeOp\Deserialization\PropertyChangeOpDeserializer;
 use Wikibase\Repo\WikibaseRepo;
@@ -60,6 +63,24 @@
                                
WikibaseRepo::getDefaultInstance()->getChangeOpDeserializerFactory()
                        );
                },
+               'rdf-builder-factory-callback' => function(
+                       $flavorFlags,
+                       RdfVocabulary $vocabulary,
+                       RdfWriter $writer,
+                       $mentionedEntityTracker,
+                       $dedupe
+               ) {
+                       if ( ( $flavorFlags & RdfProducer::PRODUCE_SITELINKS ) 
!== 0 ) {
+                               $sites = 
WikibaseRepo::getDefaultInstance()->getSiteLookup()->getSites();
+                               // Since the only extra mapping needed for 
Items are site links,
+                               // we just return the SiteLinksRdfBuilder 
directly,
+                               // instead of defining an ItemRdfBuilder
+                               $builder = new SiteLinksRdfBuilder( 
$vocabulary, $writer, $sites );
+                               $builder->setDedupeBag( $dedupe );
+                               return $builder;
+                       }
+                       return new NullEntityRdfBuilder();
+               }
        ),
        'property' => array(
                'view-factory-callback' => function(
diff --git a/repo/includes/Rdf/NullEntityRdfBuilder.php 
b/repo/includes/Rdf/NullEntityRdfBuilder.php
new file mode 100644
index 0000000..5095c73
--- /dev/null
+++ b/repo/includes/Rdf/NullEntityRdfBuilder.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Wikibase\Rdf;
+
+use Wikibase\DataModel\Entity\EntityDocument;
+
+/**
+ * Null implementation of EntityRdfBuilder
+ *
+ * @license GPL-2.0+
+ * @author Amir Sarabadani <[email protected]>
+ */
+class NullEntityRdfBuilder implements EntityRdfBuilder {
+
+       /**
+        * @param EntityDocument $entity
+        */
+       public function addEntity( EntityDocument $entity ) {
+               return;
+       }
+
+       /**
+        * @param EntityDocument $entity
+        */
+       public function addEntityStub( EntityDocument $entity ) {
+               return;
+       }
+
+}
diff --git a/repo/includes/Rdf/RdfBuilder.php b/repo/includes/Rdf/RdfBuilder.php
index d8098af..d0fdd0d 100644
--- a/repo/includes/Rdf/RdfBuilder.php
+++ b/repo/includes/Rdf/RdfBuilder.php
@@ -121,14 +121,6 @@
                        $this->builders[] = $this->newFullStatementRdfBuilder();
                }
 
-               // placing this last produces more readable output since all 
entity things are together
-               if ( $this->shouldProduce( RdfProducer::PRODUCE_SITELINKS ) ) {
-                       $builder = new SiteLinksRdfBuilder( $vocabulary, 
$writer, $sites );
-                       // We can use the same bag since namespaces are 
different
-                       $builder->setDedupeBag( $this->dedupeBag );
-                       $this->builders[] = $builder;
-               }
-
                $entityRdfBuilders = 
$entityRdfBuilderFactory->getEntityRdfBuilders(
                        $flavor,
                        $vocabulary,
diff --git a/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php 
b/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
index d4b7764..3fe5851 100644
--- a/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
+++ b/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
@@ -2,10 +2,11 @@
 
 namespace Wikibase\Repo\Tests\Dumpers;
 
+use HashSiteStore;
 use MediaWikiTestCase;
 use MWException;
 use Site;
-use SiteList;
+use SiteLookup;
 use Title;
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\EntityId;
@@ -18,11 +19,17 @@
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityTitleLookup;
 use Wikibase\Lib\Store\RevisionedUnresolvedRedirectException;
+use Wikibase\Rdf\EntityRdfBuilderFactory;
+use Wikibase\Rdf\NullEntityRdfBuilder;
+use Wikibase\Rdf\PropertyRdfBuilder;
+use Wikibase\Rdf\RdfProducer;
 use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
 use Wikibase\Repo\Tests\Rdf\NTriplesRdfTestHelper;
 use Wikibase\Repo\WikibaseRepo;
 use Wikibase\Repo\Tests\Rdf\RdfBuilderTest;
 use Wikibase\Repo\Tests\Rdf\RdfBuilderTestData;
+use Wikimedia\Purtle\RdfWriter;
 
 /**
  * @covers Wikibase\Dumpers\RdfDumpGenerator
@@ -56,10 +63,10 @@
        }
 
        /**
-        * @return SiteList
+        * @return SiteLookup
         */
-       public function getSiteList() {
-               $list = new SiteList();
+       public function getSiteLookup() {
+               $list = [];
 
                $wiki = new Site();
                $wiki->setGlobalId( 'enwiki' );
@@ -80,7 +87,7 @@
                $wiki->setLinkPath( 'http://test.acme.test/$1' );
                $list['test'] = $wiki;
 
-               return $list;
+               return new HashSiteStore( $list );
        }
 
        private function getTestData() {
@@ -99,6 +106,48 @@
                        } ) );
 
                return $entityTitleLookup;
+       }
+
+       /**
+        * Returns the mapping of entity types used in tests to callbacks 
instantiating EntityRdfBuilder
+        * instances, that are configured to use services configured for test 
purposes (e.g. SiteLookup).
+        *
+        * @see EntityTypeDefinitions::getRdfBuilderFactoryCallbacks
+        *
+        * TODO: move to RdfBuilderTestData?
+        *
+        * @param SiteLookup $siteLookup
+        *
+        * @return callable[]
+        */
+       private function getRdfBuilderFactoryCallbacks( SiteLookup $siteLookup 
) {
+               return [
+                       'item' => function(
+                               $flavorFlags,
+                               RdfVocabulary $vocabulary,
+                               RdfWriter $writer,
+                               $mentionedEntityTracker,
+                               $dedupe
+                       ) use ( $siteLookup ) {
+                               if ( ( $flavorFlags & 
RdfProducer::PRODUCE_SITELINKS ) !== 0 ) {
+                                       $sites = $siteLookup->getSites();
+                                       $builder = new SiteLinksRdfBuilder( 
$vocabulary, $writer, $sites );
+                                       $builder->setDedupeBag( $dedupe );
+                                       return $builder;
+                               }
+                               return new NullEntityRdfBuilder();
+                       },
+                       'property' => function(
+                               $flavorFlags,
+                               RdfVocabulary $vocabulary,
+                               RdfWriter $writer
+                       ) {
+                               return new PropertyRdfBuilder(
+                                       $vocabulary,
+                                       $writer
+                               );
+                       }
+               ];
        }
 
        /**
@@ -145,17 +194,19 @@
                        }
                ) );
 
+               $siteLookup = $this->getSiteLookup();
+
                $wikibaseRepo = WikibaseRepo::getDefaultInstance();
+
                // Note: we test against the actual RDF bindings here, so we 
get actual RDF.
                $rdfBuilderFactory = 
$wikibaseRepo->getValueSnakRdfBuilderFactory();
-
-               $entityRdfBuilderFactory = 
$wikibaseRepo->getEntityRdfBuilderFactory();
+               $entityRdfBuilderFactory = new EntityRdfBuilderFactory( 
$this->getRdfBuilderFactoryCallbacks( $siteLookup ) );
 
                return RdfDumpGenerator::createDumpGenerator(
                        'ntriples',
                        $out,
                        $flavor,
-                       $this->getSiteList(),
+                       $siteLookup->getSites(),
                        $entityRevisionLookup,
                        $dataTypeLookup,
                        $rdfBuilderFactory,
diff --git a/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php 
b/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
index cf7ddeb..926e164 100644
--- a/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
+++ b/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
@@ -3,18 +3,24 @@
 namespace Wikibase\Repo\Tests\Rdf;
 
 use PageProps;
+use SiteLookup;
 use Title;
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\Lib\Store\EntityTitleLookup;
 use Wikibase\Rdf\DedupeBag;
+use Wikibase\Rdf\EntityRdfBuilderFactory;
 use Wikibase\Rdf\HashDedupeBag;
+use Wikibase\Rdf\NullEntityRdfBuilder;
+use Wikibase\Rdf\PropertyRdfBuilder;
 use Wikibase\Rdf\RdfBuilder;
 use Wikibase\Rdf\RdfProducer;
 use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
 use Wikibase\Repo\WikibaseRepo;
 use Wikimedia\Purtle\NTriplesRdfWriter;
+use Wikimedia\Purtle\RdfWriter;
 
 /**
  * @covers Wikibase\Rdf\RdfBuilder
@@ -70,6 +76,48 @@
        }
 
        /**
+        * Returns the mapping of entity types used in tests to callbacks 
instantiating EntityRdfBuilder
+        * instances, that are configured to use services configured for test 
purposes (e.g. SiteLookup).
+        *
+        * @see EntityTypeDefinitions::getRdfBuilderFactoryCallbacks
+        *
+        * TODO: move to RdfBuilderTestData?
+        *
+        * @param SiteLookup $siteLookup
+        *
+        * @return callable[]
+        */
+       private function getRdfBuilderFactoryCallbacks( SiteLookup $siteLookup 
) {
+               return [
+                       'item' => function(
+                               $flavorFlags,
+                               RdfVocabulary $vocabulary,
+                               RdfWriter $writer,
+                               $mentionedEntityTracker,
+                               $dedupe
+                       ) use ( $siteLookup ) {
+                               if ( ( $flavorFlags & 
RdfProducer::PRODUCE_SITELINKS ) !== 0 ) {
+                                       $sites = $siteLookup->getSites();
+                                       $builder = new SiteLinksRdfBuilder( 
$vocabulary, $writer, $sites );
+                                       $builder->setDedupeBag( $dedupe );
+                                       return $builder;
+                               }
+                               return new NullEntityRdfBuilder();
+                       },
+                       'property' => function(
+                               $flavorFlags,
+                               RdfVocabulary $vocabulary,
+                               RdfWriter $writer
+                       ) {
+                               return new PropertyRdfBuilder(
+                                       $vocabulary,
+                                       $writer
+                               );
+                       }
+               ];
+       }
+
+       /**
         * @param int           $produce One of the RdfProducer::PRODUCE_... 
constants.
         * @param DedupeBag     $dedup
         * @param RdfVocabulary $vocabulary
@@ -81,13 +129,14 @@
                        $dedup = new HashDedupeBag();
                }
 
+               $siteLookup = $this->getTestData()->getSiteLookup();
+
                // Note: using the actual factory here makes this an 
integration test!
                $valueBuilderFactory = 
WikibaseRepo::getDefaultInstance()->getValueSnakRdfBuilderFactory();
-
-               $entityRdfBuilderFactory = 
WikibaseRepo::getDefaultInstance()->getEntityRdfBuilderFactory();
+               $entityRdfBuilderFactory = new EntityRdfBuilderFactory( 
$this->getRdfBuilderFactoryCallbacks( $siteLookup ) );
                $emitter = new NTriplesRdfWriter();
                $builder = new RdfBuilder(
-                       $this->getTestData()->getSiteList(),
+                       $siteLookup->getSites(),
                        $vocabulary ?: $this->getTestData()->getVocabulary(),
                        $valueBuilderFactory,
                        $this->getTestData()->getMockRepository(),
diff --git a/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php 
b/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
index 070a585..24fc3ea 100644
--- a/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
+++ b/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
@@ -2,9 +2,10 @@
 
 namespace Wikibase\Repo\Tests\Rdf;
 
+use HashSiteStore;
 use InvalidArgumentException;
 use Site;
-use SiteList;
+use SiteLookup;
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\EntityRedirect;
 use Wikibase\DataModel\Entity\Item;
@@ -184,10 +185,10 @@
        /**
         * Get site definitions matching the test data.
         *
-        * @return SiteList
+        * @return SiteLookup
         */
-       public function getSiteList() {
-               $list = new SiteList();
+       public function getSiteLookup() {
+               $list = [];
 
                $wiki = new Site();
                $wiki->setGlobalId( 'enwiki' );
@@ -202,7 +203,7 @@
                $wiki->setLinkPath( 'http://ruwiki.acme.test/$1' );
                $list['ruwiki'] = $wiki;
 
-               return $list;
+               return new HashSiteStore( $list );
        }
 
        /**
diff --git a/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php 
b/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
index a3b66fc..e0e59f5 100644
--- a/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
+++ b/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
@@ -54,7 +54,7 @@
                $builder = new SiteLinksRdfBuilder(
                        $vocabulary,
                        $writer,
-                       $this->getTestData()->getSiteList(),
+                       $this->getTestData()->getSiteLookup()->getSites(),
                        $sites
                );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/343025
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5fc25575348ed09562c4c1541765f0ea35b4f812
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to