jenkins-bot has submitted this change and it was merged.
Change subject: Inject access to entities into EntityView.
......................................................................
Inject access to entities into EntityView.
This greatly reduces the reliance of EntityView on global state
and thus allows tests to instantiate EntityView in isolation.
Change-Id: I34717dedd7095e64c32728868a8c0b06af40475c
---
M repo/includes/EntityView.php
M repo/includes/specials/SpecialItemResolver.php
2 files changed, 52 insertions(+), 40 deletions(-)
Approvals:
Aude: Looks good to me, approved
jenkins-bot: Verified
diff --git a/repo/includes/EntityView.php b/repo/includes/EntityView.php
index 6d1b11d..e5a0adc 100644
--- a/repo/includes/EntityView.php
+++ b/repo/includes/EntityView.php
@@ -54,6 +54,7 @@
* @licence GNU GPL v2+
* @author H. Snater < mediawiki at snater.com >
* @author Daniel Werner
+ * @author Daniel Kinzler
*/
abstract class EntityView extends \ContextSource {
@@ -68,6 +69,21 @@
* @var EntityIdFormatter
*/
protected $idFormatter;
+
+ /**
+ * @var EntityLookup
+ */
+ protected $entityLookup;
+
+ /**
+ * @var EntityTitleLookup
+ */
+ protected $entityTitleLookup;
+
+ /**
+ * @var PropertyDataTypeLookup
+ */
+ protected $dataTypeLookup;
/**
* Maps entity types to the corresponding entity view.
@@ -86,35 +102,29 @@
);
/**
- * Constructor.
+ * @since 0.1
*
- * @todo think about using IContextSource here. Parser for example
uses parser options (which also can be generated
- * from an IContextSource) but this seems sufficient for now.
- *
- * @since 0.1
- *
+ * @param IContextSource|null $context
* @param ValueFormatterFactory $valueFormatters
* @param Lib\PropertyDataTypeLookup $dataTypeLookup
- * @param EntityLookup $entityLoader
- * @param IContextSource|null $context
+ * @param EntityLookup $entityLookup
+ * @param EntityTitleLookup $entityTitleLookup
+ * @param Lib\EntityIdFormatter $idFormatter
*/
public function __construct(
+ IContextSource $context,
ValueFormatterFactory $valueFormatters,
PropertyDataTypeLookup $dataTypeLookup,
- EntityLookup $entityLoader,
- IContextSource $context = null ) {
-
+ EntityLookup $entityLookup,
+ EntityTitleLookup $entityTitleLookup,
+ EntityIdFormatter $idFormatter
+ ) {
+ $this->setContext( $context );
$this->valueFormatters = $valueFormatters;
$this->dataTypeLookup = $dataTypeLookup;
- $this->entityLoader = $entityLoader;
-
- if ( !$context ) {
- $context = \RequestContext::getMain();
- }
- $this->setContext( $context );
-
- // TODO: this need to be properly injected
- $this->idFormatter =
WikibaseRepo::getDefaultInstance()->getIdFormatter();
+ $this->entityLookup = $entityLookup;
+ $this->entityTitleLookup = $entityTitleLookup;
+ $this->idFormatter = $idFormatter;
}
/**
@@ -263,7 +273,7 @@
$contentFactory = EntityContentFactory::singleton();
foreach ( $usedEntityIds as $entityId ) {
- $pout->addLink( $contentFactory->getTitleForId(
$entityId ) );
+ $pout->addLink(
$this->entityTitleLookup->getTitleForId( $entityId ) );
}
// treat URL values as external links ------
@@ -555,12 +565,12 @@
$propertyHtml = '';
$propertyId =
$claims[0]->getMainSnak()->getPropertyId();
- $property =
EntityContentFactory::singleton()->getFromId( $propertyId );
+ $property = $this->entityLookup->getEntity( $propertyId
);
$propertyLink = '';
- if ( isset( $property ) ) {
+ if ( $property ) {
$propertyLink = \Linker::link(
- $property->getTitle(),
- htmlspecialchars(
$property->getEntity()->getLabel( $languageCode ) )
+
$this->entityTitleLookup->getTitleForId( $property->getId() ),
+ htmlspecialchars( $property->getLabel(
$languageCode ) )
);
}
@@ -883,17 +893,16 @@
protected function getBasicEntityInfo( array $entityIds, $langCode ) {
wfProfileIn( __METHOD__ );
- $entityContentFactory = EntityContentFactory::singleton();
- $entities = $this->entityLoader->getEntities( $entityIds );
+ $entities = $this->entityLookup->getEntities( $entityIds );
$entityInfo = array();
$serializerFactory = new SerializerFactory();
- // TODO: use injected id formatter
- $serializationOptions = new EntitySerializationOptions(
WikibaseRepo::getDefaultInstance()->getIdFormatter() );
+ $serializationOptions = new EntitySerializationOptions(
$this->idFormatter );
$serializationOptions->setProps( array( 'labels',
'descriptions', 'datatype' ) );
$serializationOptions->setLanguages( array( $langCode ) );
+ /* @var Entity $entity */
foreach( $entities as $prefixedId => $entity ) {
if( $entity === null ) {
continue;
@@ -901,12 +910,12 @@
$serializer =
$serializerFactory->newSerializerForObject( $entity, $serializationOptions );
$entityInfo[ $prefixedId ] =
$serializer->getSerialized( $entity );
- $entityContent = $entityContentFactory->getFromId(
$entity->getId() );
+ $title = $this->entityTitleLookup->getTitleForId(
$entity->getId() );
// TODO: should perhaps implement and use a
EntityContentSerializer since this is mixed,
// serialized Entity and EntityContent data because of
adding the URL:
- $entityInfo[ $prefixedId ]['title'] =
$entityContent->getTitle()->getPrefixedText();
- $entityInfo[ $prefixedId ]['lastrevid'] =
$entityContent->getWikiPage()->getRevision()->getId();
+ $entityInfo[ $prefixedId ]['title'] =
$title->getPrefixedText();
+ $entityInfo[ $prefixedId ]['lastrevid'] =
$title->getLatestRevID();
}
wfProfileOut( __METHOD__ );
@@ -921,7 +930,7 @@
* @param EntityContent $entity
* @param ValueFormatterFactory $valueFormatters
* @param Lib\PropertyDataTypeLookup $dataTypeLookup
- * @param EntityLookup $entityLoader
+ * @param EntityLookup $entityLookup
* @param IContextSource|null $context
*
* @throws \MWException
@@ -931,7 +940,7 @@
EntityContent $entity,
ValueFormatterFactory $valueFormatters,
PropertyDataTypeLookup $dataTypeLookup,
- EntityLookup $entityLoader,
+ EntityLookup $entityLookup,
IContextSource $context = null
) {
$type = $entity->getEntity()->getType();
@@ -940,11 +949,14 @@
throw new MWException( "No entity view known for
handling entities of type '$type'" );
}
- $instance = new self::$typeMap[ $type ](
- $valueFormatters,
- $dataTypeLookup,
- $entityLoader,
- $context );
+ if ( !$context ) {
+ $context = \RequestContext::getMain();
+ }
+
+ $idFormatter =
WikibaseRepo::getDefaultInstance()->getIdFormatter();
+ $entityTitleLookup = EntityContentFactory::singleton();
+
+ $instance = new self::$typeMap[ $type ]( $context,
$valueFormatters, $dataTypeLookup, $entityLookup, $entityTitleLookup,
$idFormatter );
return $instance;
}
}
diff --git a/repo/includes/specials/SpecialItemResolver.php
b/repo/includes/specials/SpecialItemResolver.php
index 029739e..6ebf92f 100644
--- a/repo/includes/specials/SpecialItemResolver.php
+++ b/repo/includes/specials/SpecialItemResolver.php
@@ -108,7 +108,7 @@
protected function displayItem( Wikibase\ItemContent $itemContent ) {
$valueFormatters = new ValueFormatterFactory(
$GLOBALS['wgValueFormatters'] );
- $view = new Wikibase\ItemView( $valueFormatters,
$this->getContext() );
+ $view = \Wikibase\EntityView::newForEntityContent(
$itemContent, $valueFormatters, $this->getContext() );
$view->render( $itemContent );
$this->getOutput()->setPageTitle(
$itemContent->getItem()->getLabel( $this->getLanguage()->getCode() ) );
--
To view, visit https://gerrit.wikimedia.org/r/75886
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I34717dedd7095e64c32728868a8c0b06af40475c
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Aude <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Daniel Werner <[email protected]>
Gerrit-Reviewer: Henning Snater <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: Liangent <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits