Completed
Push — master ( 11e3bd...1a1840 )
by
unknown
03:54
created

deserializeCachingMetadata()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 1
1
<?php
2
3
namespace WikibaseQuality\ConstraintReport\ConstraintCheck\Result;
4
5
use DataValues\TimeValue;
6
use Wikibase\DataModel\Entity\EntityIdParser;
7
use WikibaseQuality\ConstraintReport\ConstraintCheck\Cache\CachingMetadata;
8
use WikibaseQuality\ConstraintReport\ConstraintCheck\Cache\DependencyMetadata;
9
use WikibaseQuality\ConstraintReport\ConstraintCheck\Cache\Metadata;
10
use WikibaseQuality\ConstraintReport\ConstraintCheck\Context\ContextCursorDeserializer;
11
use WikibaseQuality\ConstraintReport\ConstraintCheck\Message\ViolationMessageDeserializer;
12
use WikibaseQuality\ConstraintReport\ConstraintDeserializer;
13
14
/**
15
 * A deserializer for {@link CheckResult}s.
16
 *
17
 * @author Lucas Werkmeister
18
 * @license GPL-2.0-or-later
19
 */
20
class CheckResultDeserializer {
21
22
	/**
23
	 * @var ConstraintDeserializer
24
	 */
25
	private $constraintDeserializer;
26
27
	/**
28
	 * @var ContextCursorDeserializer
29
	 */
30
	private $contextCursorDeserializer;
31
32
	/**
33
	 * @var ViolationMessageDeserializer
34
	 */
35
	private $violationMessageDeserializer;
36
37
	/**
38
	 * @var EntityIdParser
39
	 */
40
	private $entityIdParser;
41
42
	public function __construct(
43
		ConstraintDeserializer $constraintDeserializer,
44
		ContextCursorDeserializer $contextCursorDeserializer,
45
		ViolationMessageDeserializer $violationMessageDeserializer,
46
		EntityIdParser $entityIdParser
47
	) {
48
		$this->constraintDeserializer = $constraintDeserializer;
49
		$this->contextCursorDeserializer = $contextCursorDeserializer;
50
		$this->violationMessageDeserializer = $violationMessageDeserializer;
51
		$this->entityIdParser = $entityIdParser;
52
	}
53
54
	/**
55
	 * @param array $serialization
56
	 * @return CheckResult
57
	 */
58
	public function deserialize( array $serialization ) {
59
		$contextCursor = $this->contextCursorDeserializer->deserialize(
60
			$serialization[CheckResultSerializer::KEY_CONTEXT_CURSOR]
61
		);
62
63
		$constraint = $this->constraintDeserializer->deserialize(
64
			$serialization[CheckResultSerializer::KEY_CONSTRAINT]
65
		);
66
67
		$parameters = []; // serialization of parameters not supported yet
68
69
		$status = $serialization[CheckResultSerializer::KEY_CHECK_RESULT_STATUS];
70
71
		if ( array_key_exists( CheckResultSerializer::KEY_VIOLATION_MESSAGE, $serialization ) ) {
72
			$violationMessage = $this->violationMessageDeserializer->deserialize(
73
				$serialization[CheckResultSerializer::KEY_VIOLATION_MESSAGE]
74
			);
75
		} else {
76
			$violationMessage = null;
77
		}
78
79
		$cachingMetadata = $this->deserializeCachingMetadata(
80
			$serialization[CheckResultSerializer::KEY_CACHING_METADATA]
81
		);
82
83
		if ( array_key_exists( CheckResultSerializer::KEY_DEPENDENCY_METADATA, $serialization ) ) {
84
			$dependencyMetadata = $this->deserializeDependencyMetadata(
85
				$serialization[CheckResultSerializer::KEY_DEPENDENCY_METADATA]
86
			);
87
		} else {
88
			$dependencyMetadata = DependencyMetadata::blank();
89
		}
90
91
		return ( new CheckResult(
92
			$contextCursor,
93
			$constraint,
94
			$parameters,
95
			$status,
96
			$violationMessage
97
		) )->withMetadata(
98
			Metadata::merge( [
99
				Metadata::ofCachingMetadata( $cachingMetadata ),
100
				Metadata::ofDependencyMetadata( $dependencyMetadata ),
101
			] )
102
		);
103
	}
104
105
	/**
106
	 * @param array $serialization
107
	 * @return CachingMetadata
108
	 */
109
	private function deserializeCachingMetadata( array $serialization ) {
110
		if (
111
			array_key_exists(
112
				CheckResultSerializer::KEY_CACHING_METADATA_MAX_AGE,
113
				$serialization
114
			)
115
		) {
116
			return CachingMetadata::ofMaximumAgeInSeconds(
117
				$serialization[CheckResultSerializer::KEY_CACHING_METADATA_MAX_AGE]
118
			);
119
		} else {
120
			return CachingMetadata::fresh();
121
		}
122
	}
123
124
	/**
125
	 * @param array $serialization
126
	 * @return DependencyMetadata
127
	 */
128
	private function deserializeDependencyMetadata( array $serialization ) {
129
		if (
130
			array_key_exists(
131
				CheckResultSerializer::KEY_DEPENDENCY_METADATA_FUTURE_TIME,
132
				$serialization
133
			)
134
		) {
135
			$futureTime = TimeValue::newFromArray(
136
				$serialization[CheckResultSerializer::KEY_DEPENDENCY_METADATA_FUTURE_TIME]
137
			);
138
			$futureTimeDependencyMetadata = DependencyMetadata::ofFutureTime( $futureTime );
139
		} else {
140
			$futureTimeDependencyMetadata = DependencyMetadata::blank();
141
		}
142
143
		$dependencyMetadata = array_reduce(
144
			$serialization[CheckResultSerializer::KEY_DEPENDENCY_METADATA_ENTITY_IDS],
145
			function ( DependencyMetadata $metadata, $entityIdSerialization ) {
146
				$entityId = $this->entityIdParser->parse( $entityIdSerialization );
147
148
				return DependencyMetadata::merge( [
149
					$metadata,
150
					DependencyMetadata::ofEntityId( $entityId )
151
				] );
152
			},
153
			$futureTimeDependencyMetadata
154
		);
155
156
		return $dependencyMetadata;
157
	}
158
159
}
160