diff --git a/src/Entity/Property.php b/src/Entity/Property.php index 61a87184..037f4809 100644 --- a/src/Entity/Property.php +++ b/src/Entity/Property.php @@ -3,6 +3,10 @@ namespace Wikibase\DataModel\Entity; use InvalidArgumentException; +use Wikibase\DataModel\Claim\Claim; +use Wikibase\DataModel\Claim\Claims; +use Wikibase\DataModel\Snak\Snak; +use Wikibase\DataModel\Statement\Statement; use Wikibase\DataModel\Statement\StatementList; use Wikibase\DataModel\Term\Fingerprint; use Wikibase\DataModel\StatementListProvider; @@ -203,4 +207,59 @@ public function setStatements( StatementList $statements ) { $this->statements = $statements; } + /** + * @deprecated since 1.0, use getStatements instead + * + * @return Statement[] + */ + public function getClaims() { + return $this->statements->toArray(); + } + + /** + * @deprecated since 1.0, use setStatements instead + * + * @param Claims $claims + */ + public function setClaims( Claims $claims ) { + $this->statements = new StatementList( iterator_to_array( $claims ) ); + } + + /** + * @deprecated since 1.0, use getStatements instead + * + * @return bool + */ + public function hasClaims() { + return !$this->statements->isEmpty(); + } + + /** + * @deprecated since 1.0 + * + * @param Snak $mainSnak + * + * @return Statement + */ + public function newClaim( Snak $mainSnak ) { + return new Statement( new Claim( $mainSnak ) ); + } + + /** + * @deprecated since 1.0, use getStatements instead + * + * @param Claim $statement This needs to be a Statement as of 1.0 + * + * @throws InvalidArgumentException + */ + public function addClaim( Claim $statement ) { + if ( !( $statement instanceof Statement ) ) { + throw new InvalidArgumentException( '$statement must be an instance of Statement' ); + } elseif ( $statement->getGuid() === null ) { + throw new InvalidArgumentException( 'Can\'t add a Claim without a GUID.' ); + } + + $this->statements->addStatement( $statement ); + } + } diff --git a/tests/unit/Entity/PropertyTest.php b/tests/unit/Entity/PropertyTest.php index db91e8d4..189ac19a 100644 --- a/tests/unit/Entity/PropertyTest.php +++ b/tests/unit/Entity/PropertyTest.php @@ -7,6 +7,9 @@ use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Statement\StatementList; +use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Snak\PropertySomeValueSnak; +use Wikibase\DataModel\Claim\Claims; /** * @covers Wikibase\DataModel\Entity\Property @@ -207,4 +210,33 @@ public function testPropertyWithStatementsIsNotEmpty() { $this->assertFalse( $property->isEmpty() ); } + public function testNewClaimReturnsStatementWithProvidedMainSnak() { + /** @var Snak $snak */ + $snak = $this->getMock( 'Wikibase\DataModel\Snak\Snak' ); + + $property = Property::newFromType( 'string' ); + $statement = $property->newClaim( $snak ); + + $this->assertInstanceOf( 'Wikibase\DataModel\Statement\Statement', $statement ); + $this->assertEquals( $snak, $statement->getMainSnak() ); + } + + public function testSetClaims() { + $property = Property::newFromType( 'string' ); + + $statement0 = new Statement( new Claim( new PropertyNoValueSnak( 42 ) ) ); + $statement0->setGuid( 'TEST$NVS42' ); + + $statement1 = new Statement( new Claim( new PropertySomeValueSnak( 42 ) ) ); + $statement1->setGuid( 'TEST$SVS42' ); + + $statements = array( $statement0, $statement1 ); + + $property->setClaims( new Claims( $statements ) ); + $this->assertEquals( count( $statements ), $property->getStatements()->count(), "added some statements" ); + + $property->setClaims( new Claims() ); + $this->assertTrue( $property->getStatements()->isEmpty(), "should be empty again" ); + } + }