Commit e4545ed54a20a1dc679c1e25e2e868070a73060e
1 parent
bf27ba04
Exists in
master
and in
66 other branches
Implement templated parameters for download, data mining and derived parameters
Showing
8 changed files
with
102 additions
and
10 deletions
Show diff stats
src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php
@@ -74,7 +74,7 @@ class IHMInputOutputParamsDownloadClass extends IHMInputOutputParamsAbstractClas | @@ -74,7 +74,7 @@ class IHMInputOutputParamsDownloadClass extends IHMInputOutputParamsAbstractClas | ||
74 | //add params to output | 74 | //add params to output |
75 | foreach ($input->list as $param) | 75 | foreach ($input->list as $param) |
76 | { | 76 | { |
77 | - $paramInfo = $this->paramManager->addExistingParam($param->name, $this->paramsData); | 77 | + $paramInfo = $this->paramManager->addExistingParam($param->paramid, $this->paramsData, $param->template_args); |
78 | switch ($param->type) { | 78 | switch ($param->type) { |
79 | case 0: | 79 | case 0: |
80 | //scalar - nothing to do | 80 | //scalar - nothing to do |
src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php
@@ -646,7 +646,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -646,7 +646,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
646 | foreach ($paramsData as $paramData) | 646 | foreach ($paramsData as $paramData) |
647 | { | 647 | { |
648 | //Param | 648 | //Param |
649 | - $paramInfo = $this->paramManager->addExistingParam($paramData->{'param-id'}, $this->paramsData, $paramData->{'param-template-args'}); | 649 | + $paramInfo = $this->paramManager->addExistingParam($paramData->{'paramid'}, $this->paramsData, $paramData->{'template_args'}); |
650 | 650 | ||
651 | $paramInfo['indexes'] = array(); | 651 | $paramInfo['indexes'] = array(); |
652 | $dim1 = $paramData->{'param-dim-1'}; | 652 | $dim1 = $paramData->{'param-dim-1'}; |
@@ -2081,7 +2081,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | @@ -2081,7 +2081,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass | ||
2081 | 2081 | ||
2082 | $instantParam = (Object)array( | 2082 | $instantParam = (Object)array( |
2083 | "id" => 1, | 2083 | "id" => 1, |
2084 | - "param-id" => $crtParam->{'param-id'}, | 2084 | + "paramid" => $crtParam->{'paramid'}, |
2085 | "param-drawing-type" => "iserie", | 2085 | "param-drawing-type" => "iserie", |
2086 | "param-drawing-object" => (Object)array( | 2086 | "param-drawing-object" => (Object)array( |
2087 | "iserie-tableonx" => true, | 2087 | "iserie-tableonx" => true, |
src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php
@@ -38,7 +38,7 @@ class IHMInputOutputParamsStatisticsClass extends IHMInputOutputParamsAbstractCl | @@ -38,7 +38,7 @@ class IHMInputOutputParamsStatisticsClass extends IHMInputOutputParamsAbstractCl | ||
38 | foreach ($paramFunctionAssociation as $param => $functions) { | 38 | foreach ($paramFunctionAssociation as $param => $functions) { |
39 | 39 | ||
40 | $paramInfo = $this->paramManager->addExistingParam($param, $this->paramsData); | 40 | $paramInfo = $this->paramManager->addExistingParam($param, $this->paramsData); |
41 | - $paramsNode->addParam($paramInfo['id']); | 41 | + $paramsNode->addParam($paramInfo['id']); |
42 | $outputParamNode = $catalogNode->addParam($paramInfo['id'],$paramInfo['indexes']); | 42 | $outputParamNode = $catalogNode->addParam($paramInfo['id'],$paramInfo['indexes']); |
43 | foreach ($functions as $function) $outputParamNode->addFunction($function); | 43 | foreach ($functions as $function) $outputParamNode->addFunction($function); |
44 | } | 44 | } |
src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php
@@ -43,12 +43,15 @@ class IHMExpressionParserClass | @@ -43,12 +43,15 @@ class IHMExpressionParserClass | ||
43 | private $aliasesArray; | 43 | private $aliasesArray; |
44 | 44 | ||
45 | private $functionsArray; | 45 | private $functionsArray; |
46 | + | ||
47 | + private $templatedParamMgr = NULL; | ||
46 | 48 | ||
47 | /* | 49 | /* |
48 | * @brief Constructor | 50 | * @brief Constructor |
49 | */ | 51 | */ |
50 | function __construct() | 52 | function __construct() |
51 | { | 53 | { |
54 | + $this->templatedParamMgr = new IHMParamTemplateClass(); | ||
52 | } | 55 | } |
53 | 56 | ||
54 | /* | 57 | /* |
@@ -142,8 +145,13 @@ class IHMExpressionParserClass | @@ -142,8 +145,13 @@ class IHMExpressionParserClass | ||
142 | 145 | ||
143 | //keep only params id | 146 | //keep only params id |
144 | $params = array(); | 147 | $params = array(); |
145 | - foreach ($params_full as $param_full) | ||
146 | - $params[] = $param_full["id"]; | 148 | + foreach ($params_full as $param_full) { |
149 | + if (($templated_param_info = $this->templatedParamMgr->parseTemplatedParam($param_full["id"])) !== FALSE) { | ||
150 | + $params[] = $templated_param_info; | ||
151 | + } | ||
152 | + else | ||
153 | + $params[] = array("paramid" => $param_full["id"]); | ||
154 | + } | ||
147 | 155 | ||
148 | return array("expression" => $translated, "params" => $params); | 156 | return array("expression" => $translated, "params" => $params); |
149 | } | 157 | } |
src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php
@@ -40,8 +40,12 @@ class IHMParamManagerClass | @@ -40,8 +40,12 @@ class IHMParamManagerClass | ||
40 | { | 40 | { |
41 | $paramsData->addProcessParamToCreate($paramId, $expression, $params, $sampling, $gap,$dateModif); | 41 | $paramsData->addProcessParamToCreate($paramId, $expression, $params, $sampling, $gap,$dateModif); |
42 | 42 | ||
43 | - foreach ($params as $param) | ||
44 | - $this->addExistingParam($param,$paramsData); | 43 | + foreach ($params as $param) { |
44 | + $template_args = NULL; | ||
45 | + if (array_key_exists("template_args", $param)) | ||
46 | + $template_args = $param["template_args"]; | ||
47 | + $this->addExistingParam($param["paramid"],$paramsData,$template_args); | ||
48 | + } | ||
45 | 49 | ||
46 | return true; | 50 | return true; |
47 | } | 51 | } |
src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php
@@ -46,6 +46,72 @@ class IHMParamTemplateClass | @@ -46,6 +46,72 @@ class IHMParamTemplateClass | ||
46 | } | 46 | } |
47 | 47 | ||
48 | /* | 48 | /* |
49 | + * | ||
50 | + */ | ||
51 | + public function parseTemplatedParam($param_expression) { | ||
52 | + $exploded_param_expression = explode('_',$param_expression); | ||
53 | + | ||
54 | + $tmp_paramid = ""; | ||
55 | + $real_param_id = ""; | ||
56 | + | ||
57 | + foreach ($exploded_param_expression as $expression_part) { | ||
58 | + //add one by one each part of the expression to check if it's a templated parameter | ||
59 | + if ($tmp_paramid != "") | ||
60 | + $tmp_paramid .= "_"; | ||
61 | + $tmp_paramid .= $expression_part; | ||
62 | + if ($this->isTemplatedParam($tmp_paramid)) { | ||
63 | + $real_param_id = $tmp_paramid; | ||
64 | + break; | ||
65 | + } | ||
66 | + } | ||
67 | + | ||
68 | + if (empty($real_param_id)) | ||
69 | + return FALSE; | ||
70 | + | ||
71 | + $template_args_str = str_replace($real_param_id, "", $param_expression); | ||
72 | + | ||
73 | + if ($template_args_str == "") | ||
74 | + //A templated param need at least one argument | ||
75 | + return FALSE; | ||
76 | + | ||
77 | + $template_args_info = $this->paramTemplateList[$real_param_id]; | ||
78 | + | ||
79 | + $args_format = ""; | ||
80 | + foreach ($template_args_info["arguments"] as $arg) { | ||
81 | + $args_format .= "_"; | ||
82 | + switch($arg["type"]) { | ||
83 | + case 'float' : | ||
84 | + case 'double' : | ||
85 | + $args_format .= "%f"; | ||
86 | + break; | ||
87 | + case 'int' : | ||
88 | + $args_format .= "%d"; | ||
89 | + break; | ||
90 | + default: | ||
91 | + $args_format .= "%s"; | ||
92 | + } | ||
93 | + } | ||
94 | + | ||
95 | + $exploded_args = sscanf($template_args_str , $args_format); | ||
96 | + | ||
97 | + if ($exploded_args === -1) | ||
98 | + return FALSE; | ||
99 | + | ||
100 | + $template_args = array(); | ||
101 | + $i = 0; | ||
102 | + foreach ($template_args_info["arguments"] as $arg_key => $arg) { | ||
103 | + $template_args[$arg_key] = $exploded_args[$i]; | ||
104 | + ++$i; | ||
105 | + } | ||
106 | + | ||
107 | + return array( | ||
108 | + "paramid" => $real_param_id, | ||
109 | + "fullparamid" => $param_expression, | ||
110 | + "template_args" => $template_args | ||
111 | + ); | ||
112 | + } | ||
113 | + | ||
114 | + /* | ||
49 | * @brief Get templated parameter id | 115 | * @brief Get templated parameter id |
50 | */ | 116 | */ |
51 | public function getTemplatedParamId($param_id, $template_args) { | 117 | public function getTemplatedParamId($param_id, $template_args) { |
src/Request/ParamsRequestImpl/ParamsRequestClass.php
@@ -81,11 +81,22 @@ class ParamsRequestClass extends ProcessRequestClass | @@ -81,11 +81,22 @@ class ParamsRequestClass extends ProcessRequestClass | ||
81 | return false; | 81 | return false; |
82 | } | 82 | } |
83 | 83 | ||
84 | + libxml_use_internal_errors(true); | ||
84 | if (!$doc->schemaValidate(KernelConfigClass::getXSDRequestFilePath())) | 85 | if (!$doc->schemaValidate(KernelConfigClass::getXSDRequestFilePath())) |
85 | { | 86 | { |
86 | - $this->requestData->setLastErrorMessage('Params request XML file not valid for request '.$requestNode->getRealIndex()); | 87 | + $error_msg = ""; |
88 | + $errors = libxml_get_errors(); | ||
89 | + foreach ($errors as $error) { | ||
90 | + if ($error_msg != "") | ||
91 | + $error_msg .= PHP_EOL; | ||
92 | + $error_msg .= 'XML error "'.$error->message.'" ['.$error->level.'] (Code '.$error->code.') in '.$error->file.' on line '.$error->line.' column '.$error->column; | ||
93 | + } | ||
94 | + libxml_clear_errors(); | ||
95 | + | ||
96 | + $this->requestData->setLastErrorMessage('Params request XML file not valid for request '.$requestNode->getRealIndex().' ('.$error_msg.')'); | ||
87 | return false; | 97 | return false; |
88 | } | 98 | } |
99 | + libxml_use_internal_errors(false); | ||
89 | } | 100 | } |
90 | } | 101 | } |
91 | 102 |
src/Request/ParamsRequestImpl/ParamsRequestDataClass.php
@@ -126,7 +126,10 @@ class ParamsRequestDataClass extends ProcessRequestDataClass | @@ -126,7 +126,10 @@ class ParamsRequestDataClass extends ProcessRequestDataClass | ||
126 | foreach ($getParams as $getParam) | 126 | foreach ($getParams as $getParam) |
127 | { | 127 | { |
128 | $amdaParamNode = $newParam->addParamGet(ParamGetTypeEnum::AMDAPARAM); | 128 | $amdaParamNode = $newParam->addParamGet(ParamGetTypeEnum::AMDAPARAM); |
129 | - $amdaParamNode->setParamName($getParam); | 129 | + if (array_key_exists('template_args', $getParam)) |
130 | + $amdaParamNode->setParamName($getParam['fullparamid']); | ||
131 | + else | ||
132 | + $amdaParamNode->setParamName($getParam['paramid']); | ||
130 | } | 133 | } |
131 | $newParam->setProcess($expression); | 134 | $newParam->setProcess($expression); |
132 | $newParam->setOutput(); | 135 | $newParam->setOutput(); |