Completed
Push — master ( 63ce71...7d7b0c )
by Leszek
38s
created

StatementListDeserializer::assertHasGoodFormat()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 11
rs 8.8571
cc 5
eloc 6
nc 4
nop 1
1
<?php
2
3
namespace Wikibase\DataModel\Deserializers;
4
5
use Deserializers\Deserializer;
6
use Deserializers\Exceptions\DeserializationException;
7
use Wikibase\DataModel\Statement\Statement;
8
use Wikibase\DataModel\Statement\StatementList;
9
10
/**
11
 * Package private
12
 *
13
 * @license GPL-2.0+
14
 * @author Bene* < [email protected] >
15
 * @author Addshore
16
 */
17
class StatementListDeserializer implements Deserializer {
18
19
	/**
20
	 * @var Deserializer
21
	 */
22
	private $statementDeserializer;
23
24
	/**
25
	 * @param Deserializer $statementDeserializer
26
	 */
27
	public function __construct( Deserializer $statementDeserializer ) {
28
		$this->statementDeserializer = $statementDeserializer;
29
	}
30
31
	/**
32
	 * @see Deserializer::deserialize
33
	 *
34
	 * @param array[] $serialization
35
	 *
36
	 * @throws DeserializationException
37
	 * @return StatementList
38
	 */
39
	public function deserialize( $serialization ) {
40
		if ( !is_array( $serialization ) ) {
41
			throw new DeserializationException( 'The StatementList serialization should be an array' );
42
		}
43
44
		return $this->getDeserialized( $serialization );
45
	}
46
47
	/**
48
	 * @param array[] $serialization
49
	 *
50
	 * @return StatementList
51
	 */
52
	private function getDeserialized( array $serialization ) {
53
		$statementList = new StatementList();
54
55
		foreach ( $serialization as $key => $statementArray ) {
56
			if ( is_string( $key ) ) {
57
				if ( !is_array( $statementArray ) ) {
58
					throw new DeserializationException( "The statements per property \"$key\" should be an array" );
59
				}
60
61
				foreach ( $statementArray as $statementSerialization ) {
62
					/** @var Statement $statement */
63
					$statement = $this->statementDeserializer->deserialize( $statementSerialization );
64
					$statementList->addStatement( $statement );
65
				}
66
			} else {
67
				/** @var Statement $statement */
68
				$statement = $this->statementDeserializer->deserialize( $statementArray );
69
				$statementList->addStatement( $statement );
70
			}
71
		}
72
73
		return $statementList;
74
	}
75
76
}
77