Passed
Pull Request — master (#219)
by Jeroen De
03:04
created

FingerprintDiffer   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 3
dl 0
loc 51
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
B diff() 0 24 6
A diffAliasGroup() 0 16 4
1
<?php
2
3
namespace Wikibase\DataModel\Services\Diff;
4
5
use Wikibase\DataModel\Term\AliasGroup;
6
use Wikibase\DataModel\Term\Fingerprint;
7
8
/**
9
 * @license GPL-2.0-or-later
10
 * @author Jeroen De Dauw < [email protected] >
11
 */
12
class FingerprintDiffer {
13
14
	/**
15
	 * @param Fingerprint $first
16
	 * @param Fingerprint $second
17
	 *
18
	 * @return Fingerprint Contains the terms present in $first that are not present in $second
19
	 */
20
	public function diff( Fingerprint $first, Fingerprint $second ): Fingerprint {
21
		$difference = new Fingerprint();
22
23
		foreach ( $first->getLabels() as $term ) {
24
			if ( !$second->getLabels()->hasTerm( $term ) ) {
25
				$difference->getLabels()->setTerm( $term );
26
			}
27
		}
28
29
		foreach ( $first->getDescriptions() as $term ) {
30
			if ( !$second->getDescriptions()->hasTerm( $term ) ) {
31
				$difference->getDescriptions()->setTerm( $term );
32
			}
33
		}
34
35
		foreach ( $first->getAliasGroups() as $aliasGroup ) {
36
			$difference->setAliasGroup(
37
				$aliasGroup->getLanguageCode(),
38
				$this->diffAliasGroup( $aliasGroup, $second )
39
			);
40
		}
41
42
		return $difference;
43
	}
44
45
	private function diffAliasGroup( AliasGroup $aliasGroup, Fingerprint $second ) {
46
		if ( $second->hasAliasGroup( $aliasGroup->getLanguageCode() ) ) {
47
			$secondAliases = $second->getAliasGroup( $aliasGroup->getLanguageCode() )->getAliases();
48
			$differenceAliases = [];
49
50
			foreach ( $aliasGroup->getAliases() as $aliasText ) {
51
				if ( !in_array( $aliasText, $secondAliases ) ) {
52
					$differenceAliases[] = $aliasText;
53
				}
54
			}
55
56
			return $differenceAliases;
57
		}
58
59
		return $aliasGroup->getAliases();
60
	}
61
62
}
63