Daniel Kinzler has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/392679 )

Change subject: Remove the need for EntityDocument::isEmpty.
......................................................................

Remove the need for EntityDocument::isEmpty.

We'll keep isEmpty in Item and Property for now.

Change-Id: I4086017352e2fee7f1841c5e4ded5a2c8ffae285
---
M repo/includes/Content/EntityContent.php
M repo/includes/Content/ItemContent.php
M repo/includes/Content/PropertyContent.php
M repo/includes/Interactors/ItemMergeInteractor.php
M repo/includes/Interactors/RedirectCreationInteractor.php
5 files changed, 45 insertions(+), 4 deletions(-)


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

diff --git a/repo/includes/Content/EntityContent.php 
b/repo/includes/Content/EntityContent.php
index 230a062..ce57e4f 100644
--- a/repo/includes/Content/EntityContent.php
+++ b/repo/includes/Content/EntityContent.php
@@ -583,7 +583,7 @@
 
                $redirAfterPatch = $this->getPatchedRedirect( 
$patch->getRedirectDiff() );
 
-               if ( $redirAfterPatch !== null && !$entityAfterPatch->isEmpty() 
) {
+               if ( $redirAfterPatch !== null && !$this->isEntityEmpty( 
$entityAfterPatch ) ) {
                        throw new PatcherException( 'EntityContent must not 
contain Entity data as well as'
                                . ' a redirect after applying the patch!' );
                } elseif ( $redirAfterPatch ) {
@@ -636,7 +636,7 @@
                }
 
                $holder = $this->getEntityHolder();
-               return $holder === null || $holder->getEntity()->isEmpty();
+               return $holder === null || $this->isEntityEmpty( 
$holder->getEntity() );
        }
 
        /**
@@ -740,4 +740,16 @@
                return [];
        }
 
+       /**
+        * Determines whether the Entity is empty. This implementations always 
returns false.
+        * Subclasses should override this with the appropriate logic.
+        *
+        * @param EntityDocument $entity
+        * @return bool
+        */
+       protected function isEntityEmpty( EntityDocument $entity ) {
+               // XXX: this could perhaps live in EntityHandler and subclasses 
instead!
+               return false;
+       }
+
 }
diff --git a/repo/includes/Content/ItemContent.php 
b/repo/includes/Content/ItemContent.php
index baf8af2..d385cd0 100644
--- a/repo/includes/Content/ItemContent.php
+++ b/repo/includes/Content/ItemContent.php
@@ -9,6 +9,7 @@
 use Title;
 use Wikibase\Content\EntityHolder;
 use Wikibase\Content\EntityInstanceHolder;
+use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\EntityRedirect;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\Repo\ItemSearchTextGenerator;
@@ -227,4 +228,9 @@
                return $properties;
        }
 
+       protected function isEntityEmpty( EntityDocument $entity ) {
+               /** @var Item $entity */
+               return $entity->isEmpty();
+       }
+
 }
diff --git a/repo/includes/Content/PropertyContent.php 
b/repo/includes/Content/PropertyContent.php
index 6732997..da6efda 100644
--- a/repo/includes/Content/PropertyContent.php
+++ b/repo/includes/Content/PropertyContent.php
@@ -6,6 +6,7 @@
 use LogicException;
 use Wikibase\Content\EntityHolder;
 use Wikibase\Content\EntityInstanceHolder;
+use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\Property;
 
 /**
@@ -135,4 +136,9 @@
                return !$this->isRedirect() && $this->getProperty()->isEmpty();
        }
 
+       protected function isEntityEmpty( EntityDocument $entity ) {
+               /** @var Property $entity */
+               return $entity->isEmpty();
+       }
+
 }
diff --git a/repo/includes/Interactors/ItemMergeInteractor.php 
b/repo/includes/Interactors/ItemMergeInteractor.php
index 686943c..e1187ce 100644
--- a/repo/includes/Interactors/ItemMergeInteractor.php
+++ b/repo/includes/Interactors/ItemMergeInteractor.php
@@ -14,6 +14,7 @@
 use Wikibase\EntityContent;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityStore;
+use Wikibase\Repo\Content\EntityContentFactory;
 use Wikibase\Repo\Store\EntityTitleStoreLookup;
 use Wikibase\Lib\Store\RevisionedUnresolvedRedirectException;
 use Wikibase\Lib\Store\StorageException;
@@ -70,6 +71,11 @@
         */
        private $entityTitleLookup;
 
+       /**
+        * @var EntityContentFactory
+        */
+       private $entityContentFactory;
+
        public function __construct(
                MergeChangeOpsFactory $changeOpFactory,
                EntityRevisionLookup $entityRevisionLookup,
@@ -88,6 +94,7 @@
                $this->user = $user;
                $this->interactorRedirect = $interactorRedirect;
                $this->entityTitleLookup = $entityTitleLookup;
+               $this->entityContentFactory = ...;
        }
 
        /**
@@ -181,7 +188,9 @@
         * @return bool
         */
        private function isEmpty( ItemId $itemId ) {
-               return $this->loadEntity( $itemId )->isEmpty();
+               $entity = $this->loadEntity( $itemId )->isEmpty();
+               $content = $this->entityContentFactory->newFromEntity( $entity 
);
+               return $content->isEmpty();
        }
 
        /**
diff --git a/repo/includes/Interactors/RedirectCreationInteractor.php 
b/repo/includes/Interactors/RedirectCreationInteractor.php
index 73170e2..c81dee3 100644
--- a/repo/includes/Interactors/RedirectCreationInteractor.php
+++ b/repo/includes/Interactors/RedirectCreationInteractor.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Services\Lookup\EntityRedirectLookupException;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityStore;
+use Wikibase\Repo\Content\EntityContentFactory;
 use Wikibase\Repo\Store\EntityTitleStoreLookup;
 use Wikibase\Lib\Store\StorageException;
 use Wikibase\Lib\Store\RevisionedUnresolvedRedirectException;
@@ -67,6 +68,11 @@
         */
        private $entityRedirectLookup;
 
+       /**
+        * @var EntityContentFactory
+        */
+       private $entityContentFactory;
+
        public function __construct(
                EntityRevisionLookup $entityRevisionLookup,
                EntityStore $entityStore,
@@ -85,6 +91,7 @@
                $this->editFilterHookRunner = $editFilterHookRunner;
                $this->entityRedirectLookup = $entityRedirectLookup;
                $this->entityTitleLookup = $entityTitleLookup;
+               $this->entityContentFactory = ...;
        }
 
        /**
@@ -161,7 +168,8 @@
                                }
                        } else {
                                $entity = $revision->getEntity();
-                               if ( !$entity->isEmpty() ) {
+                               $content = 
$this->entityContentFactory->newFromEntity( $entity );
+                               if ( !$content->isEmpty() ) {
                                        throw new RedirectCreationException(
                                                "Can't create redirect on non 
empty item $entityId",
                                                'origin-not-empty'

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4086017352e2fee7f1841c5e4ded5a2c8ffae285
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <daniel.kinz...@wikimedia.de>

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

Reply via email to