Thiemo Mättig (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/358974 )

Change subject: Add missing (de)serialization for senses and elements of forms
......................................................................

Add missing (de)serialization for senses and elements of forms

Change-Id: Ic8e98ef37f80d9a461673d14fb5d3725ee81e632
---
M src/DataModel/Serialization/LexemeDeserializer.php
M src/DataModel/Serialization/LexemeSerializer.php
M tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php
3 files changed, 106 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseLexeme 
refs/changes/74/358974/1

diff --git a/src/DataModel/Serialization/LexemeDeserializer.php 
b/src/DataModel/Serialization/LexemeDeserializer.php
index 66bd6b3..8968e53 100644
--- a/src/DataModel/Serialization/LexemeDeserializer.php
+++ b/src/DataModel/Serialization/LexemeDeserializer.php
@@ -12,6 +12,8 @@
 use Wikibase\Lexeme\DataModel\LexemeForm;
 use Wikibase\Lexeme\DataModel\LexemeFormId;
 use Wikibase\Lexeme\DataModel\LexemeId;
+use Wikibase\Lexeme\DataModel\Sense;
+use Wikibase\Lexeme\DataModel\SenseId;
 
 /**
  * @license GPL-2.0+
@@ -61,7 +63,8 @@
                        $this->deserializeLexicalCategory( $serialization ),
                        $this->deserializeLanguage( $serialization ),
                        $this->deserializeStatements( $serialization ),
-                       $this->deserializeForms( $serialization )
+                       $this->deserializeForms( $serialization ),
+                       $this->deserializeSenses( $serialization )
                );
        }
 
@@ -155,14 +158,71 @@
         */
        private function deserializeForm( array $serialization ) {
                $id = null;
-
                if ( array_key_exists( 'id', $serialization ) ) {
-                       // We may want to use an EntityIdDeserializer here
                        $id = new LexemeFormId( $serialization['id'] );
                }
 
-               // TODO: Throw proper exception if array key does not exist
-               return new LexemeForm( $id, $serialization['representation'], 
[] );
+               $grammaticalFeatures = [];
+               if ( array_key_exists( 'grammaticalFeatures', $serialization ) 
) {
+                       foreach ( $serialization['grammaticalFeatures'] as $id 
) {
+                               $grammaticalFeatures[] = new ItemId( $id );
+                       }
+               }
+
+               $statements = null;
+               if ( array_key_exists( 'claims', $serialization ) ) {
+                       /** @var StatementList $statements */
+                       $statements = 
$this->statementListDeserializer->deserialize( $serialization['claims'] );
+               }
+
+               return new LexemeForm(
+                       $id,
+                       // TODO: Throw proper exception if array key does not 
exist
+                       $serialization['representation'],
+                       $grammaticalFeatures,
+                       $statements
+               );
+       }
+
+       /**
+        * @param array $serialization
+        *
+        * @return Sense[]
+        */
+       private function deserializeSenses( array $serialization ) {
+               $senses = [];
+
+               if ( array_key_exists( 'senses', $serialization ) ) {
+                       foreach ( $serialization['senses'] as 
$senseSerialization ) {
+                               $senses[] = $this->deserializeSense( 
$senseSerialization );
+                       }
+               }
+
+               return $senses;
+       }
+
+       /**
+        * @param array $serialization
+        *
+        * @return Sense
+        */
+       private function deserializeSense( array $serialization ) {
+               $id = null;
+               if ( array_key_exists( 'id', $serialization ) ) {
+                       $id = new SenseId( $serialization['id'] );
+               }
+
+               $glosses = new TermList();
+               if ( array_key_exists( 'glosses', $serialization ) ) {
+                       $glosses = $this->termListDeserializer->deserialize( 
$serialization['glosses'] );
+               }
+
+               $statements = new StatementList();
+               if ( array_key_exists( 'claims', $serialization ) ) {
+                       $statements = 
$this->statementListDeserializer->deserialize( $serialization['claims'] );
+               }
+
+               return new Sense( $id, $glosses, $statements );
        }
 
 }
diff --git a/src/DataModel/Serialization/LexemeSerializer.php 
b/src/DataModel/Serialization/LexemeSerializer.php
index ce1476c..a155f40 100644
--- a/src/DataModel/Serialization/LexemeSerializer.php
+++ b/src/DataModel/Serialization/LexemeSerializer.php
@@ -10,6 +10,7 @@
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\Lexeme\DataModel\Lexeme;
 use Wikibase\Lexeme\DataModel\LexemeForm;
+use Wikibase\Lexeme\DataModel\Sense;
 
 /**
  * @license GPL-2.0+
@@ -102,6 +103,7 @@
                );
 
                $serialization['forms'] = $this->serializeForms( 
$lexeme->getForms() );
+               $serialization['senses'] = $this->serializeSenses( 
$lexeme->getSenses() );
 
                return $serialization;
        }
@@ -150,4 +152,42 @@
                return $serialization;
        }
 
+
+       /**
+        * @param Sense[] $senses
+        *
+        * @return array[]
+        */
+       private function serializeSenses( array $senses ) {
+               $serialization = [];
+
+               foreach ( $senses as $sense ) {
+                       $serialization[] = $this->serializeSense( $sense );
+               }
+
+               return $serialization;
+       }
+
+       /**
+        * @param Sense $sense
+        *
+        * @return array
+        */
+       private function serializeSense( Sense $sense ) {
+               $serialization = [];
+
+               $id = $sense->getId();
+               if ( $id !== null ) {
+                       // Note: This ID serialization is final, because there 
is no EntityIdSerializer
+                       $serialization['id'] = $id->getSerialization();
+               }
+
+               $serialization['glosses'] = 
$this->termListSerializer->serialize( $sense->getGlosses() );
+               $serialization['claims'] = 
$this->statementListSerializer->serialize(
+                       $sense->getStatements()
+               );
+
+               return $serialization;
+       }
+
 }
diff --git 
a/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php 
b/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php
index c7e1699..305917f 100644
--- a/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php
+++ b/tests/phpunit/composer/DataModel/Serialization/LexemeSerializerTest.php
@@ -57,7 +57,7 @@
                $serialization = $this->newSerializer()->serialize( $lexeme );
 
                $this->assertSame(
-                       [ 'type', 'id', 'lexicalCategory', 'language', 
'claims', 'forms' ],
+                       [ 'type', 'id', 'lexicalCategory', 'language', 
'claims', 'forms', 'senses' ],
                        array_keys( $serialization )
                );
        }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic8e98ef37f80d9a461673d14fb5d3725ee81e632
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to