SnakInserter::insertSnak()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 4
1
<?php
2
3
namespace Wikibase\QueryEngine\SQLStore\SnakStore;
4
5
use RuntimeException;
6
use Wikibase\DataModel\Entity\EntityId;
7
use Wikibase\DataModel\Snak\Snak;
8
9
/**
10
 * Use case for inserting snaks into the store.
11
 *
12
 * @licence GNU GPL v2+
13
 * @author Jeroen De Dauw < [email protected] >
14
 */
15
class SnakInserter {
16
17
	/**
18
	 * @var SnakStore[]
19
	 */
20
	private $snakStores;
21
22
	private $snakRowBuilder;
23
24
	/**
25
	 * @param SnakStore[] $snakStores
26
	 * @param SnakRowBuilder $snakRowBuilder
27
	 */
28
	public function __construct( array $snakStores, SnakRowBuilder $snakRowBuilder ) {
29
		$this->snakStores = $snakStores;
30
		$this->snakRowBuilder = $snakRowBuilder;
31
	}
32
33
	/**
34
	 * @param Snak $snak
35
	 * @param int $snakRole
36
	 * @param EntityId $subjectId
37
	 * @param int $statementRank
38
	 *
39
	 * TODO: exception
40
	 */
41
	public function insertSnak( Snak $snak, $snakRole, EntityId $subjectId, $statementRank ) {
42
		$snakRow = $this->snakRowBuilder->newSnakRow( $snak, $snakRole, $subjectId, $statementRank );
43
		$this->insertSnakRow( $snakRow );
44
	}
45
46
	private function insertSnakRow( SnakRow $snakRow ) {
47
		foreach ( $this->snakStores as $snakStore ) {
48
			if ( $snakStore->canStore( $snakRow ) ) {
49
				$snakStore->storeSnakRow( $snakRow );
50
				return;
51
			}
52
		}
53
54
		throw new RuntimeException( 'Cannot store the snak as there is no SnakStore that can handle it' );
55
	}
56
57
}
58