Aude has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/343553 )

Change subject: Add MediaInfoChangeOpDeserializer [WIP]
......................................................................

Add MediaInfoChangeOpDeserializer [WIP]

needs tests...

Change-Id: I59a226de5ec0268ac6aadba59aa1e5080f6e5571
---
M WikibaseMediaInfo.entitytypes.php
A src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php
2 files changed, 84 insertions(+), 0 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseMediaInfo 
refs/changes/53/343553/1

diff --git a/WikibaseMediaInfo.entitytypes.php 
b/WikibaseMediaInfo.entitytypes.php
index b162083..6130d62 100644
--- a/WikibaseMediaInfo.entitytypes.php
+++ b/WikibaseMediaInfo.entitytypes.php
@@ -19,6 +19,7 @@
 use Wikibase\DataModel\SerializerFactory;
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
 use Wikibase\LanguageFallbackChain;
+use Wikibase\MediaInfo\ChangeOp\Deserialization\MediaInfoChangeOpDeserializer;
 use Wikibase\MediaInfo\Content\MediaInfoContent;
 use Wikibase\MediaInfo\Content\MediaInfoHandler;
 use Wikibase\MediaInfo\Content\MissingMediaInfoHandler;
@@ -119,5 +120,10 @@
                // Identifier of a resource loader module that, when 
`require`d, returns a function
                // returning a deserializer
                'js-deserializer-factory-function' => 
'wikibase.mediainfo.getDeserializer',
+               'changeop-deserializer-callback' => function() {
+                       return new MediaInfoChangeOpDeserializer(
+                               
WikibaseRepo::getDefaultInstance()->getChangeOpDeserializerFactory()
+                       );
+               },
        ]
 ];
diff --git a/src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php 
b/src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php
new file mode 100644
index 0000000..10c8070
--- /dev/null
+++ b/src/ChangeOp/Deserialization/MediaInfoChangeOpDeserializer.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Wikibase\MediaInfo\ChangeOp\Deserialization;
+
+use Wikibase\ChangeOp\ChangeOp;
+use Wikibase\ChangeOp\ChangeOps;
+use Wikibase\Repo\ChangeOp\ChangeOpDeserializer;
+use Wikibase\Repo\ChangeOp\Deserialization\ChangeOpDeserializerFactory;
+
+/**
+ * Constructs ChangeOp objects for MediaInfo change requests
+ *
+ * @license GPL-2.0+
+ */
+class MediaInfoChangeOpDeserializer implements ChangeOpDeserializer {
+
+       /**
+        * @var ChangeOpDeserializerFactory
+        */
+       private $factory;
+
+       public function __construct( ChangeOpDeserializerFactory $factory ) {
+               $this->factory = $factory;
+       }
+
+       /**
+        * @see ChangeOpDeserializer::createEntityChangeOp
+        *
+        * @param array[] $changeRequest
+        *
+        * @return ChangeOp
+        * @throws ChangeOpDeserializationException
+        */
+       public function createEntityChangeOp( array $changeRequest ) {
+               $changeOps = new ChangeOps();
+
+               if ( array_key_exists( 'labels', $changeRequest ) ) {
+                       $changeOps->add(
+                               
$this->factory->getLabelsChangeOpDeserializer()->createEntityChangeOp(
+                                       $changeRequest
+                               )
+                       );
+               }
+
+               if ( array_key_exists( 'descriptions', $changeRequest ) ) {
+                       $changeOps->add(
+                               
$this->factory->getDescriptionsChangeOpDeserializer()->createEntityChangeOp(
+                                       $changeRequest
+                               )
+                       );
+               }
+
+               if ( array_key_exists( 'aliases', $changeRequest ) ) {
+                       throw new ChangeOpDeserializationException(
+                               'MediaInfo cannot have aliases',
+                               'not-supported'
+                       );
+               }
+
+               if ( array_key_exists( 'claims', $changeRequest ) ) {
+                       $changeOps->add(
+                               
$this->factory->getClaimsChangeOpDeserializer()->createEntityChangeOp(
+                                       $changeRequest
+                               )
+                       );
+               }
+
+               if ( array_key_exists( 'sitelinks', $changeRequest ) ) {
+                       throw new ChangeOpDeserializationException(
+                               'MediaInfo cannot have sitelinks',
+                               'not-supported'
+                       );
+               }
+
+               return $changeOps;
+       }
+
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I59a226de5ec0268ac6aadba59aa1e5080f6e5571
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseMediaInfo
Gerrit-Branch: master
Gerrit-Owner: Aude <aude.w...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to