1
+ <?php
2
+
3
+ namespace Sdmx \api \client \rest ;
4
+
5
+
6
+ use Sdmx \api \client \http \HttpClient ;
7
+ use Sdmx \api \client \rest \query \SdmxQueryBuilder ;
8
+ use Sdmx \api \client \SdmxClient ;
9
+ use Sdmx \api \entities \Dataflow ;
10
+ use Sdmx \api \entities \DataflowStructure ;
11
+ use Sdmx \api \entities \DsdIdentifier ;
12
+ use Sdmx \api \entities \PortableTimeSeries ;
13
+ use Sdmx \api \parser \DataStructureParser ;
14
+
15
+ class DotStatClient implements SdmxClient
16
+ {
17
+
18
+ /**
19
+ * @var SdmxQueryBuilder $queryBuilder
20
+ */
21
+ private $ queryBuilder ;
22
+
23
+ /**
24
+ * @var HttpClient $httpClient
25
+ */
26
+ private $ httpClient ;
27
+
28
+ /**
29
+ * @var DataStructureParser $dataStructureParser
30
+ */
31
+ private $ dataStructureParser ;
32
+
33
+ /**
34
+ * RestSdmxV20Client constructor.
35
+ * @param SdmxQueryBuilder $queryBuilder
36
+ * @param HttpClient $httpClient
37
+ */
38
+ public function __construct (SdmxQueryBuilder $ queryBuilder , HttpClient $ httpClient , DataStructureParser $ dataStructureParser )
39
+ {
40
+ $ this ->queryBuilder = $ queryBuilder ;
41
+ $ this ->httpClient = $ httpClient ;
42
+ $ this ->dataStructureParser = $ dataStructureParser ;
43
+ }
44
+
45
+
46
+ /**
47
+ * Gets all dataflows.
48
+ * @return Dataflow[]
49
+ */
50
+ public function getDataflows ()
51
+ {
52
+ $ url = $ this ->queryBuilder ->getDsdQuery ('all ' , 'all ' , 'latest ' , false );
53
+ $ data = $ this ->httpClient ->get ($ url );
54
+ $ result = [];
55
+
56
+ $ structures = $ this ->dataStructureParser ->parse ($ data );
57
+ foreach ($ structures as $ structure ){
58
+ $ result [] = $ this ->mapStructureToDataflow ($ structure );
59
+ }
60
+
61
+ return $ result ;
62
+ }
63
+
64
+ /**
65
+ * Gets the dataflow information for a given dataflow.
66
+ * @param string $dataflow
67
+ * @param string $agency
68
+ * @param string $version
69
+ * @return Dataflow
70
+ */
71
+ public function getDataflow ($ dataflow , $ agency , $ version )
72
+ {
73
+ // TODO: Implement getDataflow() method.
74
+ }
75
+
76
+ /**
77
+ * Gets the structure for a given dataflow.
78
+ * @param DsdIdentifier $dsd
79
+ * @param bool $full if true, for 2.1 providers it retrieves the full dsd, with all the codelists.
80
+ * @return DataflowStructure
81
+ */
82
+ public function getDataflowStructure (DsdIdentifier $ dsd , $ full = false )
83
+ {
84
+ // TODO: Implement getDataflowStructure() method.
85
+ }
86
+
87
+ /**
88
+ * Gets all the codes from this provider for a given codelist.
89
+ * @param string $codelist
90
+ * @param string $agency
91
+ * @param string $version
92
+ * @return string[]
93
+ */
94
+ public function getCodes ($ codelist , $ agency , $ version )
95
+ {
96
+ // TODO: Implement getCodes() method.
97
+ }
98
+
99
+ /**
100
+ * @param Dataflow $dataflow The dataflow of the time series to be gathered
101
+ * @param DataflowStructure $dsd The structure of the dataflow of the time series to be gathered
102
+ * @param string $resource The id of the time series
103
+ * @param array $options
104
+ * ```php
105
+ * $options = array(
106
+ * 'startPeriod' => 'string', //Start time of the observations to be gathered
107
+ * 'endPeriod' => 'string', //End time of the observations to be gathered
108
+ * 'seriesKeysOnly' => 'boolean', //Flag for disabling data and attributes processing (usually for getting the only dataflow contents)
109
+ * 'lastNObservations' => 'integer' //The last 'n' observations to return for each matched series.
110
+ * )
111
+ * ```
112
+ * @return PortableTimeSeries[]
113
+ */
114
+ public function getTimeSeries (Dataflow $ dataflow , DataflowStructure $ dsd , $ resource , array $ options = array ())
115
+ {
116
+ // TODO: Implement getTimeSeries() method.
117
+ }
118
+
119
+ /**
120
+ * @param string $dataflow The dataflow of the time series to be gathered
121
+ * @param string $agency The agency of the dataflow of the time series to be gathered
122
+ * @param string $version The version of the dataflow of the time series to be gathered
123
+ * @param string $resource The id of the time series
124
+ * @param array $options
125
+ * ```php
126
+ * $options = array(
127
+ * 'startPeriod' => 'string', //Start time of the observations to be gathered
128
+ * 'startPeriod' => 'string', //End time of the observations to be gathered
129
+ * 'seriesKeysOnly' => 'boolean', //Flag for disabling data and attributes processing (usually for getting the only dataflow contents)
130
+ * 'lastNObservations' => 'integer' //The last 'n' observations to return for each matched series.
131
+ * )
132
+ * ```
133
+ * @return PortableTimeSeries[]
134
+ */
135
+ public function getTimeSeries2 ($ dataflow , $ agency , $ version , $ resource , array $ options = array ())
136
+ {
137
+ // TODO: Implement getTimeSeries2() method.
138
+ }
139
+
140
+ /**
141
+ * @param $structure
142
+ * @return Dataflow
143
+ */
144
+ protected function mapStructureToDataflow ($ structure )
145
+ {
146
+ $ dataflow = new Dataflow ();
147
+ $ dataflow ->setAgency ($ structure ->getAgency ());
148
+ $ dataflow ->setId ($ structure ->getId ());
149
+ $ dataflow ->setVersion ($ structure ->getVersion ());
150
+ $ dataflow ->setName ($ structure ->getName ());
151
+ $ dsd = new DsdIdentifier ($ structure ->getId (), $ structure ->getAgency (), $ structure ->getVersion ());
152
+ $ dataflow ->setDsdIdentifier ($ dsd );
153
+ return $ dataflow ;
154
+ }
155
+ }
0 commit comments