ItemSerializer   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 127
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 7
dl 0
loc 127
ccs 46
cts 46
cp 1
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 13 1
A isSerializerFor() 0 3 1
A serialize() 0 10 2
A getSerialized() 0 12 1
A addIdToSerialization() 0 7 2
A addTermsToSerialization() 0 9 1
A addStatementListToSerialization() 0 3 1
A addSiteLinksToSerialization() 0 12 3
1
<?php
2
3
namespace Wikibase\DataModel\Serializers;
4
5
use Serializers\DispatchableSerializer;
6
use Serializers\Exceptions\SerializationException;
7
use Serializers\Exceptions\UnsupportedObjectException;
8
use Serializers\Serializer;
9
use Wikibase\DataModel\Entity\Item;
10
11
/**
12
 * Package private
13
 *
14
 * @license GPL-2.0-or-later
15
 * @author Thomas Pellissier Tanon
16
 * @author Jan Zerebecki < [email protected] >
17
 * @author Bene* < [email protected] >
18
 */
19
class ItemSerializer implements DispatchableSerializer {
20
21
	/**
22
	 * @var Serializer
23
	 */
24
	private $termListSerializer;
25
26
	/**
27
	 * @var Serializer
28
	 */
29
	private $aliasGroupListSerializer;
30
31
	/**
32
	 * @var Serializer
33
	 */
34
	private $statementListSerializer;
35
36
	/**
37
	 * @var Serializer
38
	 */
39
	private $siteLinkSerializer;
40
41
	/**
42
	 * @var bool
43
	 */
44
	private $useObjectsForMaps;
45
46
	/**
47
	 * @param Serializer $termListSerializer
48
	 * @param Serializer $aliasGroupListSerializer
49
	 * @param Serializer $statementListSerializer
50
	 * @param Serializer $siteLinkSerializer
51
	 * @param bool $useObjectsForMaps
52
	 */
53 24
	public function __construct(
54
		Serializer $termListSerializer,
55
		Serializer $aliasGroupListSerializer,
56
		Serializer $statementListSerializer,
57
		Serializer $siteLinkSerializer,
58
		$useObjectsForMaps
59
	) {
60 24
		$this->termListSerializer = $termListSerializer;
61 24
		$this->aliasGroupListSerializer = $aliasGroupListSerializer;
62 24
		$this->statementListSerializer = $statementListSerializer;
63 24
		$this->siteLinkSerializer = $siteLinkSerializer;
64 24
		$this->useObjectsForMaps = $useObjectsForMaps;
65 24
	}
66
67
	/**
68
	 * @see Serializer::isSerializerFor
69
	 *
70
	 * @param mixed $object
71
	 *
72
	 * @return bool
73
	 */
74 23
	public function isSerializerFor( $object ) {
75 23
		return $object instanceof Item;
76
	}
77
78
	/**
79
	 * @see Serializer::serialize
80
	 *
81
	 * @param Item $object
82
	 *
83
	 * @throws SerializationException
84
	 * @return array
85
	 */
86 19
	public function serialize( $object ) {
87 19
		if ( !$this->isSerializerFor( $object ) ) {
88 3
			throw new UnsupportedObjectException(
89 3
				$object,
90 3
				'ItemSerializer can only serialize Item objects.'
91
			);
92
		}
93
94 16
		return $this->getSerialized( $object );
95
	}
96
97 16
	private function getSerialized( Item $item ) {
98
		$serialization = [
99 16
			'type' => $item->getType()
100
		];
101
102 16
		$this->addIdToSerialization( $item, $serialization );
103 16
		$this->addTermsToSerialization( $item, $serialization );
104 16
		$this->addStatementListToSerialization( $item, $serialization );
105 16
		$this->addSiteLinksToSerialization( $item, $serialization );
106
107 16
		return $serialization;
108
	}
109
110 16
	private function addIdToSerialization( Item $item, array &$serialization ) {
111 16
		$id = $item->getId();
112
113 16
		if ( $id !== null ) {
114 2
			$serialization['id'] = $id->getSerialization();
115
		}
116 16
	}
117
118 16
	private function addTermsToSerialization( Item $item, array &$serialization ) {
119 16
		$fingerprint = $item->getFingerprint();
120
121 16
		$serialization['labels'] = $this->termListSerializer->serialize( $fingerprint->getLabels() );
122 16
		$serialization['descriptions'] =
123 16
			$this->termListSerializer->serialize( $fingerprint->getDescriptions() );
124 16
		$serialization['aliases'] =
125 16
			$this->aliasGroupListSerializer->serialize( $fingerprint->getAliasGroups() );
126 16
	}
127
128 16
	private function addStatementListToSerialization( Item $item, array &$serialization ) {
129 16
		$serialization['claims'] = $this->statementListSerializer->serialize( $item->getStatements() );
130 16
	}
131
132 16
	private function addSiteLinksToSerialization( Item $item, array &$serialization ) {
133 16
		$serialization['sitelinks'] = [];
134
135 16
		foreach ( $item->getSiteLinkList()->toArray() as $siteLink ) {
136 3
			$serialization['sitelinks'][$siteLink->getSiteId()] =
137 3
				$this->siteLinkSerializer->serialize( $siteLink );
138
		}
139
140 16
		if ( $this->useObjectsForMaps ) {
141 1
			$serialization['sitelinks'] = (object)$serialization['sitelinks'];
142
		}
143 16
	}
144
145
}
146