DownloadOutput.hh
8.37 KB
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
/**
* DownloadOutput.hh
*
* Created on: 02 oct. 2014
* Author: AKKA
*/
#ifndef PARAMOUTPUTASCIIFILE_HH_
#define PARAMOUTPUTASCIIFILE_HH_
#include "ParamOutput.hh"
#include "DownloadProperties.hh"
#include "DownloadLogger.hh"
#include "FileWriter.hh"
#include "ParameterIndexesTool.hh"
#include "StatisticProcess.hh"
#include "Catalog.hh"
#include <memory>
namespace AMDA
{
namespace ParamOutputImpl
{
namespace Download
{
/**
* @class DownloadOutput
* @brief Implementation of a ParamOutput to download data.
* @details
*/
class DownloadOutput : public AMDA::Parameters::VisitorOfParamData,
public AMDA::Parameters::ParamOutput
{
public:
DownloadOutput(AMDA::Parameters::ParameterManager &pParameterManager);
virtual ~DownloadOutput();
/**
* @overload DataClient::establishConnection()
*/
virtual void establishConnection();
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataScalaireShort *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataScalaireFloat *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataScalaireDouble *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataScalaireLongDouble *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataScalaireInt *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataLogicalData *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataTab1DShort *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataTab1DFloat *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataTab1DDouble *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataTab1DLongDouble *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataTab1DInt *);
/**
* @overload VisitorOfParamData::visit()
*/
virtual void visit(AMDA::Parameters::ParamDataTab1DLogicalData *);
/**
* @overload VisitorOfParamData::visit(ParamDataTab2DShort *)
*/
virtual void visit(AMDA::Parameters::ParamDataTab2DShort *);
/**
* @overload VisitorOfParamData::visit(ParamDataTab2DFloat *)
*/
virtual void visit(AMDA::Parameters::ParamDataTab2DFloat *);
/**
* @overload VisitorOfParamData::visit(ParamDataTab2DDouble *)
*/
virtual void visit(AMDA::Parameters::ParamDataTab2DDouble *);
/**
* @overload VisitorOfParamData::visit(ParamDataTab2DLongDouble *)
*/
virtual void visit(AMDA::Parameters::ParamDataTab2DLongDouble *);
/**
* @overload VisitorOfParamData::visit(ParamDataTab2DInt *)
*/
virtual void visit(AMDA::Parameters::ParamDataTab2DInt *);
/**
* @overload VisitorOfParamData::visit(ParamDataTab2DLogicalData *)
*/
virtual void visit(AMDA::Parameters::ParamDataTab2DLogicalData *);
/*
* @brief Get Download request properties
*/
DownloadProperties &getDownloadProperties()
{
return _downloadProperties;
}
/*
* @brief Set Download request properties
*/
void setDownloadProperties(const DownloadProperties &downloadProperties)
{
_downloadProperties = downloadProperties;
}
/*
* @brief add semi-variable and fully variable table indexes to the current download
*/
void addAditionalDownloadParams(std::string paramId, bool isFullVariable);
protected:
/**
* @overload ParamOutput::init()
*/
virtual void init();
/**
* @overload ParamOutput::apply()
*/
virtual void apply();
/*
* @brief write information in file
*/
void writeInfo(bool isWriteIntervalInfo, bool isWriteOnlyIntervalInfo,
bool isFinalizeInfoFile);
/*
* @brief write Table information in file
*/
void writeTableInfo();
/*
* @brief write AMDA information
*/
void writeAMDAInfo(void);
/*
* @brief write request information
*/
void writeRequestInfo(void);
/*
* @brief write param information
*/
void writeParamInfo(void);
/*
* @brief write current interval information
*/
void writeIntervalInfo();
/*
* @overload ParamOutput::terminate - Terminate output: Write too small intervals file
*/
virtual void terminate(void);
/*
* @brief Create a new data file
*/
void createNewDataFile(void);
/*
* @brief Create parameters in relation with the download properties
*/
void createParameters(void);
/*
* @brief create file writer associated to the requested file format
*/
void createFileWriter(void);
/*
* @brief Get file path in relation with the sequence step
*/
std::string getFilePath(std::string extension, bool infoFile = false);
/*
* @brief Get file info path in relation with the sequence step (only used if info is written is separate file)
*/
std::string getInfoFilePath(std::string extension);
/*
* @brief Get file table info path in relation with the sequence step (only used if info constant or variable but finite table)
*/
std::string getTableInfoFilePath(std::string extension);
/*
* @brief Apply structure for "one-file"
*/
void applyOneFileStructure(bool separateInfoFile, bool isFirstInterval);
/*
* @brief Apply structure for "one-file-per-interval"
*/
void applyOneFilePerInterval(bool separateInfoFile, bool isFirstInterval);
/*
* @brief Apply structure for "one-file-per-parameter-per-interval"
*/
void applyOneFilePerParameterPerInterval(bool separateInfoFile, bool isFirstInterval);
/*
* @brief Get parameter from server and write it
*/
void getParameterDataFromServer(std::string paramId);
/*
* @brief Add the parameter definition in the current file if needed
*/
void addParameterInFile(std::string paramId, FileWriter::FileDataType type, bool isFirstParam, int dim1Size = 1, int dim2Size = 1);
/*
* @brief Get parameter indexes
*/
void buildParamIndexes(std::string paramId, int dim1Size = 1, int dim2Size = 1);
/*
* @brief To know if we need to create a too small interval file
*/
bool isNeedToGenerateTooSmallIntervalFile(void);
/*
* @brief Build a too small interval file
*/
void buildTooSmallIntervalCatalog(void);
/*
* @brief Init mean processes for small interval treatments
*/
void initMeanProcessMapForSmallInterval(std::map<std::string, std::shared_ptr<AMDA::Parameters::StatisticProcess>> &meanProcessMap);
/*
* @brief list of tables
*/
std::vector<std::string> _tableParamsList;
/*
* @brief Furkan
*/
bool isSeveralIntervals;
private:
/**
* Download properties
*/
DownloadProperties _downloadProperties;
/*
* File writer
*/
FileWriter::FileWriter *_fileWriter;
/**
* @brief id of current output parameter.
*/
std::string _currentParamId;
/**
* @brief id of the first output parameter.
*/
std::string _firstParamId;
/**
* @brief list of indexes list for all output parameters (build during the first visit of each parameters)
*/
std::map<std::string, AMDA::Common::ParameterIndexComponentList> _paramsIndexList;
/*
* @brief map to know if a parameter is already added in the current file
*/
std::map<std::string, bool> _paramDefinedInFile;
/*
* @brief map of mean statistic processes for too small intervals
*/
std::map<std::string, std::shared_ptr<AMDA::Parameters::StatisticProcess>> _tooSmallIntervalProcessMap;
/*
* @brief Index of current interval
*/
int _currentIntervalIndex;
/*
* @brief Catalog for too small time intervals
*/
TimeTableCatalog::Catalog _smallIntervalsCatalog;
;
};
} /* namespace Download */
} /* namespace ParamOutputImpl */
} /* namespace AMDA */
#endif /* PARAMOUTPUTASCIIFILE_HH_ */