PageImporter::thereAreHandlers()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 2
1
<?php
2
3
namespace Queryr\Replicator\Importer;
4
5
use Deserializers\Deserializer;
6
use Deserializers\Exceptions\DeserializationException;
7
use Queryr\Replicator\Model\EntityPage;
8
use Wikibase\DataModel\Entity\EntityDocument;
9
use Wikibase\DataModel\Entity\Item;
10
11
class PageImporter {
12
13
	private $entityDeserializer;
14
	private $reporter;
15
16
	private $entityHandlers;
17
	private $entityPageHandlers;
18
19
	/**
20
	 * @param Deserializer $entityDeserializer
21
	 * @param EntityHandler[] $entityHandlers
22
	 * @param EntityPageHandler[] $entityPageHandlers
23
	 * @param PageImportReporter $reporter
24
	 */
25 1
	public function __construct( Deserializer $entityDeserializer, array $entityHandlers,
26
		array $entityPageHandlers, PageImportReporter $reporter ) {
27
28 1
		$this->entityDeserializer = $entityDeserializer;
29 1
		$this->reporter = $reporter;
30
31 1
		$this->entityHandlers = $entityHandlers;
32 1
		$this->entityPageHandlers = $entityPageHandlers;
33 1
	}
34
35 1
	public function import( EntityPage $entityPage ) {
36 1
		$this->reporter->started( $entityPage );
37
38
		try {
39 1
			$this->doImport( $entityPage );
40
41 1
			$this->reporter->endedSuccessfully();
42
		}
43
		catch ( \Exception $ex ) {
44
			$this->reporter->endedWithError( $ex );
45
		}
46 1
	}
47
48 1
	private function doImport( EntityPage $entityPage ) {
49 1
		if ( $this->thereAreHandlers() ) {
50 1
			$entity = $this->doDeserializeStep( $entityPage );
51
52 1
			$this->invokeEntityPageHandlers( $entity, $entityPage );
53 1
			$this->invokeEntityHandlers( $entity );
54
		}
55 1
	}
56
57 1
	private function thereAreHandlers(): bool {
58 1
		return !empty( $this->entityHandlers ) || !empty( $this->entityPageHandlers );
59
	}
60
61 1
	private function doDeserializeStep( EntityPage $entityPage ) {
62 1
		$this->reporter->stepStarted( 'Deserializing' );
63 1
		$entity = $this->entityFromEntityPage( $entityPage );
64 1
		$this->reporter->stepCompleted();
65
66 1
		return $entity;
67
	}
68
69 1
	private function invokeEntityPageHandlers( EntityDocument $entity, EntityPage $entityPage ) {
70 1
		foreach ( $this->entityPageHandlers as $pageHandler ) {
71 1
			$this->reporter->stepStarted( $pageHandler->getHandlingMessage( $entity ) );
72 1
			$pageHandler->handleEntityPage( $entity, $entityPage );
73 1
			$this->reporter->stepCompleted();
74
		}
75 1
	}
76
77 1
	private function invokeEntityHandlers( EntityDocument $entity ) {
78 1
		foreach ( $this->entityHandlers as $entityHandler ) {
79 1
			$this->reporter->stepStarted( $entityHandler->getHandlingMessage( $entity ) );
80 1
			$entityHandler->handleEntity( $entity );
81 1
			$this->reporter->stepCompleted();
82
		}
83 1
	}
84
85
	/**
86
	 * @param EntityPage $entityPage
87
	 * @return Item
88
	 * @throws DeserializationException
89
	 */
90 1
	private function entityFromEntityPage( EntityPage $entityPage ) {
91 1
		return $this->entityDeserializer->deserialize(
92 1
			json_decode( $entityPage->getEntityJson(), true )
93
		);
94
	}
95
96
	public function setReporter( PageImportReporter $reporter ) {
97
		$this->reporter = $reporter;
98
	}
99
100
	public function getReporter() {
101
		return $this->reporter;
102
	}
103
104
}
105