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