SnakRowBuilder   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 0
Metric Value
wmc 7
lcom 0
cbo 5
dl 0
loc 47
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A newSnakRow() 0 11 4
A newValueSnakRow() 0 9 1
A newValuelessSnakRow() 0 12 2
1
<?php
2
3
namespace Wikibase\QueryEngine\SQLStore\SnakStore;
4
5
use InvalidArgumentException;
6
use Wikibase\DataModel\Entity\EntityId;
7
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
8
use Wikibase\DataModel\Snak\PropertySomeValueSnak;
9
use Wikibase\DataModel\Snak\PropertyValueSnak;
10
use Wikibase\DataModel\Snak\Snak;
11
12
/**
13
 * Builder for ClaimRow objects.
14
 *
15
 * @licence GNU GPL v2+
16
 * @author Jeroen De Dauw < [email protected] >
17
 */
18
class SnakRowBuilder {
19
20
	/**
21
	 * @param Snak $snak
22
	 * @param int $snakRole
23
	 * @param EntityId $subjectId
24
	 * @param int $statementRank
25
	 *
26
	 * @return SnakRow
27
	 * @throws InvalidArgumentException
28
	 */
29
	public function newSnakRow( Snak $snak, $snakRole, EntityId $subjectId, $statementRank ) {
30
		if ( $snak instanceof PropertyValueSnak ) {
31
			return $this->newValueSnakRow( $snak, $snakRole, $subjectId, $statementRank );
32
		}
33
34
		if ( $snak instanceof PropertySomeValueSnak || $snak instanceof PropertyNoValueSnak ) {
35
			return $this->newValuelessSnakRow( $snak, $snakRole, $subjectId, $statementRank );
36
		}
37
38
		throw new InvalidArgumentException( 'Got a snak type no supported by the SnakRowBuilder' );
39
	}
40
41
	private function newValueSnakRow( PropertyValueSnak $snak, $snakRole, EntityId $subjectId, $statementRank ) {
42
		return new ValueSnakRow(
43
			$snak->getDataValue(),
44
			$snak->getPropertyId()->getSerialization(),
45
			$snakRole,
46
			$subjectId,
47
			$statementRank
48
		);
49
	}
50
51
	private function newValuelessSnakRow( Snak $snak, $snakRole, EntityId $subjectId, $statementRank ) {
52
		$internalSnakType = $snak instanceof PropertySomeValueSnak
53
			? ValuelessSnakRow::TYPE_SOME_VALUE : ValuelessSnakRow::TYPE_NO_VALUE;
54
55
		return new ValuelessSnakRow(
56
			$internalSnakType,
57
			$snak->getPropertyId()->getSerialization(),
58
			$snakRole,
59
			$subjectId,
60
			$statementRank
61
		);
62
	}
63
64
}
65