Addshore has uploaded a new change for review.

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


Change subject: Inject Guid Validator and Parser in ChangeOpClaim
......................................................................

Inject Guid Validator and Parser in ChangeOpClaim

Change-Id: Ifcfcc3b1344f6c448ef682ab67fdfa6578b688ca
---
M repo/includes/ChangeOp/ChangeOpClaim.php
M repo/includes/ChangeOp/ChangeOpsMerge.php
M repo/includes/api/EditEntity.php
M repo/includes/api/SetClaim.php
M repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
5 files changed, 84 insertions(+), 21 deletions(-)


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

diff --git a/repo/includes/ChangeOp/ChangeOpClaim.php 
b/repo/includes/ChangeOp/ChangeOpClaim.php
index fbaf937..b687bc0 100644
--- a/repo/includes/ChangeOp/ChangeOpClaim.php
+++ b/repo/includes/ChangeOp/ChangeOpClaim.php
@@ -5,10 +5,11 @@
 use InvalidArgumentException;
 use Wikibase\DataModel\ByPropertyIdArray;
 use Wikibase\DataModel\Claim\Claim;
+use Wikibase\DataModel\Claim\ClaimGuidParser;
 use Wikibase\DataModel\Claim\Claims;
 use Wikibase\DataModel\Entity\Entity;
 use Wikibase\Lib\ClaimGuidGenerator;
-use Wikibase\Repo\WikibaseRepo;
+use Wikibase\Lib\ClaimGuidValidator;
 use Wikibase\Summary;
 
 /**
@@ -38,6 +39,20 @@
        /**
         * @since 0.5
         *
+        * @var ClaimGuidValidator
+        */
+       private $guidValidator;
+
+       /**
+        * @since 0.5
+        *
+        * @var ClaimGuidParser
+        */
+       private $guidParser;
+
+       /**
+        * @since 0.5
+        *
         * @var int|null
         */
        protected $index;
@@ -45,11 +60,13 @@
        /**
         * @param Claim $claim
         * @param ClaimGuidGenerator $guidGenerator
+        * @param ClaimGuidValidator $guidValidator
+        * @param ClaimGuidParser $guidParser
         * @param int|null $index
         *
         * @throws InvalidArgumentException
         */
-       public function __construct( $claim, $guidGenerator, $index = null ) {
+       public function __construct( $claim, $guidGenerator, $guidValidator, 
$guidParser, $index = null ) {
                if ( !$claim instanceof Claim ) {
                        throw new InvalidArgumentException( '$claim needs to be 
an instance of Claim' );
                }
@@ -58,12 +75,22 @@
                        throw new InvalidArgumentException( '$guidGenerator 
needs to be an instance of ClaimGuidGenerator' );
                }
 
+               if( !$guidValidator instanceof ClaimGuidValidator ){
+                       throw new InvalidArgumentException( '$guidValidator 
needs to be an instance of ClaimGuidValidator' );
+               }
+
+               if( !$guidParser instanceof ClaimGuidParser ){
+                       throw new InvalidArgumentException( '$guidParser needs 
to be an instance of ClaimGuidParser' );
+               }
+
                if( !is_null( $index ) && !is_integer( $index ) ) {
                        throw new InvalidArgumentException( '$index needs to be 
null or an integer value' );
                }
 
                $this->claim = $claim;
                $this->guidGenerator = $guidGenerator;
+               $this->guidValidator = $guidValidator;
+               $this->guidParser = $guidParser;
                $this->index = $index;
        }
 
@@ -72,16 +99,12 @@
         */
        public function apply( Entity $entity, Summary $summary = null ) {
 
-               //TODO: inject parser and validator
-               $guidValidator = 
WikibaseRepo::getDefaultInstance()->getClaimGuidValidator();
-               $guidParser = 
WikibaseRepo::getDefaultInstance()->getClaimGuidParser();
-
                if( $this->claim->getGuid() === null ){
                        $this->claim->setGuid( $this->guidGenerator->newGuid() 
);
                }
-               $guid = $guidParser->parse( $this->claim->getGuid() );
+               $guid = $this->guidParser->parse( $this->claim->getGuid() );
 
-               if ( $guidValidator->validate( $guid->getSerialization() ) === 
false ) {
+               if ( $this->guidValidator->validate( $guid->getSerialization() 
) === false ) {
                        throw new ChangeOpException( "Claim does not have a 
valid GUID" );
                } else if ( !$entity->getId()->equals( $guid->getEntityId() ) ){
                        throw new ChangeOpException( "Claim GUID invalid for 
given entity" );
diff --git a/repo/includes/ChangeOp/ChangeOpsMerge.php 
b/repo/includes/ChangeOp/ChangeOpsMerge.php
index 2e5bef9..2d508a2 100644
--- a/repo/includes/ChangeOp/ChangeOpsMerge.php
+++ b/repo/includes/ChangeOp/ChangeOpsMerge.php
@@ -5,6 +5,7 @@
 use InvalidArgumentException;
 use Wikibase\ItemContent;
 use Wikibase\Lib\ClaimGuidGenerator;
+use Wikibase\Repo\WikibaseRepo;
 
 /**
  * @since 0.5
@@ -131,8 +132,10 @@
                        $toClaim->setGuid( null );
 
                        $this->toChangeOps->add( new ChangeOpClaim(
-                               $toClaim ,
-                               new ClaimGuidGenerator( 
$this->toItemContent->getItem()->getId() )
+                               $toClaim,
+                               new ClaimGuidGenerator( 
$this->toItemContent->getItem()->getId() ),
+                               
WikibaseRepo::getDefaultInstance()->getClaimGuidValidator(), //@todo inject me 
in the constructor!
+                               
WikibaseRepo::getDefaultInstance()->getClaimGuidParser() //@todo inject me in 
the constructor!
                        ) );
                }
        }
diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php
index ab6a60e..a20f1f6 100644
--- a/repo/includes/api/EditEntity.php
+++ b/repo/includes/api/EditEntity.php
@@ -20,11 +20,13 @@
 use Wikibase\ChangeOp\ChangeOpSiteLink;
 use Wikibase\ChangeOp\ChangeOps;
 use Wikibase\Claim;
+use Wikibase\DataModel\Claim\ClaimGuidParser;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\Entity;
 use Wikibase\EntityContent;
 use Wikibase\Item;
 use Wikibase\Lib\ClaimGuidGenerator;
+use Wikibase\Lib\ClaimGuidValidator;
 use Wikibase\Lib\Serializers\SerializerFactory;
 use Wikibase\Property;
 use Wikibase\Repo\WikibaseRepo;
@@ -205,7 +207,9 @@
                        $changeOps->add(
                                $this->getClaimsChangeOps(
                                        $data['claims'],
-                                       new ClaimGuidGenerator( 
$entity->getId() )
+                                       new ClaimGuidGenerator( 
$entity->getId() ),
+                                       
WikibaseRepo::getDefaultInstance()->getClaimGuidValidator(),
+                                       
WikibaseRepo::getDefaultInstance()->getClaimGuidParser()
                                )
                        );
                }
@@ -405,9 +409,11 @@
         *
         * @param array $claims
         * @param ClaimGuidGenerator $guidGenerator
+        * @param ClaimGuidValidator $guidValidator
+        * @param ClaimGuidParser $guidParser
         * @return ChangeOpClaim[]
         */
-       protected function getClaimsChangeOps( $claims, $guidGenerator ) {
+       protected function getClaimsChangeOps( $claims, $guidGenerator, 
$guidValidator, $guidParser ) {
                if ( !is_array( $claims ) ) {
                        $this->dieUsage( "List of claims must be an array", 
'not-recognized-array' );
                }
@@ -417,13 +423,13 @@
                if( array_keys( $claims ) !== range( 0, count( $claims ) - 1 ) 
){
                        foreach( $claims as $subClaims ){
                                $changeOps = array_merge( $changeOps,
-                                       $this->getRemoveClaimsChangeOps( 
$subClaims, $guidGenerator ),
-                                       $this->getModifyClaimsChangeOps( 
$subClaims, $guidGenerator ) );
+                                       $this->getRemoveClaimsChangeOps( 
$subClaims, $guidGenerator , $guidValidator, $guidParser ),
+                                       $this->getModifyClaimsChangeOps( 
$subClaims, $guidGenerator , $guidValidator, $guidParser ) );
                        }
                } else {
                        $changeOps = array_merge( $changeOps,
-                               $this->getRemoveClaimsChangeOps( $claims, 
$guidGenerator ),
-                               $this->getModifyClaimsChangeOps( $claims, 
$guidGenerator ) );
+                               $this->getRemoveClaimsChangeOps( $claims, 
$guidGenerator , $guidValidator, $guidParser ),
+                               $this->getModifyClaimsChangeOps( $claims, 
$guidGenerator , $guidValidator, $guidParser ) );
                }
 
                return $changeOps;
@@ -432,9 +438,12 @@
        /**
         * @param array $claims array of serialized claims
         * @param ClaimGuidGenerator $guidGenerator
+        * @param ClaimGuidValidator $guidValidator
+        * @param ClaimGuidParser $guidParser
+        *
         * @return ChangeOp[]
         */
-       private function getModifyClaimsChangeOps( $claims, $guidGenerator ){
+       private function getModifyClaimsChangeOps( $claims, $guidGenerator, 
$guidValidator, $guidParser ){
                $opsToReturn = array();
 
                $serializerFactory = new SerializerFactory();
@@ -460,7 +469,7 @@
                                                $guidGenerator
                                        );
                                }
-                               $opsToReturn[] = new ChangeOpClaim( $claim, 
$guidGenerator );
+                               $opsToReturn[] = new ChangeOpClaim( $claim, 
$guidGenerator, $guidValidator, $guidParser );
                        }
                }
                return $opsToReturn;
diff --git a/repo/includes/api/SetClaim.php b/repo/includes/api/SetClaim.php
index bb2b100..457cd26 100644
--- a/repo/includes/api/SetClaim.php
+++ b/repo/includes/api/SetClaim.php
@@ -3,6 +3,7 @@
 namespace Wikibase\Api;
 
 use ApiBase;
+use ApiMain;
 use DataValues\IllegalValueException;
 use InvalidArgumentException;
 use OutOfBoundsException;
@@ -17,7 +18,9 @@
 use Wikibase\EntityContent;
 use Wikibase\Claim;
 use Wikibase\Lib\ClaimGuidGenerator;
+use Wikibase\Lib\ClaimGuidValidator;
 use Wikibase\Lib\Serializers\SerializerFactory;
+use Wikibase\Repo\WikibaseRepo;
 use Wikibase\Summary;
 
 /**
@@ -30,6 +33,19 @@
  * @author Adam Shorland
  */
 class SetClaim extends ModifyClaim {
+
+       /**
+        * @since 0.5
+        *
+        * @var ClaimGuidValidator
+        */
+       private $claimGuidValidator;
+
+       public function __construct( ApiMain $mainModule, $moduleName, 
$modulePrefix = '' ) {
+               parent::__construct( $mainModule, $moduleName, $modulePrefix );
+
+               $this->claimGuidValidator = 
WikibaseRepo::getDefaultInstance()->getClaimGuidValidator();
+       }
 
        /**
         * @see ApiBase::execute
@@ -58,6 +74,8 @@
                $changeop = new ChangeOpClaim(
                        $claim,
                        new ClaimGuidGenerator( $guid->getEntityId() ),
+                       $this->claimGuidValidator,
+                       $this->claimGuidParser,
                        ( isset( $params['index'] ) ? $params['index'] : null )
                );
                try{
diff --git a/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php 
b/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
index ccfd1f6..f4bb05d 100644
--- a/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
+++ b/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
@@ -4,6 +4,7 @@
 
 use Wikibase\ChangeOp\ChangeOpClaim;
 use Wikibase\DataModel\Claim\Claim;
+use Wikibase\DataModel\Claim\ClaimGuidParser;
 use Wikibase\DataModel\Claim\Claims;
 use Wikibase\DataModel\Entity\Entity;
 use Wikibase\DataModel\Entity\Item;
@@ -12,6 +13,8 @@
 use Wikibase\DataModel\Snak\PropertyNoValueSnak;
 use Wikibase\DataModel\Snak\PropertySomeValueSnak;
 use Wikibase\Lib\ClaimGuidGenerator;
+use Wikibase\Lib\ClaimGuidValidator;
+use Wikibase\Repo\WikibaseRepo;
 
 /**
  * @covers Wikibase\ChangeOp\ChangeOpClaim
@@ -30,9 +33,12 @@
 
        public function invalidConstructorProvider() {
                $validGuidGenerator = new ClaimGuidGenerator( new ItemId( 'q42' 
) );
+               $validGuidValidator = 
WikibaseRepo::getDefaultInstance()->getClaimGuidValidator();
+               $validGuidParser = 
WikibaseRepo::getDefaultInstance()->getClaimGuidParser();
 
                $args = array();
-               $args[] = array( array(), $validGuidGenerator );
+
+               $args[] = array( array(), $validGuidGenerator, 
$validGuidValidator, $validGuidParser );
 
                return $args;
        }
@@ -43,9 +49,11 @@
         *
         * @param Claim $claim
         * @param ClaimGuidGenerator $guidGenerator
+        * @param ClaimGuidValidator $guidValidator
+        * @param ClaimGuidParser $guidParser
         */
-       public function testInvalidConstruct( $claim, $guidGenerator ) {
-               new ChangeOpClaim( $claim, $guidGenerator );
+       public function testInvalidConstruct( $claim, $guidGenerator, 
$guidValidator, $guidParser  ) {
+               new ChangeOpClaim( $claim, $guidGenerator, $guidValidator, 
$guidParser );
        }
 
        public function provideTestApply() {
@@ -126,6 +134,8 @@
                $changeOpClaim = new ChangeOpClaim(
                        $claim,
                        new ClaimGuidGenerator( $entity->getId() ),
+                       
WikibaseRepo::getDefaultInstance()->getClaimGuidValidator(), //@todo mock me!
+                       
WikibaseRepo::getDefaultInstance()->getClaimGuidParser(), //@todo mock me!
                        $index
                );
                $changeOpClaim->apply( $entity );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifcfcc3b1344f6c448ef682ab67fdfa6578b688ca
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Addshore <addshorew...@gmail.com>

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

Reply via email to