BasicEntityInserter   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 6
dl 0
loc 50
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A insertEntity() 0 13 3
A insertStatements() 0 5 2
A insertStatement() 0 7 2
A insertSnak() 0 3 1
A canInsert() 0 3 2
1
<?php
2
3
namespace Wikibase\QueryEngine\SQLStore\EntityStore;
4
5
use Wikibase\DataModel\Entity\EntityDocument;
6
use Wikibase\DataModel\Entity\EntityId;
7
use Wikibase\DataModel\Entity\Item;
8
use Wikibase\DataModel\Entity\Property;
9
use Wikibase\DataModel\Snak\Snak;
10
use Wikibase\DataModel\Snak\SnakRole;
11
use Wikibase\DataModel\Statement\BestStatementsFinder;
12
use Wikibase\DataModel\Statement\Statement;
13
use Wikibase\DataModel\Statement\StatementList;
14
use Wikibase\QueryEngine\QueryEngineException;
15
use Wikibase\QueryEngine\SQLStore\SnakStore\SnakInserter;
16
17
/**
18
 * @licence GNU GPL v2+
19
 * @author Jeroen De Dauw < [email protected] >
20
 */
21
class BasicEntityInserter implements EntityInsertionStrategy {
22
23
	private $snakInserter;
24
25
	public function __construct( SnakInserter $snakInserter) {
26
		$this->snakInserter = $snakInserter;
27
	}
28
29
	public function insertEntity( EntityDocument $entity ) {
30
		if ( !$this->canInsert( $entity ) || !method_exists( $entity, 'getStatements' ) ) {
31
			throw new QueryEngineException( 'BasicEntityInserter got a type of entity it does not support' );
32
		}
33
34
		/**
35
		 * @var Item|Property $entity
36
		 */
37
		$bestStatementsFinder = new BestStatementsFinder( $entity->getStatements() );
38
		$statements = new StatementList( $bestStatementsFinder->getBestStatementsPerProperty() );
39
40
		$this->insertStatements( $statements->getWithUniqueMainSnaks(), $entity->getId() );
41
	}
42
43
	private function insertStatements( StatementList $statements, EntityId $subjectId ) {
44
		foreach ( $statements as $statement ) {
45
			$this->insertStatement( $statement, $subjectId );
46
		}
47
	}
48
49
	private function insertStatement( Statement $statement, EntityId $subjectId ) {
50
		$this->insertSnak( $statement->getMainSnak(), SnakRole::MAIN_SNAK, $subjectId, $statement->getRank() );
51
52
		foreach ( $statement->getQualifiers() as $qualifier ) {
53
			$this->insertSnak( $qualifier, SnakRole::QUALIFIER, $subjectId, $statement->getRank() );
54
		}
55
	}
56
57
	private function insertSnak( Snak $snak, $snakRole, EntityId $subjectId, $statementRank ) {
58
		$this->snakInserter->insertSnak( $snak, $snakRole, $subjectId, $statementRank );
59
	}
60
61
	/**
62
	 * @param EntityDocument $entity
63
	 *
64
	 * @return boolean
65
	 */
66
	public function canInsert( EntityDocument $entity ) {
67
		return $entity->getType() === 'item' || $entity->getType() === 'property';
68
	}
69
70
}
71