[MediaWiki-commits] [Gerrit] Use DataModel Deserializer in SetReferences - change (mediawiki...Wikibase)

2015-07-21 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Use DataModel Deserializer in SetReferences
..


Use DataModel Deserializer in SetReferences

This removes a large method which no longer
needs to be here, and has had a TODO on it
for a long time to remove this code!

This also removed some other dead code
which would die if $claim was not an instance
of Statement, which it will always be now.

I deliberatly didn't rename $claim in this
patch to avoid touching more lines...

Change-Id: I281c043512bd6f3eccc7fa7e5922cdd654cfdad1
---
M repo/includes/api/SetReference.php
1 file changed, 29 insertions(+), 67 deletions(-)

Approvals:
  Jonas Kress (WMDE): Looks good to me, but someone else must approve
  Thiemo Mättig (WMDE): Looks good to me, but someone else must approve
  Jeroen De Dauw: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/repo/includes/api/SetReference.php 
b/repo/includes/api/SetReference.php
index 14adb47..51dd856 100644
--- a/repo/includes/api/SetReference.php
+++ b/repo/includes/api/SetReference.php
@@ -3,14 +3,14 @@
 namespace Wikibase\Repo\Api;
 
 use ApiMain;
-use InvalidArgumentException;
-use OutOfBoundsException;
+use DataValues\Deserializers\DataValueDeserializer;
+use Deserializers\Exceptions\DeserializationException;
 use Wikibase\ChangeOp\ChangeOpReference;
 use Wikibase\ChangeOp\StatementChangeOpFactory;
+use Wikibase\DataModel\DeserializerFactory;
 use Wikibase\DataModel\Reference;
 use Wikibase\DataModel\Snak\SnakList;
 use Wikibase\DataModel\Statement\Statement;
-use Wikibase\Lib\Serializers\LibSerializerFactory;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -35,6 +35,11 @@
private $errorReporter;
 
/**
+* @var DeserializerFactory
+*/
+   private $deserializerFactory;
+
+   /**
 * @param ApiMain $mainModule
 * @param string $moduleName
 * @param string $modulePrefix
@@ -48,6 +53,10 @@
 
$this-statementChangeOpFactory = 
$changeOpFactoryProvider-getStatementChangeOpFactory();
$this-errorReporter = $apiHelperFactory-getErrorReporter( 
$this );
+   $this-deserializerFactory = new DeserializerFactory(
+   $wikibaseRepo-getDataValueDeserializer(),
+   $wikibaseRepo-getEntityIdParser()
+   );
}
 
/**
@@ -71,13 +80,6 @@
 
$claim = $this-modificationHelper-getStatementFromEntity( 
$params['statement'], $entity );
 
-   if ( ! ( $claim instanceof Statement ) ) {
-   $this-errorReporter-dieError(
-   'The referenced claim is not a statement and 
thus cannot have references',
-   'not-statement'
-   );
-   }
-
if ( isset( $params['reference'] ) ) {
$this-validateReferenceHash( $claim, 
$params['reference'] );
}
@@ -88,20 +90,28 @@
$snaksOrder = array();
}
 
-   $newReference = new Reference(
-   $this-getSnaks(
-   $this-getArrayFromParam( $params['snaks'] ),
-   $snaksOrder
-   )
-   );
+   $deserializer = 
$this-deserializerFactory-newSnakListDeserializer();
+   /** @var SnakList $snakList */
+   try{
+   $snakList = $deserializer-deserialize( 
$this-getArrayFromParam( $params['snaks'] ) );
+   } catch ( DeserializationException $e ) {
+   $this-errorReporter-dieError(
+   'Failed to get reference from reference 
Serialization ' . $e-getMessage(),
+   'snak-instantiation-failure'
+   );
+   }
+   $snakList-orderByProperty( $snaksOrder );
+
+   $newReference = new Reference( $snakList );
 
$changeOp = $this-getChangeOp( $newReference );
$this-modificationHelper-applyChangeOp( $changeOp, $entity, 
$summary );
 
$status = $this-saveChanges( $entity, $summary );
-   $this-getResultBuilder()-addRevisionIdFromStatusToResult( 
$status, 'pageinfo' );
-   $this-getResultBuilder()-markSuccess();
-   $this-getResultBuilder()-addReference( $newReference );
+   $resultBuilder = $this-getResultBuilder();
+   $resultBuilder-addRevisionIdFromStatusToResult( $status, 
'pageinfo' );
+   $resultBuilder-markSuccess();
+   $resultBuilder-addReference( $newReference );
}
 
/**
@@ -139,54 +149,6 @@
}
 
return $rawArray;
-   }
-
-   /**
-* @param array $rawSnaks array of snaks
-* @param 

[MediaWiki-commits] [Gerrit] Use DataModel Deserializer in SetReferences - change (mediawiki...Wikibase)

2015-07-06 Thread Addshore (Code Review)
Addshore has uploaded a new change for review.

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

Change subject: Use DataModel Deserializer in SetReferences
..

Use DataModel Deserializer in SetReferences

This removes a large method which no longer
needs to be here, and has had a TODO on it
for a long time to remove this code!

Change-Id: I281c043512bd6f3eccc7fa7e5922cdd654cfdad1
---
M repo/includes/api/SetReference.php
1 file changed, 21 insertions(+), 67 deletions(-)


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

diff --git a/repo/includes/api/SetReference.php 
b/repo/includes/api/SetReference.php
index c9feaad..82041e4 100644
--- a/repo/includes/api/SetReference.php
+++ b/repo/includes/api/SetReference.php
@@ -4,14 +4,13 @@
 
 use ApiBase;
 use ApiMain;
-use InvalidArgumentException;
-use OutOfBoundsException;
+use DataValues\Deserializers\DataValueDeserializer;
 use Wikibase\ChangeOp\ChangeOpReference;
 use Wikibase\ChangeOp\StatementChangeOpFactory;
+use Wikibase\DataModel\DeserializerFactory;
 use Wikibase\DataModel\Reference;
 use Wikibase\DataModel\Snak\SnakList;
 use Wikibase\DataModel\Statement\Statement;
-use Wikibase\Lib\Serializers\LibSerializerFactory;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -36,6 +35,11 @@
private $errorReporter;
 
/**
+* @var DeserializerFactory
+*/
+   private $deserializerFactory;
+
+   /**
 * @param ApiMain $mainModule
 * @param string $moduleName
 * @param string $modulePrefix
@@ -49,6 +53,10 @@
 
$this-statementChangeOpFactory = 
$changeOpFactoryProvider-getStatementChangeOpFactory();
$this-errorReporter = $apiHelperFactory-getErrorReporter( 
$this );
+   $this-deserializerFactory = new DeserializerFactory(
+   new DataValueDeserializer(),
+   $wikibaseRepo-getEntityIdParser()
+   );
}
 
/**
@@ -72,13 +80,6 @@
 
$claim = $this-modificationHelper-getStatementFromEntity( 
$params['statement'], $entity );
 
-   if ( ! ( $claim instanceof Statement ) ) {
-   $this-errorReporter-dieError(
-   'The referenced claim is not a statement and 
thus cannot have references',
-   'not-statement'
-   );
-   }
-
if ( isset( $params['reference'] ) ) {
$this-validateReferenceHash( $claim, 
$params['reference'] );
}
@@ -89,20 +90,21 @@
$snaksOrder = array();
}
 
-   $newReference = new Reference(
-   $this-getSnaks(
-   $this-getArrayFromParam( $params['snaks'] ),
-   $snaksOrder
-   )
-   );
+   $deserializer = 
$this-deserializerFactory-newSnakListDeserializer();
+   /** @var SnakList $snakList */
+   $snakList = $deserializer-deserialize( 
$this-getArrayFromParam( $params['snaks'] ) );
+   $snakList-orderByProperty( $snaksOrder );
+
+   $newReference = new Reference( $snakList );
 
$changeOp = $this-getChangeOp( $newReference );
$this-modificationHelper-applyChangeOp( $changeOp, $entity, 
$summary );
 
$status = $this-saveChanges( $entity, $summary );
-   $this-getResultBuilder()-addRevisionIdFromStatusToResult( 
$status, 'pageinfo' );
-   $this-getResultBuilder()-markSuccess();
-   $this-getResultBuilder()-addReference( $newReference );
+   $resultBuilder = $this-getResultBuilder();
+   $resultBuilder-addRevisionIdFromStatusToResult( $status, 
'pageinfo' );
+   $resultBuilder-markSuccess();
+   $resultBuilder-addReference( $newReference );
}
 
/**
@@ -140,54 +142,6 @@
}
 
return $rawArray;
-   }
-
-   /**
-* @param array $rawSnaks array of snaks
-* @param array $snakOrder array of property ids the snaks are supposed 
to be ordered by.
-*
-* @todo: Factor deserialization out of the API class.
-*
-* @return SnakList
-*/
-   private function getSnaks( array $rawSnaks, array $snakOrder = array() 
) {
-   $snaks = new SnakList();
-
-   $serializerFactory = new LibSerializerFactory();
-   $snakUnserializer = 
$serializerFactory-newUnserializerForClass( 'Wikibase\DataModel\Snak\Snak' );
-
-   $snakOrder = ( count( $snakOrder )  0 ) ? $snakOrder : 
array_keys( $rawSnaks );
-
-   try {
-   foreach ( $snakOrder as $propertyId ) {
-   if ( !is_array(