Aude has uploaded a new change for review. https://gerrit.wikimedia.org/r/189652
Change subject: Get rid of PropertyClaimsRenderer and PropertyClaimsRendererFactory ...................................................................... Get rid of PropertyClaimsRenderer and PropertyClaimsRendererFactory can be consolidated further with EntityStatementsRenderer Change-Id: I16fe16bad9adbc91116cdcc70159ecd7bcf18c0c --- A client/includes/DataAccess/EntityStatementsBasicRenderer.php M client/includes/DataAccess/EntityStatementsRenderer.php R client/includes/DataAccess/PropertyParserFunction/EntityStatementsRendererFactory.php M client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php D client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRenderer.php M client/includes/DataAccess/PropertyParserFunction/Runner.php M client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php M client/includes/WikibaseClient.php 8 files changed, 155 insertions(+), 141 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/52/189652/1 diff --git a/client/includes/DataAccess/EntityStatementsBasicRenderer.php b/client/includes/DataAccess/EntityStatementsBasicRenderer.php new file mode 100644 index 0000000..0163321 --- /dev/null +++ b/client/includes/DataAccess/EntityStatementsBasicRenderer.php @@ -0,0 +1,134 @@ +<?php + +namespace Wikibase\DataAccess; + +use InvalidArgumentException; +use Language; +use Wikibase\Client\Usage\UsageAccumulator; +use Wikibase\DataAccess\PropertyIdResolver; +use Wikibase\DataAccess\SnaksFinder; +use Wikibase\DataModel\Entity\EntityId; +use Wikibase\DataModel\Entity\EntityIdValue; +use Wikibase\DataModel\Snak\PropertyValueSnak; +use Wikibase\DataModel\Snak\Snak; +use Wikibase\Lib\PropertyLabelNotResolvedException; +use Wikibase\Lib\SnakFormatter; + +/** + * Renders the main Snaks associated with a given Property on an Entity. + * + * @since 0.5 + * + * @licence GNU GPL v2+ + * + * @author Marius Hoch < h...@online.de > + */ +class EntityStatementsBasicRenderer implements EntityStatementsRenderer { + + /** + * @var Language + */ + private $language; + + /** + * @var PropertyIdResolver + */ + private $propertyIdResolver; + + /** + * @var SnaksFinder + */ + private $snaksFinder; + + /** + * @var SnakFormatter + */ + private $snakFormatter; + + /** + * @var UsageAccumulator + */ + private $usageAccumulator; + + /** + * @param Language $language + * @param PropertyIdResolver $propertyIdResolver + * @param SnaksFinder $snaksFinder + * @param SnakFormatter $snakFormatter + * @param UsageAccumulator $usageAccumulator + */ + public function __construct( + Language $language, + PropertyIdResolver $propertyIdResolver, + SnaksFinder $snaksFinder, + SnakFormatter $snakFormatter, + UsageAccumulator $usageAccumulator + ) { + $this->language = $language; + $this->propertyIdResolver = $propertyIdResolver; + $this->snaksFinder = $snaksFinder; + $this->snakFormatter = $snakFormatter; + $this->usageAccumulator = $usageAccumulator; + } + + /** + * @param EntityId $entityId + * @param string $propertyLabelOrId property label or ID (pXXX) + * @param int[]|null $acceptableRanks + * + * @throws PropertyLabelNotResolvedException + * @return string + */ + public function render( EntityId $entityId, $propertyLabelOrId, $acceptableRanks = null ) { + $propertyId = $this->propertyIdResolver->resolvePropertyId( + $propertyLabelOrId, + $this->language->getCode() + ); + + $snaks = $this->snaksFinder->findSnaks( + $entityId, + $propertyId, + $acceptableRanks + ); + $this->trackUsage( $snaks ); + + return $this->formatSnaks( $snaks ); + } + + /** + * @param Snak[] $snaks + * + * @return string wikitext + */ + private function formatSnaks( array $snaks ) { + $formattedValues = array(); + + foreach ( $snaks as $snak ) { + $formattedValues[] = $this->snakFormatter->formatSnak( $snak ); + } + + return $this->language->commaList( $formattedValues ); + } + + /** + * @param Snak[] $snaks + */ + private function trackUsage( array $snaks ) { + // Note: we track any EntityIdValue as a label usage. + // This is making assumptions about what the respective formatter actually does. + // Ideally, the formatter itself would perform the tracking, but that seems nasty to model. + + foreach ( $snaks as $snak ) { + if ( !( $snak instanceof PropertyValueSnak) ) { + continue; + } + + $value = $snak->getDataValue(); + + if ( $value instanceof EntityIdValue ) { + $this->usageAccumulator->addLabelUsage( $value->getEntityId() ); + } + } + } + +} diff --git a/client/includes/DataAccess/EntityStatementsRenderer.php b/client/includes/DataAccess/EntityStatementsRenderer.php index eb1aaea..87030b9 100644 --- a/client/includes/DataAccess/EntityStatementsRenderer.php +++ b/client/includes/DataAccess/EntityStatementsRenderer.php @@ -23,53 +23,7 @@ * * @author Marius Hoch < h...@online.de > */ -class EntityStatementsRenderer { - - /** - * @var Language - */ - private $language; - - /** - * @var PropertyIdResolver - */ - private $propertyIdResolver; - - /** - * @var SnaksFinder - */ - private $snaksFinder; - - /** - * @var SnakFormatter - */ - private $snakFormatter; - - /** - * @var UsageAccumulator - */ - private $usageAccumulator; - - /** - * @param Language $language - * @param PropertyIdResolver $propertyIdResolver - * @param SnaksFinder $snaksFinder - * @param SnakFormatter $snakFormatter - * @param UsageAccumulator $usageAccumulator - */ - public function __construct( - Language $language, - PropertyIdResolver $propertyIdResolver, - SnaksFinder $snaksFinder, - SnakFormatter $snakFormatter, - UsageAccumulator $usageAccumulator - ) { - $this->language = $language; - $this->propertyIdResolver = $propertyIdResolver; - $this->snaksFinder = $snaksFinder; - $this->snakFormatter = $snakFormatter; - $this->usageAccumulator = $usageAccumulator; - } +interface EntityStatementsRenderer { /** * @param EntityId $entityId @@ -79,56 +33,6 @@ * @throws PropertyLabelNotResolvedException * @return string */ - public function render( EntityId $entityId, $propertyLabelOrId, $acceptableRanks = null ) { - $propertyId = $this->propertyIdResolver->resolvePropertyId( - $propertyLabelOrId, - $this->language->getCode() - ); - - $snaks = $this->snaksFinder->findSnaks( - $entityId, - $propertyId, - $acceptableRanks - ); - $this->trackUsage( $snaks ); - - return $this->formatSnaks( $snaks ); - } - - /** - * @param Snak[] $snaks - * - * @return string wikitext - */ - private function formatSnaks( array $snaks ) { - $formattedValues = array(); - - foreach ( $snaks as $snak ) { - $formattedValues[] = $this->snakFormatter->formatSnak( $snak ); - } - - return $this->language->commaList( $formattedValues ); - } - - /** - * @param Snak[] $snaks - */ - private function trackUsage( array $snaks ) { - // Note: we track any EntityIdValue as a label usage. - // This is making assumptions about what the respective formatter actually does. - // Ideally, the formatter itself would perform the tracking, but that seems nasty to model. - - foreach ( $snaks as $snak ) { - if ( !( $snak instanceof PropertyValueSnak) ) { - continue; - } - - $value = $snak->getDataValue(); - - if ( $value instanceof EntityIdValue ) { - $this->usageAccumulator->addLabelUsage( $value->getEntityId() ); - } - } - } + public function render( EntityId $entityId, $propertyLabelOrId, $acceptableRanks = null ); } diff --git a/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php b/client/includes/DataAccess/PropertyParserFunction/EntityStatementsRendererFactory.php similarity index 96% rename from client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php rename to client/includes/DataAccess/PropertyParserFunction/EntityStatementsRendererFactory.php index 10b75d9..0a87fa9 100644 --- a/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRendererFactory.php +++ b/client/includes/DataAccess/PropertyParserFunction/EntityStatementsRendererFactory.php @@ -8,7 +8,7 @@ use Wikibase\Client\Usage\ParserOutputUsageAccumulator; use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataAccess\PropertyIdResolver; -use Wikibase\DataAccess\EntityStatementsRenderer; +use Wikibase\DataAccess\EntityStatementsBasicRenderer; use Wikibase\DataAccess\SnaksFinder; use Wikibase\LanguageFallbackChainFactory; use Wikibase\Lib\OutputFormatSnakFormatterFactory; @@ -20,7 +20,7 @@ * @licence GNU GPL v2+ * @author Katie Filbert < aude.w...@gmail.com > */ -class PropertyClaimsRendererFactory { +class EntityStatementsRendererFactory { /** * @var PropertyIdResolver @@ -68,7 +68,7 @@ /** * @param Parser $parser * - * @return PropertyClaimsRenderer + * @return EntityStatementsRenderer */ public function newRendererFromParser( Parser $parser ) { $usageAccumulator = new ParserOutputUsageAccumulator( $parser->getOutput() ); @@ -89,7 +89,7 @@ * @return LanguageAwareRenderer */ private function newLanguageAwareRenderer( Language $language, UsageAccumulator $usageAccumulator ) { - $entityStatementsRenderer = new EntityStatementsRenderer( + $entityStatementsRenderer = new EntityStatementsBasicRenderer( $language, $this->propertyIdResolver, $this->snaksFinder, diff --git a/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php b/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php index 98a3aac..7cb20a5 100644 --- a/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php +++ b/client/includes/DataAccess/PropertyParserFunction/LanguageAwareRenderer.php @@ -10,7 +10,7 @@ use Wikibase\Lib\PropertyLabelNotResolvedException; /** - * PropertyClaimsRenderer of the {{#property}} parser function. + * EntityStatementsRenderer for the {{#property}} parser function. * * @since 0.5 * @@ -21,7 +21,7 @@ * @author Liangent < liang...@gmail.com > * @author Marius Hoch < h...@online.de > */ -class LanguageAwareRenderer implements PropertyClaimsRenderer { +class LanguageAwareRenderer implements EntityStatementsRenderer { /** * @var Language @@ -51,10 +51,10 @@ * * @return string */ - public function render( EntityId $entityId, $propertyLabelOrId ) { + public function render( EntityId $entityId, $propertyLabelOrId, $acceptableRanks = null ) { try { $status = Status::newGood( - $this->entityStatementsRenderer->render( $entityId, $propertyLabelOrId ) + $this->entityStatementsRenderer->render( $entityId, $propertyLabelOrId, $acceptableRanks ) ); } catch ( PropertyLabelNotResolvedException $ex ) { // @fixme use ExceptionLocalizer diff --git a/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRenderer.php b/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRenderer.php deleted file mode 100644 index dbdb89b..0000000 --- a/client/includes/DataAccess/PropertyParserFunction/PropertyClaimsRenderer.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php - -namespace Wikibase\DataAccess\PropertyParserFunction; - -use Wikibase\DataModel\Entity\EntityId; - -/** - * Renderer for the {{#property}} parser function. - * - * @since 0.5 - * - * @licence GNU GPL v2+ - * @author Katie Filbert < aude.w...@gmail.com > - */ -interface PropertyClaimsRenderer { - - /** - * @param EntityId $entityId - * @param string $propertyLabelOrId - * - * @return string - */ - public function render( EntityId $entityId, $propertyLabelOrId ); - -} diff --git a/client/includes/DataAccess/PropertyParserFunction/Runner.php b/client/includes/DataAccess/PropertyParserFunction/Runner.php index 1779af9..210e7e5 100644 --- a/client/includes/DataAccess/PropertyParserFunction/Runner.php +++ b/client/includes/DataAccess/PropertyParserFunction/Runner.php @@ -23,7 +23,7 @@ class Runner { /** - * @var PropertyClaimsRendererFactory + * @var EntityStatementsRendererFactory */ private $rendererFactory; @@ -38,12 +38,12 @@ private $siteId; /** - * @param PropertyCLaimsRendererFactory $rendererFactory + * @param EntityStatementsRendererFactory $rendererFactory * @param SiteLinkLookup $siteLinkLookup * @param string $siteId */ public function __construct( - PropertyClaimsRendererFactory $rendererFactory, + EntityStatementsRendererFactory $rendererFactory, SiteLinkLookup $siteLinkLookup, $siteId ) { diff --git a/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php b/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php index 0ca41ce..3c7d627 100644 --- a/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php +++ b/client/includes/DataAccess/PropertyParserFunction/VariantsAwareRenderer.php @@ -3,6 +3,7 @@ namespace Wikibase\DataAccess\PropertyParserFunction; use OutOfBoundsException; +use Wikibase\DataAccess\EntityStatementsRenderer; use Wikibase\DataModel\Entity\EntityId; /** @@ -16,7 +17,7 @@ * @author Daniel Kinzler * @author Liangent < liang...@gmail.com > */ -class VariantsAwareRenderer implements PropertyClaimsRenderer { +class VariantsAwareRenderer implements EntityStatementsRenderer { /** * @param string[] @@ -43,7 +44,7 @@ * * @return string */ - public function render( EntityId $entityId, $propertyLabelOrId ) { + public function render( EntityId $entityId, $propertyLabelOrId, $acceptableRanks = null ) { $renderedVariantsArray = $this->buildRenderedVariantsArray( $entityId, $propertyLabelOrId ); return $this->processRenderedArray( $renderedVariantsArray ); diff --git a/client/includes/WikibaseClient.php b/client/includes/WikibaseClient.php index a021ea2..3653e77 100644 --- a/client/includes/WikibaseClient.php +++ b/client/includes/WikibaseClient.php @@ -24,7 +24,7 @@ use Wikibase\Client\Store\TitleFactory; use Wikibase\ClientStore; use Wikibase\DataAccess\PropertyIdResolver; -use Wikibase\DataAccess\PropertyParserFunction\PropertyClaimsRendererFactory; +use Wikibase\DataAccess\PropertyParserFunction\EntityStatementsRendererFactory; use Wikibase\DataAccess\PropertyParserFunction\Runner; use Wikibase\DataAccess\SnaksFinder; use Wikibase\DataModel\Entity\BasicEntityIdParser; @@ -682,9 +682,9 @@ } /** - * @return PropertyClaimsRendererFactory + * @return EntityStatementsRendererFactory */ - private function getPropertyClaimsRendererFactory() { + private function getEntityStatementsRendererFactory() { $entityLookup = $this->getEntityLookup(); $snaksFinder = new SnaksFinder( $entityLookup ); @@ -694,7 +694,7 @@ $this->getStore()->getPropertyLabelResolver() ); - return new PropertyClaimsRendererFactory( + return new EntityStatementsRendererFactory( $propertyIdResolver, $snaksFinder, $this->getLanguageFallbackChainFactory(), @@ -707,7 +707,7 @@ */ public function getPropertyParserFunctionRunner() { return new Runner( - $this->getPropertyClaimsRendererFactory(), + $this->getEntityStatementsRendererFactory(), $this->getStore()->getSiteLinkLookup(), $this->settings->getSetting( 'siteGlobalID' ) ); -- To view, visit https://gerrit.wikimedia.org/r/189652 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I16fe16bad9adbc91116cdcc70159ecd7bcf18c0c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Aude <aude.w...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits