Jonaskeutel has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/204039

Change subject: add ResultToViolationTranslator (basic + CheckResult)
......................................................................

add ResultToViolationTranslator (basic + CheckResult)

also save violations from constraint check in table; therefore slighlty
modified violation and violationStore with comments how to undo the
changes
+ add constants for status + error handling in translator
tests to come

Change-Id: I4bf76f2403f0691fb6c89013b0a4cd22cc8fb471
---
A 
constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
M constraint-report/specials/SpecialConstraintReport.php
A includes/Result/ResultToViolationTranslator.php
M includes/Violations/Violation.php
M includes/Violations/ViolationStore.php
5 files changed, 99 insertions(+), 2 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikidataQuality 
refs/changes/39/204039/1

diff --git 
a/constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
 
b/constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
new file mode 100644
index 0000000..46521a4
--- /dev/null
+++ 
b/constraint-report/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace WikidataQuality\ConstraintReport\ConstraintCheck\Result;
+
+
+use Doctrine\Instantiator\Exception\InvalidArgumentException;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\Lib\ClaimGuidGenerator;
+use WikidataQuality\Result\ResultToViolationTranslator;
+use WikidataQuality\Violations\Violation;
+
+
+class CheckResultToViolationTranslator extends ResultToViolationTranslator{
+
+       public function translateToViolation( $checkResultOrArray ) {
+               if( $checkResultOrArray instanceof CheckResult ) {
+                       $checkResultArray = array( $checkResultOrArray );
+               } else if( is_array( $checkResultOrArray ) ) {
+                       $checkResultArray = $checkResultOrArray;
+               } else {
+                       throw new InvalidArgumentException;
+               }
+
+               $violationArray = array();
+               foreach( $checkResultArray as $checkResult ) {
+                       if( $checkResult->getStatus() !== 'violation' ){
+                               continue;
+                       }
+
+                       // TODO: Use these line when CheckResult has statement
+                       //$statement = $checkResult->getStatement();
+                       //$entityId = $statement->getClaim()->getEntityId();
+                       $entityId = new ItemId( 'Q90' );
+                       $statement = array();
+                       $statement[ 'pid' ] = new PropertyId( 'P1' );
+                       $statement[ 'claimGuid' ] = 'Q42';
+
+                       //TODO: Use real claimGuid
+                       $guidGenerator = new ClaimGuidGenerator();
+                       $constraintClaimGuid = $guidGenerator->newGuid( 
$entityId );
+                       $constraintTypeEntityId = 
$checkResult->getConstraintName();
+                       $revisionId = $this->getRevisionIdForEntity( $entityId 
);
+                       $status = 'violation';
+
+                       $violationArray[] = new Violation( $entityId, 
$statement, $constraintClaimGuid, $constraintTypeEntityId, $revisionId, 
$status);
+               }
+
+               return $violationArray;
+       }
+}
\ No newline at end of file
diff --git a/constraint-report/specials/SpecialConstraintReport.php 
b/constraint-report/specials/SpecialConstraintReport.php
index 1099505..288ebee 100644
--- a/constraint-report/specials/SpecialConstraintReport.php
+++ b/constraint-report/specials/SpecialConstraintReport.php
@@ -13,9 +13,11 @@
 use Wikibase\Lib\Store\EntityTitleLookup;
 use Wikibase\Repo\WikibaseRepo;
 use WikidataQuality\ConstraintReport\ConstraintCheck\ConstraintChecker;
+use 
WikidataQuality\ConstraintReport\ConstraintCheck\Result\CheckResultToViolationTranslator;
 use WikidataQuality\Html\HtmlTable;
 use WikidataQuality\Html\HtmlTableHeader;
 use WikidataQuality\Specials\SpecialCheckResultPage;
+use WikidataQuality\Violations\ViolationStore;
 
 
 /**
@@ -97,6 +99,8 @@
                // Run constraint checker
                $constraintChecker = new ConstraintChecker( $this->entityLookup 
);
                $results = $constraintChecker->execute( $entity );
+
+               $this->saveResultsInViolationsTable( $results );
 
                return $results;
        }
@@ -283,4 +287,14 @@
                        'violation' => 'error'
                );
        }
+
+       /**
+        * @param array $results
+        */
+       protected function saveResultsInViolationsTable( $results ) {
+               $translator = new CheckResultToViolationTranslator();
+               $violations = $translator->translateToViolation( $results );
+               $violationStore = new ViolationStore();
+               $violationStore->insertViolation( $violations );
+       }
 }
\ No newline at end of file
diff --git a/includes/Result/ResultToViolationTranslator.php 
b/includes/Result/ResultToViolationTranslator.php
new file mode 100644
index 0000000..ee4d46d
--- /dev/null
+++ b/includes/Result/ResultToViolationTranslator.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WikidataQuality\Result;
+
+
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\Repo\WikibaseRepo;
+
+
+class ResultToViolationTranslator {
+       private $revisionLookup;
+
+       public function __construct() {
+               $this->revisionLookup = 
WikibaseRepo::getDefaultInstance()->getEntityRevisionLookup();
+       }
+
+       /**
+        * @param EntityId $entityId
+        *
+        * @return int|false
+        */
+
+       protected function getRevisionIdForEntity( EntityId $entityId ) {
+               return $this->revisionLookup->getLatestRevisionId( $entityId );
+       }
+
+}
\ No newline at end of file
diff --git a/includes/Violations/Violation.php 
b/includes/Violations/Violation.php
index e07bf0b..5ee46dd 100644
--- a/includes/Violations/Violation.php
+++ b/includes/Violations/Violation.php
@@ -19,6 +19,10 @@
  */
 class Violation {
 
+       const STATUS_VIOLATION = 'violation';
+       const STATUS_EXCEPTION = 'exception';
+       const STATUS_UNVERIFIED = 'unverified';
+
        /**
         * entity that contains the violation
         *
@@ -89,7 +93,8 @@
         * @param string $status
         * @param string $additionalInfo
         */
-       public function __construct( EntityId $entityId, $statement, 
$constraintClaimGuid, EntityId $constraintTypeEntityId, $revisionId, $status, 
$additionalInfo = null, $updatedAt = null ) {
+       // TODO: Argument 4 --> EntityId as TypeHint
+       public function __construct( EntityId $entityId, $statement, 
$constraintClaimGuid, $constraintTypeEntityId, $revisionId, $status, 
$additionalInfo = null, $updatedAt = null ) {
                $this->entityId = $entityId;
                if ( $statement instanceof Statement ) {
                        $this->pid = $statement->getPropertyId();
diff --git a/includes/Violations/ViolationStore.php 
b/includes/Violations/ViolationStore.php
index 1cdb6d9..461a136 100644
--- a/includes/Violations/ViolationStore.php
+++ b/includes/Violations/ViolationStore.php
@@ -40,7 +40,7 @@
                                'pid' => 
$violation->getPropertyId()->getSerialization(),
                                'claim_guid' => $violation->getClaimGuid(),
                                'constraint_claim_guid' => 
$violation->getConstraintClaimGuid(),
-                               'constraint_type_entity_id' => 
$violation->getConstraintTypeEntityId()->getSerialization(),
+                               'constraint_type_entity_id' => 
$violation->getConstraintTypeEntityId(),//TODO: use this line: 
->getSerialization(),
                                'additional_info' => 
$violation->getAdditionalInfo(),
                                'updated_at' => $updatedAt,
                                'revision_id' => $violation->getRevisionId(),

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4bf76f2403f0691fb6c89013b0a4cd22cc8fb471
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikidataQuality
Gerrit-Branch: master
Gerrit-Owner: Jonaskeutel <jonas.keu...@student.hpi.de>

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

Reply via email to