Aude has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/148672

Change subject: Add getLanguageAwareRendererFromCode to 
PropertyClaimsRendererFactory
......................................................................

Add getLanguageAwareRendererFromCode to PropertyClaimsRendererFactory

with in-process caching of the LanguageAwareRenderer objects

Change-Id: I40864028bd45727924412c84944342a84c842a54
---
M client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php
M 
client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php
M client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php
M 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactoryTest.php
M 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsAwareRendererTest.php
5 files changed, 53 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/72/148672/1

diff --git 
a/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php 
b/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php
index 2c5c304..421a3a8 100644
--- 
a/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php
+++ 
b/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php
@@ -63,6 +63,7 @@
 
                        $status = $this->renderWithStatus( $entityId, 
$propertyId );
                } catch ( PropertyLabelNotResolvedException $ex ) {
+                       // @fixme use ExceptionLocalizer
                        $status = $this->getStatusForException( 
$propertyLabelOrId, $ex->getMessage() );
                } catch ( InvalidArgumentException $ex ) {
                        $status = $this->getStatusForException( 
$propertyLabelOrId, $ex->getMessage() );
diff --git 
a/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php
 
b/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php
index df8b380..413bd2a 100644
--- 
a/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php
+++ 
b/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php
@@ -38,6 +38,11 @@
        private $snakFormatterFactory;
 
        /**
+        * @var LanguageAwareRenderer[]
+        */
+       private $languageAwareRenderers = array();
+
+       /**
         * @param PropertyIdResolver $propertyIdResolver
         * @param SnaksFinder $snaksFinder
         * @param LanguageFallbackChainFactory $languageFallbackChainFactory
@@ -85,6 +90,30 @@
        }
 
        /**
+        * @param string $languageCode
+        *
+        * @return LanguageAwareRenderer
+        */
+       public function getLanguageAwareRendererFromCode( $languageCode ) {
+               if ( !isset( $this->languageAwareRenderers[$languageCode] ) ) {
+                       $languageAwareRenderer = 
$this->newLanguageAwareRendererFromCode( $languageCode );
+                       $this->languageAwareRenderers[$languageCode] = 
$languageAwareRenderer;
+               }
+
+               return $this->languageAwareRenderers[$languageCode];
+       }
+
+       /**
+        * @param string $languageCode
+        *
+        * @return LanguageAwareRenderer
+        */
+       private function newLanguageAwareRendererFromCode( $languageCode ) {
+               $language = Language::factory( $languageCode );
+               return $this->newLanguageAwareRenderer( $language );
+       }
+
+       /**
         * @param string[] $variants
         *
         * @return VariantsAwareRenderer
diff --git 
a/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php 
b/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php
index 34ce72d..82e66f9 100644
--- 
a/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php
+++ 
b/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php
@@ -101,8 +101,7 @@
         * @return string
         */
        private function getVariantText( $variantCode, EntityId $entityId, 
$propertyLabelOrId ) {
-               $variantLanguage = Language::factory( $variantCode );
-               $renderer = $this->rendererFactory->newLanguageAwareRenderer( 
$variantLanguage );
+               $renderer = 
$this->rendererFactory->getLanguageAwareRendererFromCode( $variantCode );
 
                return $renderer->render( $entityId, $propertyLabelOrId );
        }
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactoryTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactoryTest.php
index 516cb79..1c45aa8 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactoryTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactoryTest.php
@@ -68,12 +68,7 @@
        }
 
        public function testNewLanguageAwareRenderer() {
-               $rendererFactory = new PropertyClaimsRendererFactory(
-                       $this->getPropertyIdResolver(),
-                       $this->getSnaksFinder(),
-                       $this->getLanguageFallbackChainFactory(),
-                       $this->getSnakFormatterFactory()
-               );
+               $rendererFactory = $this->getPropertyClaimsRendererFactory();
 
                $language = Language::factory( 'he' );
                $renderer = $rendererFactory->newLanguageAwareRenderer( 
$language );
@@ -82,6 +77,23 @@
                $this->assertInstanceOf( $languageRendererClass, $renderer );
        }
 
+       public function testGetLanguageAwareRendererFromCode() {
+               $rendererFactory = $this->getPropertyClaimsRendererFactory();
+               $renderer = $rendererFactory->getLanguageAwareRendererFromCode( 
'ar' );
+
+               $languageRendererClass = 
'Wikibase\DataAccess\PropertyParserFunction\LanguageAwareRenderer';
+               $this->assertInstanceOf( $languageRendererClass, $renderer );
+       }
+
+       private function getPropertyClaimsRendererFactory() {
+               return new PropertyClaimsRendererFactory(
+                       $this->getPropertyIdResolver(),
+                       $this->getSnaksFinder(),
+                       $this->getLanguageFallbackChainFactory(),
+                       $this->getSnakFormatterFactory()
+               );
+       }
+
        private function getPropertyIdResolver() {
                $propertyIdResolver = $this->getMockBuilder(
                                
'Wikibase\DataAccess\PropertyParserFunction\PropertyIdResolver'
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsAwareRendererTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsAwareRendererTest.php
index e6122d1..ac5c3d9 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsAwareRendererTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsAwareRendererTest.php
@@ -34,6 +34,10 @@
                        ->method( 'newLanguageAwareRenderer' )
                        ->will( $this->returnValue( $languageRenderer ) );
 
+               $rendererFactory->expects( $this->any() )
+                       ->method( 'getLanguageAwareRendererFromCode' )
+                       ->will( $this->returnValue( $languageRenderer ) );
+
                $variantsRenderer = new VariantsAwareRenderer(
                        $rendererFactory,
                        $variants

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I40864028bd45727924412c84944342a84c842a54
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <[email protected]>

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

Reply via email to