Matěj Suchánek has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/348234 )

Change subject: Track label usage when referencing properties
......................................................................

Track label usage when referencing properties

Change-Id: Id5e4072cbad21e77af694afb9352fcf7bc4f9dd0
---
M client/includes/DataAccess/PropertyIdResolver.php
M 
client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
M client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
M client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
M client/includes/WikibaseClient.php
M client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php
M 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
7 files changed, 72 insertions(+), 59 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/34/348234/3

diff --git a/client/includes/DataAccess/PropertyIdResolver.php 
b/client/includes/DataAccess/PropertyIdResolver.php
index 03596b1..5ced2ca 100644
--- a/client/includes/DataAccess/PropertyIdResolver.php
+++ b/client/includes/DataAccess/PropertyIdResolver.php
@@ -4,6 +4,7 @@
 
 use InvalidArgumentException;
 use Wikibase\Client\PropertyLabelNotResolvedException;
+use Wikibase\Client\Usage\UsageAccumulator;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Services\Lookup\EntityLookup;
 use Wikibase\DataModel\Services\Term\PropertyLabelResolver;
@@ -26,15 +27,23 @@
        private $propertyLabelResolver;
 
        /**
+        * @var UsageAccumulator
+        */
+       private $usageAccumulator;
+
+       /**
         * @param EntityLookup $entityLookup
         * @param PropertyLabelResolver $propertyLabelResolver
+        * @param UsageAccumulator $usageAccumulator
         */
        public function __construct(
                EntityLookup $entityLookup,
-               PropertyLabelResolver $propertyLabelResolver
+               PropertyLabelResolver $propertyLabelResolver,
+               UsageAccumulator $usageAccumulator
        ) {
                $this->entityLookup = $entityLookup;
                $this->propertyLabelResolver = $propertyLabelResolver;
+               $this->usageAccumulator = $usageAccumulator;
        }
 
        /**
@@ -82,6 +91,7 @@
                }
 
                $propertyId = $propertyIds[$propertyLabel];
+               $this->usageAccumulator->addLabelUsage( $propertyId, 
$languageCode );
 
                return $propertyId;
        }
diff --git 
a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
 
b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
index 3e519e9..f322495 100644
--- 
a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
+++ 
b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
@@ -13,6 +13,7 @@
 use Wikibase\Client\Usage\ParserOutputUsageAccumulator;
 use Wikibase\Client\Usage\UsageAccumulator;
 use Wikibase\DataModel\Services\Lookup\EntityLookup;
+use Wikibase\DataModel\Services\Term\PropertyLabelResolver;
 
 /**
  * @license GPL-2.0+
@@ -22,9 +23,9 @@
 class StatementGroupRendererFactory {
 
        /**
-        * @var PropertyIdResolver
+        * @var PropertyLabelResolver
         */
-       private $propertyIdResolver;
+       private $propertyLabelResolver;
 
        /**
         * @var SnaksFinder
@@ -52,20 +53,20 @@
        private $allowDataAccessInUserLanguage;
 
        /**
-        * @param PropertyIdResolver $propertyIdResolver
+        * @param PropertyLabelResolver $propertyLabelResolver
         * @param SnaksFinder $snaksFinder
         * @param EntityLookup $entityLookup
         * @param DataAccessSnakFormatterFactory $dataAccessSnakFormatterFactory
         * @param bool $allowDataAccessInUserLanguage
         */
        public function __construct(
-               PropertyIdResolver $propertyIdResolver,
+               PropertyLabelResolver $propertyLabelResolver,
                SnaksFinder $snaksFinder,
                EntityLookup $entityLookup,
                DataAccessSnakFormatterFactory $dataAccessSnakFormatterFactory,
                $allowDataAccessInUserLanguage
        ) {
-               $this->propertyIdResolver = $propertyIdResolver;
+               $this->propertyLabelResolver = $propertyLabelResolver;
                $this->snaksFinder = $snaksFinder;
                $this->entityLookup = $entityLookup;
                $this->dataAccessSnakFormatterFactory = 
$dataAccessSnakFormatterFactory;
@@ -135,9 +136,15 @@
                        $type
                );
 
+               $propertyIdResolver = new PropertyIdResolver(
+                       $this->entityLookup,
+                       $this->propertyLabelResolver,
+                       $usageAccumulator
+               );
+
                $entityStatementsRenderer = new StatementTransclusionInteractor(
                        $language,
-                       $this->propertyIdResolver,
+                       $propertyIdResolver,
                        $this->snaksFinder,
                        $snakFormatter,
                        $this->entityLookup
diff --git 
a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php 
b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
index b7c8af6..92f2423 100644
--- 
a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
+++ 
b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php
@@ -53,7 +53,8 @@
 
                $propertyIdResolver = new PropertyIdResolver(
                        $entityLookup,
-                       $wikibaseClient->getStore()->getPropertyLabelResolver()
+                       $wikibaseClient->getStore()->getPropertyLabelResolver(),
+                       $this->getUsageAccumulator()
                );
 
                $plainTextTransclusionInteractor = new 
StatementTransclusionInteractor(
diff --git 
a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php 
b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
index 66e4248..94a876f 100644
--- a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
+++ b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php
@@ -157,7 +157,11 @@
                        $entityLookup = 
$wikibaseClient->getStore()->getEntityLookup();
                        $propertyLabelResolver = 
$wikibaseClient->getStore()->getPropertyLabelResolver();
 
-                       $this->propertyIdResolver = new PropertyIdResolver( 
$entityLookup, $propertyLabelResolver );
+                       $this->propertyIdResolver = new PropertyIdResolver(
+                               $entityLookup,
+                               $propertyLabelResolver,
+                               $this->getUsageAccumulator()
+                       );
                }
 
                return $this->propertyIdResolver;
diff --git a/client/includes/WikibaseClient.php 
b/client/includes/WikibaseClient.php
index 698fee2..2666f5a 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -34,33 +34,32 @@
 use Wikibase\Client\Changes\WikiPageUpdater;
 use Wikibase\Client\DataAccess\DataAccessSnakFormatterFactory;
 use Wikibase\Client\DataAccess\ClientSiteLinkTitleLookup;
-use Wikibase\Client\DataAccess\PropertyIdResolver;
 use 
Wikibase\Client\DataAccess\PropertyParserFunction\StatementGroupRendererFactory;
 use Wikibase\Client\DataAccess\PropertyParserFunction\Runner;
-use Wikibase\Client\ParserOutput\ClientParserOutputDataUpdater;
-use Wikibase\Client\RecentChanges\RecentChangeFactory;
-use Wikibase\Client\Serializer\ForbiddenSerializer;
-use Wikibase\Client\Store\RepositoryServiceContainerFactory;
-use Wikibase\DataModel\Entity\EntityIdValue;
-use Wikibase\DataModel\SerializerFactory;
-use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory;
-use Wikibase\DataModel\Services\Lookup\RestrictedEntityLookup;
 use Wikibase\Client\DataAccess\SnaksFinder;
 use Wikibase\Client\Hooks\LanguageLinkBadgeDisplay;
 use Wikibase\Client\Hooks\OtherProjectsSidebarGeneratorFactory;
 use Wikibase\Client\Hooks\ParserFunctionRegistrant;
+use Wikibase\Client\ParserOutput\ClientParserOutputDataUpdater;
+use Wikibase\Client\RecentChanges\RecentChangeFactory;
+use Wikibase\Client\Serializer\ForbiddenSerializer;
+use Wikibase\Client\Store\RepositoryServiceContainerFactory;
 use Wikibase\Client\Store\TitleFactory;
 use Wikibase\ClientStore;
 use Wikibase\DataModel\DeserializerFactory;
-use Wikibase\DataModel\Entity\Item;
-use Wikibase\DataModel\Entity\ItemIdParser;
-use Wikibase\DataModel\Services\Diff\EntityDiffer;
 use Wikibase\DataModel\Entity\DispatchingEntityIdParser;
 use Wikibase\DataModel\Entity\EntityIdParser;
+use Wikibase\DataModel\Entity\EntityIdValue;
+use Wikibase\DataModel\Entity\Item;
+use Wikibase\DataModel\Entity\ItemIdParser;
+use Wikibase\DataModel\SerializerFactory;
+use Wikibase\DataModel\Services\Diff\EntityDiffer;
+use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory;
 use Wikibase\DataModel\Services\EntityId\SuffixEntityIdParser;
 use Wikibase\DataModel\Services\Lookup\EntityLookup;
 use Wikibase\DataModel\Services\Lookup\EntityRetrievingDataTypeLookup;
 use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
+use Wikibase\DataModel\Services\Lookup\RestrictedEntityLookup;
 use Wikibase\DataModel\Services\Lookup\TermLookup;
 use Wikibase\DataModel\Services\Term\TermBuffer;
 use Wikibase\DirectSqlStore;
@@ -75,19 +74,19 @@
 use Wikibase\Lib\EntityTypeDefinitions;
 use Wikibase\Lib\FormatterLabelDescriptionLookupFactory;
 use Wikibase\Lib\Interactors\TermSearchInteractor;
-use Wikibase\Lib\RepositoryDefinitions;
-use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory;
-use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
 use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\Lib\MediaWikiContentLanguages;
 use Wikibase\Lib\OutputFormatSnakFormatterFactory;
 use Wikibase\Lib\OutputFormatValueFormatterFactory;
 use Wikibase\Lib\PropertyInfoDataTypeLookup;
+use Wikibase\Lib\RepositoryDefinitions;
+use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory;
 use Wikibase\Lib\Store\CachingPropertyOrderProvider;
 use Wikibase\Lib\Store\EntityContentDataCodec;
 use Wikibase\Lib\Store\EntityNamespaceLookup;
 use Wikibase\Lib\Store\FallbackPropertyOrderProvider;
 use Wikibase\Lib\Store\HttpUrlPropertyOrderProvider;
+use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
 use Wikibase\Lib\Store\PrefetchingTermLookup;
 use Wikibase\Lib\Store\PropertyOrderProvider;
 use Wikibase\Lib\Store\WikiPagePropertyOrderProvider;
@@ -1093,17 +1092,10 @@
         * @return StatementGroupRendererFactory
         */
        private function getStatementGroupRendererFactory() {
-               $entityLookup = $this->getRestrictedEntityLookup();
-
-               $propertyIdResolver = new PropertyIdResolver(
-                       $entityLookup,
-                       $this->getStore()->getPropertyLabelResolver()
-               );
-
                return new StatementGroupRendererFactory(
-                       $propertyIdResolver,
+                       $this->getStore()->getPropertyLabelResolver(),
                        new SnaksFinder(),
-                       $entityLookup,
+                       $this->getRestrictedEntityLookup(),
                        $this->getDataAccessSnakFormatterFactory(),
                        $this->getSettings()->getSetting( 
'allowDataAccessInUserLanguage' )
                );
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php 
b/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php
index 7461e62..2c4151e 100644
--- a/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php
+++ b/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php
@@ -4,6 +4,7 @@
 
 use Wikibase\Client\DataAccess\PropertyIdResolver;
 use Wikibase\Client\PropertyLabelNotResolvedException;
+use Wikibase\Client\Usage\UsageAccumulator;
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\Lib\Tests\MockPropertyLabelResolver;
@@ -21,11 +22,18 @@
  */
 class PropertyIdResolverTest extends \PHPUnit_Framework_TestCase {
 
-       private function getPropertyIdResolver() {
+       private function getPropertyIdResolver( $times = 0 ) {
                $mockRepository = $this->getMockRepository();
                $propertyLabelResolver = new MockPropertyLabelResolver( 'en', 
$mockRepository );
+               $usageAccumulator = $this->getMock( UsageAccumulator::class );
+               $usageAccumulator->expects( $this->exactly( $times ) )
+                       ->method( 'addLabelUsage' );
 
-               return new PropertyIdResolver( $mockRepository, 
$propertyLabelResolver );
+               return new PropertyIdResolver(
+                       $mockRepository,
+                       $propertyLabelResolver,
+                       $usageAccumulator
+               );
        }
 
        private function getMockRepository() {
@@ -44,8 +52,8 @@
        /**
         * @dataProvider resolvePropertyIdProvider
         */
-       public function testResolvePropertyId( PropertyId $expected, 
$propertyLabelOrId ) {
-               $propertyIdResolver = $this->getPropertyIdResolver();
+       public function testResolvePropertyId( PropertyId $expected, 
$propertyLabelOrId, $times = 0 ) {
+               $propertyIdResolver = $this->getPropertyIdResolver( $times );
 
                $propertyId = $propertyIdResolver->resolvePropertyId( 
$propertyLabelOrId, 'en' );
                $this->assertEquals( $expected, $propertyId );
@@ -53,7 +61,7 @@
 
        public function resolvePropertyIdProvider() {
                return array(
-                       array( new PropertyId( 'P1337' ), 'a kitten!' ),
+                       array( new PropertyId( 'P1337' ), 'a kitten!', 1 ),
                        array( new PropertyId( 'P1337' ), 'p1337' ),
                        array( new PropertyId( 'P1337' ), 'P1337' ),
                );
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
index 66cbb2c..86951fe 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
@@ -10,7 +10,6 @@
 use ValueFormatters\FormatterOptions;
 use ValueFormatters\ValueFormatter;
 use Wikibase\Client\DataAccess\DataAccessSnakFormatterFactory;
-use Wikibase\Client\DataAccess\PropertyIdResolver;
 use Wikibase\Client\DataAccess\PropertyParserFunction\LanguageAwareRenderer;
 use 
Wikibase\Client\DataAccess\PropertyParserFunction\StatementGroupRendererFactory;
 use Wikibase\Client\DataAccess\PropertyParserFunction\VariantsAwareRenderer;
@@ -23,6 +22,7 @@
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Services\Lookup\EntityLookup;
 use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
+use Wikibase\DataModel\Services\Term\PropertyLabelResolver;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Statement\StatementListProvider;
 use Wikibase\LanguageFallbackChainFactory;
@@ -141,7 +141,7 @@
         * @dataProvider allowDataAccessInUserLanguageProvider
         */
        public function testNewRendererFromParser_languageOption( 
$allowDataAccessInUserLanguage ) {
-               $idResolver = $this->getMockBuilder( PropertyIdResolver::class )
+               $labelResolver = $this->getMockBuilder( 
PropertyLabelResolver::class )
                        ->disableOriginalConstructor()
                        ->getMock();
 
@@ -161,7 +161,7 @@
                        ) );
 
                $factory = new StatementGroupRendererFactory(
-                       $idResolver,
+                       $labelResolver,
                        new SnaksFinder(),
                        $this->getMock( EntityLookup::class ),
                        new DataAccessSnakFormatterFactory(
@@ -182,8 +182,12 @@
        }
 
        private function getStatementGroupRendererFactory( 
$allowDataAccessInUserLanguage = false ) {
+               $labelResolver = $this->getMockBuilder( 
PropertyLabelResolver::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
                return new StatementGroupRendererFactory(
-                       $this->getPropertyIdResolver(),
+                       $labelResolver,
                        $this->getSnaksFinder(),
                        $this->getEntityLookup(),
                        new DataAccessSnakFormatterFactory(
@@ -193,23 +197,6 @@
                        ),
                        $allowDataAccessInUserLanguage
                );
-       }
-
-       /**
-        * @return PropertyIdResolver
-        */
-       private function getPropertyIdResolver() {
-               $propertyIdResolver = $this->getMockBuilder( 
PropertyIdResolver::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               $propertyIdResolver->expects( $this->any() )
-                       ->method( 'resolvePropertyId' )
-                       ->will( $this->returnCallback( function ( $name, $lang 
) {
-                               return new PropertyId( $name );
-                       } ) );
-
-               return $propertyIdResolver;
        }
 
        /**
@@ -270,6 +257,10 @@
                                return new Item( $id );
                        } ) );
 
+               $entityLookup->expects( $this->any() )
+                       ->method( 'hasEntity' )
+                       ->will( $this->returnValue( true ) );
+
                return $entityLookup;
        }
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id5e4072cbad21e77af694afb9352fcf7bc4f9dd0
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Matěj Suchánek <matejsuchane...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to