Bene has uploaded a new change for review.

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

Change subject: Allow entity serializers to be created with custom options
......................................................................

Allow entity serializers to be created with custom options

This patch adds an optional parameter to the getEntitySerializer factory
methods in WikibaseRepo and adds the method to WikibaseClient. This allows
us to create serializers for all registered entity types while still
supporting the custom options one can specify in the SerializerFactory.

Change-Id: I198629dea216d76341b4c12b557a4689212df7c7
---
M client/includes/WikibaseClient.php
M repo/includes/WikibaseRepo.php
2 files changed, 40 insertions(+), 7 deletions(-)


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

diff --git a/client/includes/WikibaseClient.php 
b/client/includes/WikibaseClient.php
index ba25868..8a014c0 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -10,6 +10,7 @@
 use DataValues\MultilingualTextValue;
 use DataValues\NumberValue;
 use DataValues\QuantityValue;
+use DataValues\Serializers\DataValueSerializer;
 use DataValues\StringValue;
 use DataValues\TimeValue;
 use DataValues\UnknownValue;
@@ -23,6 +24,8 @@
 use MediaWikiSite;
 use MWException;
 use RequestContext;
+use Serializers\DispatchingSerializer;
+use Serializers\Serializer;
 use Site;
 use SiteSQLStore;
 use SiteStore;
@@ -37,6 +40,7 @@
 use Wikibase\Client\ParserOutput\ClientParserOutputDataUpdater;
 use Wikibase\Client\RecentChanges\RecentChangeFactory;
 use Wikibase\DataModel\Entity\EntityIdValue;
+use Wikibase\DataModel\SerializerFactory;
 use Wikibase\DataModel\Services\Lookup\RestrictedEntityLookup;
 use Wikibase\Client\DataAccess\SnaksFinder;
 use Wikibase\Client\Hooks\LanguageLinkBadgeDisplay;
@@ -123,6 +127,11 @@
         * @var Deserializer|null
         */
        private $entityDeserializer = null;
+
+       /**
+        * @var Serializer[]
+        */
+       private $entitySerializers = array();
 
        /**
         * @var EntityIdParser|null
@@ -879,6 +888,27 @@
        }
 
        /**
+        * @param int $options bitwise combination of the 
SerializerFactory::OPTION_ flags
+        *
+        * @return Serializer
+        */
+       public function getEntitySerializer( $options = 0 ) {
+               if ( !isset( $this->entitySerializers[$options] ) ) {
+                       $serializerFactoryCallbacks = 
$this->entityTypeDefinitions->getSerializerFactoryCallbacks();
+                       $serializerFactory = new SerializerFactory( new 
DataValueSerializer(), $options );
+                       $serializers = array();
+
+                       foreach ( $serializerFactoryCallbacks as $callback ) {
+                               $serializers[] = call_user_func( $callback, 
$serializerFactory );
+                       }
+
+                       $this->entitySerializers[$options] = new 
DispatchingSerializer( $serializers );
+               }
+
+               return $this->entitySerializers[$options];
+       }
+
+       /**
         * @return DataValueDeserializer
         */
        private function getDataValueDeserializer() {
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 9044a12..984b3f9 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -42,6 +42,7 @@
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\SerializerFactory;
 use Wikibase\DataModel\Services\Diff\EntityDiffer;
 use Wikibase\DataModel\Services\EntityId\SuffixEntityIdParser;
 use Wikibase\DataModel\Services\Lookup\EntityLookup;
@@ -177,9 +178,9 @@
        private $entityDeserializer = null;
 
        /**
-        * @var Serializer|null
+        * @var Serializer[]
         */
-       private $entitySerializer = null;
+       private $entitySerializers = array();
 
        /**
         * @var EntityIdParser|null
@@ -1277,22 +1278,24 @@
        }
 
        /**
+        * @param int $options bitwise combination of the 
SerializerFactory::OPTION_ flags
+        *
         * @return Serializer
         */
-       public function getEntitySerializer() {
-               if ( $this->entitySerializer === null ) {
+       public function getEntitySerializer( $options = 0 ) {
+               if ( !isset( $this->entitySerializers[$options] ) ) {
                        $serializerFactoryCallbacks = 
$this->entityTypeDefinitions->getSerializerFactoryCallbacks();
-                       $serializerFactory = $this->getSerializerFactory();
+                       $serializerFactory = new SerializerFactory( new 
DataValueSerializer(), $options );
                        $serializers = array();
 
                        foreach ( $serializerFactoryCallbacks as $callback ) {
                                $serializers[] = call_user_func( $callback, 
$serializerFactory );
                        }
 
-                       $this->entitySerializer = new DispatchingSerializer( 
$serializers );
+                       $this->entitySerializers[$options] = new 
DispatchingSerializer( $serializers );
                }
 
-               return $this->entitySerializer;
+               return $this->entitySerializers[$options];
        }
 
        /**

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I198629dea216d76341b4c12b557a4689212df7c7
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