Bene has uploaded a new change for review.
https://gerrit.wikimedia.org/r/268970
Change subject: Use EntityDocument in ModifyEntity and derivatives
......................................................................
Use EntityDocument in ModifyEntity and derivatives
Change-Id: Ib27173a2e2c0c74696bcb04b9210b92e8868b1cb
---
M repo/includes/api/EditEntity.php
M repo/includes/api/EntitySavingHelper.php
M repo/includes/api/ModifyEntity.php
M repo/includes/api/SetAliases.php
M repo/includes/api/SetDescription.php
M repo/includes/api/SetLabel.php
M repo/includes/api/SetSiteLink.php
7 files changed, 57 insertions(+), 31 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/70/268970/1
diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php
index 007fcdd..f74ac44 100644
--- a/repo/includes/api/EditEntity.php
+++ b/repo/includes/api/EditEntity.php
@@ -16,12 +16,11 @@
use Wikibase\ChangeOp\FingerprintChangeOpFactory;
use Wikibase\ChangeOp\SiteLinkChangeOpFactory;
use Wikibase\ChangeOp\StatementChangeOpFactory;
-use Wikibase\DataModel\Entity\Entity;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\Property;
-use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\DataModel\Statement\StatementListProvider;
use Wikibase\DataModel\Term\FingerprintProvider;
@@ -168,7 +167,7 @@
*
* @throws UsageException
* @throws LogicException
- * @return Entity
+ * @return EntityDocument
*/
protected function createEntity( $entityType ) {
$this->flags |= EDIT_NEW;
@@ -218,7 +217,7 @@
/**
* @see ModifyEntity::modifyEntity
*/
- protected function modifyEntity( Entity &$entity, array $params,
$baseRevId ) {
+ protected function modifyEntity( EntityDocument &$entity, array
$params, $baseRevId ) {
$this->validateDataParameter( $params );
$data = json_decode( $params['data'], true );
$this->validateDataProperties( $data, $entity, $baseRevId );
@@ -239,7 +238,8 @@
);
}
}
- $entity->clear();
+
+ $entity = $this->clearEntity( $entity );
}
// if we create a new property, make sure we set the datatype
@@ -260,6 +260,24 @@
}
/**
+ * @param EntityDocument $entity
+ *
+ * @return EntityDocument
+ */
+ private function clearEntity( EntityDocument $entity ) {
+ $newEntity = $this->createEntity( $entity->getType() );
+ $newEntity->setId( $entity->getId() );
+
+ // FIXME how to avoid special case handling here?
+ if ( $entity instanceof Property ) {
+ /** @var Property $newEntity */
+ $newEntity->setDataTypeId( $entity->getDataTypeId() );
+ }
+
+ return $newEntity;
+ }
+
+ /**
* @param array $params
*
* @return Summary
diff --git a/repo/includes/api/EntitySavingHelper.php
b/repo/includes/api/EntitySavingHelper.php
index 83d5449..d997529 100644
--- a/repo/includes/api/EntitySavingHelper.php
+++ b/repo/includes/api/EntitySavingHelper.php
@@ -6,7 +6,7 @@
use LogicException;
use Status;
use UsageException;
-use Wikibase\DataModel\Entity\Entity;
+use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\EditEntity as EditEntityHandler;
use Wikibase\EditEntityFactory;
use Wikibase\Summary;
@@ -67,7 +67,7 @@
* warnings, they will automatically be included in the API call's
output (again, via
* handleStatus()).
*
- * @param Entity $entity The entity to save
+ * @param EntityDocument $entity The entity to save
* @param string|Summary $summary The edit summary
* @param int $flags The edit flags (see WikiPage::doEditContent)
*
@@ -75,7 +75,7 @@
* @return Status the status of the save operation, as returned by
EditEntityHandler::attemptSave()
* @see EditEntityHandler::attemptSave()
*/
- public function attemptSaveEntity( Entity $entity, $summary, $flags = 0
) {
+ public function attemptSaveEntity( EntityDocument $entity, $summary,
$flags = 0 ) {
if ( !$this->apiBase->isWriteMode() ) {
// sanity/safety check
throw new LogicException(
diff --git a/repo/includes/api/ModifyEntity.php
b/repo/includes/api/ModifyEntity.php
index 9d14028..eb41031 100644
--- a/repo/includes/api/ModifyEntity.php
+++ b/repo/includes/api/ModifyEntity.php
@@ -12,12 +12,11 @@
use Wikibase\ChangeOp\ChangeOp;
use Wikibase\ChangeOp\ChangeOpException;
use Wikibase\ChangeOp\ChangeOpValidationException;
-use Wikibase\DataModel\Entity\Entity;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdParsingException;
+use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Services\Lookup\EntityLookupException;
use Wikibase\EntityRevision;
use Wikibase\Lib\Store\EntityRevisionLookup;
@@ -162,7 +161,7 @@
/**
* @see EntitySavingHelper::attemptSaveEntity
*/
- private function attemptSaveEntity( Entity $entity, $summary, $flags =
0 ) {
+ private function attemptSaveEntity( EntityDocument $entity, $summary,
$flags = 0 ) {
return $this->entitySavingHelper->attemptSaveEntity( $entity,
$summary, $flags );
}
@@ -321,7 +320,7 @@
*
* @param string $entityType
*
- * @return Entity Newly created entity
+ * @return EntityDocument Newly created entity
*/
protected function createEntity( $entityType ) {
$this->errorReporter->dieError( 'Could not find an existing
entity', 'no-such-entity' );
@@ -345,13 +344,13 @@
*
* @since 0.1
*
- * @param Entity &$entity
+ * @param EntityDocument &$entity
* @param array $params
* @param int $baseRevId
*
* @return Summary|null a summary of the modification, or null to
indicate failure.
*/
- abstract protected function modifyEntity( Entity &$entity, array
$params, $baseRevId );
+ abstract protected function modifyEntity( EntityDocument &$entity,
array $params, $baseRevId );
/**
* Applies the given ChangeOp to the given Entity.
@@ -360,12 +359,12 @@
* @since 0.5
*
* @param ChangeOp $changeOp
- * @param Entity $entity
+ * @param EntityDocument $entity
* @param Summary|null $summary The summary object to update with
information about the change.
*
* @throws UsageException
*/
- protected function applyChangeOp( ChangeOp $changeOp, Entity $entity,
Summary $summary = null ) {
+ protected function applyChangeOp( ChangeOp $changeOp, EntityDocument
$entity, Summary $summary = null ) {
try {
$result = $changeOp->validate( $entity );
diff --git a/repo/includes/api/SetAliases.php b/repo/includes/api/SetAliases.php
index b0f1df8..4b75f71 100644
--- a/repo/includes/api/SetAliases.php
+++ b/repo/includes/api/SetAliases.php
@@ -8,8 +8,8 @@
use Wikibase\ChangeOp\ChangeOpAliases;
use Wikibase\ChangeOp\ChangeOps;
use Wikibase\ChangeOp\FingerprintChangeOpFactory;
-use Wikibase\DataModel\Entity\Entity;
use Wikibase\DataModel\Entity\EntityDocument;
+use Wikibase\DataModel\Term\FingerprintProvider;
use Wikibase\Repo\WikibaseRepo;
/**
@@ -99,16 +99,13 @@
}
/**
- * @see ModifyEntity::createEntity
- */
- protected function createEntity( $entityType ) {
- $this->errorReporter->dieError( 'Could not find an existing
entity', 'no-such-entity' );
- }
-
- /**
* @see ModifyEntity::modifyEntity
*/
- protected function modifyEntity( Entity &$entity, array $params,
$baseRevId ) {
+ protected function modifyEntity( EntityDocument &$entity, array
$params, $baseRevId ) {
+ if ( !( $entity instanceof FingerprintProvider ) ) {
+ throw new InvalidArgumentException( '$entity must be a
FingerprintProvider' );
+ }
+
$summary = $this->createSummary( $params );
$language = $params['language'];
diff --git a/repo/includes/api/SetDescription.php
b/repo/includes/api/SetDescription.php
index 69ce5f3..ba6cc4b 100644
--- a/repo/includes/api/SetDescription.php
+++ b/repo/includes/api/SetDescription.php
@@ -3,9 +3,11 @@
namespace Wikibase\Repo\Api;
use ApiMain;
+use InvalidArgumentException;
use Wikibase\ChangeOp\ChangeOpDescription;
use Wikibase\ChangeOp\FingerprintChangeOpFactory;
-use Wikibase\DataModel\Entity\Entity;
+use Wikibase\DataModel\Entity\EntityDocument;
+use Wikibase\DataModel\Term\FingerprintProvider;
use Wikibase\Repo\WikibaseRepo;
/**
@@ -41,7 +43,11 @@
/**
* @see ModifyEntity::modifyEntity
*/
- protected function modifyEntity( Entity &$entity, array $params,
$baseRevId ) {
+ protected function modifyEntity( EntityDocument &$entity, array
$params, $baseRevId ) {
+ if ( !( $entity instanceof FingerprintProvider ) ) {
+ throw new InvalidArgumentException( '$entity must be a
FingerprintProvider' );
+ }
+
$summary = $this->createSummary( $params );
$language = $params['language'];
diff --git a/repo/includes/api/SetLabel.php b/repo/includes/api/SetLabel.php
index 725abda..c060de5 100644
--- a/repo/includes/api/SetLabel.php
+++ b/repo/includes/api/SetLabel.php
@@ -3,9 +3,11 @@
namespace Wikibase\Repo\Api;
use ApiMain;
+use InvalidArgumentException;
use Wikibase\ChangeOp\ChangeOpLabel;
use Wikibase\ChangeOp\FingerprintChangeOpFactory;
-use Wikibase\DataModel\Entity\Entity;
+use Wikibase\DataModel\Entity\EntityDocument;
+use Wikibase\DataModel\Term\FingerprintProvider;
use Wikibase\Repo\WikibaseRepo;
/**
@@ -41,7 +43,11 @@
/**
* @see ModifyEntity::modifyEntity
*/
- protected function modifyEntity( Entity &$entity, array $params,
$baseRevId ) {
+ protected function modifyEntity( EntityDocument &$entity, array
$params, $baseRevId ) {
+ if ( !( $entity instanceof FingerprintProvider ) ) {
+ throw new InvalidArgumentException( '$entity must be a
FingerprintProvider' );
+ }
+
$summary = $this->createSummary( $params );
$language = $params['language'];
diff --git a/repo/includes/api/SetSiteLink.php
b/repo/includes/api/SetSiteLink.php
index 0b0931f..cebf49d 100644
--- a/repo/includes/api/SetSiteLink.php
+++ b/repo/includes/api/SetSiteLink.php
@@ -5,7 +5,7 @@
use ApiMain;
use Wikibase\ChangeOp\ChangeOpSiteLink;
use Wikibase\ChangeOp\SiteLinkChangeOpFactory;
-use Wikibase\DataModel\Entity\Entity;
+use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\SiteLinkList;
use Wikibase\Repo\WikibaseRepo;
@@ -105,7 +105,7 @@
/**
* @see ModifyEntity::modifyEntity
*/
- protected function modifyEntity( Entity &$entity, array $params,
$baseRevId ) {
+ protected function modifyEntity( EntityDocument &$entity, array
$params, $baseRevId ) {
if ( !( $entity instanceof Item ) ) {
$this->errorReporter->dieError( "The given entity is
not an item", "not-item" );
}
--
To view, visit https://gerrit.wikimedia.org/r/268970
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib27173a2e2c0c74696bcb04b9210b92e8868b1cb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Bene <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits