Addshore has uploaded a new change for review.

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

Change subject: Use DM Serializetion in RB for labels & Descs
......................................................................

Use DM Serializetion in RB for labels & Descs

Change-Id: Iabe3a0df79f88c56d465629f84f6c94e2c62b1c3
---
M repo/includes/api/EditEntity.php
M repo/includes/api/ResultBuilder.php
M repo/includes/api/SetDescription.php
M repo/includes/api/SetLabel.php
M repo/tests/phpunit/includes/api/ResultBuilderTest.php
5 files changed, 145 insertions(+), 20 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/02/222602/4

diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php
index 8f730ff..ca9557a 100644
--- a/repo/includes/api/EditEntity.php
+++ b/repo/includes/api/EditEntity.php
@@ -540,8 +540,8 @@
                if ( $entity instanceof FingerprintProvider ) {
                        $fingerprint = $entity->getFingerprint();
 
-                       $builder->addLabels( 
$fingerprint->getLabels()->toTextArray(), 'entity' );
-                       $builder->addDescriptions( 
$fingerprint->getDescriptions()->toTextArray(), 'entity' );
+                       $builder->addLabels( $fingerprint->getLabels(), 
'entity' );
+                       $builder->addDescriptions( 
$fingerprint->getDescriptions(), 'entity' );
                        $builder->addAliases( 
$fingerprint->getAliasGroups()->toTextArray(), 'entity' );
                }
 
diff --git a/repo/includes/api/ResultBuilder.php 
b/repo/includes/api/ResultBuilder.php
index 7ccfb67..6048652 100644
--- a/repo/includes/api/ResultBuilder.php
+++ b/repo/includes/api/ResultBuilder.php
@@ -3,6 +3,7 @@
 namespace Wikibase\Api;
 
 use ApiResult;
+use DataValues\Serializers\DataValueSerializer;
 use InvalidArgumentException;
 use Revision;
 use Status;
@@ -11,6 +12,8 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Reference;
 use Wikibase\DataModel\SerializerFactory;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\EntityRevision;
 use Wikibase\Lib\Serializers\EntitySerializer;
 use Wikibase\Lib\Serializers\SerializationOptions;
@@ -369,14 +372,23 @@
         *
         * @since 0.5
         *
-        * @param array $labels the labels to set in the result
+        * @param TermList $labels the labels to insert in the result
         * @param array|string $path where the data is located
         */
-       public function addLabels( array $labels, $path ) {
-               $labelSerializer = 
$this->libSerializerFactory->newLabelSerializer( $this->getOptions() );
+       public function addLabels( TermList $labels, $path ) {
+               $this->addTermList( $labels, 'labels', 'label', $path );
+       }
 
-               $values = $labelSerializer->getSerialized( $labels );
-               $this->setList( $path, 'labels', $values, 'label' );
+       /**
+        * Adds fake serialization to show a label has been removed
+        *
+        * @since 0.5
+        *
+        * @param string $language
+        * @param array|string $path where the data is located
+        */
+       public function addRemovedLabel( $language, $path ) {
+               $this->addRemovedTerm( $language, 'labels', 'label', $path );
        }
 
        /**
@@ -384,14 +396,57 @@
         *
         * @since 0.5
         *
-        * @param array $descriptions the descriptions to insert in the result
+        * @param TermList $descriptions the descriptions to insert in the 
result
         * @param array|string $path where the data is located
         */
-       public function addDescriptions( array $descriptions, $path ) {
-               $descriptionSerializer = 
$this->libSerializerFactory->newDescriptionSerializer( $this->getOptions() );
+       public function addDescriptions( TermList $descriptions, $path ) {
+               $this->addTermList( $descriptions, 'descriptions', 
'description', $path );
+       }
 
-               $values = $descriptionSerializer->getSerialized( $descriptions 
);
-               $this->setList( $path, 'descriptions', $values, 'description' );
+       /**
+        * Adds fake serialization to show a label has been removed
+        *
+        * @since 0.5
+        *
+        * @param string $language
+        * @param array|string $path where the data is located
+        */
+       public function addRemovedDescription( $language, $path ) {
+               $this->addRemovedTerm( $language, 'descriptions', 
'description', $path );
+       }
+
+       /**
+        * Get serialized TermList and add it to the result
+        *
+        * @since 0.5
+        *
+        * @param TermList $termList
+        * @param string $name
+        * @param string $tag
+        * @param array|string $path where the data is located
+        */
+       private function addTermList( TermList $termList, $name, $tag, $path ) {
+               $serializer = $this->serializerFactory->newTermListSerializer();
+               $value = $serializer->serialize( $termList );
+               $this->setList( $path, $name, $value, $tag );
+       }
+
+       /**
+        * Adds fake serialization to show a term has been removed
+        *
+        * @since 0.5
+        *
+        * @param string $language
+        * @param array|string $path where the data is located
+        */
+       private function addRemovedTerm( $language, $name, $tag, $path ) {
+               $value = array(
+                       $language => array(
+                               'language' => $language,
+                               'removed' => '',
+                       )
+               );
+               $this->setList( $path, $name, $value, $tag );
        }
 
        /**
diff --git a/repo/includes/api/SetDescription.php 
b/repo/includes/api/SetDescription.php
index f20429a..50b0929 100644
--- a/repo/includes/api/SetDescription.php
+++ b/repo/includes/api/SetDescription.php
@@ -48,9 +48,13 @@
                $changeOp = $this->getChangeOp( $params );
                $this->applyChangeOp( $changeOp, $entity, $summary );
 
-               $descriptions = array( $language => ( $entity->getDescription( 
$language ) !== false ) ? $entity->getDescription( $language ) : "" );
-
-               $this->getResultBuilder()->addDescriptions( $descriptions, 
'entity' );
+               $resultBuilder = $this->getResultBuilder();
+               if ( $entity->getFingerprint()->hasDescription( $language ) ) {
+                       $termList = 
$entity->getFingerprint()->getDescriptions()->getWithLanguages( array( 
$language ) );
+                       $resultBuilder->addDescriptions( $termList, 'entity' );
+               } else {
+                       $this->getResultBuilder()->addRemovedDescription( 
$language, 'entity' );
+               }
 
                return $summary;
        }
diff --git a/repo/includes/api/SetLabel.php b/repo/includes/api/SetLabel.php
index 56e5736..f438416 100644
--- a/repo/includes/api/SetLabel.php
+++ b/repo/includes/api/SetLabel.php
@@ -48,9 +48,13 @@
                $changeOp = $this->getChangeOp( $params );
                $this->applyChangeOp( $changeOp, $entity, $summary );
 
-               $labels = array( $language => ( $entity->getLabel( $language ) 
!== false ) ? $entity->getLabel( $language ) : "" );
-
-               $this->getResultBuilder()->addLabels( $labels, 'entity' );
+               $resultBuilder = $this->getResultBuilder();
+               if ( $entity->getFingerprint()->hasLabel( $language ) ) {
+                       $termList = 
$entity->getFingerprint()->getLabels()->getWithLanguages( array( $language ) );
+                       $resultBuilder->addLabels( $termList, 'entity' );
+               } else {
+                       $this->getResultBuilder()->addRemovedLabel( $language, 
'entity' );
+               }
 
                return $summary;
        }
diff --git a/repo/tests/phpunit/includes/api/ResultBuilderTest.php 
b/repo/tests/phpunit/includes/api/ResultBuilderTest.php
index 2b279ec..79f37ac 100644
--- a/repo/tests/phpunit/includes/api/ResultBuilderTest.php
+++ b/repo/tests/phpunit/includes/api/ResultBuilderTest.php
@@ -17,6 +17,8 @@
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\SnakList;
 use Wikibase\DataModel\Statement\Statement;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\EntityRevision;
 use Wikibase\Lib\Serializers\SerializationOptions;
 use Wikibase\Lib\Serializers\LibSerializerFactory;
@@ -451,7 +453,10 @@
 
        public function testAddLabels() {
                $result = $this->getDefaultResult();
-               $labels = array( 'en' => 'foo', 'de' => 'bar' );
+               $labels = new TermList( array(
+                       new Term( 'en', 'foo' ),
+                       new Term( 'de', 'bar' ),
+               ) );
                $path = array( 'entities', 'Q1' );
                $expected = array(
                        'entities' => array(
@@ -481,9 +486,39 @@
                $this->assertEquals( $expected, $data );
        }
 
+       public function testAddRemovedLabel() {
+               $result = $this->getDefaultResult();
+               $path = array( 'entities', 'Q1' );
+               $expected = array(
+                       'entities' => array(
+                               'Q1' => array(
+                                       'labels' => array(
+                                               'en' => array(
+                                                       'language' => 'en',
+                                                       'removed' => '',
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+
+               $resultBuilder = $this->getResultBuilder( $result );
+               $resultBuilder->addRemovedLabel( 'en', $path );
+
+               $data = $result->getResultData( null, array(
+                       'BC' => array(),
+                       'Types' => array(),
+                       'Strip' => 'all',
+               ) );
+               $this->assertEquals( $expected, $data );
+       }
+
        public function testAddDescriptions() {
                $result = $this->getDefaultResult();
-               $descriptions = array( 'en' => 'foo', 'de' => 'bar' );
+               $descriptions = new TermList( array(
+                       new Term( 'en', 'foo' ),
+                       new Term( 'de', 'bar' ),
+               ) );
                $path = array( 'entities', 'Q1' );
                $expected = array(
                        'entities' => array(
@@ -513,6 +548,33 @@
                $this->assertEquals( $expected, $data );
        }
 
+       public function testAddRemovedDescription() {
+               $result = $this->getDefaultResult();
+               $path = array( 'entities', 'Q1' );
+               $expected = array(
+                       'entities' => array(
+                               'Q1' => array(
+                                       'descriptions' => array(
+                                               'en' => array(
+                                                       'language' => 'en',
+                                                       'removed' => '',
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+
+               $resultBuilder = $this->getResultBuilder( $result );
+               $resultBuilder->addRemovedDescription( 'en', $path );
+
+               $data = $result->getResultData( null, array(
+                       'BC' => array(),
+                       'Types' => array(),
+                       'Strip' => 'all',
+               ) );
+               $this->assertEquals( $expected, $data );
+       }
+
        public function testAddAliases() {
                $result = $this->getDefaultResult();
                $aliases = array( 'en' => array( 'boo', 'hoo' ), 'de' => array( 
'ham', 'cheese' ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iabe3a0df79f88c56d465629f84f6c94e2c62b1c3
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to