Passed
Push — fixTravisHHVM ( 29be00...81ae42 )
by Marius
07:29 queued 04:42
created

EntityDeserializer   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 2
dl 0
loc 57
ccs 20
cts 20
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A deserialize() 0 13 4
A fromUnknownSerialization() 0 15 3
1
<?php
2
3
namespace Wikibase\InternalSerialization\Deserializers;
4
5
use Deserializers\Deserializer;
6
use Deserializers\DispatchableDeserializer;
7
use Deserializers\Exceptions\DeserializationException;
8
use Wikibase\DataModel\Entity\EntityDocument;
9
10
/**
11
 * @license GPL-2.0-or-later
12
 * @author Jeroen De Dauw < [email protected] >
13
 * @author Thiemo Kreuz
14
 */
15
class EntityDeserializer implements Deserializer {
16
17
	/**
18
	 * @var DispatchableDeserializer
19
	 */
20
	private $legacyDeserializer;
21
22
	/**
23
	 * @var DispatchableDeserializer
24
	 */
25
	private $currentDeserializer;
26
27 11
	public function __construct(
28
		DispatchableDeserializer $legacyDeserializer,
29
		DispatchableDeserializer $currentDeserializer
30
	) {
31 11
		$this->legacyDeserializer = $legacyDeserializer;
32 11
		$this->currentDeserializer = $currentDeserializer;
33 11
	}
34
35
	/**
36
	 * @param array $serialization
37
	 *
38
	 * @return EntityDocument
39
	 * @throws DeserializationException
40
	 */
41 11
	public function deserialize( $serialization ) {
42 11
		if ( !is_array( $serialization ) ) {
43 2
			throw new DeserializationException( 'Entity serialization must be an array' );
44
		}
45
46 9
		if ( $this->currentDeserializer->isDeserializerFor( $serialization ) ) {
47 3
			return $this->currentDeserializer->deserialize( $serialization );
48 6
		} elseif ( $this->legacyDeserializer->isDeserializerFor( $serialization ) ) {
49 2
			return $this->legacyDeserializer->deserialize( $serialization );
50
		} else {
51 4
			return $this->fromUnknownSerialization( $serialization );
52
		}
53
	}
54
55 4
	private function fromUnknownSerialization( array $serialization ) {
56
		try {
57 4
			return $this->currentDeserializer->deserialize( $serialization );
58 3
		} catch ( DeserializationException $currentEx ) {
59
			try {
60 3
				return $this->legacyDeserializer->deserialize( $serialization );
61 2
			} catch ( DeserializationException $legacyEx ) {
62 2
				throw new DeserializationException(
63
					'The provided entity serialization is neither legacy ('
64 2
					. $legacyEx->getMessage() . ') nor current ('
65 2
					. $currentEx->getMessage() . ')'
66
				);
67
			}
68
		}
69
	}
70
71
}
72