Blame view

src/ParamOutputImpl/Download/DownloadOutput.hh 7.69 KB
fbe3c2bb   Benjamin Renard   First commit
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
/**
 * 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;
	}
295de3cf   Hacene SI HADJ MOHAND   in progress
148
149
150
                     /*
	 * @brief add semi-variable and fully variable table indexes to the current download  
	 */
236cd24c   Hacene SI HADJ MOHAND   working in full v...
151
                      void addAditionalDownloadParams(std::string paramId, bool isFullVariable);
fbe3c2bb   Benjamin Renard   First commit
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168

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);
f784189d   Hacene SI HADJ MOHAND   in progress
169
170
171
172
173
        
        	/*
	 * @brief write Table information in file
	 */
	void writeTableInfo();
fbe3c2bb   Benjamin Renard   First commit
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

	/*
	 * @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(void);

	/*
	 * @overload ParamOutput::terminate - Terminate output: Write too small intervals file
	 */
	virtual void terminate(void);

	/*
fbe3c2bb   Benjamin Renard   First commit
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
	 * @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);
f784189d   Hacene SI HADJ MOHAND   in progress
224
225
226
227
228
        
        	/*
	 * @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);
fbe3c2bb   Benjamin Renard   First commit
229
230
231
232

	/*
	 * @brief Apply structure for "one-file"
	 */
16bdce87   Benjamin Renard   correction All in...
233
	void applyOneFileStructure(bool separateInfoFile, bool isFirstInterval);
fbe3c2bb   Benjamin Renard   First commit
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

	/*
	 * @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);
65414a1c   Hacene SI HADJ MOHAND   working for mav
274
275
276
277
278
279
        
        	/*
	 * @brief list of tables 
	 */
                    std::vector<std::string> _tableParamsList;
                    
fbe3c2bb   Benjamin Renard   First commit
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

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_ */