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

Reply via email to