Blame view

src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php 24.2 KB
22521f1c   Benjamin Renard   First commit
1
2
3
4
5
6
7
8
9
10
11
<?php

/**
 * @class IHMParamManagerClass
 * @brief Parameter manager
 * @details
 */
class IHMParamManagerClass
{
	protected $userParameterLoader = null;
	protected $expressionParser = null;
bf27ba04   Benjamin Renard   Add templated par...
12
	protected $templateParamsManager = null;
ffc5cb81   Elena.Budnik   temporary commit
13
	protected $paramImpexMgr     = null;
52c1e291   Benjamin Renard   Generate TT and c...
14
	protected $ttCatMgr = null;
22521f1c   Benjamin Renard   First commit
15
16
17
18
19
20
	
	/*
	 * @brief Constructor
	*/
	function __construct()
	{
bf27ba04   Benjamin Renard   Add templated par...
21
		$this->templateParamsManager = new IHMParamTemplateClass();
22521f1c   Benjamin Renard   First commit
22
23
	}

cd28a380   Benjamin Renard   Generate param in...
24
25
26
27
28
29
30
31
32
33
34
35
	public function addGeneratedParam($paramId, $expression, $sampling, $paramsData)
	{
		if (!isset($this->expressionParser))
			$this->expressionParser = new IHMExpressionParserClass();
		$expressionInfo = $this->expressionParser->parse($expression);

                //create a process param for the derived parameter
                $this->addProcessParam($paramId, $expressionInfo["expression"], $expression,
                                $expressionInfo['params'], $sampling,
                                0, time(), "", "", $paramsData);
	}

22521f1c   Benjamin Renard   First commit
36
37
38
	/*
	 * @brief Add an existing parameter
	*/
52859c27   Benjamin Renard   Give the possibil...
39
	public function addExistingParam($param, $paramsData, $templateArgs = NULL, $tableLink = NULL)
d1a35428   Benjamin Renard   Update template a...
40
	{
22521f1c   Benjamin Renard   First commit
41
42
43
44
		if ($this->isDerivedParam($param))
			return $this->addDerivedParam($param,$paramsData);
		else if ($this->isUploadedParam($param))
			return $this->addUploadedParam($param,$paramsData);
ffc5cb81   Elena.Budnik   temporary commit
45
46
		else if ($this->isImpexParam($param))
			return $this->addImpexParam($param,$paramsData,$templateArgs);	
22521f1c   Benjamin Renard   First commit
47
		else
52859c27   Benjamin Renard   Give the possibil...
48
			return $this->addLocalParam($param,$paramsData,$templateArgs, $tableLink);
22521f1c   Benjamin Renard   First commit
49
50
51
52
53
54
		return "";
	}

	/*
	 * @brief Add a process parameter
	*/
c0535e83   Benjamin Renard   Use units and yTi...
55
56
57
	public function addProcessParam($paramId,$expression,$expression_info,$params,$sampling,$gap,$dateModif,$units,$ytitle,$paramsData)
	{
		$paramsData->addProcessParamToCreate($paramId, $expression, $expression_info, $params, $sampling, $gap,$dateModif, $units, $ytitle); 
ffc5cb81   Elena.Budnik   temporary commit
58
	 
e4545ed5   Benjamin Renard   Implement templat...
59
		foreach ($params as $param) {
ffc5cb81   Elena.Budnik   temporary commit
60
61
			$template_args = NULL; 
			 
e4545ed5   Benjamin Renard   Implement templat...
62
63
			if (array_key_exists("template_args", $param))
				$template_args = $param["template_args"];
ffc5cb81   Elena.Budnik   temporary commit
64
	 		 
e4545ed5   Benjamin Renard   Implement templat...
65
66
			$this->addExistingParam($param["paramid"],$paramsData,$template_args);
		}
22521f1c   Benjamin Renard   First commit
67
68
69
70
71

		return true;
	}

	/*
52c1e291   Benjamin Renard   Generate TT and c...
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
	 *  @brief Add a TT or catalog parameter
	 */
	public function addTTCatParam($paramId, $paramsData)
	{
		if (!isset($this->ttCatMgr)) {
			$this->ttCatMgr = new IHMTTCatLoaderClass();
		}
		$info = $this->ttCatMgr->getTTCatInfoFromId($paramId);

		if (!$info["success"]) {
			throw new Exception($info["message"]);
		}

		$status = array();
		$units = "";
		$ytitle = "";
		$flag = "";

		if ($info["info"]["isCatalog"]) {
			$parameters = $this->ttCatMgr->getCatalogParameters($paramId);
			if (!$parameters["success"] || empty($parameters["parameters"])) {
				throw new Exception("Error to extract first parameter of ".$paramId);
			}
			//For the moment, use the first parameter
			$parameter = $parameters["parameters"][0];
			$units     = $parameter["units"];
			$ytitle    = !empty($parameter["name"]) ? $parameter["name"] : $parameter["id"];
			$flag      = $parameter["id"];
			$description = $parameter["description"];
			$desc_parts = array();
			foreach (explode("-",$description) as $def) {
				$def = trim($def);
				$p = strpos($def, ":");
				if ($p === FALSE) {
					continue;
				}
				$val = substr($def, 0, $p);
				$val = trim($val);
				$name = substr($def, $p+1);
				$name = trim($name);
				$color = "";
				$p = strpos($name, "[");
				if ($p !== FALSE) {
					$color = substr($name, $p);
					$color = trim($color);
					$name = substr($name, 0, $p);
					$name = trim($name);
				}
				$status[] = array(
					"min" => floatval($val),
					"max" => floatval($val),
					"name" => $name,
					"color" => $color,
				);
			}
		}
		else {
			$status = array(
				array(
					"min" => 1,
					"max" => 1,
					"name" => "Inside",
					"color" => "[255,0,0]",
				)
			);
			$ytitle = $info["info"]["name"];
		}

		$paramsData->addTTCatParamToCreate($paramId, $info["info"]["path"], $info["info"]["isShared"], filemtime($info["info"]["path"]), $units, $ytitle, $status, $flag);
		return array("id" => $paramId, "indexes" => array(), "calib_infos" => array());
	} 

	/*
22521f1c   Benjamin Renard   First commit
145
146
147
148
149
150
151
152
153
154
	 * @brief Detect if it's a derived parameter
	*/
	private function isDerivedParam($param)
	{
		return preg_match("#^ws_#",$param);
	}

	/*
	 * @brief Detect if it's a uploaded parameter
	*/
dcdacd5c   Benjamin Renard   Fill plot type in...
155
	public function isUploadedParam($param)
22521f1c   Benjamin Renard   First commit
156
157
158
	{
		return preg_match("#^wsd_#",$param);
	}
ffc5cb81   Elena.Budnik   temporary commit
159
160
161
162
163
164
165
166
	
	/*
	 * @brief Detect if it's IMPEX parameter
	*/
	private function isImpexParam($param)
	{
		return preg_match("#^".IHMImpexParamClass::$paramPrefix."#",$param);
	}
22521f1c   Benjamin Renard   First commit
167
168
169
170

	/*
	 * @brief Add a local parameter
	*/
52859c27   Benjamin Renard   Give the possibil...
171
	private function addLocalParam($param, $paramsData, $templateArgs, $tableLink)
22521f1c   Benjamin Renard   First commit
172
173
174
175
176
177
178
179
180
181
182
183
184
185
	{
		//local parameter
		$indexes     = array();
		$calib_infos = array();
		//check for components
		$pattern = "/(?P<param>.*)\((?P<components>.*)\)/";
		preg_match_all($pattern, $param, $matches);
		if ((count($matches["param"]) > 0) && (count($matches["components"]) > 0))
		{
			$paramId       = $matches["param"][0];
			$indexes = explode(",",$matches["components"][0]);
		}
		else
			$paramId = $param;
ffc5cb81   Elena.Budnik   temporary commit
186
	 
bf27ba04   Benjamin Renard   Add templated par...
187
188
		//check templated parameter
		$real_param_id = $paramId;
0dd42438   Benjamin Renard   WS getDataset wit...
189
		$paramPath = "";
bf27ba04   Benjamin Renard   Add templated par...
190
		if ($this->templateParamsManager->isTemplatedParam($paramId)) {
52859c27   Benjamin Renard   Give the possibil...
191
			$paramPath = $this->templateParamsManager->generateTemplatedParamFile($paramId, $templateArgs, $tableLink);
bf27ba04   Benjamin Renard   Add templated par...
192
			$real_param_id = $this->templateParamsManager->getTemplatedParamId($paramId, $templateArgs);
bf27ba04   Benjamin Renard   Add templated par...
193
194
195
196
197
198
199
200
			if (empty($paramPath) || !file_exists($paramPath))
				throw new Exception('Cannot generate parameter template file '.$paramId);
		}
		else {
			$paramPath = IHMConfigClass::getLocalParamDBPath().$paramId.".xml";
			if (!file_exists($paramPath))
				throw new Exception('Cannot find parameter local file '.$paramId);
		}
22521f1c   Benjamin Renard   First commit
201

bf27ba04   Benjamin Renard   Add templated par...
202
		$paramsData->addParamToCopy($real_param_id,$paramPath);
22521f1c   Benjamin Renard   First commit
203

bf27ba04   Benjamin Renard   Add templated par...
204
		$this->addLinkedLocalParams($paramId, $paramsData, $templateArgs);
22521f1c   Benjamin Renard   First commit
205
			
0dd42438   Benjamin Renard   WS getDataset wit...
206
		return array("id" => $real_param_id, "indexes" => $indexes, "calib_infos" => $calib_infos, "path" => $paramPath);
22521f1c   Benjamin Renard   First commit
207
208
209
210
211
	}

	/*
	 * @brief Add linked parameter
	*/
bf27ba04   Benjamin Renard   Add templated par...
212
	private function addLinkedLocalParams($paramId,$paramsData,$templateArgs = NULL)
22521f1c   Benjamin Renard   First commit
213
	{
952dd7c7   elena   catalog integration
214
215
		$doc = new DOMDocument("1.0", "UTF-8");
		$doc->preserveWhiteSpace = false;
22521f1c   Benjamin Renard   First commit
216
217
		$doc->formatOutput = true;

cd3326be   Benjamin Renard   Fix function used...
218
		$real_param_id = $paramId;
bf27ba04   Benjamin Renard   Add templated par...
219
		if ($this->templateParamsManager->isTemplatedParam($paramId)) {
cd3326be   Benjamin Renard   Fix function used...
220
			$paramPath = $this->templateParamsManager->getTemplatePath($paramId);
8ade06fe   Benjamin Renard   Improve config load
221
			if (empty($paramPath) || !@$doc->load($paramPath))
f1252b32   Benjamin Renard   Add template for ...
222
				throw new Exception('Cannot find parameter template file '.$paramId);
bf27ba04   Benjamin Renard   Add templated par...
223
224
225
		}
		else {
			$paramPath = IHMConfigClass::getLocalParamDBPath().$paramId.".xml";
8ade06fe   Benjamin Renard   Improve config load
226
			if (empty($paramPath) || !@$doc->load($paramPath))
f1252b32   Benjamin Renard   Add template for ...
227
				throw new Exception('Cannot find parameter local file '.$paramId);
bf27ba04   Benjamin Renard   Add templated par...
228
229
		}
			
22521f1c   Benjamin Renard   First commit
230
231
232
233
234
235
236
237
238
239
240
241
242
243
		//<get>
		$getNodes = $doc->getElementsByTagName('get');

		if ($getNodes->length <= 0)
			throw new Exception('Parameter local file '.$paramId.' dont have a getter node');

		$getNode = $getNodes->item(0);

		//<amdaParam name="imf"/>
		$amdaParamNodes = $doc->getElementsByTagName('amdaParam');

		foreach($amdaParamNodes as $amdaParamNode)
		{
			$linkedParamId = $amdaParamNode->getAttribute('name');
cd3326be   Benjamin Renard   Fix function used...
244
			if (empty($linkedParamId))
22521f1c   Benjamin Renard   First commit
245
				continue;
7911f4bc   Benjamin Renard   Another bug with ...
246
			$template_id = $this->templateParamsManager->getTemplateId($linkedParamId);
d1a35428   Benjamin Renard   Update template a...
247
			$tempArgs = isset($templateArgs) ? $templateArgs : array();
7911f4bc   Benjamin Renard   Another bug with ...
248
249
250
			if ($template_id !== FALSE) {
				$linkedParamId = $template_id;
			}
7d35612a   Benjamin Renard   Fix ParamManager ...
251
252
			else {
				$linkedParamId = $this->templateParamsManager->replaceArgs($linkedParamId, $templateArgs);
97d1c981   Benjamin Renard   Fix bug with a te...
253
254
255
				$parsedParam = $this->templateParamsManager->parseTemplatedParam($linkedParamId);
				if ($parsedParam !== FALSE) {
					$linkedParamId = $parsedParam['paramid'];
d1a35428   Benjamin Renard   Update template a...
256
257
258
					foreach ($parsedParam['template_args'] as $key => $val) {
						$tempArgs[$key] = $val;
					}
97d1c981   Benjamin Renard   Fix bug with a te...
259
				}
7d35612a   Benjamin Renard   Fix ParamManager ...
260
			}
7911f4bc   Benjamin Renard   Another bug with ...
261
262

			if ($this->templateParamsManager->isTemplatedParam($linkedParamId)) {
d1a35428   Benjamin Renard   Update template a...
263
264
				$linkedParamPath = $this->templateParamsManager->generateTemplatedParamFile($linkedParamId, $tempArgs);
				$real_linked_param_id = $this->templateParamsManager->getTemplatedParamId($linkedParamId, $tempArgs);
cd3326be   Benjamin Renard   Fix function used...
265
266
			}
			else {
7911f4bc   Benjamin Renard   Another bug with ...
267
268
				$real_linked_param_id = $linkedParamId;
				$linkedParamPath = IHMConfigClass::getLocalParamDBPath().$real_linked_param_id.".xml";
bf27ba04   Benjamin Renard   Add templated par...
269
			}
7911f4bc   Benjamin Renard   Another bug with ...
270
271
			$paramsData->addParamToCopy($real_linked_param_id,$linkedParamPath);
			$this->addLinkedLocalParams($linkedParamId, $paramsData);
22521f1c   Benjamin Renard   First commit
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
		}
	}

	/*
	 * @brief Add derived parameter
	*/
	private function addDerivedParam($param,$paramsData)
	{
		if (!isset($this->userParameterLoader))
			$this->userParameterLoader = new IHMUserParamLoaderClass();
		
		//get derived parameter info
		$res = $this->userParameterLoader->getDerivedParameterFromName($param);
		
		if (!$res["success"])
			throw new Exception('Error to load derived parameter file : '.$res["message"]);

		//parse expression
		if (!isset($this->expressionParser))
952dd7c7   elena   catalog integration
291
			$this->expressionParser = new IHMExpressionParserClass();
22521f1c   Benjamin Renard   First commit
292
293
		$expressionInfo = $this->expressionParser->parse($res["param"]["expression"]);
		
952dd7c7   elena   catalog integration
294
295
296
		$paramId = $param;
		
		//create a process param for the derived parameter
e9165342   Benjamin Renard   Write data mining...
297
		$this->addProcessParam($paramId, $expressionInfo["expression"], $res["param"]["expression"],
952dd7c7   elena   catalog integration
298
				$expressionInfo['params'], $res["param"]["timestep"],
c0535e83   Benjamin Renard   Use units and yTi...
299
300
				0,$res["param"]["dateModif"],!empty($res["param"]["info"]["units"]) ? $res["param"]["info"]["units"] : "",
				!empty($res["param"]["info"]["yTitle"]) ? $res["param"]["info"]["yTitle"] : "", $paramsData);
22521f1c   Benjamin Renard   First commit
301
302
303
		
		return array("id" => $paramId, "indexes" => array(), "calib_infos" => array());
	}
d1a35428   Benjamin Renard   Update template a...
304

ffc5cb81   Elena.Budnik   temporary commit
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
	/*
	 * @brief Add IMPEX parameter : create dynamically xml parameter descriptor in user WS
	*/
	private function addImpexParam($param,$paramsData,$templateArgs = NULL)	
	{		 	
		if (!isset($this->paramImpexMgr))
			$this->paramImpexMgr = new ImpexParamManager();
			
		$parameterID = $this->paramImpexMgr->getImpexFullParamId($param, $templateArgs);
		
		$requestNodes = $paramsData->getRequestNodes();
		 
		// it is PARAMSGEN 
		if (!$requestNodes) {
			return array("id" => $parameterID); 
		}
	 
		$timesNode = $requestNodes[0]->getTimesNode();
		$intervals = $timesNode->getIntervals();
		$originFile = IHMConfigClass::getUserWSPath().$parameterID.".xml";
	  
		if (!file_exists($originFile)) {
			// create IMPEX parameter info and data				
			$res = $this->paramImpexMgr->createImpexParameter($param, $intervals, $templateArgs);
			
			if (!$res["success"])
				throw new Exception('Error to create IMPEX parameter : '.$res["message"]);
				
			$newParamNode = $paramsData->addLocalParamToCreate($res["param"]["id"], 
				$res["param"]["info"]["viId"], $res["param"]["info"]["realVar"],
				$res["param"]["info"]["minSampling"], $res["param"]["info"]["maxSampling"],
				$res["param"]["info"]["type"],$res["param"]["info"]["size"],
e99d9ed4   Benjamin Renard   Support fillValue...
337
				NULL,$res["param"]["dateModif"],true);
ffc5cb81   Elena.Budnik   temporary commit
338
				
577d5c04   Elena.Budnik   IMPEX integration
339
340
341
342
				$newParamNode->getInfo()->setName($res["param"]["info"]['name']);
				$newParamNode->getInfo()->setShortName($res["param"]["info"]['name']);
				$newParamNode->getInfo()->setUnits($res["param"]["info"]['units']);
				
ffc5cb81   Elena.Budnik   temporary commit
343
344
345
				$tableDef = $res["param"]["info"]["tableDef"];
				if (isset($tableDef) && array_key_exists('tableDefType', $tableDef) && ($tableDef['tableDefType'] != 'NONE'))
				{
577d5c04   Elena.Budnik   IMPEX integration
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
					switch ($tableDef['channelsDefType'])
					{
						case 'BOUND'  :
							$boundTable = $newParamNode->getInfo()->addTable(InfoParamTableTypeEnum::BOUNDS, $res["param"]["info"]["yTitle"]);
							$boundTable->setUnits($res["param"]["info"]["yUnits"]);
							switch ($tableDef['tableDefType'])
							{
								case 'SELECT' :
									$boundTable->setBoundsName($tableDef['data']['bound']);
									$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['bound']);
									break;
								default :
									throw new Exception("Unknown tableDefType ".$tableDef['tableDefType']);
							}
							break;
						case 'CENTER' :
							$centerTable = $newParamNode->getInfo()->addTable(InfoParamTableTypeEnum::CENTER, $res["param"]["info"]["yTitle"]);
							$centerTable->setUnits($res["param"]["info"]["yUnits"]);
							$centerTable->setSize($tableDef['data']['width']);
							switch ($tableDef['tableDefType'])
							{
								case 'SELECT' :
									$centerTable->setCenterName($tableDef['data']['center']);
									$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['center']);
									break;
								default :
									throw new Exception("Unknown tableDefType ".$tableDef['tableDefType']);
							}
						break;
						default :
							throw new Exception("Unknown tableDefType ".$tableDef['channelsDefType']);
					}
ffc5cb81   Elena.Budnik   temporary commit
378
379
380
381
382
383
384
385
386
387
388
389
390
				}
				
				return array("id" => $res["param"]["id"], "plotType" => $res["param"]["info"]["plotType"]);
			}
		else {		     
			 // add IMPEX parameter data
			 $this->paramImpexMgr->addImpexData($param, $intervals, $templateArgs);			 
			 $paramsData->addParamToCopy($parameterID, $originFile);
			 
			 return array("id" => $parameterID);
		} 
	}
	
22521f1c   Benjamin Renard   First commit
391
392
393
394
395
	/*
	 * @brief Add uploaded parameter
	*/
	private function addUploadedParam($param,$paramsData)
	{
944199fe   Benjamin Renard   Use table definit...
396
397
398
399
400
401
402
403
		if (!isset($this->userParameterLoader))
			$this->userParameterLoader = new IHMUserParamLoaderClass();
		
		//get uploaded parameter info
		$res = $this->userParameterLoader->getUploadedParameterFromName($param);
		
		if (!$res["success"])
			throw new Exception('Error to load uploaded parameter file : '.$res["message"]);
67c43328   Benjamin Renard   Fix uploaded para...
404
405

		$paramId = $param;
944199fe   Benjamin Renard   Use table definit...
406
		
67c43328   Benjamin Renard   Fix uploaded para...
407
		$newParamNode = $paramsData->addLocalParamToCreate($paramId, 
944199fe   Benjamin Renard   Use table definit...
408
409
				$res["param"]["info"]["viId"], $res["param"]["info"]["realVar"],
				$res["param"]["info"]["minSampling"], $res["param"]["info"]["maxSampling"],
e8ff4ba7   Elena.Budnik   integration of as...
410
				$res["param"]["info"]["type"],$res["param"]["info"]["size"],
e99d9ed4   Benjamin Renard   Support fillValue...
411
				$res["param"]["info"]["fillValue"],$res["param"]["dateModif"]);
e8ff4ba7   Elena.Budnik   integration of as...
412

8289ec06   Benjamin Renard   Y-Title and Units...
413
414
415
416
417
418
419
420
		if (!empty($res["param"]["info"]["yTitle"])) {
			$newParamNode->getInfo()->setName($res["param"]["info"]['yTitle']);
			$newParamNode->getInfo()->setShortName($res["param"]["info"]['yTitle']);
		}
		if (!empty($res["param"]["info"]['units'])) {
			$newParamNode->getInfo()->setUnits($res["param"]["info"]['units']);
		}

944199fe   Benjamin Renard   Use table definit...
421
422
423
424
		
		$tableDef = $res["param"]["info"]["tableDef"];
		if (isset($tableDef) && array_key_exists('tableDefType', $tableDef) && ($tableDef['tableDefType'] != 'NONE'))
		{
df380a21   Benjamin Renard   Fix table name de...
425
426
			$tableName = empty($tableDef['tableName']) ? 'Table' : $tableDef['tableName'];
			$tableUnits = empty($tableDef['tableUnits']) ? '' : $tableDef['tableUnits'];
944199fe   Benjamin Renard   Use table definit...
427
428
429
			switch ($tableDef['channelsDefType'])
			{
				case 'MINMAX' :
df380a21   Benjamin Renard   Fix table name de...
430
431
					$minMaxTable = $newParamNode->getInfo()->addTable(InfoParamTableTypeEnum::MINMAX, $tableName);
					$minMaxTable->setUnits($tableUnits);
944199fe   Benjamin Renard   Use table definit...
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
					switch ($tableDef['tableDefType'])
					{
						case 'SELECT' :
							$minMaxTable->setMinName($tableDef['data']['min']);
							$minMaxTable->setMaxName($tableDef['data']['max']);
							$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['min']);
							$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['max']);
							break;
						case 'MANUAL' :
							$minMaxTable->setMinName('min');
							$minMaxTable->setMaxName('max');
							$clbMinNode = $newParamNode->addClbManual('min');
							$clbMinValues = explode(',', $tableDef['data']['min']);
							foreach ($clbMinValues as $value)
								$clbMinNode->addClbValue($value);
							$clbMaxNode = $newParamNode->addClbManual('max');
							$clbMaxValues = explode(',', $tableDef['data']['max']);
							foreach ($clbMaxValues as $value)
								$clbMaxNode->addClbValue($value);
						break;
					}
					break;
				case 'BOUND'  :
df380a21   Benjamin Renard   Fix table name de...
455
456
					$boundTable = $newParamNode->getInfo()->addTable(InfoParamTableTypeEnum::BOUNDS, $tableName);
					$boundTable->setUnits($tableUnits);
944199fe   Benjamin Renard   Use table definit...
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
					switch ($tableDef['tableDefType'])
					{
						case 'SELECT' :
							$boundTable->setBoundsName($tableDef['data']['bound']);
							$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['bound']);
							break;
						case 'MANUAL' :
							$boundTable->setBoundsName('bound');
							$clbBoundNode = $newParamNode->addClbManual('bound');
							$clbBoundValues = explode(',', $tableDef['data']['bound']);
							foreach ($clbBoundValues as $value)
								$clbBoundNode->addClbValue($value);
							break;
					}
					break;
				case 'CENTER' :
df380a21   Benjamin Renard   Fix table name de...
473
474
					$centerTable = $newParamNode->getInfo()->addTable(InfoParamTableTypeEnum::CENTER, $tableName);
					$centerTable->setUnits($tableUnits);
944199fe   Benjamin Renard   Use table definit...
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
					$centerTable->setSize($tableDef['data']['width']);
					switch ($tableDef['tableDefType'])
					{
						case 'SELECT' :
							$centerTable->setCenterName($tableDef['data']['center']);
							$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['center']);
							break;
						case 'MANUAL' :
							$centerTable->setCenterName('center');
							$clbCenterNode = $newParamNode->addClbManual('center');
							$clbCenterValues = explode(',', $tableDef['data']['center']);
							foreach ($clbCenterValues as $value)
								$clbCenterNode->addClbValue($value);
							break;
					}
					break;
				case 'CENTERWIDTH' :
df380a21   Benjamin Renard   Fix table name de...
492
493
					$centerWidthTable = $newParamNode->getInfo()->addTable(InfoParamTableTypeEnum::CENTERWIDTH, $tableName);
					$centerWidthTable->setUnits($tableUnits);
944199fe   Benjamin Renard   Use table definit...
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
					switch ($tableDef['tableDefType'])
					{
						case 'SELECT' :
							$centerWidthTable->setCenterName($tableDef['data']['center']);
							$centerWidthTable->setWidthName($tableDef['data']['width']);
							$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['center']);
							$newParamNode->getParamGet()->getLocalParam($res["param"]["info"]["realVar"])->addCalibInfo($tableDef['data']['width']);
							break;
						case 'MANUAL' :
							$centerWidthTable->setCenterName('center');
							$centerWidthTable->setWidthName('width');
							$clbCenterNode = $newParamNode->addClbManual('center');
							$clbWidthNode = $newParamNode->addClbManual('width');
							$clbCenterValues = explode(',', $tableDef['data']['center']);
							foreach ($clbCenterValues as $value)
								$clbCenterNode->addClbValue($value);
							$clbWidthValues = explode(',', $tableDef['data']['width']);
							foreach ($clbWidthValues as $value)
								$clbWidthNode->addClbValue($value);
							break;
					}
					break;
			}
		}
		
058b366f   Benjamin Renard   Fix typo
519
		return array("id" => $paramId, "plotType" => $res["param"]["info"]["plotType"]);
22521f1c   Benjamin Renard   First commit
520
	}
93c50989   Benjamin Renard   Support Tab2D par...
521
522

	public function applyRangesAndIndexes($paramsData, $paramData, $force_total_2d, &$paramInfo) {
db7ea505   Benjamin Renard   Fix min max range...
523
524
525
526
527
		$dim1_min = 0;
		$dim1_max = 0;
		$dim2_min = 0;
		$dim2_max = 0;

76792c0e   Benjamin Renard   Sum parameters un...
528
		$dim1_is_range = (isset($paramData->{'dim1-sum-type'}) && ($paramData->{'dim1-sum-type'} > 0));
2c9760b6   Benjamin Renard   Fix empty index d...
529
		$dim1_index = ($dim1_is_range || !isset($paramData->{'dim1-index'}) || ($paramData->{'dim1-index'} == '')) ? '*' : $paramData->{'dim1-index'};
db7ea505   Benjamin Renard   Fix min max range...
530
531
532
533
534
535
536
537
538
539
540
541
542
543
		if ($dim1_is_range) {
			switch ($paramData->{'dim1-sum-type'}) {
				case 1:
					//Sum between a range of value
					$dim1_min = !empty($paramData->{'dim1-min-value'}) ? $paramData->{'dim1-min-value'} : 0;
					$dim1_max = !empty($paramData->{'dim1-max-value'}) ? $paramData->{'dim1-max-value'} : 0;
					break;
				case 2:
					//Sum between indexes
					$dim1_min = !empty($paramData->{'dim1-min-index'}) ? $paramData->{'dim1-min-index'} : 0;
					$dim1_max = !empty($paramData->{'dim1-max-index'}) ? $paramData->{'dim1-max-index'} : 0;
					break;
			}
		}
93c50989   Benjamin Renard   Support Tab2D par...
544

76792c0e   Benjamin Renard   Sum parameters un...
545
		$dim2_is_range = (isset($paramData->{'dim2-sum-type'}) && ($paramData->{'dim2-sum-type'} > 0));
2c9760b6   Benjamin Renard   Fix empty index d...
546
		$dim2_index = ($dim2_is_range || !isset($paramData->{'dim2-index'}) || ($paramData->{'dim2-index'} == '')) ? '*' : $paramData->{'dim2-index'};
db7ea505   Benjamin Renard   Fix min max range...
547
548
549
550
551
552
553
554
555
556
557
558
559
560
		if ($dim2_is_range) {
			switch ($paramData->{'dim2-sum-type'}) {
				case 1:
					//Sum between a range of value
					$dim2_min = !empty($paramData->{'dim2-min-value'}) ? $paramData->{'dim2-min-value'} : 0;
					$dim2_max = !empty($paramData->{'dim2-max-value'}) ? $paramData->{'dim2-max-value'} : 0;
					break;
				case 2:
					//Sum between indexes
					$dim2_min = !empty($paramData->{'dim2-min-index'}) ? $paramData->{'dim2-min-index'} : 0;
					$dim2_max = !empty($paramData->{'dim2-max-index'}) ? $paramData->{'dim2-max-index'} : 0;
					break;
			}
		}
93c50989   Benjamin Renard   Support Tab2D par...
561
562
563
564
565
566
567
568
569
570
571
572
573
574

		switch ($paramData->{'type'}) {
			case 0:
				//scalar - nothing to do
				break;
			case 1:
				//Tab1D
				if ($dim1_is_range) {
					$template_args = array(
						'paramid' => $paramInfo['id'],
						'min' => $dim1_min,
						'max' => $dim1_max,
						'relateddim' => 0,
					);
76792c0e   Benjamin Renard   Sum parameters un...
575
					if ($paramData->{'dim1-sum-type'} == 2)
54219b37   Benjamin Renard   Add support for s...
576
577
578
						$paramInfo = $this->addExistingParam('sum_into_table_indexes', $paramsData, $template_args);
					else
						$paramInfo = $this->addExistingParam('sum_into_table_range', $paramsData, $template_args);
93c50989   Benjamin Renard   Support Tab2D par...
579
580
581
582
583
584
585
586
				}
				else if ($dim2_is_range) {
					$template_args = array(
						'paramid' => $paramInfo['id'],
						'min' => $dim2_min,
						'max' => $dim2_max,
						'relateddim' => 1,
					);
76792c0e   Benjamin Renard   Sum parameters un...
587
					if ($paramData->{'dim2-sum-type'} == 2)
54219b37   Benjamin Renard   Add support for s...
588
589
590
						$paramInfo = $this->addExistingParam('sum_into_table_indexes', $paramsData, $template_args);
					else
						$paramInfo = $this->addExistingParam('sum_into_table_range', $paramsData, $template_args);
93c50989   Benjamin Renard   Support Tab2D par...
591
592
593
594
595
596
597
598
599
600
601
				}
				else if ($dim1_index != '*') {
					$paramInfo['indexes'][] = $dim1_index;
				}
				else if ($dim2_index != '*') {
					$paramInfo['indexes'][] = $dim2_index;
				}
				break;
			case 2:
				//Tab2D
				if ($dim1_is_range && $dim2_is_range) {
76792c0e   Benjamin Renard   Sum parameters un...
602
					if ($paramData->{'dim1-sum-type'} != $paramData->{'dim2-sum-type'}) {
54219b37   Benjamin Renard   Add support for s...
603
604
						throw new Exception("Not supported - Dimensions ranges for ".$paramInfo['id']." must have the same type for each dimensions");
					}
93c50989   Benjamin Renard   Support Tab2D par...
605
606
607
608
609
610
611
612
					$template_args = array(
						'paramid' => $paramInfo['id'],
						'min1' => $dim1_min,
						'max1' => $dim1_max,
						'relateddim1' => 0,
						'min2' => $dim2_min,
						'max2' => $dim2_max,
					);
76792c0e   Benjamin Renard   Sum parameters un...
613
					if ($paramData->{'dim1-sum-type'} == 2)
54219b37   Benjamin Renard   Add support for s...
614
615
616
						$paramInfo = $this->addExistingParam('sum_into_table_indexes_2d', $paramsData, $template_args);
					else
						$paramInfo = $this->addExistingParam('sum_into_table_range_2d', $paramsData, $template_args);
93c50989   Benjamin Renard   Support Tab2D par...
617
618
619
620
621
622
623
624
				}
				else if ($dim1_is_range) {
					$template_args = array(
						'paramid' => $paramInfo['id'],
						'min' => $dim1_min,
						'max' => $dim1_max,
						'relateddim' => 0,
					);
52859c27   Benjamin Renard   Give the possibil...
625
626
627
628
					$tableLink = array(
						'paramid' => $paramInfo['id'],
						'relateddim' => 1,
					);
76792c0e   Benjamin Renard   Sum parameters un...
629
					if ($paramData->{'dim1-sum-type'} == 2)
54219b37   Benjamin Renard   Add support for s...
630
631
632
						$paramInfo = $this->addExistingParam('sum_into_table_indexes', $paramsData, $template_args, $tableLink);
					else
						$paramInfo = $this->addExistingParam('sum_into_table_range', $paramsData, $template_args, $tableLink);
93c50989   Benjamin Renard   Support Tab2D par...
633
634
635
636
637
638
639
640
641
642
643
					if ($dim2_index != '*') {
						$paramInfo['indexes'][] = $dim2_index;
					}
				}
				else if ($dim2_is_range) {
					$template_args = array(
						'paramid' => $paramInfo['id'],
						'min' => $dim2_min,
						'max' => $dim2_max,
						'relateddim' => 1,
					);
52859c27   Benjamin Renard   Give the possibil...
644
645
646
647
					$tableLink = array(
						'paramid' => $paramInfo['id'],
						'relateddim' => 0,
					);
76792c0e   Benjamin Renard   Sum parameters un...
648
					if ($paramData->{'dim2-sum-type'} == 2)
54219b37   Benjamin Renard   Add support for s...
649
650
651
						$paramInfo = $this->addExistingParam('sum_into_table_indexes', $paramsData, $template_args, $tableLink);
					else
						$paramInfo = $this->addExistingParam('sum_into_table_range', $paramsData, $template_args, $tableLink);
93c50989   Benjamin Renard   Support Tab2D par...
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
					if ($dim1_index != '*') {
						$paramInfo['indexes'][] = $dim1_index;
					}
				}
				else if (($dim1_index != '*') && ($dim2_index != '*')) {
					$paramInfo['indexes'][] = "[".$dim1_index.",".$dim2_index."]";
				}
				else if ($dim1_index != '*') {
					$paramInfo['indexes'][] = "[".$dim1_index.",*]";
				}
				else if ($dim2_index != '*') {
					$paramInfo['indexes'][] = "[*,".$dim2_index."]";
				}
				else if ($force_total_2d) {
					//total over 2 dims
					$template_args = array(
						'paramid' => $paramInfo['id'],
					);
					$paramInfo = $this->addExistingParam('total_2D', $paramsData, $template_args);
				}
				break;
		}
	}
22521f1c   Benjamin Renard   First commit
675
}