Blame view

src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php 77.5 KB
26a23052   Benjamin Renard   Add Interval Tick...
1
2
<?php

95ab3cf6   Menouar AZIB   Prise en compte d...
3
define("PLOT_RESULT_FILE_KEY", "plot");
26a23052   Benjamin Renard   Add Interval Tick...
4
5
6
7
8

/**
 * @class IHMInputOutputParamsPlotClass
 * @brief Implementation of IHMInputOutputParamsAbstractClass to treat plot request
 * @details
95ab3cf6   Menouar AZIB   Prise en compte d...
9
 */
26a23052   Benjamin Renard   Add Interval Tick...
10
11
12
class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass
{
	private $isInteractiveRequest = false;
95ab3cf6   Menouar AZIB   Prise en compte d...
13

02abc780   Benjamin Renard   Support request f...
14
	private $isFromWS = false;
95ab3cf6   Menouar AZIB   Prise en compte d...
15

40624062   Elena.Budnik   no total_2D if in...
16
	private $isInstantPlot = false;
95ab3cf6   Menouar AZIB   Prise en compte d...
17

26a23052   Benjamin Renard   Add Interval Tick...
18
	private $interactiveTimeSelectionState = array();
95ab3cf6   Menouar AZIB   Prise en compte d...
19
20
	private $interactivePlotTitle = array();
	private $interactivePlotIndex = array();
26a23052   Benjamin Renard   Add Interval Tick...
21
	private $interactiveCrtTTFileIndex = -1;
05da1b4d   Benjamin Renard   Draw instant plot...
22
	private $interactivePreview = false;
ec574794   Benjamin Renard   Implements multip...
23
24

	protected $isMultiPlot = FALSE;
95ab3cf6   Menouar AZIB   Prise en compte d...
25

26a23052   Benjamin Renard   Add Interval Tick...
26
27
28
29
30
	/*
	 * @brief method to unmarshall a plot request
	*/
	protected function unmarshallRequest($input)
	{
97a69b20   Benjamin Renard   Fix most of error...
31
		$forceTimeZoomReset = false;
22253da3   Benjamin Renard   Fix zoom reset
32
		$resetZoom = false;
95ab3cf6   Menouar AZIB   Prise en compte d...
33
34

		if (isset($input->{'action'})) {
26a23052   Benjamin Renard   Add Interval Tick...
35
			$input = $this->unmarshallActionRequest($input);
d3c3608d   Benjamin Renard   Add undo zoom
36
			$forceTimeZoomReset = isset($input->{'force-time-zoom-reset'}) ? $input->{'force-time-zoom-reset'} : false;
95ab3cf6   Menouar AZIB   Prise en compte d...
37
		} else {
d3c3608d   Benjamin Renard   Add undo zoom
38
			$resetZoom = true;
26a23052   Benjamin Renard   Add Interval Tick...
39
			//save request
95ab3cf6   Menouar AZIB   Prise en compte d...
40
			$this->saveIHMRequest(PLOT_RESULT_FILE_KEY . "_" . $input->{'tab-index'}, $input);
d3c3608d   Benjamin Renard   Add undo zoom
41
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
42

26a23052   Benjamin Renard   Add Interval Tick...
43
		//Request
26a23052   Benjamin Renard   Add Interval Tick...
44
		$this->isInteractiveRequest = ($input->{'file-output'} == 'INTERACTIVE');
02abc780   Benjamin Renard   Support request f...
45
		$this->isFromWS = ($input->{'file-output'} == 'WS');
7d84634e   Benjamin Renard   Fix plot request ...
46

22253da3   Benjamin Renard   Fix zoom reset
47
		if ($resetZoom || $forceTimeZoomReset)
95ab3cf6   Menouar AZIB   Prise en compte d...
48
49
			$this->resetZoomList(PLOT_RESULT_FILE_KEY . "_" . $input->{'tab-index'}, $forceTimeZoomReset);

7d14181a   Benjamin Renard   Fix multi-request...
50
		$requestNode = $this->paramsData->addRequestNode($input->{'tab-index'});
7d84634e   Benjamin Renard   Fix plot request ...
51
52
		$outputsNode = $requestNode->getOutputsNode();
		$paramsNode  = $requestNode->getParamsNode();
95ab3cf6   Menouar AZIB   Prise en compte d...
53

7d84634e   Benjamin Renard   Fix plot request ...
54
55
56
57
		//unmarshall time definition
		$isIntervalRequest = ($input->timesrc == 'Interval');
		$ttFileIndex = -1;
		$ttIntIndex  = -1;
95ab3cf6   Menouar AZIB   Prise en compte d...
58
		if ($this->isInteractiveRequest && !$isIntervalRequest && !$input->{'page-superpose-mode'}) {
7d84634e   Benjamin Renard   Fix plot request ...
59
60
61
			$ttFileIndex = !isset($input->{'ttFileIndex'}) ? 0 : $input->{'ttFileIndex'};
			$ttIntIndex = !isset($input->{'intIndex'}) ? 0 : $input->{'intIndex'};
		}
7d14181a   Benjamin Renard   Fix multi-request...
62
		$this->unmarshallTimeDefinition($input, $input->{'tab-index'}, $ttFileIndex, $ttIntIndex);
95ab3cf6   Menouar AZIB   Prise en compte d...
63

7d84634e   Benjamin Renard   Fix plot request ...
64
		$this->interactiveCrtTTFileIndex = $ttFileIndex;
95ab3cf6   Menouar AZIB   Prise en compte d...
65

7d84634e   Benjamin Renard   Fix plot request ...
66
		$plotOutputNode = $outputsNode->addNewOutput(RequestOutputTypeEnum::PLOT);
95ab3cf6   Menouar AZIB   Prise en compte d...
67

7d84634e   Benjamin Renard   Fix plot request ...
68
		$plotOutputNode->setWriteContextFile($this->isInteractiveRequest ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
69

7d84634e   Benjamin Renard   Fix plot request ...
70
		$compression = "";
95ab3cf6   Menouar AZIB   Prise en compte d...
71
72
73
		if (!$this->isInteractiveRequest && !$this->isFromWS) {
			switch ($input->{'file-output'}) {
				case 'TGZ':
7d84634e   Benjamin Renard   Fix plot request ...
74
75
76
77
					$plotOutputNode->addPostProcessing(RequestOutputPostProcessingEnumClass::TAR);
					$plotOutputNode->addPostProcessing(RequestOutputPostProcessingEnumClass::GZIP);
					$compression = ".tar.gz";
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
78
				case 'ZIP':
7d84634e   Benjamin Renard   Fix plot request ...
79
80
81
82
83
					$plotOutputNode->addPostProcessing(RequestOutputPostProcessingEnumClass::ZIP);
					$compression = ".zip";
					break;
				default:
					throw new Exception('Compression not implemented.');
26a23052   Benjamin Renard   Add Interval Tick...
84
			}
7d84634e   Benjamin Renard   Fix plot request ...
85
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
86

7d84634e   Benjamin Renard   Fix plot request ...
87
88
89
90
		if ($input->{'one-file-per-interval'})
			$plotOutputNode->setStructure(RequestOutputPlotStructureEnum::ONE_FILE_PER_INTERVAL);
		else
			$plotOutputNode->setStructure(RequestOutputPlotStructureEnum::ONE_FILE);
95ab3cf6   Menouar AZIB   Prise en compte d...
91

7d84634e   Benjamin Renard   Fix plot request ...
92
93
94
95
		//prefix
		$filePrefix = "plot_";
		if ($input->{'file-prefix'} && ($input->{'file-prefix'} != ""))
			$filePrefix = $input->{'file-prefix'};
70e82c1f   Benjamin Renard   Fix doPlot
96
		$filePrefix .= $input->{'tab-index'};
95ab3cf6   Menouar AZIB   Prise en compte d...
97

7d84634e   Benjamin Renard   Fix plot request ...
98
		$plotOutputNode->setFilePrefix($filePrefix);
95ab3cf6   Menouar AZIB   Prise en compte d...
99

7d84634e   Benjamin Renard   Fix plot request ...
100
101
		//page
		$pageNode = $plotOutputNode->getPage();
95ab3cf6   Menouar AZIB   Prise en compte d...
102

7d84634e   Benjamin Renard   Fix plot request ...
103
104
		$fileFormat = RequestOutputPlotPageFormatEnum::PNG;
		$extension = ".png";
95ab3cf6   Menouar AZIB   Prise en compte d...
105
106
		switch ($input->{'file-format'}) {
			case 'PNG':
7d84634e   Benjamin Renard   Fix plot request ...
107
108
109
				$fileFormat = RequestOutputPlotPageFormatEnum::PNG;
				$extension = ".png";
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
110
			case 'PDF':
7d84634e   Benjamin Renard   Fix plot request ...
111
112
113
				$fileFormat = RequestOutputPlotPageFormatEnum::PDF;
				$extension = ".pdf";
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
114
			case 'PS':
7d84634e   Benjamin Renard   Fix plot request ...
115
116
117
				$fileFormat = RequestOutputPlotPageFormatEnum::PS;
				$extension = ".ps";
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
118
			case 'SVG':
7d84634e   Benjamin Renard   Fix plot request ...
119
120
121
122
123
124
				$fileFormat = RequestOutputPlotPageFormatEnum::SVG;
				$extension = ".svg";
				break;
			default:
				throw new Exception('File format not implemented.');
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
125

7d84634e   Benjamin Renard   Fix plot request ...
126
		$pageNode->setFormat($fileFormat);
95ab3cf6   Menouar AZIB   Prise en compte d...
127

7d84634e   Benjamin Renard   Fix plot request ...
128
		$this->unmarshallTitle($input, 'page-title', $pageNode->getTitle());
95ab3cf6   Menouar AZIB   Prise en compte d...
129

7d84634e   Benjamin Renard   Fix plot request ...
130
		$isPortrait = false;
95ab3cf6   Menouar AZIB   Prise en compte d...
131
132
		switch ($input->{'page-orientation'}) {
			case 'landscape':
7d84634e   Benjamin Renard   Fix plot request ...
133
134
				$pageNode->setOrientation(RequestOutputPlotPageOrientationEnum::LANDSCAPE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
135
			case 'portrait':
7d84634e   Benjamin Renard   Fix plot request ...
136
137
138
139
				$pageNode->setOrientation(RequestOutputPlotPageOrientationEnum::PORTRAIT);
				$isPortrait = true;
				break;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
140
141
142

		switch ($input->{'page-dimension'}) {
			case 'ISO A4':
7d84634e   Benjamin Renard   Fix plot request ...
143
144
				$pageNode->setDimension(RequestOutputPlotPageDimensionEnum::ISO_A4);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
145
			case 'US letter':
7d84634e   Benjamin Renard   Fix plot request ...
146
147
148
149
150
				$pageNode->setDimension(RequestOutputPlotPageDimensionEnum::US_LETTER);
				break;
			default:
				throw new Exception('Page dimension not implemented.');
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
151
152
153
154

		switch ($input->{'page-mode'}) {

			case 'grayscale':
7d84634e   Benjamin Renard   Fix plot request ...
155
156
				$pageNode->setMode(RequestOutputPlotPageModeEnum::GRAYSCALE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
157
			case 'color':
7d84634e   Benjamin Renard   Fix plot request ...
158
159
160
161
			default:
				$pageNode->setMode(RequestOutputPlotPageModeEnum::COLOR);
				break;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
162
163

		if ($input->{'page-margins-activated'}) {
7d84634e   Benjamin Renard   Fix plot request ...
164
165
166
			$pageNode->getMargins()->setHorizontal($input->{'page-margin-x'});
			$pageNode->getMargins()->setVertical($input->{'page-margin-y'});
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
167

7d84634e   Benjamin Renard   Fix plot request ...
168
169
		if ($input->{'page-font-activated'})
			$this->unmarshallFont($input, 'page-font', $pageNode->getFont());
95ab3cf6   Menouar AZIB   Prise en compte d...
170

7d84634e   Benjamin Renard   Fix plot request ...
171
		//Superpose mode
95ab3cf6   Menouar AZIB   Prise en compte d...
172
173
		$pageNode->setSuperposeMode($input->{'page-superpose-mode'} ? "true" : "false");

7d84634e   Benjamin Renard   Fix plot request ...
174
175
		//Layout
		$this->unmarshallLayout($input, $pageNode);
95ab3cf6   Menouar AZIB   Prise en compte d...
176

7d84634e   Benjamin Renard   Fix plot request ...
177
178
		foreach ($input->{'panels'} as $panelData)
			$this->unmarshallPanel($panelData, $pageNode, $paramsNode);
95ab3cf6   Menouar AZIB   Prise en compte d...
179
180
181
182
183
184
185

		if ($this->isInteractiveRequest || $this->isFromWS) {
			$resultFile = $filePrefix . "_*" . $extension;
			$waitingResultFile = $filePrefix . $extension;
		} else {
			$resultFile = $filePrefix . "_*" . $compression;
			$waitingResultFile = $filePrefix . $compression;
7d84634e   Benjamin Renard   Fix plot request ...
186
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
187
188
189
190
191

		if ($this->isInteractiveRequest) {
			$this->interactiveTimeSelectionState[PLOT_RESULT_FILE_KEY . "_" . $input->{'tab-index'}] = $isIntervalRequest;
			$this->interactivePlotTitle[PLOT_RESULT_FILE_KEY . "_" . $input->{'tab-index'}] = $input->{'tab-title'};
			$this->interactivePlotIndex[PLOT_RESULT_FILE_KEY . "_" . $input->{'tab-index'}] = $input->{'tab-index'};
7d84634e   Benjamin Renard   Fix plot request ...
192
			$this->interactivePreview = isset($input->{'interactive-preview'}) && ($input->{'interactive-preview'});
95ab3cf6   Menouar AZIB   Prise en compte d...
193
194
			$this->paramsData->addWaitingResult(PLOT_RESULT_FILE_KEY . "_" . $input->{'tab-index'}, $waitingResultFile);
		} else
7d84634e   Benjamin Renard   Fix plot request ...
195
			$this->paramsData->addWaitingResult(PLOT_RESULT_FILE_KEY, $waitingResultFile);
95ab3cf6   Menouar AZIB   Prise en compte d...
196

7d84634e   Benjamin Renard   Fix plot request ...
197
		//Remove old result files
95ab3cf6   Menouar AZIB   Prise en compte d...
198
		foreach (glob($this->paramsData->getWorkingPath() . $resultFile) as $oldFile) {
7d84634e   Benjamin Renard   Fix plot request ...
199
200
			unlink($oldFile);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
201

7d84634e   Benjamin Renard   Fix plot request ...
202
		//Post process command to apply to the result file
ec574794   Benjamin Renard   Implements multip...
203
		$postProcessCmd = $this->paramsData->getPostCmd();
7d84634e   Benjamin Renard   Fix plot request ...
204
205
		if ($postProcessCmd != "")
			$postProcessCmd .= " | ";
95ab3cf6   Menouar AZIB   Prise en compte d...
206
207
		$postProcessCmd .= "mv " . $resultFile . " " . $waitingResultFile;

7d84634e   Benjamin Renard   Fix plot request ...
208
		if (($this->isInteractiveRequest) && $isPortrait)
95ab3cf6   Menouar AZIB   Prise en compte d...
209
210
			$postProcessCmd .= " | convert " . $waitingResultFile . " -rotate -90 " . $waitingResultFile;
		else if ($this->isFromWS) {
7d84634e   Benjamin Renard   Fix plot request ...
211
			if ($isPortrait)
95ab3cf6   Menouar AZIB   Prise en compte d...
212
				$postProcessCmd .= " | convert " . $waitingResultFile . " -rotate -90 " . $input->{"ws-result-file"};
7d84634e   Benjamin Renard   Fix plot request ...
213
			else
95ab3cf6   Menouar AZIB   Prise en compte d...
214
				$postProcessCmd .= " | mv " . $waitingResultFile . " " . $input->{"ws-result-file"};
26a23052   Benjamin Renard   Add Interval Tick...
215
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
216

26a23052   Benjamin Renard   Add Interval Tick...
217
218
		$this->paramsData->setBatchEnable(!(($fileFormat == RequestOutputPlotPageFormatEnum::PNG) && $this->isInteractiveRequest));
		$this->paramsData->setPostCmd($postProcessCmd);
26a23052   Benjamin Renard   Add Interval Tick...
219
220
		return $this->paramsData;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
221

7d84634e   Benjamin Renard   Fix plot request ...
222
	protected function unmarshallLayout($request, $pageNode)
26a23052   Benjamin Renard   Add Interval Tick...
223
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
224
225
		switch ($request->{'page-layout-type'}) {
			case 'vertical':
26a23052   Benjamin Renard   Add Interval Tick...
226
				$pageNode->getLayout()->setType(RequestOutputPlotLayoutTypeEnum::VERTICAL);
7d84634e   Benjamin Renard   Fix plot request ...
227
228
229
230
231
232
233
234
235
236
237
238
				$pageNode->getLayout()->setPanelHeight($request->{'page-layout-object'}->{'layout-panel-height'});
				$pageNode->getLayout()->setPanelSpacing($request->{'page-layout-object'}->{'layout-panel-spacing'});
				$pageNode->getLayout()->setExpand($request->{'page-layout-object'}->{'layout-expand'} ? "true" : "false");
				$pageNode->getLayout()->setOnlyLowerTimeAxesLegend($request->{'page-layout-object'}->{'layout-timeaxes-legend-lowerone'} ? "true" : "false");
				//if ($request->{'page-layout-object'}->{'layout-timeplot-width'} > 0)
				//	$pageNode->setDefaultTimePlotWidth($request->{'page-layout-object'}->{'layout-timeplot-width'});
				if ($request->{'page-layout-object'}->{'layout-timeplot-height'} > 0)
					$pageNode->setDefaultTimePlotHeight($request->{'page-layout-object'}->{'layout-timeplot-height'});
				if ($request->{'page-layout-object'}->{'layout-xyplot-width'} > 0)
					$pageNode->setDefaultXYPlotWidth($request->{'page-layout-object'}->{'layout-xyplot-width'});
				if ($request->{'page-layout-object'}->{'layout-xyplot-height'} > 0)
					$pageNode->setDefaultXYPlotHeight($request->{'page-layout-object'}->{'layout-xyplot-height'});
26a23052   Benjamin Renard   Add Interval Tick...
239
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
240
			case 'auto':
26a23052   Benjamin Renard   Add Interval Tick...
241
				$pageNode->getLayout()->setType(RequestOutputPlotLayoutTypeEnum::AUTO);
7d84634e   Benjamin Renard   Fix plot request ...
242
243
244
245
				$pageNode->getLayout()->setPanelHeight($request->{'page-layout-object'}->{'layout-panel-height'});
				$pageNode->getLayout()->setPanelSpacing($request->{'page-layout-object'}->{'layout-panel-spacing'});
				$pageNode->getLayout()->setExpand($request->{'page-layout-object'}->{'layout-expand'} ? "true" : "false");
				$pageNode->getLayout()->setOnlyLowerTimeAxesLegend($request->{'page-layout-object'}->{'layout-timeaxes-legend-lowerone'} ? "true" : "false");
26a23052   Benjamin Renard   Add Interval Tick...
246
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
247
			case 'manual':
26a23052   Benjamin Renard   Add Interval Tick...
248
				$pageNode->getLayout()->setType(RequestOutputPlotLayoutTypeEnum::MANUAL);
7d84634e   Benjamin Renard   Fix plot request ...
249
250
				$timePlotLeftMargin = $request->{'page-layout-object'}->{'layout-timeplot-margin-left'} ? $request->{'page-layout-object'}->{'layout-timeplot-margin-left'} : -1;
				$timePlotRightMargin = $request->{'page-layout-object'}->{'layout-timeplot-margin-right'} ? $request->{'page-layout-object'}->{'layout-timeplot-margin-right'} : -1;
26a23052   Benjamin Renard   Add Interval Tick...
251
				$pageNode->setDefaultTimePlotXMargin($timePlotLeftMargin, $timePlotRightMargin);
7d84634e   Benjamin Renard   Fix plot request ...
252
253
				$xyPlotLeftMargin = $request->{'page-layout-object'}->{'layout-xyplot-margin-left'} ? $request->{'page-layout-object'}->{'layout-xyplot-margin-left'} : -1;
				$xyPlotRightMargin = $request->{'page-layout-object'}->{'layout-xyplot-margin-right'} ? $request->{'page-layout-object'}->{'layout-xyplot-margin-right'} : -1;
26a23052   Benjamin Renard   Add Interval Tick...
254
255
256
257
258
				$pageNode->setDefaultXYPlotXMargin($xyPlotLeftMargin, $xyPlotRightMargin);
				break;
			default:
				throw new Exception('Layout type not implemented.');
		}
26a23052   Benjamin Renard   Add Interval Tick...
259
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
260

26a23052   Benjamin Renard   Add Interval Tick...
261
262
263
	protected function unmarshallPanel($panelData, $pageNode, $paramsNode)
	{
		$panelNode = $pageNode->addPanel();
95ab3cf6   Menouar AZIB   Prise en compte d...
264
265
266
267


		switch ($pageNode->getLayout()->getType()) {
			case RequestOutputPlotLayoutTypeEnum::MANUAL:
26a23052   Benjamin Renard   Add Interval Tick...
268
269
270
271
272
273
274
275
276
277
				//Panel bounds
				$panelNode->getBounds()->setX($panelData->{'panel-bounds-x'});
				$panelNode->getBounds()->setY($panelData->{'panel-bounds-y'});
				$panelNode->getBounds()->setWidth($panelData->{'panel-bounds-width'});
				$panelNode->getBounds()->setHeight($panelData->{'panel-bounds-height'});
				//Panel margins
				$leftMargin = $panelData->{'panel-margin-left'} ? $panelData->{'panel-margin-left'} : -1;
				$rightMargin = $panelData->{'panel-margin-right'} ? $panelData->{'panel-margin-right'} : -1;
				$panelNode->setXMargin($leftMargin, $rightMargin);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
278
			case RequestOutputPlotLayoutTypeEnum::VERTICAL:
26a23052   Benjamin Renard   Add Interval Tick...
279
280
281
282
283
284
				//Panel prefered dimensions
				if ($panelData->{'panel-prefered-width'} > 0)
					$panelNode->setPreferedWidth($panelData->{'panel-prefered-width'});
				if ($panelData->{'panel-prefered-height'} > 0)
					$panelNode->setPreferedHeight($panelData->{'panel-prefered-height'});
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
285
			default:
26a23052   Benjamin Renard   Add Interval Tick...
286
287
				//Nothing to do
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
288

26a23052   Benjamin Renard   Add Interval Tick...
289
		//Panel id
02abc780   Benjamin Renard   Support request f...
290
291
		if (isset($panelData->{'id'}))
			$panelNode->setId($panelData->{'id'});
0a87e436   Hacene SI HADJ MOHAND   parameters resolue
292

95ab3cf6   Menouar AZIB   Prise en compte d...
293
294
295
296
297
		//Panel id
		if (isset($panelData->{'panel-index'}))
			$panelNode->setIndex($panelData->{'panel-index'});


26a23052   Benjamin Renard   Add Interval Tick...
298
299
300
		//Panel background color
		if (($panelData->{'panel-background-color'} != 'none') && ($panelData->{'panel-background-color'} != ''))
			$panelNode->setBackgroundColor($this->hexColor2KernelColor($panelData->{'panel-background-color'}));
60a1a563   Benjamin Renard   Add the possibili...
301

1514ed12   Erdogan Furkan   #5390 - Integrati...
302
303
304
305
306
		//Plot Area background color
		if (($panelData->{'panel-plotareabackground-color'} != 'none') && ($panelData->{'panel-plotareabackground-color'} != '')) {
			$panelNode->setPlotAreaBackgroundColor($this->hexColor2KernelColor($panelData->{'panel-plotareabackground-color'}));
		}

26a23052   Benjamin Renard   Add Interval Tick...
307
308
		//Panel font
		$this->unmarshallFont($panelData, 'panel-font', $panelNode->getFont());
95ab3cf6   Menouar AZIB   Prise en compte d...
309

26a23052   Benjamin Renard   Add Interval Tick...
310
311
		//Panel title
		$this->unmarshallTitle($panelData, 'panel-title', $panelNode->getTitle());
95ab3cf6   Menouar AZIB   Prise en compte d...
312

26a23052   Benjamin Renard   Add Interval Tick...
313
		//Plot type
40624062   Elena.Budnik   no total_2D if in...
314
		$this->isInstantPlot = false;
26a23052   Benjamin Renard   Add Interval Tick...
315
		$plotNode = $this->unmarshallPlotType($panelData, $panelNode);
95ab3cf6   Menouar AZIB   Prise en compte d...
316

26a23052   Benjamin Renard   Add Interval Tick...
317
		$isTimePlot = ($plotNode->getName() == REQUESTOUTPUTPLOTELEMENTTIME_NAME);
95ab3cf6   Menouar AZIB   Prise en compte d...
318

26a23052   Benjamin Renard   Add Interval Tick...
319
320
		//Tick plot
		$tickPlotNode = NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
321
322
323
		if ($isTimePlot) {
			if ($this->hasTickBar($panelData->{'params'})) {
				$tickPlotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::TICKPLOT, true);
26a23052   Benjamin Renard   Add Interval Tick...
324
325
326
327
				if ($panelData->{'panel-tick-format'} != '')
					$tickPlotNode->setFormat($panelData->{'panel-tick-format'});
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
328

26a23052   Benjamin Renard   Add Interval Tick...
329
330
		//Status plot
		$statusPlotNode = NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
331
332
333
334
335
		if ($isTimePlot) {
			if ($this->hasStatusBar($panelData->{'params'})) {
				$statusPlotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::STATUSPLOT, true);
				switch ($panelData->{'panel-status-position'}) {
					case 'top':
26a23052   Benjamin Renard   Add Interval Tick...
336
337
						$statusPlotNode->setPosition(RequestOutputPlotElementStatusPosition::TOP);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
338
					case 'bottom':
26a23052   Benjamin Renard   Add Interval Tick...
339
340
341
342
343
344
						$statusPlotNode->setPosition(RequestOutputPlotElementStatusPosition::BOTTOM);
						break;
				}
				$statusPlotNode->setColorMap($panelData->{'panel-status-colormap'});
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
345

26a23052   Benjamin Renard   Add Interval Tick...
346
347
348
		//Axes
		foreach ($panelData->{'axes'} as $axisData)
			$this->unmarshallAxis($axisData, $panelData->{'constants'}, $plotNode);
95ab3cf6   Menouar AZIB   Prise en compte d...
349

26a23052   Benjamin Renard   Add Interval Tick...
350
		//Params
c4213719   Erdogan Furkan   Done.
351
		$this->unmarshallParams($panelData->{'params'}, $paramsNode, $plotNode, $panelNode, $statusPlotNode, $tickPlotNode, $panelData->{'axes'});
95ab3cf6   Menouar AZIB   Prise en compte d...
352

26a23052   Benjamin Renard   Add Interval Tick...
353
354
355
		//Additional objects
		if ($plotNode->getAdditionalObjects() != NULL)
			$this->unmarshallAdditionalObjects($panelData, $plotNode->getAdditionalObjects(), $isTimePlot);
95ab3cf6   Menouar AZIB   Prise en compte d...
356

26a23052   Benjamin Renard   Add Interval Tick...
357
358
359
		//Fills
		if ($plotNode->getFills() != NULL)
			$this->unmarshallFills($panelData, $plotNode->getFills());
95ab3cf6   Menouar AZIB   Prise en compte d...
360

26a23052   Benjamin Renard   Add Interval Tick...
361
362
		return $panelNode;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
363

26a23052   Benjamin Renard   Add Interval Tick...
364
365
	protected function unmarshallPlotType($panelData, $panelNode)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
366
367
		switch ($panelData->{'panel-plot-type'}) {
			case 'timePlot':
26a23052   Benjamin Renard   Add Interval Tick...
368
369
				$plotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::TIMEPLOT);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
370
			case 'xyPlot':
26a23052   Benjamin Renard   Add Interval Tick...
371
372
373
				$plotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::XYPLOT);
				$plotNode->setIsIsotropic($panelData->{'panel-scatter-isotropic'});
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
374
			case 'statusPlot':
26a23052   Benjamin Renard   Add Interval Tick...
375
				$plotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::STATUSPLOT);
95ab3cf6   Menouar AZIB   Prise en compte d...
376
377
				switch ($panelData->{'panel-status-position'}) {
					case 'top':
26a23052   Benjamin Renard   Add Interval Tick...
378
379
						$plotNode->setPosition(RequestOutputPlotElementStatusPosition::TOP);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
380
					case 'bottom':
26a23052   Benjamin Renard   Add Interval Tick...
381
382
383
384
385
						$plotNode->setPosition(RequestOutputPlotElementStatusPosition::BOTTOM);
						break;
				}
				$plotNode->setColorMap($panelData->{'panel-status-colormap'});
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
386
			case 'tickPlot':
26a23052   Benjamin Renard   Add Interval Tick...
387
388
389
390
				$plotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::TICKPLOT);
				if ($panelData->{'panel-tick-format'} != '')
					$plotNode->setFormat($panelData->{'panel-tick-format'});
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
391
			case 'epochPlot':
26a23052   Benjamin Renard   Add Interval Tick...
392
				$plotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::EPOCHPLOT);
d6bf6ef5   Benjamin Renard   Get the possibili...
393
394
				if ($panelData->{'panel-epoch-centertimeid'} != '')
					$plotNode->setCenterTimeId($panelData->{'panel-epoch-centertimeid'});
26a23052   Benjamin Renard   Add Interval Tick...
395
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
396
			case 'instantPlot':
26a23052   Benjamin Renard   Add Interval Tick...
397
398
				$plotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::INSTANTPLOT);
				date_default_timezone_set('UTC');
74fd500a   Hacene SI HADJ MOHAND   us #9874 ms zoo...
399
				$time = CommonClass::strTimeToDDTime($panelData->{'panel-instant-time'});
26a23052   Benjamin Renard   Add Interval Tick...
400
				$plotNode->setTime($time);
40624062   Elena.Budnik   no total_2D if in...
401
				$this->isInstantPlot = true;
26a23052   Benjamin Renard   Add Interval Tick...
402
				break;
80f24b8c   Menouar AZIB   Ajouter à la méth...
403
404
405
406
407
408
			case RequestOutPutPlotElementPlotFunctionNodeClass::REQUESTOUTPUTPLOTELEMENT_PLOTFUNCTION_NAME:
				$plotNode = $panelNode->addPlotElement(RequestOutputPlotElementTypeEnum::PLOTFUNCTION);
				$plotNode->setAbscisse($panelData->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_ABSCISSE});
				$plotNode->setType($panelData->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_TYPE});
				$plotNode->setScaleAbscisse($panelData->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_SCALE_ABSCISSE});
				$plotNode->setScaleOrdonnee($panelData->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_SCALE_ORDONNEE});
328140af   Benjamin Renard   Restore FFT
409
				//$plotNode->setParamsNbPoints($panelData->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_PARAMS_NB_POINTS});
80f24b8c   Menouar AZIB   Ajouter à la méth...
410
				break;
26a23052   Benjamin Renard   Add Interval Tick...
411
412
413
			default:
				throw new Exception('Plot type not implemented.');
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
414

26a23052   Benjamin Renard   Add Interval Tick...
415
416
417
		//Params Legend
		if (isset($panelData->{'panel-series-legend'}) && $panelData->{'panel-series-legend'}->{'legend-series-activated'})
			$this->unmarshallParamsLegend($panelData->{'panel-series-legend'}, $plotNode->getLegends()->getParamsLegend());
95ab3cf6   Menouar AZIB   Prise en compte d...
418

26a23052   Benjamin Renard   Add Interval Tick...
419
		//Text Legends
fe1a8ddd   Erdogan Furkan   Modifications for...
420
421
422
423
		foreach ($panelData->{'text-legends'} as $textLegendData) {
			$legendNode = $plotNode->getLegends()->addTextLegend();
			$this->unmarshallTextLegend($textLegendData, $legendNode);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
424

26a23052   Benjamin Renard   Add Interval Tick...
425
426
		return $plotNode;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
427

26a23052   Benjamin Renard   Add Interval Tick...
428
429
430
431
	protected function unmarshallAxis($axisData, $constantsData, $plotNode)
	{
		//axis type
		$constantAxisId = '';
95ab3cf6   Menouar AZIB   Prise en compte d...
432
433
		switch ($axisData->{'axis-type'}) {
			case 'time':
26a23052   Benjamin Renard   Add Interval Tick...
434
435
436
437
				$axisNode = $plotNode->getTimeAxis();
				$axisNode->setFormat($axisData->{'axis-time-format'});
				$constantAxisId = 'x';
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
438
			case 'epoch':
26a23052   Benjamin Renard   Add Interval Tick...
439
440
441
442
				$axisNode = $plotNode->getEpochAxis();
				$axisNode->setNormalized($axisData->{'axis-epoch-normalized'} ? "true" : "false");
				$constantAxisId = 'x';
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
443
			case 'x':
26a23052   Benjamin Renard   Add Interval Tick...
444
445
446
				$axisNode = $plotNode->getXAxis();
				$constantAxisId = 'x';
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
447
			case 'y-left':
26a23052   Benjamin Renard   Add Interval Tick...
448
449
450
				$axisNode = $plotNode->addYAxis('y-left');
				$constantAxisId = 'y-left';
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
451
			case 'y-right':
26a23052   Benjamin Renard   Add Interval Tick...
452
453
454
455
				$axisNode = $plotNode->addYAxis('y-right');
				$axisNode->setPosition(RequestOutputPlotAxisElementPosition::RIGHT);
				$constantAxisId = 'y-right';
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
456
			case 'color':
26a23052   Benjamin Renard   Add Interval Tick...
457
458
459
460
461
462
463
464
465
466
				$axisNode = $plotNode->getZAxis();
				$axisNode->setColorMapIndex($axisData->{'axis-color-map'});
				if ($axisData->{'axis-color-minval'} != 'none')
					$axisNode->setMinValColor($this->hexColor2KernelColor($axisData->{'axis-color-minval'}));
				if ($axisData->{'axis-color-maxval'} != 'none')
					$axisNode->setMaxValColor($this->hexColor2KernelColor($axisData->{'axis-color-maxval'}));
				break;
			default:
				throw new Exception('Axis type not implemented.');
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
467

26a23052   Benjamin Renard   Add Interval Tick...
468
		//reverse axis
05da1b4d   Benjamin Renard   Draw instant plot...
469
470
		if (isset($axisData->{'axis-reverse'}))
			$axisNode->setReverse($axisData->{'axis-reverse'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
471

26a23052   Benjamin Renard   Add Interval Tick...
472
		//axis scale
95ab3cf6   Menouar AZIB   Prise en compte d...
473
474
		switch ($axisData->{'axis-scale'}) {
			case 'logarithmic':
26a23052   Benjamin Renard   Add Interval Tick...
475
476
477
478
479
				$axisNode->setScale(RequestOutputPlotAxisElementScale::LOGARITHMIC);
				break;
			default:
				$axisNode->setScale(RequestOutputPlotAxisElementScale::LINEAR);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
480

26a23052   Benjamin Renard   Add Interval Tick...
481
482
483
		//axis range
		if ($axisData->{'axis-range-min'} < $axisData->{'axis-range-max'})
			$axisNode->getRange()->setMinMax($axisData->{'axis-range-min'}, $axisData->{'axis-range-max'});
05da1b4d   Benjamin Renard   Draw instant plot...
484
485
		if (isset($axisData->{'axis-range-extend'}))
			$axisNode->getRange()->setExtend($axisData->{'axis-range-extend'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
486

26a23052   Benjamin Renard   Add Interval Tick...
487
		//axis color
02abc780   Benjamin Renard   Support request f...
488
489
		if (isset($axisData->{'axis-color'}))
			$axisNode->setColor($this->hexColor2KernelColor($axisData->{'axis-color'}));
95ab3cf6   Menouar AZIB   Prise en compte d...
490

26a23052   Benjamin Renard   Add Interval Tick...
491
		//axis thickness
02abc780   Benjamin Renard   Support request f...
492
493
		if (isset($axisData->{'axis-thickness'}))
			$axisNode->setThickness($axisData->{'axis-thickness'});
95ab3cf6   Menouar AZIB   Prise en compte d...
494

26a23052   Benjamin Renard   Add Interval Tick...
495
		//axis ticks position
95ab3cf6   Menouar AZIB   Prise en compte d...
496
497
		switch ($axisData->{'axis-tick-position'}) {
			case 'inwards':
26a23052   Benjamin Renard   Add Interval Tick...
498
499
				$axisNode->getTick()->setPosition(RequestOutputPlotAxisElementTickPosition::INWARDS);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
500
			default:
26a23052   Benjamin Renard   Add Interval Tick...
501
502
				$axisNode->getTick()->setPosition(RequestOutputPlotAxisElementTickPosition::OUTWARDS);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
503

26a23052   Benjamin Renard   Add Interval Tick...
504
		//axis minor and major grid
05da1b4d   Benjamin Renard   Draw instant plot...
505
506
		if (isset($axisData->{'axis-grid-minor'}))
			$axisNode->getTick()->setMinorGrid($axisData->{'axis-grid-minor'} ? "true" : "false");
3741e4bb   Hacene SI HADJ MOHAND   6954 ok
507

05da1b4d   Benjamin Renard   Draw instant plot...
508
509
		if (isset($axisData->{'axis-grid-major'}))
			$axisNode->getTick()->setMajorGrid($axisData->{'axis-grid-major'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
		if ($axisData->{'axis-grid-specify-ticks-number'}) {

			if (isset($axisData->{'axis-grid-minor-number'}) && $axisData->{'axis-grid-minor-number'} != 0)
				$axisNode->getTick()->setMinorGridNumber($axisData->{'axis-grid-minor-number'});

			if (isset($axisData->{'axis-grid-major-number'}) && $axisData->{'axis-grid-major-number'} != 0)
				$axisNode->getTick()->setMajorGridNumber($axisData->{'axis-grid-major-number'});
		} elseif ($axisData->{'axis-grid-specify-ticks-spacing'}) {

			if (isset($axisData->{'axis-grid-major-space'}) && $axisData->{'axis-grid-major-space'} != 0)
				$axisNode->getTick()->setMajorGridSpace($axisData->{'axis-grid-major-space'});

			if (isset($axisData->{'axis-grid-minor-space'}) && $axisData->{'axis-grid-minor-space'} != 0)
				$axisNode->getTick()->setMinorGridSpace($axisData->{'axis-grid-minor-space'});
		}


		//legend
		if (isset($axisData->{'axis-legend-text'}) && $axisData->{'axis-legend-text'} != '') {
26a23052   Benjamin Renard   Add Interval Tick...
529
			$axisNode->getLegend()->setText($axisData->{'axis-legend-text'});
05da1b4d   Benjamin Renard   Draw instant plot...
530
		}
27317777   Menouar AZIB   J'ai ajouté la fo...
531
532
		$axisNode->getLegend()->setColor($this->hexColor2KernelColor($axisData->{'axis-legend-color'}));
		$this->unmarshallLabel($axisData, "axis-legend", $axisNode->getLegend());
d62f9945   Benjamin Renard   Improve instant c...
533

26a23052   Benjamin Renard   Add Interval Tick...
534
		//Show legend
05da1b4d   Benjamin Renard   Draw instant plot...
535
536
		if (isset($axisData->{'axis-legend-activated'}))
			$axisNode->setShowLegend($axisData->{'axis-legend-activated'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
537

26a23052   Benjamin Renard   Add Interval Tick...
538
		//Show tick marks
05da1b4d   Benjamin Renard   Draw instant plot...
539
540
		if (isset($axisData->{'axis-tick-showmarks'}))
			$axisNode->setShowTickMarks($axisData->{'axis-tick-showmarks'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
541

26a23052   Benjamin Renard   Add Interval Tick...
542
		//Add constants
95ab3cf6   Menouar AZIB   Prise en compte d...
543
		if ($constantAxisId != '') {
26a23052   Benjamin Renard   Add Interval Tick...
544
545
			foreach ($constantsData as $constantData)
				if ($constantData->{'constant-axis-id'} == $constantAxisId)
95ab3cf6   Menouar AZIB   Prise en compte d...
546
					$this->unmarshallConstant($constantData, $axisNode);
26a23052   Benjamin Renard   Add Interval Tick...
547
548
		}
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
549

c4213719   Erdogan Furkan   Done.
550
	protected function unmarshallParams($paramsData, $requestParamsNode, $plotNode, $panelNode, $statusPlotNode, $tickPlotNode, $axesData)
26a23052   Benjamin Renard   Add Interval Tick...
551
552
553
	{
		//X parameters
		$isScatter = ($plotNode->getName() == REQUESTOUTPUTPLOTELEMENTXY_NAME);
f822811a   Benjamin Renard   Implements multi ...
554
		$xIds = array();
95ab3cf6   Menouar AZIB   Prise en compte d...
555
		if ($isScatter) {
f822811a   Benjamin Renard   Implements multi ...
556
			$crtXId = 0;
95ab3cf6   Menouar AZIB   Prise en compte d...
557
			foreach ($paramsData as $paramData) {
26a23052   Benjamin Renard   Add Interval Tick...
558
559
				if ($paramData->{'param-drawing-object'}->{'serie-xaxis-param'} == '')
					continue;
f822811a   Benjamin Renard   Implements multi ...
560
561
562
563
				if (array_key_exists($paramData->{'param-drawing-object'}->{'serie-xaxis-param'}, $xIds)) {
					//x param already exists
					continue;
				}
95ab3cf6   Menouar AZIB   Prise en compte d...
564

bf27ba04   Benjamin Renard   Add templated par...
565
				$paramXInfo = $this->paramManager->addExistingParam($paramData->{'param-drawing-object'}->{'serie-xaxis-param'}, $this->paramsData);
26a23052   Benjamin Renard   Add Interval Tick...
566
567
568
569
				if ($paramXInfo['id'] == '')
					throw new Exception('Cannot retrieve X parameter.');
				$requestParamsNode->addParam($paramXInfo['id']);
				$xParamNode = $plotNode->getParams()->getParamById($paramXInfo['id']);
95ab3cf6   Menouar AZIB   Prise en compte d...
570
				switch ($paramData->{'param-drawing-type'}) {
c4213719   Erdogan Furkan   Done.
571
					case 'histogram2d':
95ab3cf6   Menouar AZIB   Prise en compte d...
572
					case 'serie':
26a23052   Benjamin Renard   Add Interval Tick...
573
574
						//Unmarshall x serie
						if (count($paramXInfo['indexes']) == 0)
f822811a   Benjamin Renard   Implements multi ...
575
							$xParamNode->addXSerie(-1, $crtXId, $paramData->{'param-drawing-object'}->{'serie-xvalue-min'}, $paramData->{'param-drawing-object'}->{'serie-xvalue-max'});
26a23052   Benjamin Renard   Add Interval Tick...
576
						else if (count($paramXInfo['indexes']) == 1)
f822811a   Benjamin Renard   Implements multi ...
577
							$xParamNode->addXSerie($paramXInfo['indexes'][0], $crtXId, $paramData->{'param-drawing-object'}->{'serie-xvalue-min'}, $paramData->{'param-drawing-object'}->{'serie-xvalue-max'});
26a23052   Benjamin Renard   Add Interval Tick...
578
579
580
						else
							throw new Exception('X parameter for serie must be a component.');
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
581
					default:
26a23052   Benjamin Renard   Add Interval Tick...
582
583
						throw new Exception('X parameter not allowed for this drawing type. ');
				}
f822811a   Benjamin Renard   Implements multi ...
584
585
				$xIds[$paramData->{'param-drawing-object'}->{'serie-xaxis-param'}] = $crtXId;
				++$crtXId;
26a23052   Benjamin Renard   Add Interval Tick...
586
587
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
588

26a23052   Benjamin Renard   Add Interval Tick...
589
590
		//Main drawing element parameter
		$drawingEltIndex = 0;
95ab3cf6   Menouar AZIB   Prise en compte d...
591
		foreach ($paramsData as $paramData) {
52c1e291   Benjamin Renard   Generate TT and c...
592
593
			$isTTCat = ($paramData->{'param-type'} == 'ttcat');

26a23052   Benjamin Renard   Add Interval Tick...
594
			//Param
52c1e291   Benjamin Renard   Generate TT and c...
595
596
			if (!$isTTCat) {
				$paramInfo = $this->paramManager->addExistingParam($paramData->{'paramid'}, $this->paramsData, isset($paramData->{'template_args'}) ? $paramData->{'template_args'} : NULL);
95ab3cf6   Menouar AZIB   Prise en compte d...
597
			} else {
52c1e291   Benjamin Renard   Generate TT and c...
598
599
				$paramInfo = $this->paramManager->addTTCatParam($paramData->{'paramid'}, $this->paramsData);
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
600

3182799a   Benjamin Renard   Use param indexes...
601
			$paramInfo['indexes'] = array();
27317777   Menouar AZIB   J'ai ajouté la fo...
602
603
604
605
606
			if ($paramData->{'param-drawing-type'} == 'sauvaud') {
				$this->paramManager->applyRangesAndIndexes($this->paramsData, $paramData, false, $paramInfo);
			} else {
				$this->paramManager->applyRangesAndIndexes($this->paramsData, $paramData, !$this->isInstantPlot, $paramInfo);
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
607
608
			$this->paramManager->applyFilter($this->paramsData, $paramData, $paramInfo);

26a23052   Benjamin Renard   Add Interval Tick...
609
			$requestParamsNode->addParam($paramInfo['id']);
95ab3cf6   Menouar AZIB   Prise en compte d...
610

26a23052   Benjamin Renard   Add Interval Tick...
611
			$colorSerieId = -1;
8ade06fe   Benjamin Renard   Improve config load
612
			if (!empty($paramData->{'param-drawing-object'}->{'serie-colored-param'}))
26a23052   Benjamin Renard   Add Interval Tick...
613
614
				$colorSerieId = $drawingEltIndex;

f822811a   Benjamin Renard   Implements multi ...
615
			$xId = ($isScatter && !empty($paramData->{'param-drawing-object'}->{'serie-xaxis-param'})) ? $xIds[$paramData->{'param-drawing-object'}->{'serie-xaxis-param'}] : -1;
95ab3cf6   Menouar AZIB   Prise en compte d...
616
617
618

			switch ($paramData->{'param-drawing-type'}) {
				case 'serie':
26a23052   Benjamin Renard   Add Interval Tick...
619
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
f822811a   Benjamin Renard   Implements multi ...
620
					$this->unmarshallSerie($paramData, $requestParamsNode, $plotNode, $paramNode, $paramInfo['indexes'], $xId, $colorSerieId, false);
26a23052   Benjamin Renard   Add Interval Tick...
621
					break;
c4213719   Erdogan Furkan   Done.
622
623
				case 'histogram2d':
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
2c99863f   Erdogan Furkan   Minor fix
624
625
626
627
					if(!empty($paramData->{'param-drawing-object'}->{'histotype-param'}))
						$paramZInfo = $this->paramManager->addExistingParam($paramData->{'param-drawing-object'}->{'histotype-param'}, $this->paramsData);
					else
						$paramZInfo = NULL;
c4213719   Erdogan Furkan   Done.
628
629
					$this->unmarshallHistogram2D($paramData, $requestParamsNode, $plotNode, $paramNode, $paramInfo['indexes'], $xId, $paramZInfo,$axesData);
					break;	
95ab3cf6   Menouar AZIB   Prise en compte d...
630
				case 'orbit-serie':
26a23052   Benjamin Renard   Add Interval Tick...
631
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
f822811a   Benjamin Renard   Implements multi ...
632
					$this->unmarshallSerie($paramData, $requestParamsNode, $plotNode, $paramNode, -1, $xId, $colorSerieId, true);
26a23052   Benjamin Renard   Add Interval Tick...
633
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
634
				case 'spectro':
26a23052   Benjamin Renard   Add Interval Tick...
635
636
637
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
					$this->unmarshallSpectro($paramData->{'param-drawing-object'}, $plotNode, $paramNode, $paramInfo['indexes']);
					break;
27317777   Menouar AZIB   J'ai ajouté la fo...
638
639
640
				case 'sauvaud':
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
					$this->unmarshallSauvaud($paramData->{'param-drawing-object'}, $plotNode, $paramNode, $paramInfo['indexes']);
3dcf7710   Hacene SI HADJ MOHAND   us ok
641
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
642
				case 'status-bar':
26a23052   Benjamin Renard   Add Interval Tick...
643
644
645
646
647
648
					if (($plotNode->getName() == REQUESTOUTPUTPLOTELEMENTSTATUS_NAME) && !isset($statusPlotNode))
						$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
					else
						$paramNode = $statusPlotNode->getParams()->getParamById($paramInfo['id']);
					$this->unmarshallStatusBar($paramData->{'param-drawing-object'}, $paramNode, $paramInfo['indexes']);
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
649
				case 'tick-bar':
26a23052   Benjamin Renard   Add Interval Tick...
650
651
652
653
					if (($plotNode->getName() == REQUESTOUTPUTPLOTELEMENTTICK_NAME) && !isset($tickPlotNode))
						$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
					else
						$paramNode = $tickPlotNode->getParams()->getParamById($paramInfo['id']);
95ab3cf6   Menouar AZIB   Prise en compte d...
654

26a23052   Benjamin Renard   Add Interval Tick...
655
656
					$this->unmarshallTickBar($paramData->{'param-drawing-object'}, $paramNode, $paramInfo['indexes']);
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
657
				case 'iserie':
26a23052   Benjamin Renard   Add Interval Tick...
658
659
660
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
					$this->unmarshallInstantSerie($paramData->{'param-drawing-object'}, $plotNode, $paramNode);
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
661
				case 'ispectro':
fc153c1c   Elena.Budnik   ispectro added
662
663
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
					$this->unmarshallInstantSpectro($paramData->{'param-drawing-object'}, $plotNode, $paramNode, $paramInfo['indexes']);
044a9305   Benjamin Renard   Add intervals dra...
664
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
665
				case 'intervals':
044a9305   Benjamin Renard   Add intervals dra...
666
667
668
					$paramNode = $plotNode->getParams()->getParamById($paramInfo['id']);
					$this->unmarshallIntervals($paramData->{'param-drawing-object'}, $paramNode);
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
669
				default:
26a23052   Benjamin Renard   Add Interval Tick...
670
671
672
673
					throw new Exception('Drawing type not implemented.');
			}
			++$drawingEltIndex;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
674

26a23052   Benjamin Renard   Add Interval Tick...
675
676
		//Colored parameter
		$drawingEltIndex = 0;
95ab3cf6   Menouar AZIB   Prise en compte d...
677
678
		foreach ($paramsData as $paramData) {
			if (empty($paramData->{'param-drawing-object'}->{'serie-colored-param'})) {
26a23052   Benjamin Renard   Add Interval Tick...
679
680
681
				++$drawingEltIndex;
				continue;
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
682

bf27ba04   Benjamin Renard   Add templated par...
683
			$paramColoredInfo = $this->paramManager->addExistingParam($paramData->{'param-drawing-object'}->{'serie-colored-param'}, $this->paramsData);
26a23052   Benjamin Renard   Add Interval Tick...
684
685
686
687
			if ($paramColoredInfo['id'] == '')
				throw new Exception('Cannot retrieve colored parameter.');
			$requestParamsNode->addParam($paramColoredInfo['id']);
			$coloredParamNode = $plotNode->getParams()->getParamById($paramColoredInfo['id']);
95ab3cf6   Menouar AZIB   Prise en compte d...
688

26a23052   Benjamin Renard   Add Interval Tick...
689
			$colorSerieId = $drawingEltIndex;
95ab3cf6   Menouar AZIB   Prise en compte d...
690
691
692
693

			switch ($paramData->{'param-drawing-type'}) {
				case 'serie':
				case 'orbit-serie':
26a23052   Benjamin Renard   Add Interval Tick...
694
695
696
697
698
699
700
701
					//Unmarshall colored serie
					if (count($paramColoredInfo['indexes']) == 0)
						$coloredParamNode->addColorSerie($colorSerieId, -1);
					else if (count($paramColoredInfo['indexes']) == 1)
						$coloredParamNode->addColorSerie($colorSerieId, $paramColoredInfo['indexes'][0]);
					else
						throw new Exception('Colored parameter for serie must be a component.');
					break;
95ab3cf6   Menouar AZIB   Prise en compte d...
702
				default:
26a23052   Benjamin Renard   Add Interval Tick...
703
704
705
706
707
					throw new Exception('Colored parameter not allowed for this drawing type. ');
			}
			++$drawingEltIndex;
		}
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
708

c4213719   Erdogan Furkan   Done.
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
	protected function unmarshallHistogram2D($paramData, $requestParamsNode, $plotNode, $paramNode, $indexes, $xId, $paramZInfo,$axesData)
	{
		$histogram2DNodes = array();
		if (count($indexes) == 0) {
			$histogram2DNode = $paramNode->addHistogram2DSerie($paramData->{'param-drawing-object'}->{'serie-yaxis'}, -1, $xId);
			$histogram2DNode->setId($paramData->{'id'});
			$histogram2DNodes[] = $histogram2DNode;
		}
		foreach ($indexes as $index) {
			$histogram2DNode = $paramNode->addHistogram2DSerie($paramData->{'param-drawing-object'}->{'serie-yaxis'}, $index, $xId);
			if (count($indexes) == 1)
				$histogram2DNode->setId($paramData->{'id'});
			$histogram2DNodes[] = $histogram2DNode;
		}

		// ranges 
		foreach($axesData as $axisData){
			if ($axisData->{'axis-type'} == "x"){
				$axisNode = $plotNode->getXAxis();
				$rangeNode = $axisNode->getRange();
				if($paramData->{'param-drawing-object'}->{'histo2d-xmin'} !== null 
								&& $paramData->{'param-drawing-object'}->{'histo2d-xmax'} !== null)
				{
					$rangeNode->setMinMax($paramData->{'param-drawing-object'}->{'histo2d-xmin'},
														 $paramData->{'param-drawing-object'}->{'histo2d-xmax'});
				}
			}
			else if ($axisData->{'axis-type'} == "y-left"){
c3160d51   Erdogan Furkan   Minor fix
737
				$axisNode = $plotNode->getYAxis('y-left');
c4213719   Erdogan Furkan   Done.
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
				$rangeNode = $axisNode->getRange();
				if($paramData->{'param-drawing-object'}->{'histo2d-ymin'} !== null 
								&& $paramData->{'param-drawing-object'}->{'histo2d-ymax'} !== null)
				{
					$rangeNode->setMinMax($paramData->{'param-drawing-object'}->{'histo2d-ymin'}, 
														$paramData->{'param-drawing-object'}->{'histo2d-ymax'});
				}
			}
		}
		foreach ($histogram2DNodes as $histogram2DNode) {
			// resampling
			
			switch ($paramData->{'param-drawing-object'}->{'serie-resampling-mode'}) {
				case 'yparam':
					$histogram2DNode->getResampling()->setType(RequestOutputPlotResamplingTypeEnum::YPARAM);
					break;
				case 'xparam':
				default:
					$histogram2DNode->getResampling()->setType(RequestOutputPlotResamplingTypeEnum::XPARAM);
			}
			// xBinNumber & yBinNumber
			$histogram2DNode->getBins()->addManualBins($paramData->{'param-drawing-object'}->{'histo2d-xbinnumber'},$paramData->{'param-drawing-object'}->{'histo2d-ybinnumber'});

			// histotype, function
			$histogram2DNode->getHistotype()->setFunction($paramData->{'param-drawing-object'}->{'histo2d-function'});
			//smoothfactor
			$histogram2DNode->getHistotype()->setSmoothFactor($paramData->{'param-drawing-object'}->{'histo2d-smoothfactor'});
2c99863f   Erdogan Furkan   Minor fix
765

c4213719   Erdogan Furkan   Done.
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
			if($paramData->{'param-drawing-object'}->{'histo2d-function'} != "density"){
				// paramId
				$requestParamsNode->addParam($paramZInfo['id']);
				$histogram2DNode->getHistotype()->setParamId($paramZInfo['id']);

				// index
				if (count($paramZInfo['indexes']) == 0)
					$histogram2DNode->getHistotype()->setIndex(-1);
				else if (count($paramZInfo['indexes']) == 1)
					$histogram2DNode->getHistotype()->setIndex($paramZInfo['indexes'][0]);
				else
					throw new Exception('Z parameter for serie must be a component.');
			}
		}
	}

f822811a   Benjamin Renard   Implements multi ...
782
	protected function unmarshallSerie($paramData, $requestParamsNode, $plotNode, $paramNode, $indexes, $xId, $colorSerieId, $isOrbitSerie)
26a23052   Benjamin Renard   Add Interval Tick...
783
784
	{
		$serieNodes = array();
95ab3cf6   Menouar AZIB   Prise en compte d...
785
786
787

		if (!$isOrbitSerie) {
			if (count($indexes) == 0) {
f822811a   Benjamin Renard   Implements multi ...
788
				$serieNode = $paramNode->addYSerie($paramData->{'param-drawing-object'}->{'serie-yaxis'}, -1, $xId, $colorSerieId, $paramData->{'param-drawing-object'}->{'serie-value-min'}, $paramData->{'param-drawing-object'}->{'serie-value-max'});
26a23052   Benjamin Renard   Add Interval Tick...
789
				$serieNode->setId($paramData->{'id'});
60a1a563   Benjamin Renard   Add the possibili...
790
791
				if (!empty($paramData->{'param-drawing-object'}->{'serie-resolution'}))
					$serieNode->setResolution($paramData->{'param-drawing-object'}->{'serie-resolution'});
26a23052   Benjamin Renard   Add Interval Tick...
792
793
				$serieNodes[] = $serieNode;
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
794
			foreach ($indexes as $index) {
f822811a   Benjamin Renard   Implements multi ...
795
				$serieNode = $paramNode->addYSerie($paramData->{'param-drawing-object'}->{'serie-yaxis'}, $index, $xId, $colorSerieId, $paramData->{'param-drawing-object'}->{'serie-value-min'}, $paramData->{'param-drawing-object'}->{'serie-value-max'});
26a23052   Benjamin Renard   Add Interval Tick...
796
797
				if (count($indexes) == 1)
					$serieNode->setId($paramData->{'id'});
60a1a563   Benjamin Renard   Add the possibili...
798
799
				if (!empty($paramData->{'param-drawing-object'}->{'serie-resolution'}))
					$serieNode->setResolution($paramData->{'param-drawing-object'}->{'serie-resolution'});
26a23052   Benjamin Renard   Add Interval Tick...
800
801
				$serieNodes[] = $serieNode;
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
802
		} else {
cb46dfbf   Benjamin Renard   Fix orbit serie a...
803
			$orbitSerie = $paramNode->addOrbitSerie($paramData->{'param-drawing-object'}->{'serie-yaxis'}, $colorSerieId);
26a23052   Benjamin Renard   Add Interval Tick...
804
805
806
			$orbitSerie->setId($paramData->{'id'});
			$serieNodes[] = $orbitSerie;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
807
808
809

		foreach ($serieNodes as $serieNode) {
			if (!$isOrbitSerie) {
26a23052   Benjamin Renard   Add Interval Tick...
810
				//Resampling
95ab3cf6   Menouar AZIB   Prise en compte d...
811
812
813
				if ($plotNode->getName() == REQUESTOUTPUTPLOTELEMENTXY_NAME) {
					switch ($paramData->{'param-drawing-object'}->{'serie-resampling-mode'}) {
						case 'yparam':
26a23052   Benjamin Renard   Add Interval Tick...
814
815
							$serieNode->getResampling()->setType(RequestOutputPlotResamplingTypeEnum::YPARAM);
							break;
95ab3cf6   Menouar AZIB   Prise en compte d...
816
817
						case 'xparam':
						default:
26a23052   Benjamin Renard   Add Interval Tick...
818
819
820
							$serieNode->getResampling()->setType(RequestOutputPlotResamplingTypeEnum::XPARAM);
					}
				}
95ab3cf6   Menouar AZIB   Prise en compte d...
821
			} else {
26a23052   Benjamin Renard   Add Interval Tick...
822
				//Projection
95ab3cf6   Menouar AZIB   Prise en compte d...
823
824
				switch ($paramData->{'param-drawing-object'}->{'serie-projection'}) {
					case 'XY':
26a23052   Benjamin Renard   Add Interval Tick...
825
826
						$serieNode->setProjection(RequestOutputPlotOrbitSerieProjectionEnum::XY);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
827
					case 'XZ':
26a23052   Benjamin Renard   Add Interval Tick...
828
829
						$serieNode->setProjection(RequestOutputPlotOrbitSerieProjectionEnum::XZ);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
830
					case 'YZ':
26a23052   Benjamin Renard   Add Interval Tick...
831
832
						$serieNode->setProjection(RequestOutputPlotOrbitSerieProjectionEnum::YZ);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
833
					case 'XR':
26a23052   Benjamin Renard   Add Interval Tick...
834
835
						$serieNode->setProjection(RequestOutputPlotOrbitSerieProjectionEnum::XR);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
836
					case 'YR':
26a23052   Benjamin Renard   Add Interval Tick...
837
838
						$serieNode->setProjection(RequestOutputPlotOrbitSerieProjectionEnum::YR);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
839
					case 'ZR':
26a23052   Benjamin Renard   Add Interval Tick...
840
841
						$serieNode->setProjection(RequestOutputPlotOrbitSerieProjectionEnum::ZR);
						break;
95ab3cf6   Menouar AZIB   Prise en compte d...
842
					default:
26a23052   Benjamin Renard   Add Interval Tick...
843
844
845
						throw new Exception('Projection not allowed for the orbit serie');
				}
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
846

26a23052   Benjamin Renard   Add Interval Tick...
847
848
849
850
851
852
853
854
855
856
857
858
859
			//Line
			$this->unmarshallLine($paramData->{'param-drawing-object'}, 'serie', $serieNode->getLine(), $paramData->{'param-drawing-object'}->{"serie-lines-activated"} ? RequestOutputPlotLineTypeEnum::LINE : RequestOutputPlotLineTypeEnum::NO);
			//Symbol
			if (!$paramData->{'param-drawing-object'}->{"serie-symbols-activated"})
				$serieNode->getSymbol()->setType(RequestOutputPlotSymbolTypeEnum::NO);
			else
				$this->unmarshallSymbol($paramData->{'param-drawing-object'}, 'serie-symbols', $serieNode->getSymbol());
			//Time tick
			if ($paramData->{'param-drawing-object'}->{'serie-timetick-activated'})
				$this->unmarshallTimeTick($paramData->{'param-drawing-object'}, $serieNode->getTimeTicks());
			//Interval tick
			if ($paramData->{'param-drawing-object'}->{'serie-intervaltick-activated'})
				$this->unmarshallIntervalTick($paramData->{'param-drawing-object'}, $serieNode->getIntervalTicks());
95ab3cf6   Menouar AZIB   Prise en compte d...
860
			if (!$isOrbitSerie) {
26a23052   Benjamin Renard   Add Interval Tick...
861
862
863
864
865
866
				//Error bar
				if ($paramData->{'param-drawing-object'}->{'serie-errorbar-activated'})
					$this->unmarshallErrorBar($paramData->{'param-drawing-object'}, $requestParamsNode, $serieNode->getErrorBar());
			}
		}
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
867

26a23052   Benjamin Renard   Add Interval Tick...
868
869
870
871
872
873
874
875
876
877
878
	protected function unmarshallTimeTick($serieData, $timeTickNode)
	{
		//Font
		if ($serieData->{'serie-timetick-font-activated'})
			$this->unmarshallFont($serieData, 'serie-timetick-font', $timeTickNode->getFont());
		//First Symbol
		if ($serieData->{'serie-timetick-firstsymbols-activated'})
			$this->unmarshallSymbol($serieData, 'serie-timetick-firstsymbols', $timeTickNode->getFirstSymbol());
		//Symbol
		$this->unmarshallSymbol($serieData, 'serie-timetick-symbols', $timeTickNode->getSymbol());
		//Set options by type
95ab3cf6   Menouar AZIB   Prise en compte d...
879
880
		switch ($serieData->{'serie-timetick-type'}) {
			case 'time-step':
26a23052   Benjamin Renard   Add Interval Tick...
881
882
883
				$timeTickNode->setStep(CommonClass::timeStampToDDTime($serieData->{'serie-timetick-step'}));
				$timeTickNode->setNumber(0);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
884
			case 'nb-major':
26a23052   Benjamin Renard   Add Interval Tick...
885
886
887
				$timeTickNode->setStep(0);
				$timeTickNode->setNumber($serieData->{'serie-timetick-nbmajor'});
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
888
889
			case 'auto':
			default:
26a23052   Benjamin Renard   Add Interval Tick...
890
891
892
893
894
895
896
897
				$timeTickNode->setStep('auto');
				$timeTickNode->setNumber(0);
		}
		//Minor
		$timeTickNode->setMinor($serieData->{'serie-timetick-nbminor'});
		//Color
		$timeTickNode->setColor($this->hexColor2KernelColor($serieData->{'serie-timetick-color'}));
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
898

26a23052   Benjamin Renard   Add Interval Tick...
899
900
901
	protected function unmarshallIntervalTick($serieData, $intervalTickNode)
	{
		//Mode
95ab3cf6   Menouar AZIB   Prise en compte d...
902
		switch ($serieData->{'serie-intervaltick-mode'}) {
26a23052   Benjamin Renard   Add Interval Tick...
903
			case 'symbol-only':
4f9a8e36   Benjamin Renard   Min/Max value def...
904
				$intervalTickNode->setMode(RequestOutputPlotSerieIntervalTicksModeEnum::SYMBOLONLY);
26a23052   Benjamin Renard   Add Interval Tick...
905
906
				break;
			case 'interval-index':
4f9a8e36   Benjamin Renard   Min/Max value def...
907
				$intervalTickNode->setMode(RequestOutputPlotSerieIntervalTicksModeEnum::INTERVALINDEX);
26a23052   Benjamin Renard   Add Interval Tick...
908
909
				break;
			case 'start-stop-time':
4f9a8e36   Benjamin Renard   Min/Max value def...
910
				$intervalTickNode->setMode(RequestOutputPlotSerieIntervalTicksModeEnum::STARTSTOPTIME);
26a23052   Benjamin Renard   Add Interval Tick...
911
912
				break;
			case 'start-time':
95ab3cf6   Menouar AZIB   Prise en compte d...
913
			default:
4f9a8e36   Benjamin Renard   Min/Max value def...
914
				$intervalTickNode->setMode(RequestOutputPlotSerieIntervalTicksModeEnum::STARTTIME);
26a23052   Benjamin Renard   Add Interval Tick...
915
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
916

26a23052   Benjamin Renard   Add Interval Tick...
917
918
		//Color
		$intervalTickNode->setColor($this->hexColor2KernelColor($serieData->{'serie-intervaltick-color'}));
95ab3cf6   Menouar AZIB   Prise en compte d...
919

26a23052   Benjamin Renard   Add Interval Tick...
920
921
		//Symbol
		$this->unmarshallSymbol($serieData, 'serie-intervaltick-symbols', $intervalTickNode->getSymbol());
95ab3cf6   Menouar AZIB   Prise en compte d...
922

26a23052   Benjamin Renard   Add Interval Tick...
923
924
925
926
		//Font
		if ($serieData->{'serie-intervaltick-font-activated'})
			$this->unmarshallFont($serieData, 'serie-intervaltick-font', $intervalTickNode->getFont());
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
927

26a23052   Benjamin Renard   Add Interval Tick...
928
929
930
	protected function unmarshallErrorBar($serieData, $requestParamsNode, $errorBarNode)
	{
		//Type
95ab3cf6   Menouar AZIB   Prise en compte d...
931
		switch ($serieData->{'serie-errorbar-type'}) {
26a23052   Benjamin Renard   Add Interval Tick...
932
933
			case 'min-max':
				$errorBarTypeNode = $errorBarNode->getBarByType(RequestOutputPlotYSerieErrorBarTypeEnum::MINMAX);
95ab3cf6   Menouar AZIB   Prise en compte d...
934

bf27ba04   Benjamin Renard   Add templated par...
935
				$minParamInfo = $this->paramManager->addExistingParam($serieData->{'serie-errorbar-minparam'}, $this->paramsData);
26a23052   Benjamin Renard   Add Interval Tick...
936
937
938
939
940
941
942
943
944
				if ($minParamInfo['id'] == '')
					throw new Exception('Cannot retrieve min. error parameter.');
				$requestParamsNode->addParam($minParamInfo['id']);
				if (count($minParamInfo['indexes']) == 0)
					$errorBarTypeNode->setMinParam($minParamInfo['id'], -1);
				else if (count($minParamInfo['indexes']) == 1)
					$errorBarTypeNode->setMinParam($minParamInfo['id'], $minParamInfo['indexes'][0]);
				else
					throw new Exception('Min parameter for error bar must be a component.');
95ab3cf6   Menouar AZIB   Prise en compte d...
945

bf27ba04   Benjamin Renard   Add templated par...
946
				$maxParamInfo = $this->paramManager->addExistingParam($serieData->{'serie-errorbar-maxparam'}, $this->paramsData);
26a23052   Benjamin Renard   Add Interval Tick...
947
948
949
950
951
952
953
954
955
956
957
958
				if ($maxParamInfo['id'] == '')
					throw new Exception('Cannot retrieve max. error parameter.');
				$requestParamsNode->addParam($maxParamInfo['id']);
				if (count($maxParamInfo['indexes']) == 0)
					$errorBarTypeNode->setMaxParam($maxParamInfo['id'], -1);
				else if (count($maxParamInfo['indexes']) == 1)
					$errorBarTypeNode->setMaxParam($maxParamInfo['id'], $maxParamInfo['indexes'][0]);
				else
					throw new Exception('Max parameter for error bar must be a component.');
				break;
			case 'delta':
				$errorBarTypeNode = $errorBarNode->getBarByType(RequestOutputPlotYSerieErrorBarTypeEnum::DELTA);
95ab3cf6   Menouar AZIB   Prise en compte d...
959

bf27ba04   Benjamin Renard   Add templated par...
960
				$deltaParamInfo = $this->paramManager->addExistingParam($serieData->{'serie-errorbar-deltaparam'}, $this->paramsData);
26a23052   Benjamin Renard   Add Interval Tick...
961
962
963
964
965
966
967
968
969
970
				if ($deltaParamInfo['id'] == '')
					throw new Exception('Cannot retrieve delta error parameter.');
				$requestParamsNode->addParam($deltaParamInfo['id']);
				if (count($deltaParamInfo['indexes']) == 0)
					$errorBarTypeNode->setDeltaParam($deltaParamInfo['id'], -1);
				else if (count($deltaParamInfo['indexes']) == 1)
					$errorBarTypeNode->setDeltaParam($deltaParamInfo['id'], $deltaParamInfo['indexes'][0]);
				else
					throw new Exception('Delta parameter for error bar must be a component.');
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
971
			default:
26a23052   Benjamin Renard   Add Interval Tick...
972
973
				throw new Exception('Unknown error bar type.');
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
974

26a23052   Benjamin Renard   Add Interval Tick...
975
976
977
		//Line
		$this->unmarshallLine($serieData, 'serie-errorbar', $errorBarNode->getLine(), RequestOutputPlotLineTypeEnum::LINE);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
978

26a23052   Benjamin Renard   Add Interval Tick...
979
980
	protected function unmarshallInstantSerie($paramDrawingData, $plotNode, $paramNode)
	{
cb46dfbf   Benjamin Renard   Fix orbit serie a...
981
		$iserieNode = $paramNode->addInstantSerie('y-left');
95ab3cf6   Menouar AZIB   Prise en compte d...
982

26a23052   Benjamin Renard   Add Interval Tick...
983
984
		//Table on X Axis
		$iserieNode->setTableOnXAxis($paramDrawingData->{'iserie-tableonx'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
985

26a23052   Benjamin Renard   Add Interval Tick...
986
987
988
989
990
991
992
993
994
		//Line
		$this->unmarshallLine($paramDrawingData, 'iserie', $iserieNode->getLine(), $paramDrawingData->{"iserie-lines-activated"} ? RequestOutputPlotLineTypeEnum::LINE : RequestOutputPlotLineTypeEnum::NO);

		//Symbol
		if (!$paramDrawingData->{"iserie-symbols-activated"})
			$iserieNode->getSymbol()->setType(RequestOutputPlotSymbolTypeEnum::NO);
		else
			$this->unmarshallSymbol($paramDrawingData, 'iserie-symbols', $iserieNode->getSymbol());
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
995

26a23052   Benjamin Renard   Add Interval Tick...
996
997
	protected function unmarshallSpectro($paramDrawingData, $plotNode, $paramNode, $indexes)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
998
999
1000
1001
1002
1003
1004
1005
1006
1007
		$spectroNode = $paramNode->addSpectro(
			$paramDrawingData->{'spectro-yaxis'},
			empty($paramDrawingData->{'spectro-resolution'}) ? NULL : $paramDrawingData->{'spectro-resolution'},
			count($indexes) > 0 ? $indexes[0] : NULL,
			$paramDrawingData->{'spectro-value-min'},
			$paramDrawingData->{'spectro-value-max'},
			isset($paramDrawingData->{'spectro-log0-as-min'}) ? $paramDrawingData->{'spectro-log0-as-min'} : false,
			empty($paramDrawingData->{'spectro-normalization'}) ? NULL : $paramDrawingData->{'spectro-normalization'},
			empty($paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_TYPE}) ? NULL : $paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_TYPE},
			!isset($paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_VALUE}) ? NULL : $paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_VALUE},
7c2e29e9   Myriam Bouchemit   Fix
1008
			!isset($paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_DIM}) || ($paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_DIM} == "") ? NULL : $paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_DIM}
95ab3cf6   Menouar AZIB   Prise en compte d...
1009
		);
26a23052   Benjamin Renard   Add Interval Tick...
1010
	}
27317777   Menouar AZIB   J'ai ajouté la fo...
1011
	protected function unmarshallSauvaud($paramDrawingData, $plotNode, $paramNode, $indexes)
3dcf7710   Hacene SI HADJ MOHAND   us ok
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
	{
		$spectroNode = $paramNode->addSauvaud(
			$paramDrawingData->{'spectro-yaxis'},
			empty($paramDrawingData->{'spectro-resolution'}) ? NULL : $paramDrawingData->{'spectro-resolution'},
			count($indexes) > 0 ? $indexes[0] : NULL,
			$paramDrawingData->{'spectro-value-min'},
			$paramDrawingData->{'spectro-value-max'},
			isset($paramDrawingData->{'spectro-log0-as-min'}) ? $paramDrawingData->{'spectro-log0-as-min'} : false,
			empty($paramDrawingData->{'spectro-normalization'}) ? NULL : $paramDrawingData->{'spectro-normalization'},
			empty($paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_TYPE}) ? NULL : $paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_TYPE},
			!isset($paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_VALUE}) ? NULL : $paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_VALUE},
27317777   Menouar AZIB   J'ai ajouté la fo...
1023
1024
			!isset($paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_DIM}) ? NULL : $paramDrawingData->{REQUESTOUTPUTPLOTSPECTRO_BGS_DIM},
			$paramDrawingData->{'right_dim'}
3dcf7710   Hacene SI HADJ MOHAND   us ok
1025
1026
		);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1027

fc153c1c   Elena.Budnik   ispectro added
1028
1029
	protected function unmarshallInstantSpectro($paramDrawingData, $plotNode, $paramNode, $indexes)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1030
		//TBD how to process inexes if they are defined ? 
cb46dfbf   Benjamin Renard   Fix orbit serie a...
1031
		$spectroNode = $paramNode->addInstantSpectro('y-left', $paramDrawingData->{'ispectro-dimonxaxis'});
fc153c1c   Elena.Budnik   ispectro added
1032
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1033

26a23052   Benjamin Renard   Add Interval Tick...
1034
1035
	protected function unmarshallStatusBar($paramDrawingData, $paramNode, $indexes)
	{
25a38537   Erdogan Furkan   7616 - Adding col...
1036
1037
1038
1039
1040
		if ($paramDrawingData->{'statusbar-color'} == "none") {
			$color = NULL;
		} else {
			$color = $this->hexColor2KernelColor($paramDrawingData->{'statusbar-color'});
		}
26a23052   Benjamin Renard   Add Interval Tick...
1041
		if (count($indexes) == 0)
25a38537   Erdogan Furkan   7616 - Adding col...
1042
1043
1044
1045
1046
			$paramNode->addStatusBar(-1, $color);
		else {
			foreach ($indexes as $index)
				$paramNode->addStatusBar($index, $color);
		}
26a23052   Benjamin Renard   Add Interval Tick...
1047
	}
044a9305   Benjamin Renard   Add intervals dra...
1048
1049
1050

	protected function unmarshallIntervals($paramDrawingData, $paramNode)
	{
25a38537   Erdogan Furkan   7616 - Adding col...
1051
1052
1053
1054
1055
		if ($paramDrawingData->{'intervals-color'} == "none") {
			$color = NULL;
		} else {
			$color = $this->hexColor2KernelColor($paramDrawingData->{'intervals-color'});
		}
fe1a8ddd   Erdogan Furkan   Modifications for...
1056
1057

		$intervalsNode = $paramNode->addIntervals($color);
fe1a8ddd   Erdogan Furkan   Modifications for...
1058

c54497a2   Benjamin Renard   Give the possibil...
1059
1060
1061
1062
1063
		if ($paramDrawingData->{'legend-text-activated'}) {
			$textLegendNode = $intervalsNode->addTextLegend();

			$this->unmarshallTextLegend($paramDrawingData, $textLegendNode);
		}
044a9305   Benjamin Renard   Add intervals dra...
1064
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1065

26a23052   Benjamin Renard   Add Interval Tick...
1066
1067
1068
1069
1070
1071
1072
	protected function unmarshallTickBar($paramDrawingData, $paramNode, $indexes)
	{
		if (count($indexes) == 0)
			$paramNode->addTickBar(-1);
		foreach ($indexes as $index)
			$paramNode->addTickBar($index);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1073

26a23052   Benjamin Renard   Add Interval Tick...
1074
1075
1076
1077
1078
1079
1080
	protected function hasStatusBar($paramsData)
	{
		foreach ($paramsData as $paramData)
			if ($paramData->{'param-drawing-type'} == 'status-bar')
				return true;
		return false;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1081

26a23052   Benjamin Renard   Add Interval Tick...
1082
1083
1084
1085
1086
1087
1088
	protected function hasTickBar($paramsData)
	{
		foreach ($paramsData as $paramData)
			if ($paramData->{'param-drawing-type'} == 'tick-bar')
				return true;
		return false;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1089

26a23052   Benjamin Renard   Add Interval Tick...
1090
1091
1092
	protected function unmarshallParamsLegend($paramsLegendData, $paramsLegendNode)
	{
		//Legend type
95ab3cf6   Menouar AZIB   Prise en compte d...
1093
1094
		switch ($paramsLegendData->{'legend-series-type'}) {
			case 'text-line-symbol':
26a23052   Benjamin Renard   Add Interval Tick...
1095
1096
				$paramsLegendNode->setType(RequestOutputPlotParamsLegendTypeEnum::TEXTLINESYMBOL);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1097
1098
			case 'text-only':
			default:
26a23052   Benjamin Renard   Add Interval Tick...
1099
1100
				$paramsLegendNode->setType(RequestOutputPlotParamsLegendTypeEnum::TEXTONLY);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1101

26a23052   Benjamin Renard   Add Interval Tick...
1102
1103
		//Show param legend
		$paramsLegendNode->setShowParamInfo($paramsLegendData->{'legend-series-showparaminfo'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
1104

26a23052   Benjamin Renard   Add Interval Tick...
1105
1106
		//Show interval legend
		$paramsLegendNode->setShowIntervalInfo($paramsLegendData->{'legend-series-intervalinfo-activated'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
1107

26a23052   Benjamin Renard   Add Interval Tick...
1108
		//Interval info type
95ab3cf6   Menouar AZIB   Prise en compte d...
1109
1110
		switch ($paramsLegendData->{'legend-series-intervalinfo-type'}) {
			case 'start-stop':
26a23052   Benjamin Renard   Add Interval Tick...
1111
1112
				$paramsLegendNode->setIntervalInfoType(RequestOutputPlotParamsLegendIntervalInfoTypeEnum::STARTSTOP);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1113
1114
			case 'index':
			default:
26a23052   Benjamin Renard   Add Interval Tick...
1115
1116
				$paramsLegendNode->setIntervalInfoType(RequestOutputPlotParamsLegendIntervalInfoTypeEnum::INDEX);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1117

26a23052   Benjamin Renard   Add Interval Tick...
1118
		//Position
95ab3cf6   Menouar AZIB   Prise en compte d...
1119
1120
		switch ($paramsLegendData->{'legend-series-position'}) {
			case 'inside':
26a23052   Benjamin Renard   Add Interval Tick...
1121
1122
				$paramsLegendNode->setPosition(RequestOutputPlotParamsLegendPositionEnum::INSIDE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1123
1124
			case 'outside':
			default:
26a23052   Benjamin Renard   Add Interval Tick...
1125
1126
				$paramsLegendNode->setPosition(RequestOutputPlotParamsLegendPositionEnum::OUTSIDE);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1127

26a23052   Benjamin Renard   Add Interval Tick...
1128
1129
		//Default text color
		$paramsLegendNode->setDefaultTextColor($this->hexColor2KernelColor($paramsLegendData->{'legend-series-defaulttextcolor'}));
95ab3cf6   Menouar AZIB   Prise en compte d...
1130

26a23052   Benjamin Renard   Add Interval Tick...
1131
1132
		//Border visible
		$paramsLegendNode->setBorderVisible($paramsLegendData->{'legend-series-border-activated'} ? "true" : "false");
95ab3cf6   Menouar AZIB   Prise en compte d...
1133

26a23052   Benjamin Renard   Add Interval Tick...
1134
1135
		//Border color
		$paramsLegendNode->setBorderColor($this->hexColor2KernelColor($paramsLegendData->{'legend-series-border-color'}));
95ab3cf6   Menouar AZIB   Prise en compte d...
1136

26a23052   Benjamin Renard   Add Interval Tick...
1137
1138
1139
1140
		//Font
		if ($paramsLegendData->{'legend-series-font-activated'})
			$this->unmarshallFont($paramsLegendData, 'legend-series-font', $paramsLegendNode->getFont());
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1141

fe1a8ddd   Erdogan Furkan   Modifications for...
1142
	protected function unmarshallTextLegend($textLegendData, $parentNode)
26a23052   Benjamin Renard   Add Interval Tick...
1143
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1144

26a23052   Benjamin Renard   Add Interval Tick...
1145
		//Legend text
fe1a8ddd   Erdogan Furkan   Modifications for...
1146
		$parentNode->setText($textLegendData->{'legend-text-value'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1147

26a23052   Benjamin Renard   Add Interval Tick...
1148
		//Legend position
95ab3cf6   Menouar AZIB   Prise en compte d...
1149
1150
		switch ($textLegendData->{'legend-text-position'}) {
			case 'top':
fe1a8ddd   Erdogan Furkan   Modifications for...
1151
				$parentNode->setPosition(RequestOutputPlotTextLegendPositionEnum::TOP);
26a23052   Benjamin Renard   Add Interval Tick...
1152
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1153
			case 'bottom':
fe1a8ddd   Erdogan Furkan   Modifications for...
1154
				$parentNode->setPosition(RequestOutputPlotTextLegendPositionEnum::BOTTOM);
26a23052   Benjamin Renard   Add Interval Tick...
1155
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1156
			case 'left':
fe1a8ddd   Erdogan Furkan   Modifications for...
1157
				$parentNode->setPosition(RequestOutputPlotTextLegendPositionEnum::LEFT);
26a23052   Benjamin Renard   Add Interval Tick...
1158
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1159
1160
			case 'right':
			default:
fe1a8ddd   Erdogan Furkan   Modifications for...
1161
				$parentNode->setPosition(RequestOutputPlotTextLegendPositionEnum::RIGHT);
26a23052   Benjamin Renard   Add Interval Tick...
1162
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1163

26a23052   Benjamin Renard   Add Interval Tick...
1164
		//Legend text color
fe1a8ddd   Erdogan Furkan   Modifications for...
1165
		$parentNode->setColor($this->hexColor2KernelColor($textLegendData->{'legend-text-color'}));
95ab3cf6   Menouar AZIB   Prise en compte d...
1166

26a23052   Benjamin Renard   Add Interval Tick...
1167
		//Font
fe1a8ddd   Erdogan Furkan   Modifications for...
1168
1169
1170
		if ($textLegendData->{'legend-text-font-activated'}) {
			$this->unmarshallFont($textLegendData, 'legend-text-font', $parentNode->getFont());
		}
26a23052   Benjamin Renard   Add Interval Tick...
1171
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1172
1173

	protected function unmarshallConstant($constantData, $axisNode)
26a23052   Benjamin Renard   Add Interval Tick...
1174
1175
1176
	{
		$constantNode = $axisNode->addConstant();
		$constantNode->setId($constantData->{'id'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1177

26a23052   Benjamin Renard   Add Interval Tick...
1178
		//Constant value
95ab3cf6   Menouar AZIB   Prise en compte d...
1179
1180
		switch ($axisNode->getName()) {
			case REQUESTOUTPUTPLOTTIMEAXIS_NAME:
26a23052   Benjamin Renard   Add Interval Tick...
1181
				date_default_timezone_set('UTC');
74fd500a   Hacene SI HADJ MOHAND   us #9874 ms zoo...
1182
				$time = CommonClass::strTimeToDDTime($constantData->{'constant-time-value'});
26a23052   Benjamin Renard   Add Interval Tick...
1183
1184
				$constantNode->setConstantValue($time);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1185
			default:
26a23052   Benjamin Renard   Add Interval Tick...
1186
1187
				$constantNode->setConstantValue($constantData->{'constant-float-value'});
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1188

26a23052   Benjamin Renard   Add Interval Tick...
1189
1190
1191
		//Curve options
		$this->unmarshallCurve($constantData, "constant-line", $constantNode);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1192

26a23052   Benjamin Renard   Add Interval Tick...
1193
1194
1195
1196
1197
1198
1199
	protected function unmarshallAdditionalObjects($panelData, $addObjectsNode, $isTimePlot)
	{
		foreach ($panelData->{'textObjs'} as $textData)
			$this->unmarshallTextObject($textData, $addObjectsNode, $isTimePlot);
		foreach ($panelData->{'curves'} as $curveData)
			$this->unmarshallCurveObject($curveData, $addObjectsNode);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1200

26a23052   Benjamin Renard   Add Interval Tick...
1201
1202
1203
	protected function unmarshallTextObject($textData, $addObjectsNode, $isTimePlot)
	{
		$textNode = $addObjectsNode->addTextObject();
95ab3cf6   Menouar AZIB   Prise en compte d...
1204

26a23052   Benjamin Renard   Add Interval Tick...
1205
		$textNode->setText($textData->{'text-value'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1206
1207
1208

		switch ($textData->{'text-y-axis'}) {
			case 'y-right':
26a23052   Benjamin Renard   Add Interval Tick...
1209
1210
				$textNode->setYAxis('y-right');
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1211
			case 'y-left':
26a23052   Benjamin Renard   Add Interval Tick...
1212
1213
1214
				$textNode->setYAxis('y-left');
				break;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1215
1216

		if ($isTimePlot && !$textData->{'text-x-relative'}) {
26a23052   Benjamin Renard   Add Interval Tick...
1217
			date_default_timezone_set('UTC');
74fd500a   Hacene SI HADJ MOHAND   us #9874 ms zoo...
1218
			$time = CommonClass::strTimeToDDTime($textData->{'text-x-timevalue'});
26a23052   Benjamin Renard   Add Interval Tick...
1219
			$textNode->setX($time);
95ab3cf6   Menouar AZIB   Prise en compte d...
1220
1221
		} else if ($textData->{'text-x-relative'})
			$textNode->setX(($textData->{'text-x-floatvalue'} * 100) . "%");
26a23052   Benjamin Renard   Add Interval Tick...
1222
1223
		else
			$textNode->setX($textData->{'text-x-floatvalue'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1224

26a23052   Benjamin Renard   Add Interval Tick...
1225
		if ($textData->{'text-y-relative'})
95ab3cf6   Menouar AZIB   Prise en compte d...
1226
			$textNode->setY(($textData->{'text-y-value'} * 100) . "%");
26a23052   Benjamin Renard   Add Interval Tick...
1227
1228
		else
			$textNode->setY($textData->{'text-y-value'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1229

26a23052   Benjamin Renard   Add Interval Tick...
1230
		$textNode->setAngle($textData->{'text-angle'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1231

26a23052   Benjamin Renard   Add Interval Tick...
1232
		$textNode->setColor($this->hexColor2KernelColor($textData->{'text-color'}));
95ab3cf6   Menouar AZIB   Prise en compte d...
1233
1234
1235

		switch ($textData->{'text-align'}) {
			case 'center':
26a23052   Benjamin Renard   Add Interval Tick...
1236
1237
				$textNode->setAlign(RequestOutputPlotTextAlign::CENTER);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1238
			case 'right':
26a23052   Benjamin Renard   Add Interval Tick...
1239
1240
				$textNode->setAlign(RequestOutputPlotTextAlign::RIGHT);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1241
			case 'left':
26a23052   Benjamin Renard   Add Interval Tick...
1242
1243
1244
			default:
				$textNode->setAlign(RequestOutputPlotTextAlign::LEFT);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1245

26a23052   Benjamin Renard   Add Interval Tick...
1246
1247
1248
1249
		//Font
		if ($textData->{'text-font-activated'})
			$this->unmarshallFont($textData, 'text-font', $textNode->getFont());
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1250

26a23052   Benjamin Renard   Add Interval Tick...
1251
1252
1253
1254
	protected function unmarshallCurveObject($curveData, $addObjectsNode)
	{
		if (($curveData->{'curve-name'} == '') || !isset($curveData->{'curve-serie-id'}))
			return;
95ab3cf6   Menouar AZIB   Prise en compte d...
1255

26a23052   Benjamin Renard   Add Interval Tick...
1256
		$curveNode = $addObjectsNode->addCurveObject();
95ab3cf6   Menouar AZIB   Prise en compte d...
1257

26a23052   Benjamin Renard   Add Interval Tick...
1258
		$curveNode->setSerieId($curveData->{'curve-serie-id'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1259

26a23052   Benjamin Renard   Add Interval Tick...
1260
		$curveNode->getFunction()->setFunctionName($curveData->{'curve-name'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1261

26a23052   Benjamin Renard   Add Interval Tick...
1262
1263
		foreach ($curveData->{'params'} as $paramData)
			$curveNode->getFunction()->addAttribute($paramData->{'curve-param-name'}, $paramData->{'curve-param-value'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1264

26a23052   Benjamin Renard   Add Interval Tick...
1265
1266
1267
		//Curve options
		$this->unmarshallCurve($curveData, "curve-line", $curveNode);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1268

26a23052   Benjamin Renard   Add Interval Tick...
1269
1270
	protected function unmarshallFills($panelData, $fillsNode)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1271
		foreach ($panelData->{'fills'} as $fillData) {
26a23052   Benjamin Renard   Add Interval Tick...
1272
			//Serie / Constant
95ab3cf6   Menouar AZIB   Prise en compte d...
1273
			if ($fillData->{'fill-type'} == 'serie-constant') {
26a23052   Benjamin Renard   Add Interval Tick...
1274
1275
1276
1277
1278
1279
1280
1281
1282
				$fillNode = $fillsNode->addFill(RequestOutputPlotFillTypeEnum::SERIECONSTANT);
				$fillNode->setSerieId($fillData->{'fill-firstserie-id'});
				$fillNode->setConstantId($fillData->{'fill-constant-id'});
				if ($fillData->{'fill-greater-color'} != 'none')
					$fillNode->setGreaterColor($this->hexColor2KernelColor($fillData->{'fill-greater-color'}));
				if ($fillData->{'fill-less-color'} != 'none')
					$fillNode->setLessColor($this->hexColor2KernelColor($fillData->{'fill-less-color'}));
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1283
1284

		foreach ($panelData->{'fills'} as $fillData) {
26a23052   Benjamin Renard   Add Interval Tick...
1285
			//Serie / Serie
95ab3cf6   Menouar AZIB   Prise en compte d...
1286
			if ($fillData->{'fill-type'} == 'serie-serie') {
26a23052   Benjamin Renard   Add Interval Tick...
1287
1288
1289
1290
1291
1292
1293
1294
				$fillNode = $fillsNode->addFill(RequestOutputPlotFillTypeEnum::SERIESERIE);
				$fillNode->setFirstSerieId($fillData->{'fill-firstserie-id'});
				$fillNode->setSecondSerieId($fillData->{'fill-secondserie-id'});
				if ($fillData->{'fill-greater-color'} != 'none')
					$fillNode->setGreaterColor($this->hexColor2KernelColor($fillData->{'fill-greater-color'}));
				if ($fillData->{'fill-less-color'} != 'none')
					$fillNode->setLessColor($this->hexColor2KernelColor($fillData->{'fill-less-color'}));
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
1295
		}
26a23052   Benjamin Renard   Add Interval Tick...
1296
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1297

26a23052   Benjamin Renard   Add Interval Tick...
1298
1299
	protected function unmarshallTitle($inputData, $keyPrefix, $titleNode)
	{
27317777   Menouar AZIB   J'ai ajouté la fo...
1300
1301
1302
1303
1304
1305
		if ($inputData->{$keyPrefix . '-text'} != '') {
			$titleNode->setText($inputData->{$keyPrefix . '-text'});
		}

		switch ($inputData->{$keyPrefix . '-position'}) {
			case 'top':
d62f9945   Benjamin Renard   Improve instant c...
1306
1307
				$titleNode->setPosition(RequestOutputPlotTitlePosition::TOP);
				break;
27317777   Menouar AZIB   J'ai ajouté la fo...
1308
			case 'bottom':
d62f9945   Benjamin Renard   Improve instant c...
1309
1310
1311
				$titleNode->setPosition(RequestOutputPlotTitlePosition::BOTTOM);
				break;
		}
27317777   Menouar AZIB   J'ai ajouté la fo...
1312
1313
1314

		switch ($inputData->{$keyPrefix . '-alignment'}) {
			case 'center':
d62f9945   Benjamin Renard   Improve instant c...
1315
1316
				$titleNode->setAlign(RequestOutputPlotTitleAlign::CENTER);
				break;
27317777   Menouar AZIB   J'ai ajouté la fo...
1317
			case 'left':
d62f9945   Benjamin Renard   Improve instant c...
1318
1319
				$titleNode->setAlign(RequestOutputPlotTitleAlign::LEFT);
				break;
27317777   Menouar AZIB   J'ai ajouté la fo...
1320
			case 'right':
d62f9945   Benjamin Renard   Improve instant c...
1321
1322
				$titleNode->setAlign(RequestOutputPlotTitleAlign::RIGHT);
				break;
26a23052   Benjamin Renard   Add Interval Tick...
1323
		}
27317777   Menouar AZIB   J'ai ajouté la fo...
1324
1325
1326

		if ($inputData->{$keyPrefix . '-color'} != '')
			$titleNode->setColor($this->hexColor2KernelColor($inputData->{$keyPrefix . '-color'}));
d62f9945   Benjamin Renard   Improve instant c...
1327
1328

		$this->unmarshallLabel($inputData, $keyPrefix, $titleNode);
26a23052   Benjamin Renard   Add Interval Tick...
1329
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1330

26a23052   Benjamin Renard   Add Interval Tick...
1331
1332
	protected function unmarshallLabel($inputData, $keyPrefix, $labelNode)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1333
1334
1335
1336
		if ($inputData->{$keyPrefix . '-font-activated'}) {
			$labelNode->setFontName($inputData->{$keyPrefix . '-font-name'});
			$labelNode->setFontSize($inputData->{$keyPrefix . '-font-size'});
			if ($inputData->{$keyPrefix . '-font-bold'}) {
20e36076   Benjamin Renard   Update interface ...
1337
				$labelNode->setFontWeight("bold");
26a23052   Benjamin Renard   Add Interval Tick...
1338
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
1339
1340
			if ($inputData->{$keyPrefix . '-font-italic'}) {
				$labelNode->setFontStyle("italic");
26a23052   Benjamin Renard   Add Interval Tick...
1341
			}
26a23052   Benjamin Renard   Add Interval Tick...
1342
		}
26a23052   Benjamin Renard   Add Interval Tick...
1343
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1344

26a23052   Benjamin Renard   Add Interval Tick...
1345
1346
	protected function unmarshallFont($inputData, $keyPrefix, $fontNode)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1347
1348
1349
1350
1351
		if ($inputData->{$keyPrefix . '-activated'}) {
			$fontNode->setFontName($inputData->{$keyPrefix . '-name'});
			$fontNode->setSize($inputData->{$keyPrefix . '-size'});

			if ($inputData->{$keyPrefix . '-italic'})
26a23052   Benjamin Renard   Add Interval Tick...
1352
1353
1354
				$fontNode->setStyle(RequestOutputPlotFontStyle::ITALIC);
			else
				$fontNode->setStyle(RequestOutputPlotFontStyle::UPRIGHT);
95ab3cf6   Menouar AZIB   Prise en compte d...
1355
1356

			if ($inputData->{$keyPrefix . '-bold'})
26a23052   Benjamin Renard   Add Interval Tick...
1357
1358
1359
1360
1361
				$fontNode->setWeight(RequestOutputPlotFontWeight::BOLD);
			else
				$fontNode->setWeight(RequestOutputPlotFontWeight::MEDIUM);
		}
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1362

26a23052   Benjamin Renard   Add Interval Tick...
1363
1364
	protected function unmarshallCurve($inputData, $keyPrefix, $curveNode)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1365
1366
1367
		switch ($inputData->{$keyPrefix . '-style'}) {

			case 'dot':
26a23052   Benjamin Renard   Add Interval Tick...
1368
1369
				$curveNode->setStyle(RequestOutputPlotCurveStyleEnum::DOT);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1370
			case 'long-spaced-dot':
26a23052   Benjamin Renard   Add Interval Tick...
1371
1372
				$curveNode->setStyle(RequestOutputPlotCurveStyleEnum::LONGSPACEDDOT);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1373
			case 'long-short-dot':
26a23052   Benjamin Renard   Add Interval Tick...
1374
1375
				$curveNode->setStyle(RequestOutputPlotCurveStyleEnum::LONGSHORTDOT);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1376
1377
			case 'plain':
			default:
02abc780   Benjamin Renard   Support request f...
1378
1379
				$curveNode->setStyle(RequestOutputPlotCurveStyleEnum::PLAIN);
				break;
26a23052   Benjamin Renard   Add Interval Tick...
1380
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1381
1382
1383
1384
1385
1386

		if (isset($inputData->{$keyPrefix . '-width'}))
			$curveNode->setWidth($inputData->{$keyPrefix . '-width'});

		if (isset($inputData->{$keyPrefix . '-color'}) && ($inputData->{$keyPrefix . '-color'} != 'auto'))
			$curveNode->setColor($this->hexColor2KernelColor($inputData->{$keyPrefix . '-color'}));
26a23052   Benjamin Renard   Add Interval Tick...
1387
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1388

26a23052   Benjamin Renard   Add Interval Tick...
1389
1390
1391
	protected function unmarshallLine($inputData, $keyPrefix, $lineNode, $lineType)
	{
		$lineNode->setType($lineType);
95ab3cf6   Menouar AZIB   Prise en compte d...
1392
		$this->unmarshallCurve($inputData, $keyPrefix . "-lines", $lineNode);
26a23052   Benjamin Renard   Add Interval Tick...
1393
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1394

26a23052   Benjamin Renard   Add Interval Tick...
1395
1396
	protected function unmarshallSymbol($inputData, $keyPrefix, $symbolNode)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1397
1398
		switch ($inputData->{$keyPrefix . '-type'}) {
			case 'dot':
26a23052   Benjamin Renard   Add Interval Tick...
1399
1400
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::DOT);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1401
			case 'plus':
26a23052   Benjamin Renard   Add Interval Tick...
1402
1403
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::PLUS);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1404
			case 'wildcard':
26a23052   Benjamin Renard   Add Interval Tick...
1405
1406
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::WILDCARD);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1407
			case 'circle':
26a23052   Benjamin Renard   Add Interval Tick...
1408
1409
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::CIRCLE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1410
			case 'crux':
26a23052   Benjamin Renard   Add Interval Tick...
1411
1412
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::CRUX);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1413
			case 'square':
26a23052   Benjamin Renard   Add Interval Tick...
1414
1415
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::SQUARE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1416
			case 'triangle':
26a23052   Benjamin Renard   Add Interval Tick...
1417
1418
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::TRIANGLE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1419
			case 'crux-in-circle':
26a23052   Benjamin Renard   Add Interval Tick...
1420
1421
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::CRUXINCIRCLE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1422
			case 'dot-in-circle':
26a23052   Benjamin Renard   Add Interval Tick...
1423
1424
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::DOTINCIRCLE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1425
			case 'diamond':
26a23052   Benjamin Renard   Add Interval Tick...
1426
1427
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::DIAMOND);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1428
			case 'star':
26a23052   Benjamin Renard   Add Interval Tick...
1429
1430
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::STAR);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1431
			case 'david-star':
26a23052   Benjamin Renard   Add Interval Tick...
1432
1433
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::DAVIDSTAR);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1434
			case 'full-square':
26a23052   Benjamin Renard   Add Interval Tick...
1435
1436
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::FULLSQUARE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1437
			case 'full-circle':
26a23052   Benjamin Renard   Add Interval Tick...
1438
1439
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::FULLCIRCLE);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1440
			case 'full-star':
26a23052   Benjamin Renard   Add Interval Tick...
1441
1442
				$symbolNode->setType(RequestOutputPlotSymbolTypeEnum::FULLSTAR);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1443
			default:
26a23052   Benjamin Renard   Add Interval Tick...
1444
1445
				throw new Exception('Symbol type not implemented.');
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1446
1447
1448
1449
1450

		$symbolNode->setSize($inputData->{$keyPrefix . '-size'});

		if ($inputData->{$keyPrefix . '-color'} != 'auto')
			$symbolNode->setColor($this->hexColor2KernelColor($inputData->{$keyPrefix . '-color'}));
26a23052   Benjamin Renard   Add Interval Tick...
1451
1452
1453
1454
1455
1456
1457
	}

	/*
	 * @brief method to marshall the result of a download request
	*/
	protected function marshallResult($data)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1458
		if (!$this->isInteractiveRequest) {
26a23052   Benjamin Renard   Add Interval Tick...
1459
			//add to job
95ab3cf6   Menouar AZIB   Prise en compte d...
1460
1461
			$commonRes = $this->commonMarshallResult($data, PLOT_RESULT_FILE_KEY);

26a23052   Benjamin Renard   Add Interval Tick...
1462
1463
			return $commonRes;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1464

26a23052   Benjamin Renard   Add Interval Tick...
1465
		//Interactive request
22521f1c   Benjamin Renard   First commit
1466
1467
		if (!$data->getSuccess())
			return array(
95ab3cf6   Menouar AZIB   Prise en compte d...
1468
1469
1470
1471
1472
1473
1474
				'success' => false,
				'message' => $data->getLastErrorMessage()
			);

		switch ($data->getStatus()) {
			case ProcessStatusEnumClass::DONE:

26a23052   Benjamin Renard   Add Interval Tick...
1475
				$result = array();
95ab3cf6   Menouar AZIB   Prise en compte d...
1476
1477
1478
				foreach ($data->getWaitingResults() as $key => $waitingResult) {
					$contextResult = str_replace(".png", "_context.xml", $waitingResult);

26a23052   Benjamin Renard   Add Interval Tick...
1479
1480
					$result[] = array(
						"id" => $key,
70e82c1f   Benjamin Renard   Fix doPlot
1481
						"title" => $this->interactivePlotTitle[$key],
05da1b4d   Benjamin Renard   Draw instant plot...
1482
						"preview" => $this->interactivePreview,
26a23052   Benjamin Renard   Add Interval Tick...
1483
						"isInterval" => $this->interactiveTimeSelectionState[$key],
70e82c1f   Benjamin Renard   Fix doPlot
1484
						"index" => $this->interactivePlotIndex[$key],
26a23052   Benjamin Renard   Add Interval Tick...
1485
						"ttFileIndex" => $this->interactiveCrtTTFileIndex,
95ab3cf6   Menouar AZIB   Prise en compte d...
1486
						"context" => IHMPlotContextFileClass::parse($this->getWorkingPath() . $contextResult),
ba82a624   Benjamin Renard   Get kernel execut...
1487
1488
						"plot" => $waitingResult,
						"exectime" => $data->getExecTime(),
ec574794   Benjamin Renard   Implements multip...
1489
						"multiplot" => $this->isMultiPlot,
26a23052   Benjamin Renard   Add Interval Tick...
1490
1491
					);
				}
95ab3cf6   Menouar AZIB   Prise en compte d...
1492

26a23052   Benjamin Renard   Add Interval Tick...
1493
1494
1495
1496
1497
1498
				return array(
					'success'     => true,
					'id'          => $data->getId(),
					'folder'      => $this->getWorkingDirName(),
					'result'      => $result
				);
95ab3cf6   Menouar AZIB   Prise en compte d...
1499
			case ProcessStatusEnumClass::KILLED:
26a23052   Benjamin Renard   Add Interval Tick...
1500
				return array(
95ab3cf6   Menouar AZIB   Prise en compte d...
1501
1502
1503
1504
					'success'     => true,
					'killed'      => true
				);
			default:
e4eba677   Benjamin Renard   Get error message...
1505
				$errorMsg = $data->getErrorMsg();
22521f1c   Benjamin Renard   First commit
1506
				return array(
95ab3cf6   Menouar AZIB   Prise en compte d...
1507
1508
1509
					'success' => false,
					'message'   => 'Request processing error' . (!empty($errorMsg) ? "<br>(" . $errorMsg . ")" : "")
				);
26a23052   Benjamin Renard   Add Interval Tick...
1510
1511
		}
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1512
1513
1514

	private function hexColor2KernelColor($hex)
	{
26a23052   Benjamin Renard   Add Interval Tick...
1515
1516
		$hex = str_replace("#", "", $hex);

95ab3cf6   Menouar AZIB   Prise en compte d...
1517
1518
1519
		$r = hexdec(substr($hex, 0, 2));
		$g = hexdec(substr($hex, 2, 2));
		$b = hexdec(substr($hex, 4, 2));
26a23052   Benjamin Renard   Add Interval Tick...
1520

95ab3cf6   Menouar AZIB   Prise en compte d...
1521
		return "[" . $r . "," . $g . "," . $b . "]";
26a23052   Benjamin Renard   Add Interval Tick...
1522
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1523

ec574794   Benjamin Renard   Implements multip...
1524
	protected function saveIHMRequest($interactiveId, $input)
26a23052   Benjamin Renard   Add Interval Tick...
1525
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1526
		$path = $this->getWorkingPath() . "ihm.request." . $interactiveId;
26a23052   Benjamin Renard   Add Interval Tick...
1527
		if (!is_dir($this->getWorkingPath()))
95ab3cf6   Menouar AZIB   Prise en compte d...
1528
			mkdir($this->getWorkingPath(), 0777);
22521f1c   Benjamin Renard   First commit
1529
1530
		$file = fopen($path, 'w');
		fwrite($file, json_encode($input));
26a23052   Benjamin Renard   Add Interval Tick...
1531
1532
		fclose($file);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1533

ec574794   Benjamin Renard   Implements multip...
1534
	protected function loadIHMRequest($interactiveId)
26a23052   Benjamin Renard   Add Interval Tick...
1535
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1536
		$path = $this->getWorkingPath() . "ihm.request." . $interactiveId;
22521f1c   Benjamin Renard   First commit
1537
		if (!file_exists($path))
26a23052   Benjamin Renard   Add Interval Tick...
1538
1539
1540
			return NULL;
		return json_decode(file_get_contents($path));
	}
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1541

95ab3cf6   Menouar AZIB   Prise en compte d...
1542

a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1543
1544
1545

	private function loadZoomList($interactiveId)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1546
		$path = $this->getWorkingPath() . "zoom.list." . $interactiveId;
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1547
1548
1549
1550
1551
1552
1553
		if (!file_exists($path))
			return NULL;
		return json_decode(file_get_contents($path));
	}

	private function saveZoomList($interactiveId, $zoomList)
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1554
		$path = $this->getWorkingPath() . "zoom.list." . $interactiveId;
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1555
		if (!is_dir($this->getWorkingPath()))
95ab3cf6   Menouar AZIB   Prise en compte d...
1556
			mkdir($this->getWorkingPath(), 0777);
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1557
1558
1559
1560
		$file = fopen($path, 'w');
		fwrite($file, json_encode($zoomList));
		fclose($file);
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1561

26a23052   Benjamin Renard   Add Interval Tick...
1562
1563
	private function unmarshallActionRequest($input)
	{
e8cefd97   Benjamin Renard   Interactive attac...
1564
		$actionInput    = $input->{'action'};
95ab3cf6   Menouar AZIB   Prise en compte d...
1565

4a7023e8   Benjamin Renard   Fix interactive n...
1566
		$plotInput = $this->loadIHMRequest($actionInput->{'interactiveId'});
95ab3cf6   Menouar AZIB   Prise en compte d...
1567

26a23052   Benjamin Renard   Add Interval Tick...
1568
		if (!isset($plotInput))
86756f46   Benjamin Renard   Remove multi plot...
1569
			throw new Exception('Cannot retrieve request input for interactive action.');
95ab3cf6   Menouar AZIB   Prise en compte d...
1570
1571
1572

		switch ($actionInput->{'action'}) {
			case 'zoom':
e8cefd97   Benjamin Renard   Interactive attac...
1573
				return $this->unmarshallZoom($actionInput, $plotInput);
95ab3cf6   Menouar AZIB   Prise en compte d...
1574
1575
			case 'forward':
			case 'halfforward':
2366956c   Erdogan Furkan   10312 - Navigatio...
1576
			case 'quarterforward':
95ab3cf6   Menouar AZIB   Prise en compte d...
1577
1578
			case 'backward':
			case 'halfbackward':
2366956c   Erdogan Furkan   10312 - Navigatio...
1579
			case 'quarterbackward':
95ab3cf6   Menouar AZIB   Prise en compte d...
1580
1581
			case 'extend':
			case 'shift':
e8cefd97   Benjamin Renard   Interactive attac...
1582
				return $this->unmarshallNavigation($actionInput, $plotInput);
95ab3cf6   Menouar AZIB   Prise en compte d...
1583
			case 'goto':
e8cefd97   Benjamin Renard   Interactive attac...
1584
				return $this->unmarshallTTGoto($actionInput, $plotInput);
95ab3cf6   Menouar AZIB   Prise en compte d...
1585
			case 'instant':
05da1b4d   Benjamin Renard   Draw instant plot...
1586
				return $this->unmarshallInstant($actionInput, $plotInput);
95ab3cf6   Menouar AZIB   Prise en compte d...
1587
			case 'undozoom':
d3c3608d   Benjamin Renard   Add undo zoom
1588
				return $this->unmarshallUndoZoom($actionInput, $plotInput);
ff8f5cff   Menouar AZIB   Une petite refact...
1589
			case RequestOutPutPlotElementPlotFunctionNodeClass::REQUESTOUTPUTPLOTELEMENT_PLOTFUNCTION_NAME:
27317777   Menouar AZIB   J'ai ajouté la fo...
1590
				return $this->unmarshallPlotFunction($actionInput, $plotInput);
95ab3cf6   Menouar AZIB   Prise en compte d...
1591
			default:
26a23052   Benjamin Renard   Add Interval Tick...
1592
1593
1594
				throw new Exception('Interactive action not implemented.');
		}
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1595

d3c3608d   Benjamin Renard   Add undo zoom
1596
1597
1598
1599
	private function addZoomInList($input, $isInterval, $minOrFileIndex, $maxOrIntervalIndex)
	{
		//if $isInterval == true, $minOrFileIndex is the min and $maxOrInetrvalIndex is the max
		//if $isInterval == false, $minOrFileIndex is the fileIndex and $maxOrInetrvalIndex is the intervalIndex
95ab3cf6   Menouar AZIB   Prise en compte d...
1600

a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1601
		$zoomList = $this->loadZoomList($input->interactiveId);
95ab3cf6   Menouar AZIB   Prise en compte d...
1602
1603

		if (!isset($zoomList)) {
d3c3608d   Benjamin Renard   Add undo zoom
1604
			//Init zoom list
95ab3cf6   Menouar AZIB   Prise en compte d...
1605
			$zoomList = (object)array(
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1606
				'times' => array(),
95ab3cf6   Menouar AZIB   Prise en compte d...
1607
				'panels' => (object)array()
d3c3608d   Benjamin Renard   Add undo zoom
1608
1609
			);
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1610
1611

		if ($input->{'axeId'} == 'timeAxis') {
d3c3608d   Benjamin Renard   Add undo zoom
1612
			if ($isInterval)
95ab3cf6   Menouar AZIB   Prise en compte d...
1613
				array_push($zoomList->times, (object)array(
d3c3608d   Benjamin Renard   Add undo zoom
1614
1615
1616
1617
1618
					'isInterval' => true,
					'min' => $minOrFileIndex,
					'max'  => $maxOrIntervalIndex
				));
			else
95ab3cf6   Menouar AZIB   Prise en compte d...
1619
1620
1621
1622
				array_push($zoomList->times, (object)array(
					'isInterval' => false,
					'ttFileIndex' => $minOrFileIndex,
					'intIndex'  => $maxOrIntervalIndex
d3c3608d   Benjamin Renard   Add undo zoom
1623
				));
95ab3cf6   Menouar AZIB   Prise en compte d...
1624
1625
1626
1627
		} else {
			if (!isset($zoomList->panels->{$input->{'panelId'}})) {
				$zoomList->panels->{$input->{'panelId'}} = (object) array(
					'axes' => (object)array()
d3c3608d   Benjamin Renard   Add undo zoom
1628
1629
				);
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
1630
1631

			if (!isset($zoomList->panels->{$input->{'panelId'}}->axes->{$input->{'axeId'}})) {
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1632
				$zoomList->panels->{$input->{'panelId'}}->axes->{$input->{'axeId'}} = array();
d3c3608d   Benjamin Renard   Add undo zoom
1633
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
1634
1635
1636
1637

			array_push($zoomList->panels->{$input->{'panelId'}}->axes->{$input->{'axeId'}}, (object)array(
				'min' => $minOrFileIndex,
				'max'  => $maxOrIntervalIndex
d3c3608d   Benjamin Renard   Add undo zoom
1638
1639
			));
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1640

a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1641
		$this->saveZoomList($input->interactiveId, $zoomList);
d3c3608d   Benjamin Renard   Add undo zoom
1642
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1643

a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1644
	private function resetZoomList($interactiveId, $resetOnlyTimeZoom = false)
d3c3608d   Benjamin Renard   Add undo zoom
1645
	{
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1646
		if (!$resetOnlyTimeZoom) {
95ab3cf6   Menouar AZIB   Prise en compte d...
1647
			$zoomList = (object)array(
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1648
				'times' => array(),
95ab3cf6   Menouar AZIB   Prise en compte d...
1649
				'panels' => (object)array()
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1650
			);
95ab3cf6   Menouar AZIB   Prise en compte d...
1651
		} else {
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1652
1653
1654
1655
1656
			$zoomList = $this->loadZoomList($interactiveId);
			$zoomList->times = array();
		}

		$this->saveZoomList($interactiveId, $zoomList);
d3c3608d   Benjamin Renard   Add undo zoom
1657
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1658

d3c3608d   Benjamin Renard   Add undo zoom
1659
1660
	private function undoZoomInList($input)
	{
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1661
		$zoomList = $this->loadZoomList($input->interactiveId);
95ab3cf6   Menouar AZIB   Prise en compte d...
1662

d3c3608d   Benjamin Renard   Add undo zoom
1663
		$result = NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1664
1665
		if ($zoomList) {
			if ($input->{'axeId'} == 'timeAxis') {
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1666
				if (count($zoomList->times) <= 0)
d3c3608d   Benjamin Renard   Add undo zoom
1667
					return NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1668
1669
				$result = array_pop($zoomList->times);
			} else {
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1670
				if (!isset($zoomList->panels->{$input->{'panelId'}}))
d3c3608d   Benjamin Renard   Add undo zoom
1671
					return NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1672

a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1673
				if (!isset($zoomList->panels->{$input->{'panelId'}}->axes->{$input->{'axeId'}}))
d3c3608d   Benjamin Renard   Add undo zoom
1674
					return NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1675

a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1676
				$result = array_pop($zoomList->panels->{$input->{'panelId'}}->axes->{$input->{'axeId'}});
d3c3608d   Benjamin Renard   Add undo zoom
1677
			}
95ab3cf6   Menouar AZIB   Prise en compte d...
1678
		} else
d3c3608d   Benjamin Renard   Add undo zoom
1679
			return NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1680

a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1681
		$this->saveZoomList($input->interactiveId, $zoomList);
95ab3cf6   Menouar AZIB   Prise en compte d...
1682

d3c3608d   Benjamin Renard   Add undo zoom
1683
1684
		return $result;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1685

d3c3608d   Benjamin Renard   Add undo zoom
1686
	private function unmarshallZoom($input, $plotInput, $isUndo = false)
26a23052   Benjamin Renard   Add Interval Tick...
1687
	{
95ab3cf6   Menouar AZIB   Prise en compte d...
1688
		if ($input->{'axeId'} == 'timeAxis') {
26a23052   Benjamin Renard   Add Interval Tick...
1689
			//Zoom on Time Axis
95ab3cf6   Menouar AZIB   Prise en compte d...
1690
			if ($plotInput->{'timesrc'} != 'Interval') {
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1691
				$plotInput->{'timesrc'} = 'Interval';
7d84634e   Benjamin Renard   Fix plot request ...
1692
				if (!$isUndo)
95ab3cf6   Menouar AZIB   Prise en compte d...
1693
1694
1695
1696
1697
1698
1699
					$this->addZoomInList(
						$input,
						false,
						isset($plotInput->{'ttFileIndex'}) ? $plotInput->{'ttFileIndex'} : 0,
						isset($plotInput->{'intIndex'}) ? $plotInput->{'intIndex'} : 0
					);
			} else {
7d84634e   Benjamin Renard   Fix plot request ...
1700
				if (!$isUndo)
95ab3cf6   Menouar AZIB   Prise en compte d...
1701
					$this->addZoomInList($input, true, $plotInput->{'startDate'}, $plotInput->{'stopDate'});
26a23052   Benjamin Renard   Add Interval Tick...
1702
			}
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1703
1704
			$plotInput->{'startDate'} = $input->{'min'};
			$plotInput->{'stopDate'} = $input->{'max'};
95ab3cf6   Menouar AZIB   Prise en compte d...
1705

d3c3608d   Benjamin Renard   Add undo zoom
1706
			$plotInput->{'force-time-zoom-reset'} = false;
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1707
			$this->saveIHMRequest($input->interactiveId, $plotInput);
26a23052   Benjamin Renard   Add Interval Tick...
1708
1709
			return $plotInput;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1710

26a23052   Benjamin Renard   Add Interval Tick...
1711
		//Digital axis zoom
95ab3cf6   Menouar AZIB   Prise en compte d...
1712
1713
1714
1715
		foreach ($plotInput->{'panels'} as $panel) {
			if ($input->{'panelId'} == $panel->{'id'}) {
				foreach ($panel->{'axes'} as $axis) {
					if ($input->{'axeId'} == $axis->{'id'}) {
26a23052   Benjamin Renard   Add Interval Tick...
1716
						$axis->{'axis-range-extend'} = false;
d3c3608d   Benjamin Renard   Add undo zoom
1717
1718
						$oldMin = $axis->{'axis-range-min'};
						$oldMax = $axis->{'axis-range-max'};
26a23052   Benjamin Renard   Add Interval Tick...
1719
1720
						$axis->{'axis-range-min'} = $input->{'min'};
						$axis->{'axis-range-max'} = $input->{'max'};
a9d86eaa   Benjamin Renard   Fix zoom / unzoom
1721
						$this->saveIHMRequest($input->interactiveId, $plotInput);
26a23052   Benjamin Renard   Add Interval Tick...
1722
1723
						//Do not save 'force-single-replot' in request file!
						$plotInput->{'force-single-replot'} = true;
d3c3608d   Benjamin Renard   Add undo zoom
1724
1725
						$plotInput->{'force-time-zoom-reset'} = false;
						if (!$isUndo)
95ab3cf6   Menouar AZIB   Prise en compte d...
1726
							$this->addZoomInList($input, true, $oldMin, $oldMax);
26a23052   Benjamin Renard   Add Interval Tick...
1727
1728
1729
1730
1731
1732
1733
1734
						return $plotInput;
					}
				}
				throw new Exception('Cannot retrieve axis for zoom action.');
			}
		}
		throw new Exception('Cannot retrieve plot panel for zoom action.');
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1735

d3c3608d   Benjamin Renard   Add undo zoom
1736
1737
1738
	private function unmarshallUndoZoom($input, $plotInput)
	{
		$result = $this->undoZoomInList($input);
95ab3cf6   Menouar AZIB   Prise en compte d...
1739
1740
1741
		if ($result != NULL) {
			if (isset($result->isInterval)) {
				if (!$result->isInterval) {
d3c3608d   Benjamin Renard   Add undo zoom
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
					$input->ttFileIndex = $result->ttFileIndex;
					$input->intIndex = $result->intIndex;
					return $this->unmarshallTTGoto($input, $plotInput);
				}
			}
			$input->min = $result->min;
			$input->max = $result->max;
			return $this->unmarshallZoom($input, $plotInput, true);
		}
		throw new Exception('No undo zoom to apply.');
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1753

26a23052   Benjamin Renard   Add Interval Tick...
1754
1755
	private function unmarshallNavigation($input, $plotInput)
	{
4a7023e8   Benjamin Renard   Fix interactive n...
1756
1757
		$startTime = $plotInput->{'startDate'};
		$stopTime = $plotInput->{'stopDate'};
95ab3cf6   Menouar AZIB   Prise en compte d...
1758

26a23052   Benjamin Renard   Add Interval Tick...
1759
1760
1761
1762
1763
		//Compute new start / stop time
		date_default_timezone_set('UTC');
		$startTimeStamp = strtotime($startTime);
		$stopTimeStamp  = strtotime($stopTime);
		$duration = $stopTimeStamp - $startTimeStamp;
95ab3cf6   Menouar AZIB   Prise en compte d...
1764
1765
1766

		switch ($input->{'action'}) {
			case 'forward':
26a23052   Benjamin Renard   Add Interval Tick...
1767
1768
1769
				$startTimeStamp += $duration;
				$stopTimeStamp  += $duration;
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1770
1771
1772
			case 'halfforward':
				$startTimeStamp += ($duration / 2);
				$stopTimeStamp  += ($duration / 2);
26a23052   Benjamin Renard   Add Interval Tick...
1773
				break;
2366956c   Erdogan Furkan   10312 - Navigatio...
1774
1775
1776
1777
			case 'quarterforward':
				$startTimeStamp += ($duration / 4);
				$stopTimeStamp  += ($duration / 4);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1778
			case 'backward':
26a23052   Benjamin Renard   Add Interval Tick...
1779
1780
1781
				$startTimeStamp -= $duration;
				$stopTimeStamp  -= $duration;
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1782
1783
1784
			case 'halfbackward':
				$startTimeStamp -= ($duration / 2);
				$stopTimeStamp  -= ($duration / 2);
26a23052   Benjamin Renard   Add Interval Tick...
1785
				break;
2366956c   Erdogan Furkan   10312 - Navigatio...
1786
1787
1788
1789
			case 'quarterbackward':
				$startTimeStamp -= ($duration / 4);
				$stopTimeStamp  -= ($duration / 4);
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1790
			case 'extend':
26a23052   Benjamin Renard   Add Interval Tick...
1791
1792
1793
				$startTimeStamp -= $input->{'duration'};
				$stopTimeStamp  += $input->{'duration'};
				break;
95ab3cf6   Menouar AZIB   Prise en compte d...
1794
			case 'shift':
26a23052   Benjamin Renard   Add Interval Tick...
1795
1796
1797
1798
				$startTimeStamp += $input->{'duration'};
				$stopTimeStamp  += $input->{'duration'};
				break;
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1799

26a23052   Benjamin Renard   Add Interval Tick...
1800
1801
		if ($stopTimeStamp - $startTimeStamp <= 0)
			throw new Exception('New duration is lower than 0.');
95ab3cf6   Menouar AZIB   Prise en compte d...
1802
1803
1804
1805

		$startTime = date("Y-m-d\TH:i:s", $startTimeStamp);
		$stopTime = date("Y-m-d\TH:i:s", $stopTimeStamp);

26a23052   Benjamin Renard   Add Interval Tick...
1806
		//Update request
4a7023e8   Benjamin Renard   Fix interactive n...
1807
1808
		$plotInput->{'startDate'} = $startTime;
		$plotInput->{'stopDate'} = $stopTime;
95ab3cf6   Menouar AZIB   Prise en compte d...
1809

d3c3608d   Benjamin Renard   Add undo zoom
1810
		$plotInput->{'force-time-zoom-reset'} = true;
4a7023e8   Benjamin Renard   Fix interactive n...
1811
		$this->saveIHMRequest($input->interactiveId, $plotInput);
26a23052   Benjamin Renard   Add Interval Tick...
1812
1813
		return $plotInput;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1814

26a23052   Benjamin Renard   Add Interval Tick...
1815
1816
	private function unmarshallTTGoto($input, $plotInput)
	{
419a700b   Benjamin Renard   Fix TT goto
1817
1818
1819
		$plotInput->{'timesrc'} = 'TimeTable';
		$plotInput->{'ttFileIndex'} = $input->{'ttFileIndex'};
		$plotInput->{'intIndex'} = $input->{'intIndex'};
95ab3cf6   Menouar AZIB   Prise en compte d...
1820

d3c3608d   Benjamin Renard   Add undo zoom
1821
		$plotInput->{'force-time-zoom-reset'} = true;
419a700b   Benjamin Renard   Fix TT goto
1822
		$this->saveIHMRequest($input->interactiveId, $plotInput);
e8cefd97   Benjamin Renard   Interactive attac...
1823
1824
		return $plotInput;
	}
95ab3cf6   Menouar AZIB   Prise en compte d...
1825

05da1b4d   Benjamin Renard   Draw instant plot...
1826
1827
	private function unmarshallInstant($input, $plotInput)
	{
05da1b4d   Benjamin Renard   Draw instant plot...
1828
1829
		//Find current panel
		$crtPanel = NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1830
1831
		foreach ($plotInput->{'panels'} as $panel) {
			if ($input->{'panelId'} == $panel->{'id'}) {
05da1b4d   Benjamin Renard   Draw instant plot...
1832
1833
1834
1835
				$crtPanel = $panel;
				break;
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1836

05da1b4d   Benjamin Renard   Draw instant plot...
1837
1838
		if (!$crtPanel)
			throw new Exception('Cannot retrieve plot panel for instant plot.');
95ab3cf6   Menouar AZIB   Prise en compte d...
1839

05da1b4d   Benjamin Renard   Draw instant plot...
1840
1841
		if ($crtPanel->{'panel-plot-type'} != 'timePlot')
			throw new Exception('Instant plot action only available for Time plot.');
95ab3cf6   Menouar AZIB   Prise en compte d...
1842

05da1b4d   Benjamin Renard   Draw instant plot...
1843
1844
		//Find spectra parameter
		$crtParam = NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1845
1846
1847
		foreach ($crtPanel->{'params'} as $param) {
			if ($param->{'param-drawing-type'} == 'spectro') {
				$crtParam = $param;
05da1b4d   Benjamin Renard   Draw instant plot...
1848
1849
1850
				break;
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1851

05da1b4d   Benjamin Renard   Draw instant plot...
1852
1853
		if (!$crtParam)
			throw new Exception('Cannot retrieve plot param for instant plot.');
95ab3cf6   Menouar AZIB   Prise en compte d...
1854

05da1b4d   Benjamin Renard   Draw instant plot...
1855
1856
		//Find table Y-axis
		$crtYAxis = NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1857
1858
		foreach ($crtPanel->{'axes'} as $axis) {
			if ($crtParam->{'param-drawing-object'}->{'spectro-yaxis'} == $axis->{'id'}) {
05da1b4d   Benjamin Renard   Draw instant plot...
1859
1860
1861
1862
				$crtYAxis = $axis;
				break;
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1863

05da1b4d   Benjamin Renard   Draw instant plot...
1864
1865
		if (!$crtYAxis)
			throw new Exception('Cannot retrieve plot y Axis for instant plot.');
95ab3cf6   Menouar AZIB   Prise en compte d...
1866

05da1b4d   Benjamin Renard   Draw instant plot...
1867
1868
		//Find color Z-axis
		$crtColorAxis = NULL;
95ab3cf6   Menouar AZIB   Prise en compte d...
1869
1870
		foreach ($crtPanel->{'axes'} as $axis) {
			if ($axis->{'id'} == 'color') {
05da1b4d   Benjamin Renard   Draw instant plot...
1871
1872
1873
1874
				$crtColorAxis = $axis;
				break;
			}
		}
95ab3cf6   Menouar AZIB   Prise en compte d...
1875

05da1b4d   Benjamin Renard   Draw instant plot...
1876
1877
		if (!$crtColorAxis)
			throw new Exception('Cannot retrieve plot color Axis for instant plot.');
95ab3cf6   Menouar AZIB   Prise en compte d...
1878

05da1b4d   Benjamin Renard   Draw instant plot...
1879
1880
		date_default_timezone_set('UTC');
		$timeStamp = strtotime($input->time);
95ab3cf6   Menouar AZIB   Prise en compte d...
1881
1882

		$instantPlotInput = (object)array(
05da1b4d   Benjamin Renard   Draw instant plot...
1883
1884
1885
1886
			"interactive-preview" => true,
			"file-format" => "PNG",
			"file-output" => "INTERACTIVE",
			"file-prefix" => "instant",
05da1b4d   Benjamin Renard   Draw instant plot...
1887
			"timesrc" => "Interval",
703f403f   Benjamin Renard   Fix some bugs wit...
1888
1889
			"startDate" => date("Y-m-d\TH:i:s", $timeStamp - 3600),
			"stopDate" => date("Y-m-d\TH:i:s", $timeStamp + 3600),
05da1b4d   Benjamin Renard   Draw instant plot...
1890
			"id" => 1,
c2d88cc5   Benjamin Renard   Fix instant plot
1891
1892
1893
1894
1895
			"page-margins-activated" => $plotInput->{"page-margins-activated"},
			"page-margin-x" => $plotInput->{"page-margin-x"},
			"page-margin-y" => $plotInput->{"page-margin-y"},
			"page-orientation" => $plotInput->{"page-orientation"},
			"page-dimension" => $plotInput->{"page-dimension"},
05da1b4d   Benjamin Renard   Draw instant plot...
1896
			"page-layout-type" => "vertical",
95ab3cf6   Menouar AZIB   Prise en compte d...
1897
			"page-layout-object" => (object)array(
05da1b4d   Benjamin Renard   Draw instant plot...
1898
				"layout-expand" => true,
95ab3cf6   Menouar AZIB   Prise en compte d...
1899
				"layout-panel-height" => 0.5,
05da1b4d   Benjamin Renard   Draw instant plot...
1900
1901
1902
1903
				"layout-panel-spacing" => 0.05
			),
			"panels" => array()
		);
27317777   Menouar AZIB   J'ai ajouté la fo...
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927

		$instantPanel = (object)array(
			"id" => "1",
			"panel-plot-type" => "instantPlot",
			"panel-instant-time" => $input->time,
			"panel-title-font-activated" => TRUE,
			"panel-title-font-size" => 12,
			"panel-title-font-bold" => TRUE,
			"axes" => array(),
			"params" => array(),

		);

		$instantXAxis = (object)array(
			"id"         => "xaxis_id",
			"axis-type"  => "x",
			"axis-scale" => $crtYAxis->{"axis-scale"},
			"axis-thickness" => 1,
			"axis-legend-font-activated" => TRUE,
			"axis-legend-font-size" => 12,
			"axis-legend-font-bold" => TRUE,
			"axis-range-min" => $crtYAxis->{"axis-range-min"},
			"axis-range-max" => $crtYAxis->{"axis-range-max"},
			"axis-reverse" => $crtYAxis->{"axis-reverse"},
05da1b4d   Benjamin Renard   Draw instant plot...
1928
		);
27317777   Menouar AZIB   J'ai ajouté la fo...
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940

		$instantYAxis = (object)array(
			"id"         => "y-left",
			"axis-type"  => "y-left",
			"axis-scale" => $crtColorAxis->{"axis-scale"},
			"axis-thickness" => 1,
			"axis-legend-font-activated" => TRUE,
			"axis-legend-font-size" => 12,
			"axis-legend-font-bold" => TRUE,
			"axis-range-min" => $crtColorAxis->{"axis-range-min"},
			"axis-range-max" => $crtColorAxis->{"axis-range-max"},
			"axis-reverse" => $crtColorAxis->{"axis-reverse"},
05da1b4d   Benjamin Renard   Draw instant plot...
1941
1942
1943
		);
		$instantPanel->{"axes"}[] = $instantXAxis;
		$instantPanel->{"axes"}[] = $instantYAxis;
95ab3cf6   Menouar AZIB   Prise en compte d...
1944
1945

		$instantParam = (object)array(
05da1b4d   Benjamin Renard   Draw instant plot...
1946
			"id" => 1,
e4545ed5   Benjamin Renard   Implement templat...
1947
			"paramid" => $crtParam->{'paramid'},
8d780912   Benjamin Renard   Keep template arg...
1948
			"template_args" => $crtParam->{'template_args'},
05da1b4d   Benjamin Renard   Draw instant plot...
1949
			"param-drawing-type" => "iserie",
27317777   Menouar AZIB   J'ai ajouté la fo...
1950
1951
1952
1953
1954
1955
			"param-drawing-object" => (object)array(
				"iserie-tableonx" => true,
				"iserie-lines-activated" => true,
				"iserie-lines-style" => "plain",
				"iserie-lines-width" => 3,
				"iserie-lines-color" => "#0000ff"
0a87e436   Hacene SI HADJ MOHAND   parameters resolue
1956
			),
95ab3cf6   Menouar AZIB   Prise en compte d...
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
			"dim1-index"     => $crtParam->{'dim1-index'},
			"dim1-sum-type"  => $crtParam->{'dim1-sum-type'},
			"dim1-min-value" => $crtParam->{'dim1-min-value'},
			"dim1-max-value" => $crtParam->{'dim1-max-value'},
			"dim1-min-index" => $crtParam->{'dim1-min-index'},
			"dim1-max-index" => $crtParam->{'dim1-max-index'},

			"dim2-index"     => $crtParam->{'dim2-index'},
			"dim2-sum-type"  => $crtParam->{'dim2-sum-type'},
			"dim2-min-value" => $crtParam->{'dim2-min-value'},
			"dim2-max-value" => $crtParam->{'dim2-max-value'},
			"dim2-min-index" => $crtParam->{'dim2-min-index'},
			"dim2-max-index" => $crtParam->{'dim2-max-index'},

			"type" => $crtParam->{'type'}
0a87e436   Hacene SI HADJ MOHAND   parameters resolue
1972

05da1b4d   Benjamin Renard   Draw instant plot...
1973
		);
95ab3cf6   Menouar AZIB   Prise en compte d...
1974
1975
		$instantPanel->{"params"}[] = $instantParam;

0a87e436   Hacene SI HADJ MOHAND   parameters resolue
1976

c2d88cc5   Benjamin Renard   Fix instant plot
1977
		$instantPlotInput->{"panels"}[] = $instantPanel;
95ab3cf6   Menouar AZIB   Prise en compte d...
1978
1979


05da1b4d   Benjamin Renard   Draw instant plot...
1980
1981
		return $instantPlotInput;
	}
27317777   Menouar AZIB   J'ai ajouté la fo...
1982
1983
1984

	private function unmarshallPlotFunction($input, $plotInput)
	{
27317777   Menouar AZIB   J'ai ajouté la fo...
1985
1986
		date_default_timezone_set('UTC');
		$timeStamp = strtotime($input->starttime);
703f403f   Benjamin Renard   Fix some bugs wit...
1987
		$DATE_TYPE = "Y-m-d\TH:i:s";
27317777   Menouar AZIB   J'ai ajouté la fo...
1988
1989
1990
		$start_time_plotfunction = date($DATE_TYPE, $timeStamp);
		$timestamp_stop_plotfunction  = strtotime($input->stoptime);
		$stop_time_plotfunction = date($DATE_TYPE, $timestamp_stop_plotfunction);
d22a300e   Menouar AZIB   It's Hard IHMInpu...
1991
1992
1993
1994
1995
1996
		$plotInput->{"startDate"} = $start_time_plotfunction;
		$plotInput->{"stopDate"} = $stop_time_plotfunction;
		$plotInput->{"file-prefix"}  = RequestOutPutPlotElementPlotFunctionNodeClass::REQUESTOUTPUTPLOTELEMENT_PLOTFUNCTION_NAME;
		$plotInput->{"interactive-preview"} = true;
		$plotInput->{"file-format"} = "PNG";
		$plotInput->{"file-output"} = "INTERACTIVE";
27317777   Menouar AZIB   J'ai ajouté la fo...
1997

d22a300e   Menouar AZIB   It's Hard IHMInpu...
1998
1999
2000
2001
		foreach ($plotInput->{'panels'} as $panel) {
			if ($input->{'panelId'} == $panel->{'id'}) {
				if ($panel->{'panel-plot-type'} !== 'timePlot')
					throw new Exception('Plot Function action only available for Time plot.');
ed439757   Menouar AZIB   change unmarshall...
2002

d22a300e   Menouar AZIB   It's Hard IHMInpu...
2003
2004
				$panel->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_ABSCISSE} = $input->abscisse;
				$panel->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_TYPE} = $input->type;
328140af   Benjamin Renard   Restore FFT
2005
2006
				$scale_abscisse = $input->scale_abscisse;
				$scale_ordonnee = $input->scale_ordonnee;
d22a300e   Menouar AZIB   It's Hard IHMInpu...
2007
				$panel->{'panel-plot-type'} = RequestOutPutPlotElementPlotFunctionNodeClass::REQUESTOUTPUTPLOTELEMENT_PLOTFUNCTION_NAME;
328140af   Benjamin Renard   Restore FFT
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070

				/**
				 * @var object $crtParam
				 */
				$crtParam = NULL;
				$isSpectro = false;
				//Find serie/spectra parameter
				foreach ($panel->{'params'} as $param) {
					if ($param->{'param-drawing-type'} == 'spectro') {
						$crtParam = $param;
						$isSpectro = true;
						break;
					}
					if ($param->{'param-drawing-type'} == 'serie') {
						$crtParam = $param;
						break;
					}
				}

				if ($isSpectro && RequestOutPutPlotElementPlotFunctionNodeClass::isFourier($input->type))
					throw new Exception('Cannot apply FFT/DFT on Spectro.');

				if (!$crtParam)
					throw new Exception('Cannot retrieve panel parameters for Plot function.');

				//Find X-axis
				$crtXAxis = NULL;
				foreach ($panel->{'axes'} as $axis) {
					if ("time" == $axis->{'id'}) {
						$crtXAxis = $axis;
						break;
					}
				}

				//Find Y-axis
				$crtYAxis = NULL;
				foreach ($panel->{'axes'} as $axis) {
					if ($crtParam->{'param-drawing-object'}->{'spectro-yaxis'} == $axis->{'id'}) {
						$crtYAxis = $axis;
						break;
					}

					if ($crtParam->{'param-drawing-object'}->{'serie-yaxis'} == $axis->{'id'}) {
						$crtYAxis = $axis;
						break;
					}
				}

				if (!$crtYAxis)
					throw new Exception('Cannot retrieve y Axis for Plot Function.');

				//Find color Z-axis
				$crtColorAxis = NULL;
				foreach ($panel->{'axes'} as $axis) {
					if ($axis->{'id'} == 'color') {
						$crtColorAxis = $axis;
						break;
					}
				}

				if ($isSpectro && !$crtColorAxis)
					throw new Exception('Cannot retrieve color Axis for Plot function.');

d22a300e   Menouar AZIB   It's Hard IHMInpu...
2071
				$panel->{"axes"} = [];
328140af   Benjamin Renard   Restore FFT
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
				/**
				 * @var object $plotFctXAxisDigital, digital x axis for plot function, used for spectro and Fourier
				 */
				$plotFctXAxisDigital = NULL;
				/**
				 * @var object $plotFctXAxisTime, this axis is used only for Series
				 */
				$plotFctXAxisTime = clone ($crtXAxis);
				$plotFctXAxisTime->{"id"} = RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_TIMEAXIS_ID;
				/**
				 * @var object $plotFctYAxis, y axis for plot fucntion
				 */
				$plotFctYAxis = clone ($crtYAxis);

				if ($isSpectro) {
					$plotFctXAxisDigital = clone ($crtYAxis);
					$plotFctXAxisDigital->{"id"} = RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_DIGITALAXIS_ID;
					$plotFctXAxisDigital->{"axis-type"} = "x";
					if (RequestOutPutPlotElementPlotFunctionNodeClass::isFourier($input->type))
						$plotFctXAxisDigital->{'axis-legend-text'} = RequestOutPutPlotElementPlotFunctionNodeClass::getTextLegend($input->abscisse);

					$plotFctYAxis = clone ($crtColorAxis);
					$plotFctYAxis->{"id"} = RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_YAXIS_ID;
					$plotFctYAxis->{"axis-type"} =  RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_YAXIS_ID;

					$panel->{"axes"}[] = $plotFctXAxisDigital;
					$panel->{"axes"}[] = $plotFctYAxis;
					$panel->{"axes"}[] = $plotFctXAxisTime;
				} else {
					$panel->{"axes"}[] = $plotFctXAxisTime;
					$panel->{"axes"}[] = $plotFctYAxis;
					if (RequestOutPutPlotElementPlotFunctionNodeClass::isFourier($input->type)) {
						$plotFctXAxisDigital = clone ($crtXAxis);
						$plotFctXAxisDigital->{"id"} = RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_DIGITALAXIS_ID;
						$plotFctXAxisDigital->{"axis-type"} = "x";
						$plotFctXAxisDigital->{'axis-legend-text'} = RequestOutPutPlotElementPlotFunctionNodeClass::getTextLegend($input->abscisse);
						$plotFctYAxis->{'axis-legend-text'} = "";
						$panel->{"axes"}[] = $plotFctXAxisDigital;
					}
				}

				/**
				 * In this block, I will update the axis scale depending on the user choice hosted in thess variables $scale_abscisse and scale_ordonnee. 
				 * If 'Inherites' is selected then the scale of axis of the current time plot are used.
				 */
				if ($scale_abscisse == RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_IHERITS)
					$scale_abscisse = $plotFctXAxisDigital->{"axis-scale"};
				else
					$plotFctXAxisDigital->{"axis-scale"} = $scale_abscisse;

				if ($scale_ordonnee == RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_IHERITS)
					$scale_ordonnee = $plotFctYAxis->{"axis-scale"};
				else
					$plotFctYAxis->{"axis-scale"} = $scale_ordonnee;

				$panel->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_SCALE_ABSCISSE} = $scale_abscisse;
				$panel->{RequestOutPutPlotElementPlotFunctionNodeClass::PLOT_FUNCTION_SCALE_ORDONNEE} = $scale_ordonnee;

d22a300e   Menouar AZIB   It's Hard IHMInpu...
2130
2131
2132
2133
				break;
			} else {
				throw new Exception('Cannot retrieve plot panel for Plot Function.');
			}
27317777   Menouar AZIB   J'ai ajouté la fo...
2134
2135
		}

d22a300e   Menouar AZIB   It's Hard IHMInpu...
2136
		return $plotInput;
27317777   Menouar AZIB   J'ai ajouté la fo...
2137
	}
26a23052   Benjamin Renard   Add Interval Tick...
2138
}