Completed
Push — master ( c0676d...e5a675 )
by
unknown
24s
created

StatementListDiffer::getDiff()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 1
eloc 6
nc 1
nop 2
1
<?php
2
3
namespace Wikibase\DataModel\Services\Diff;
4
5
use Diff\Differ\MapDiffer;
6
use Diff\DiffOp\Diff\Diff;
7
use UnexpectedValueException;
8
use Wikibase\DataModel\Statement\Statement;
9
use Wikibase\DataModel\Statement\StatementList;
10
11
/**
12
 * @since 3.6
13
 *
14
 * @license GPL-2.0+
15
 * @author Jeroen De Dauw < [email protected] >
16
 */
17
class StatementListDiffer {
18
19
	/**
20
	 * @since 1.0
21
	 *
22
	 * @param StatementList $fromStatements
23
	 * @param StatementList $toStatements
24
	 *
25
	 * @return Diff
26
	 * @throws UnexpectedValueException
27
	 */
28
	public function getDiff( StatementList $fromStatements, StatementList $toStatements ) {
29
		return new Diff(
30
			$this->newDiffer()->doDiff(
31
				$this->toDiffArray( $fromStatements ),
32
				$this->toDiffArray( $toStatements )
33
			),
34
			true
35
		);
36
	}
37
38
	private function newDiffer() {
39
		$differ = new MapDiffer();
40
41
		$differ->setComparisonCallback( function( Statement $fromStatement, Statement $toStatement ) {
42
			return $fromStatement->equals( $toStatement );
43
		} );
44
45
		return $differ;
46
	}
47
48
	private function toDiffArray( StatementList $statementList ) {
49
		$statementArray = array();
50
51
		/**
52
		 * @var Statement $statement
53
		 */
54
		foreach ( $statementList as $statement ) {
55
			$statementArray[$statement->getGuid()] = $statement;
56
		}
57
58
		return $statementArray;
59
	}
60
61
}
62