Bene has uploaded a new change for review.
https://gerrit.wikimedia.org/r/271140
Change subject: [WIP] Use EntityTypeRegistry for serialization
......................................................................
[WIP] Use EntityTypeRegistry for serialization
Change-Id: Ia88c79153a3672c9248689186620beff211d8399
---
M client/includes/WikibaseClient.php
M composer.json
M repo/includes/WikibaseRepo.php
3 files changed, 71 insertions(+), 10 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/40/271140/1
diff --git a/client/includes/WikibaseClient.php
b/client/includes/WikibaseClient.php
index 04ea126..f820f50 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -5,6 +5,8 @@
use DataTypes\DataTypeFactory;
use DataValues\Deserializers\DataValueDeserializer;
use Deserializers\Deserializer;
+use Deserializers\DispatchableDeserializer;
+use Deserializers\DispatchingDeserializer;
use Exception;
use Hooks;
use JobQueueGroup;
@@ -52,6 +54,7 @@
use Wikibase\LanguageFallbackChainFactory;
use Wikibase\Lib\Changes\EntityChangeFactory;
use Wikibase\Lib\DataTypeDefinitions;
+use Wikibase\Lib\EntityTypeDefinitions;
use Wikibase\Lib\FormatterLabelDescriptionLookupFactory;
use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
use Wikibase\Lib\LanguageNameLookup;
@@ -171,6 +174,11 @@
private $dataTypeDefinitions;
/**
+ * @var EntityTypeDefinitions
+ */
+ private $entityTypeDefinitions;
+
+ /**
* @var TermLookup|null
*/
private $termLookup = null;
@@ -261,12 +269,14 @@
SettingsArray $settings,
Language $contentLanguage,
DataTypeDefinitions $dataTypeDefinitions,
+ EntityTypeDefinitions $entityTypeDefinitions,
SiteStore $siteStore = null
) {
$this->settings = $settings;
$this->contentLanguage = $contentLanguage;
$this->siteStore = $siteStore;
$this->dataTypeDefinitions = $dataTypeDefinitions;
+ $this->entityTypeDefinitions = $entityTypeDefinitions;
}
/**
@@ -482,10 +492,13 @@
* @return WikibaseClient
*/
private static function newInstance() {
- global $wgContLang, $wgWBClientSettings, $wgWBClientDataTypes;
+ global $wgContLang, $wgWBClientSettings, $wgWBClientDataTypes,
$wgWBClientEntityTypes;
$dataTypeDefinitions = $wgWBClientDataTypes;
Hooks::run( 'WikibaseClientDataTypes', array(
&$dataTypeDefinitions ) );
+
+ $entityTypeDefinitions = $wgWBClientEntityTypes;
+ Hooks::run( 'WikibaseClientEntityTypes', array(
&$entityTypeDefinitions ) );
$settings = new SettingsArray( $wgWBClientSettings );
@@ -495,7 +508,8 @@
new DataTypeDefinitions(
$dataTypeDefinitions,
$settings->getSetting( 'disabledDataTypes' )
- )
+ ),
+ new EntityTypeDefinitions( $entityTypeDefinitions )
);
}
@@ -787,7 +801,7 @@
* @return Deserializer
*/
public function getInternalEntityDeserializer() {
- return
$this->getInternalDeserializerFactory()->newEntityDeserializer();
+ return
$this->getInternalDeserializerFactory()->newEntityDeserializer(
$this->getEntityDeserializer() );
}
/**
@@ -1007,6 +1021,21 @@
}
/**
+ * @return DispatchableDeserializer
+ */
+ public function getEntityDeserializer() {
+ $deserializerFactoryCallbacks =
$this->entityTypeDefinitions->getDeserializerFactoryCallbacks();
+ $deserializerFactory = $this->getDeserializerFactory();
+ $deserializers = array();
+
+ foreach ( $deserializerFactoryCallbacks as $callback ) {
+ $deserializers[] = call_user_func( $callback,
$deserializerFactory );
+ }
+
+ return new DispatchingDeserializer( $deserializers );
+ }
+
+ /**
* @return RestrictedEntityLookup
*/
public function getRestrictedEntityLookup() {
diff --git a/composer.json b/composer.json
index 4caa2fa..207dde7 100644
--- a/composer.json
+++ b/composer.json
@@ -34,8 +34,8 @@
"data-values/javascript": "~0.8.0",
"data-values/value-view": "~0.16.0",
"wikibase/data-model": "~4.0",
- "wikibase/data-model-serialization": "~2.0",
- "wikibase/internal-serialization": "~2.0",
+ "wikibase/data-model-serialization": "~2.1-dev",
+ "wikibase/internal-serialization":
"dev-inject-entity-deserializer",
"wikibase/data-model-services": "^3.2.0",
"wikibase/data-model-javascript": "~2.0.0",
"wikibase/javascript-api": "~1.0",
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 1258ec3..8afe259 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -7,12 +7,15 @@
use DataValues\Deserializers\DataValueDeserializer;
use DataValues\Serializers\DataValueSerializer;
use Deserializers\Deserializer;
+use Deserializers\DispatchableDeserializer;
+use Deserializers\DispatchingDeserializer;
use HashBagOStuff;
use Hooks;
use IContextSource;
use Language;
use MediaWiki\Site\MediaWikiPageNameNormalizer;
use RequestContext;
+use Serializers\DispatchingSerializer;
use Serializers\Serializer;
use SiteSQLStore;
use SiteStore;
@@ -52,6 +55,7 @@
use Wikibase\Lib\EntityIdLinkFormatter;
use Wikibase\Lib\EntityIdPlainLinkFormatter;
use Wikibase\Lib\EntityIdValueFormatter;
+use Wikibase\Lib\EntityTypeDefinitions;
use Wikibase\Lib\FormatterLabelDescriptionLookupFactory;
use Wikibase\Lib\Interactors\TermIndexSearchInteractor;
use Wikibase\Lib\LanguageNameLookup;
@@ -214,6 +218,11 @@
private $dataTypeDefinitions;
/**
+ * @var EntityTypeDefinitions
+ */
+ private $entityTypeDefinitions;
+
+ /**
* @var Language
*/
private $defaultLanguage;
@@ -234,10 +243,13 @@
* @return WikibaseRepo
*/
private static function newInstance() {
- global $wgWBRepoDataTypes, $wgWBRepoSettings, $wgContLang;
+ global $wgWBRepoDataTypes, $wgWBRepoEntityTypes,
$wgWBRepoSettings, $wgContLang;
$dataTypeDefinitions = $wgWBRepoDataTypes;
Hooks::run( 'WikibaseRepoDataTypes', array(
&$dataTypeDefinitions ) );
+
+ $entityTypeDefinitions = $wgWBRepoEntityTypes;
+ Hooks::run( 'WikibaseRepoEntityTypes', array(
&$entityTypeDefinitions ) );
$settings = new SettingsArray( $wgWBRepoSettings );
@@ -247,6 +259,7 @@
$dataTypeDefinitions,
$settings->getSetting( 'disabledDataTypes' )
),
+ new EntityTypeDefinitions( $entityTypeDefinitions ),
$wgContLang
);
}
@@ -390,15 +403,18 @@
*
* @param SettingsArray $settings
* @param DataTypeDefinitions $dataTypeDefinitions
+ * @param EntityTypeDefinitions $entityTypeDefinitions
* @param Language|null $defaultLanguage
*/
public function __construct(
SettingsArray $settings,
DataTypeDefinitions $dataTypeDefinitions,
+ EntityTypeDefinitions $entityTypeDefinitions,
Language $defaultLanguage = null
) {
$this->settings = $settings;
$this->dataTypeDefinitions = $dataTypeDefinitions;
+ $this->entityTypeDefinitions = $entityTypeDefinitions;
$this->defaultLanguage = $defaultLanguage;
}
@@ -1128,14 +1144,22 @@
* @return Deserializer
*/
public function getInternalEntityDeserializer() {
- return
$this->getInternalDeserializerFactory()->newEntityDeserializer();
+ return
$this->getInternalDeserializerFactory()->newEntityDeserializer(
$this->getEntityDeserializer() );
}
/**
* @return Serializer
*/
public function getInternalEntitySerializer() {
- return
$this->getInternalSerializerFactory()->newEntitySerializer();
+ $serializerFactoryCallbacks =
$this->entityTypeDefinitions->getSerializerFactoryCallbacks();
+ $serializerFactory = $this->getInternalSerializerFactory();
+ $serializers = array();
+
+ foreach ( $serializerFactoryCallbacks as $callback ) {
+ $serializers[] = call_user_func( $callback,
$serializerFactory );
+ }
+
+ return new DispatchingSerializer( $serializers );
}
/**
@@ -1173,10 +1197,18 @@
}
/**
- * @return Deserializer
+ * @return DispatchableDeserializer
*/
public function getEntityDeserializer() {
- return $this->getDeserializerFactory()->newEntityDeserializer();
+ $deserializerFactoryCallbacks =
$this->entityTypeDefinitions->getDeserializerFactoryCallbacks();
+ $deserializerFactory = $this->getDeserializerFactory();
+ $deserializers = array();
+
+ foreach ( $deserializerFactoryCallbacks as $callback ) {
+ $deserializers[] = call_user_func( $callback,
$deserializerFactory );
+ }
+
+ return new DispatchingDeserializer( $deserializers );
}
/**
--
To view, visit https://gerrit.wikimedia.org/r/271140
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia88c79153a3672c9248689186620beff211d8399
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Bene <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits