diff --git a/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php b/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php index 9cbf585..8119f6a 100644 --- a/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php +++ b/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php @@ -74,7 +74,7 @@ class IHMInputOutputParamsDownloadClass extends IHMInputOutputParamsAbstractClas //add params to output foreach ($input->list as $param) { - $paramInfo = $this->paramManager->addExistingParam($param->name, $this->paramsData); + $paramInfo = $this->paramManager->addExistingParam($param->paramid, $this->paramsData, $param->template_args); switch ($param->type) { case 0: //scalar - nothing to do diff --git a/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php b/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php index a0671d6..9e7c1b7 100644 --- a/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php +++ b/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php @@ -646,7 +646,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass foreach ($paramsData as $paramData) { //Param - $paramInfo = $this->paramManager->addExistingParam($paramData->{'param-id'}, $this->paramsData, $paramData->{'param-template-args'}); + $paramInfo = $this->paramManager->addExistingParam($paramData->{'paramid'}, $this->paramsData, $paramData->{'template_args'}); $paramInfo['indexes'] = array(); $dim1 = $paramData->{'param-dim-1'}; @@ -2081,7 +2081,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass $instantParam = (Object)array( "id" => 1, - "param-id" => $crtParam->{'param-id'}, + "paramid" => $crtParam->{'paramid'}, "param-drawing-type" => "iserie", "param-drawing-object" => (Object)array( "iserie-tableonx" => true, diff --git a/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php b/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php index 5b8c4cd..7c245bf 100644 --- a/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php +++ b/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php @@ -38,7 +38,7 @@ class IHMInputOutputParamsStatisticsClass extends IHMInputOutputParamsAbstractCl foreach ($paramFunctionAssociation as $param => $functions) { $paramInfo = $this->paramManager->addExistingParam($param, $this->paramsData); - $paramsNode->addParam($paramInfo['id']); + $paramsNode->addParam($paramInfo['id']); $outputParamNode = $catalogNode->addParam($paramInfo['id'],$paramInfo['indexes']); foreach ($functions as $function) $outputParamNode->addFunction($function); } diff --git a/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php b/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php index c9c620c..79384ca 100644 --- a/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php +++ b/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php @@ -43,12 +43,15 @@ class IHMExpressionParserClass private $aliasesArray; private $functionsArray; + + private $templatedParamMgr = NULL; /* * @brief Constructor */ function __construct() { + $this->templatedParamMgr = new IHMParamTemplateClass(); } /* @@ -142,8 +145,13 @@ class IHMExpressionParserClass //keep only params id $params = array(); - foreach ($params_full as $param_full) - $params[] = $param_full["id"]; + foreach ($params_full as $param_full) { + if (($templated_param_info = $this->templatedParamMgr->parseTemplatedParam($param_full["id"])) !== FALSE) { + $params[] = $templated_param_info; + } + else + $params[] = array("paramid" => $param_full["id"]); + } return array("expression" => $translated, "params" => $params); } diff --git a/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php b/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php index c5d9268..e30a89d 100644 --- a/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php +++ b/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php @@ -40,8 +40,12 @@ class IHMParamManagerClass { $paramsData->addProcessParamToCreate($paramId, $expression, $params, $sampling, $gap,$dateModif); - foreach ($params as $param) - $this->addExistingParam($param,$paramsData); + foreach ($params as $param) { + $template_args = NULL; + if (array_key_exists("template_args", $param)) + $template_args = $param["template_args"]; + $this->addExistingParam($param["paramid"],$paramsData,$template_args); + } return true; } diff --git a/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php b/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php index 7ce262d..5ae31c8 100644 --- a/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php +++ b/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php @@ -46,6 +46,72 @@ class IHMParamTemplateClass } /* + * + */ + public function parseTemplatedParam($param_expression) { + $exploded_param_expression = explode('_',$param_expression); + + $tmp_paramid = ""; + $real_param_id = ""; + + foreach ($exploded_param_expression as $expression_part) { + //add one by one each part of the expression to check if it's a templated parameter + if ($tmp_paramid != "") + $tmp_paramid .= "_"; + $tmp_paramid .= $expression_part; + if ($this->isTemplatedParam($tmp_paramid)) { + $real_param_id = $tmp_paramid; + break; + } + } + + if (empty($real_param_id)) + return FALSE; + + $template_args_str = str_replace($real_param_id, "", $param_expression); + + if ($template_args_str == "") + //A templated param need at least one argument + return FALSE; + + $template_args_info = $this->paramTemplateList[$real_param_id]; + + $args_format = ""; + foreach ($template_args_info["arguments"] as $arg) { + $args_format .= "_"; + switch($arg["type"]) { + case 'float' : + case 'double' : + $args_format .= "%f"; + break; + case 'int' : + $args_format .= "%d"; + break; + default: + $args_format .= "%s"; + } + } + + $exploded_args = sscanf($template_args_str , $args_format); + + if ($exploded_args === -1) + return FALSE; + + $template_args = array(); + $i = 0; + foreach ($template_args_info["arguments"] as $arg_key => $arg) { + $template_args[$arg_key] = $exploded_args[$i]; + ++$i; + } + + return array( + "paramid" => $real_param_id, + "fullparamid" => $param_expression, + "template_args" => $template_args + ); + } + + /* * @brief Get templated parameter id */ public function getTemplatedParamId($param_id, $template_args) { diff --git a/src/Request/ParamsRequestImpl/ParamsRequestClass.php b/src/Request/ParamsRequestImpl/ParamsRequestClass.php index 4480159..aba8af0 100644 --- a/src/Request/ParamsRequestImpl/ParamsRequestClass.php +++ b/src/Request/ParamsRequestImpl/ParamsRequestClass.php @@ -81,11 +81,22 @@ class ParamsRequestClass extends ProcessRequestClass return false; } + libxml_use_internal_errors(true); if (!$doc->schemaValidate(KernelConfigClass::getXSDRequestFilePath())) { - $this->requestData->setLastErrorMessage('Params request XML file not valid for request '.$requestNode->getRealIndex()); + $error_msg = ""; + $errors = libxml_get_errors(); + foreach ($errors as $error) { + if ($error_msg != "") + $error_msg .= PHP_EOL; + $error_msg .= 'XML error "'.$error->message.'" ['.$error->level.'] (Code '.$error->code.') in '.$error->file.' on line '.$error->line.' column '.$error->column; + } + libxml_clear_errors(); + + $this->requestData->setLastErrorMessage('Params request XML file not valid for request '.$requestNode->getRealIndex().' ('.$error_msg.')'); return false; } + libxml_use_internal_errors(false); } } diff --git a/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php b/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php index e43a514..76c8ff9 100644 --- a/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php +++ b/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php @@ -126,7 +126,10 @@ class ParamsRequestDataClass extends ProcessRequestDataClass foreach ($getParams as $getParam) { $amdaParamNode = $newParam->addParamGet(ParamGetTypeEnum::AMDAPARAM); - $amdaParamNode->setParamName($getParam); + if (array_key_exists('template_args', $getParam)) + $amdaParamNode->setParamName($getParam['fullparamid']); + else + $amdaParamNode->setParamName($getParam['paramid']); } $newParam->setProcess($expression); $newParam->setOutput(); -- libgit2 0.21.2