Jeroen De Dauw has uploaded a new change for review.

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

Change subject: Move statement filtering from GetClaims API to dedicated class
......................................................................

Move statement filtering from GetClaims API to dedicated class

Change-Id: I89e6815a3774e4c0a4d68b193bb044a9ea07017c
---
M repo/includes/api/GetClaims.php
A repo/includes/api/GetClaimsStatementFilter.php
2 files changed, 86 insertions(+), 38 deletions(-)


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

diff --git a/repo/includes/api/GetClaims.php b/repo/includes/api/GetClaims.php
index 3edc4e7..1f0bb4e 100644
--- a/repo/includes/api/GetClaims.php
+++ b/repo/includes/api/GetClaims.php
@@ -27,7 +27,7 @@
  * @author Jeroen De Dauw < jeroended...@gmail.com >
  * @author Adam Shorland
  */
-class GetClaims extends ApiBase implements StatementFilter {
+class GetClaims extends ApiBase {
 
        /**
         * @var StatementGuidValidator
@@ -129,49 +129,19 @@
                }
 
                if ( $guid === null ) {
-                       return $entity->getStatements()->filter( $this );
+                       return $entity->getStatements()->filter( 
$this->newRequestParamsBasedFilter() );
                }
 
                $statement = 
$entity->getStatements()->getFirstStatementWithGuid( $guid );
                return $statement === null ? array() : array( $statement );
        }
 
-       public function statementMatches( Statement $statement ) {
-               return $this->rankMatchesFilter( $statement->getRank() )
-                       && $this->propertyMatchesFilter( 
$statement->getPropertyId() );
-       }
-
-       private function rankMatchesFilter( $rank ) {
-               if ( $rank === null ) {
-                       return true;
-               }
-               $params = $this->extractRequestParams();
-
-               if ( isset( $params['rank'] ) ) {
-                       $statementRankSerializer = new 
StatementRankSerializer();
-                       $unserializedRank = 
$statementRankSerializer->deserialize( $params['rank'] );
-                       $matchFilter = $rank === $unserializedRank;
-                       return $matchFilter;
-               }
-
-               return true;
-       }
-
-       private function propertyMatchesFilter( EntityId $propertyId ) {
-               $params = $this->extractRequestParams();
-
-               if ( isset( $params['property'] ) ) {
-                       try {
-                               $parsedProperty = $this->idParser->parse( 
$params['property'] );
-                       } catch ( EntityIdParsingException $e ) {
-                               $this->errorReporter->dieException( $e, 
'param-invalid' );
-                       }
-
-                       /** @var EntityId $parsedProperty */
-                       return $propertyId->equals( $parsedProperty );
-               }
-
-               return true;
+       private function newRequestParamsBasedFilter() {
+               return new GetClaimsStatementFilter(
+                       $this->idParser,
+                       $this->errorReporter,
+                       $this->extractRequestParams()
+               );
        }
 
        /**
diff --git a/repo/includes/api/GetClaimsStatementFilter.php 
b/repo/includes/api/GetClaimsStatementFilter.php
new file mode 100644
index 0000000..424893c
--- /dev/null
+++ b/repo/includes/api/GetClaimsStatementFilter.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Wikibase\Repo\Api;
+
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\EntityIdParser;
+use Wikibase\DataModel\Entity\EntityIdParsingException;
+use Wikibase\DataModel\Statement\Statement;
+use Wikibase\DataModel\Statement\StatementFilter;
+use Wikibase\StatementRankSerializer;
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroended...@gmail.com >
+ */
+class GetClaimsStatementFilter implements StatementFilter {
+
+       /**
+        * @var ApiErrorReporter
+        */
+       private $errorReporter;
+
+       /**
+        * @var EntityIdParser
+        */
+       private $idParser;
+
+       /**
+        * @var array
+        */
+       private $requestParams;
+
+       public function __construct( EntityIdParser $idParser, ApiErrorReporter 
$errorReporter, array $requestParams ) {
+               $this->idParser = $idParser;
+               $this->errorReporter = $errorReporter;
+               $this->requestParams = $requestParams;
+       }
+       
+       /**
+        * @param Statement $statement
+        *
+        * @return boolean
+        */
+       public function statementMatches( Statement $statement ) {
+               return $this->rankMatchesFilter( $statement->getRank() )
+                       && $this->propertyMatchesFilter( 
$statement->getPropertyId() );
+       }
+
+       private function rankMatchesFilter( $rank ) {
+               if ( $rank === null ) {
+                       return true;
+               }
+
+               if ( isset( $this->requestParams['rank'] ) ) {
+                       $statementRankSerializer = new 
StatementRankSerializer();
+                       $unserializedRank = 
$statementRankSerializer->deserialize( $this->requestParams['rank'] );
+                       return $rank === $unserializedRank;
+               }
+
+               return true;
+       }
+
+       private function propertyMatchesFilter( EntityId $propertyId ) {
+               if ( isset( $this->requestParams['property'] ) ) {
+                       try {
+                               $parsedProperty = $this->idParser->parse( 
$this->requestParams['property'] );
+                       } catch ( EntityIdParsingException $e ) {
+                               $this->errorReporter->dieException( $e, 
'param-invalid' );
+                       }
+
+                       /** @var EntityId $parsedProperty */
+                       return $propertyId->equals( $parsedProperty );
+               }
+
+               return true;
+       }
+       
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I89e6815a3774e4c0a4d68b193bb044a9ea07017c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com>

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

Reply via email to