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