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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits