blob: 8927334bded64b67f61d46c7c8e31b65cb0269de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
<?php
namespace SMW\Deserializers;
use SMW\Deserializers\DVDescriptionDeserializer\DescriptionDeserializer;
use SMW\Deserializers\DVDescriptionDeserializer\DispatchingDescriptionDeserializer;
use SMW\Deserializers\DVDescriptionDeserializer\MonolingualTextValueDescriptionDeserializer;
use SMW\Deserializers\DVDescriptionDeserializer\NumberValueDescriptionDeserializer;
use SMW\Deserializers\DVDescriptionDeserializer\RecordValueDescriptionDeserializer;
use SMW\Deserializers\DVDescriptionDeserializer\SomeValueDescriptionDeserializer;
use SMW\Deserializers\DVDescriptionDeserializer\TimeValueDescriptionDeserializer;
use SMWDataValue as DataValue;
/**
* @license GNU GPL v2+
* @since 2.3
*
* @author mwjames
*/
class DVDescriptionDeserializerRegistry {
/**
* @var DVDescriptionDeserializerRegistry
*/
private static $instance = null;
/**
* @var DispatchingDescriptionDeserializer
*/
private $dispatchingDescriptionDeserializer = null;
/**
* @since 2.3
*
* @param DispatchingDescriptionDeserializer|null $dispatchingDescriptionDeserializer
*/
public function __construct( DispatchingDescriptionDeserializer $dispatchingDescriptionDeserializer = null ) {
$this->dispatchingDescriptionDeserializer = $dispatchingDescriptionDeserializer;
}
/**
* @since 2.3
*
* @return self
*/
public static function getInstance() {
if ( self::$instance === null ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* @since 2.3
*/
public static function clear() {
self::$instance = null;
}
/**
* @note This allows extensions to inject their own DescriptionDeserializer
* without further violating SRP of the DataType or DataValue.
*
* @since 2.3
*
* @param DescriptionDeserializer $descriptionDeserializer
*/
public function registerDescriptionDeserializer( DescriptionDeserializer $descriptionDeserializer ) {
if ( $this->dispatchingDescriptionDeserializer === null ) {
$this->dispatchingDescriptionDeserializer = $this->newDispatchingDescriptionDeserializer();
}
$this->dispatchingDescriptionDeserializer->addDescriptionDeserializer( $descriptionDeserializer );
}
/**
* @since 2.3
*
* @param DataValue $dataValue
*
* @return DescriptionDeserializer
*/
public function getDescriptionDeserializerBy( DataValue $dataValue ) {
if ( $this->dispatchingDescriptionDeserializer === null ) {
$this->dispatchingDescriptionDeserializer = $this->newDispatchingDescriptionDeserializer();
}
return $this->dispatchingDescriptionDeserializer->getDescriptionDeserializerBy( $dataValue );
}
private function newDispatchingDescriptionDeserializer() {
$dispatchingDescriptionDeserializer = new DispatchingDescriptionDeserializer();
$dispatchingDescriptionDeserializer->addDescriptionDeserializer( new TimeValueDescriptionDeserializer() );
$dispatchingDescriptionDeserializer->addDescriptionDeserializer( new NumberValueDescriptionDeserializer() );
$dispatchingDescriptionDeserializer->addDescriptionDeserializer( new RecordValueDescriptionDeserializer() );
$dispatchingDescriptionDeserializer->addDescriptionDeserializer( new MonolingualTextValueDescriptionDeserializer() );
$dispatchingDescriptionDeserializer->addDefaultDescriptionDeserializer( new SomeValueDescriptionDeserializer() );
return $dispatchingDescriptionDeserializer;
}
}
|