Bene has uploaded a new change for review.

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

Change subject: Make api modules work with narrower interfaces
......................................................................

Make api modules work with narrower interfaces

This patch removes bindings to FingerprintProvider from term related api
modules and checks for narrower interfaces for labels, descriptions and
aliases.

Change-Id: I6e704b2898a33c16b4368fb1afd0dccc53011c4e
---
M repo/includes/Api/EditEntity.php
M repo/includes/Api/SetAliases.php
M repo/includes/Api/SetDescription.php
M repo/includes/Api/SetLabel.php
4 files changed, 44 insertions(+), 27 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/23/276723/1

diff --git a/repo/includes/Api/EditEntity.php b/repo/includes/Api/EditEntity.php
index 22e90ec..254ff30 100644
--- a/repo/includes/Api/EditEntity.php
+++ b/repo/includes/Api/EditEntity.php
@@ -23,7 +23,9 @@
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Statement\Statement;
 use Wikibase\DataModel\Statement\StatementListProvider;
-use Wikibase\DataModel\Term\FingerprintProvider;
+use Wikibase\DataModel\Term\AliasesProvider;
+use Wikibase\DataModel\Term\DescriptionsProvider;
+use Wikibase\DataModel\Term\LabelsProvider;
 use Wikibase\EntityFactory;
 use Wikibase\Lib\ContentLanguages;
 use Wikibase\Lib\Store\EntityRevisionLookup;
@@ -314,7 +316,7 @@
                //       for more efficient validation!
 
                if ( array_key_exists( 'labels', $data ) ) {
-                       if ( !( $entity instanceof FingerprintProvider ) ) {
+                       if ( !( $entity instanceof LabelsProvider ) ) {
                                $this->errorReporter->dieError( 'The given 
entity cannot contain labels', 'not-supported' );
                        }
                        $this->assertArray( $data['labels'], 'List of labels 
must be an array' );
@@ -322,7 +324,7 @@
                }
 
                if ( array_key_exists( 'descriptions', $data ) ) {
-                       if ( !( $entity instanceof FingerprintProvider ) ) {
+                       if ( !( $entity instanceof DescriptionsProvider ) ) {
                                $this->errorReporter->dieError( 'The given 
entity cannot contain descriptions', 'not-supported' );
                        }
                        $this->assertArray( $data['descriptions'], 'List of 
descriptions must be an array' );
@@ -330,7 +332,7 @@
                }
 
                if ( array_key_exists( 'aliases', $data ) ) {
-                       if ( !( $entity instanceof FingerprintProvider ) ) {
+                       if ( !( $entity instanceof AliasesProvider ) ) {
                                $this->errorReporter->dieError( 'The given 
entity cannot contain aliases', 'not-supported' );
                        }
                        $this->assertArray( $data['aliases'], 'List of aliases 
must be an array' );
@@ -605,12 +607,16 @@
        private function buildResult( EntityDocument $entity ) {
                $builder = $this->getResultBuilder();
 
-               if ( $entity instanceof FingerprintProvider ) {
-                       $fingerprint = $entity->getFingerprint();
+               if ( $entity instanceof LabelsProvider ) {
+                       $builder->addLabels( $entity->getLabels(), 'entity' );
+               }
 
-                       $builder->addLabels( $fingerprint->getLabels(), 
'entity' );
-                       $builder->addDescriptions( 
$fingerprint->getDescriptions(), 'entity' );
-                       $builder->addAliasGroupList( 
$fingerprint->getAliasGroups(), 'entity' );
+               if ( $entity instanceof DescriptionsProvider ) {
+                       $builder->addDescriptions( $entity->getDescriptions(), 
'entity' );
+               }
+
+               if ( $entity instanceof AliasesProvider ) {
+                       $builder->addAliasGroupList( $entity->getAliasGroups(), 
'entity' );
                }
 
                if ( $entity instanceof Item ) {
diff --git a/repo/includes/Api/SetAliases.php b/repo/includes/Api/SetAliases.php
index 4a9e636..60c601a 100644
--- a/repo/includes/Api/SetAliases.php
+++ b/repo/includes/Api/SetAliases.php
@@ -9,7 +9,7 @@
 use Wikibase\ChangeOp\ChangeOps;
 use Wikibase\ChangeOp\FingerprintChangeOpFactory;
 use Wikibase\DataModel\Entity\EntityDocument;
-use Wikibase\DataModel\Term\FingerprintProvider;
+use Wikibase\DataModel\Term\AliasesProvider;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -102,7 +102,7 @@
         * @see ModifyEntity::modifyEntity
         */
        protected function modifyEntity( EntityDocument &$entity, array 
$params, $baseRevId ) {
-               if ( !( $entity instanceof FingerprintProvider ) ) {
+               if ( !( $entity instanceof AliasesProvider ) ) {
                        $this->errorReporter->dieError( 'The given entity 
cannot contain aliases', 'not-supported' );
                }
 
@@ -111,6 +111,8 @@
 
                /** @var ChangeOp[] $aliasesChangeOps */
                $aliasesChangeOps = $this->getChangeOps( $params );
+
+               $aliasGroups = $entity->getAliasGroups();
 
                if ( count( $aliasesChangeOps ) == 1 ) {
                        $this->applyChangeOp( $aliasesChangeOps[0], $entity, 
$summary );
@@ -125,16 +127,14 @@
                        $summary->setLanguage( $language );
 
                        // Get the full list of current aliases
-                       $fingerprint = $entity->getFingerprint();
-                       $aliases = $fingerprint->hasAliasGroup( $language )
-                               ? $fingerprint->getAliasGroup( $language 
)->getAliases()
-                               : array();
-                       $summary->addAutoSummaryArgs( $aliases );
+                       if ( $aliasGroups->hasGroupForLanguage( $language ) ) {
+                               $aliases = $aliasGroups->getByLanguage( 
$language )->getAliases();
+                               $summary->addAutoSummaryArgs( $aliases );
+                       }
                }
 
-               $fingerprint = $entity->getFingerprint();
-               if ( $fingerprint->hasAliasGroup( $language ) ) {
-                       $aliasGroupList = 
$fingerprint->getAliasGroups()->getWithLanguages( array( $language ) );
+               if ( $aliasGroups->hasGroupForLanguage( $language ) ) {
+                       $aliasGroupList = $aliasGroups->getWithLanguages( 
array( $language ) );
                        $this->getResultBuilder()->addAliasGroupList( 
$aliasGroupList, 'entity' );
                }
 
diff --git a/repo/includes/Api/SetDescription.php 
b/repo/includes/Api/SetDescription.php
index 373b6c8..494a34a 100644
--- a/repo/includes/Api/SetDescription.php
+++ b/repo/includes/Api/SetDescription.php
@@ -6,7 +6,7 @@
 use Wikibase\ChangeOp\ChangeOpDescription;
 use Wikibase\ChangeOp\FingerprintChangeOpFactory;
 use Wikibase\DataModel\Entity\EntityDocument;
-use Wikibase\DataModel\Term\FingerprintProvider;
+use Wikibase\DataModel\Term\DescriptionsProvider;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -52,7 +52,7 @@
         * @see ModifyEntity::modifyEntity
         */
        protected function modifyEntity( EntityDocument &$entity, array 
$params, $baseRevId ) {
-               if ( !( $entity instanceof FingerprintProvider ) ) {
+               if ( !( $entity instanceof DescriptionsProvider ) ) {
                        $this->errorReporter->dieError( 'The given entity 
cannot contain descriptions', 'not-supported' );
                }
 
@@ -62,9 +62,11 @@
                $changeOp = $this->getChangeOp( $params );
                $this->applyChangeOp( $changeOp, $entity, $summary );
 
+               $descriptions = $entity->getDescriptions();
                $resultBuilder = $this->getResultBuilder();
-               if ( $entity->getFingerprint()->hasDescription( $language ) ) {
-                       $termList = 
$entity->getFingerprint()->getDescriptions()->getWithLanguages( array( 
$language ) );
+
+               if ( $descriptions->hasTermForLanguage( $language ) ) {
+                       $termList = $descriptions->getWithLanguages( array( 
$language ) );
                        $resultBuilder->addDescriptions( $termList, 'entity' );
                } else {
                        $resultBuilder->addRemovedDescription( $language, 
'entity' );
diff --git a/repo/includes/Api/SetLabel.php b/repo/includes/Api/SetLabel.php
index ccb8f85..8421172 100644
--- a/repo/includes/Api/SetLabel.php
+++ b/repo/includes/Api/SetLabel.php
@@ -6,8 +6,9 @@
 use Wikibase\ChangeOp\ChangeOpLabel;
 use Wikibase\ChangeOp\FingerprintChangeOpFactory;
 use Wikibase\DataModel\Entity\EntityDocument;
-use Wikibase\DataModel\Term\FingerprintProvider;
+use Wikibase\DataModel\Term\LabelsProvider;
 use Wikibase\Repo\WikibaseRepo;
+use Wikibase\Summary;
 
 /**
  * API module to set the label for a Wikibase entity.
@@ -50,9 +51,15 @@
 
        /**
         * @see ModifyEntity::modifyEntity
+        *
+        * @param EntityDocument $entity
+        * @param array $params
+        * @param int $baseRevId
+        *
+        * @return Summary
         */
        protected function modifyEntity( EntityDocument &$entity, array 
$params, $baseRevId ) {
-               if ( !( $entity instanceof FingerprintProvider ) ) {
+               if ( !( $entity instanceof LabelsProvider ) ) {
                        $this->errorReporter->dieError( 'The given entity 
cannot contain labels', 'not-supported' );
                }
 
@@ -62,9 +69,11 @@
                $changeOp = $this->getChangeOp( $params );
                $this->applyChangeOp( $changeOp, $entity, $summary );
 
+               $labels = $entity->getLabels();
                $resultBuilder = $this->getResultBuilder();
-               if ( $entity->getFingerprint()->hasLabel( $language ) ) {
-                       $termList = 
$entity->getFingerprint()->getLabels()->getWithLanguages( array( $language ) );
+
+               if ( $labels->hasTermForLanguage( $language ) ) {
+                       $termList = $labels->getWithLanguages( array( $language 
) );
                        $resultBuilder->addLabels( $termList, 'entity' );
                } else {
                        $resultBuilder->addRemovedLabel( $language, 'entity' );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6e704b2898a33c16b4368fb1afd0dccc53011c4e
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

Reply via email to