SnakInserter   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 43
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A insertSnak() 0 4 1
A insertSnakRow() 0 10 3
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