IHMInputOutputParamsDownloadClass.php
4.06 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
<?php
define ("DOWNLOAD_RESULT_FILE_KEY","download");
/**
* @class IHMInputOutputParamsDownloadClass
* @brief Implementation of IHMInputOutputParamsAbstractClass to treat download request
* @details
*/
class IHMInputOutputParamsDownloadClass extends IHMInputOutputParamsAbstractClass
{
/*
* @brief method to unmarshall a download request
*/
protected function unmarshallRequest($input)
{
//{"nodeType":"download","type":"Download","downloadSrc":"0","structure":"2","sampling":600,"output":"",
// "header":"0","timesrc":"TimeTable","timeTables":[{"timeTableName":"rzerzer","id":"tt_1"},{"timeTableName":"sqsdq","id":"tt_0"}],
//"list":["dst"],"milli":false,"fileformat":"ASCII","timeformat":"YYYY-MM-DDThh:mm:ss","compression":"tar+gzip","leaf":true}
$paramsNode = $this->paramsData->getRequestNode()->getParamsNode();
//unmarshall time definition
$this->unmarshallTimeDefinition($input);
//unmarshall download output definition
$outputsNode = $this->paramsData->getRequestNode()->getOutputsNode();
$downloadNode = $outputsNode->addNewOutput(RequestOutputTypeEnum::DOWNLOAD);
//timeformatData : [['Y-m-dTH:i:s', 'YYYY-MM-DDThh:mm:ss'], ['Y m d H i s', 'YYYY MM DD hh mm ss'], ['d m Y H i s', 'DD MM YYYY hh mm ss'], ['Y z H i s', 'YYYY DDD hh mm ss']],
switch ($input->timeformat)
{
case 'YYYY-MM-DDThh:mm:ss' :
$downloadNode->setTimeFormat(RequestOutputDownloadTimeFormatEnum::ISO);
break;
default :
throw new Exception('Time format not implemented.');
}
//formatData : [['ASCII', 'ASCII'],['vot', 'VOTable']],
switch ($input->fileformat)
{
case "ASCII" :
$downloadNode->setFileFormat(RequestOutputDownloadFileFormatEnum::ASCII);
break;
case "vot" :
$downloadNode->setFileFormat(RequestOutputDownloadFileFormatEnum::VOTABLE);
break;
default :
throw new Exception('File format not implemented.');
}
if ($input->output != "")
$downloadNode->setFileName($input->output);
//add params to output
foreach ($input->list as $param)
{
$paramInfo = $this->paramManager->addExistingParam($param,$this->paramsData);
$downloadNode->addParam($paramInfo['id'],$paramInfo['indexes'],$paramInfo['calib_infos']);
$paramsNode->addParam($paramInfo['id']);
}
//filestructureData : [['0','All In One File'], ['1','One File Per Time Interval'], ['2','One File Per Param/Interval']],
switch ($input->structure)
{
case "0" :
$downloadNode->setSamplingTime($input->sampling);
$downloadNode->setStructure(RequestOutputDownloadStructureEnum::ONE_FILE);
break;
case "1" :
$downloadNode->setSamplingTime($input->sampling);
$downloadNode->setStructure(RequestOutputDownloadStructureEnum::ONE_FILE_PER_INTERVAL);
break;
case "2" :
$downloadNode->setStructure(RequestOutputDownloadStructureEnum::ONE_FILE_PER_PARAMETER_PER_INTERVAL);
break;
default :
throw new Exception('Structure type not implemented.');
}
//filecompressData : [['zip', 'zip'], ['tar+gzip', 'tar+gzip']],
$extension = "";
switch ($input->compression)
{
case "zip" :
$extension = ".zip";
$downloadNode->addPostProcessing(RequestOutputPostProcessingEnumClass::ZIP);
break;
case "tar+gzip" :
$extension = ".tar.gz";
$downloadNode->addPostProcessing(RequestOutputPostProcessingEnumClass::TAR);
$downloadNode->addPostProcessing(RequestOutputPostProcessingEnumClass::GZIP);
break;
default :
throw new Exception('Compression type not implemented.');
}
$resultFile = "result_".$this->requestID;
$this->paramsData->addWaitingResult(DOWNLOAD_RESULT_FILE_KEY, $resultFile);
$postProcessCmd = "mv download_*";
$postProcessCmd .= $extension;
$postProcessCmd .= " ".$resultFile.$extension;
$this->paramsData->setPostCmd($postProcessCmd);
return $this->paramsData;
}
/*
* @brief method to marshall the result of a download request
*/
protected function marshallResult($data)
{
return $this->commonMarshallResult($data,DOWNLOAD_RESULT_FILE_KEY);
}
}
?>