TripleNodeDeserializer::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 5
c 0
b 0
f 0
ccs 4
cts 4
cp 1
rs 9.4285
nc 1
cc 1
eloc 3
nop 1
crap 1
1
<?php
2
3
namespace PPP\DataModel\Deserializers;
4
5
use Deserializers\TypedObjectDeserializer;
6
use PPP\DataModel\DeserializerFactory;
7
use PPP\DataModel\TripleNode;
8
use PPP\DataModel\UnionNode;
9
10
/**
11
 * @licence AGPLv3+
12
 * @author Thomas Pellissier Tanon
13
 */
14
class TripleNodeDeserializer extends TypedObjectDeserializer {
15
16
	/**
17
	 * @var DeserializerFactory
18
	 */
19
	private $deserializerFactory;
20
21
	/**
22
	 * @param DeserializerFactory $deserializerFactory
23
	 */
24 8
	public function __construct(DeserializerFactory $deserializerFactory) {
25 8
		$this->deserializerFactory = $deserializerFactory;
26
27 8
		parent::__construct('triple', 'type');
28 8
	}
29
30
	/**
31
	 * @see Deserializer::deserialize
32
	 */
33 4
	public function deserialize($serialization) {
34 4
		$this->assertCanDeserialize($serialization);
35
36 2
		return $this->getDeserialization($serialization);
37
	}
38
39 2
	private function getDeserialization(array $serialization) {
40 2
		$this->requireAttributes($serialization, 'subject', 'predicate', 'object');
41
42 2
		$nodeDeserializer = $this->deserializerFactory->newNodeDeserializer();
43 2
		$baseTriple = new TripleNode(
44 2
			$nodeDeserializer->deserialize($serialization['subject']),
45 2
			$nodeDeserializer->deserialize($serialization['predicate']),
46 2
			$nodeDeserializer->deserialize($serialization['object'])
47 2
		);
48
49 2
		if(!array_key_exists('inverse-predicate', $serialization)) {
50 1
			return $baseTriple;
51
		}
52
53 1
		return new UnionNode(array(
54 1
			$baseTriple,
55 1
			new TripleNode(
56 1
				$baseTriple->getObject(),
57 1
				$nodeDeserializer->deserialize($serialization['inverse-predicate']),
58 1
				$baseTriple->getSubject()
59 1
			)
60 1
		));
61
	}
62
}
63