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