diff --git a/src/FunctionTypeEnumClass.php b/src/FunctionTypeEnumClass.php index 6ed6b67..393881d 100644 --- a/src/FunctionTypeEnumClass.php +++ b/src/FunctionTypeEnumClass.php @@ -8,6 +8,7 @@ abstract class FunctionTypeEnumClass { const PARAMS = "params"; const PARAMSGEN = "params_gen"; + const PARAMSINFOGEN = "params_info_gen"; const ACTION = "action"; const PROCESSDELETE = "process_delete"; const PROCESSRUNNINGINFO = "process_running_info"; diff --git a/src/InputOutput/IHMImpl/IHMInputOutputClass.php b/src/InputOutput/IHMImpl/IHMInputOutputClass.php index a78c2ca..58e2da9 100644 --- a/src/InputOutput/IHMImpl/IHMInputOutputClass.php +++ b/src/InputOutput/IHMImpl/IHMInputOutputClass.php @@ -67,6 +67,10 @@ class IHMInputOutputClass implements InputOutputInterface $this->inputOutput = new IHMInputOutputParamsGeneratorClass(); $requestId = "ParamGen"; break; + case FunctionTypeEnumClass::PARAMSINFOGEN : + $this->inputOutput = new IHMInputOutputParamsInfoGeneratorClass(); + $requestId = "ParamInfoGen"; + break; case FunctionTypeEnumClass::ACTION : $this->inputOutput = new IHMInputOutputParamsPlotClass(); $requestId = "Plot"; diff --git a/src/InputOutput/IHMImpl/Params/GenInfoParamImpl/IHMInputOutputParamsInfoGeneratorClass.php b/src/InputOutput/IHMImpl/Params/GenInfoParamImpl/IHMInputOutputParamsInfoGeneratorClass.php new file mode 100644 index 0000000..115b1fb --- /dev/null +++ b/src/InputOutput/IHMImpl/Params/GenInfoParamImpl/IHMInputOutputParamsInfoGeneratorClass.php @@ -0,0 +1,71 @@ +<?php + +/** + * @class IHMInputOutputParamsGeneratorClass + * @brief Implementation of IHMInputOutputParamsAbstractClass to treat params generation request + * @details +*/ +class IHMInputOutputParamsInfoGeneratorClass extends IHMInputOutputParamsAbstractClass +{ + /* + * @brief method to unmarshall a params generation request + */ + protected function unmarshallRequest($input) + { + $this->paramsData->setRequestType(ParamsRequestTypeEnumClass::PARAMSINFOGEN); + + $this->paramsData->setParamId($input->paramId); + + $this->paramsData->setBatchEnable(FALSE); + + $this->paramManager->addGeneratedParam($input->paramId, $input->buildchain, $input->timestep, $this->paramsData); + + return $this->paramsData; + } + + /* + * @brief method to marshall the result of a download request + */ + protected function marshallResult($data) + { + if (!$data->getSuccess()) + return array( + 'success' => false, + 'message' => $data->getParamId() . " : " . $data->getLastErrorMessage()); + + if ($data->getErrorCode() != 0) + return array( + 'success' => false, + 'message' => $data->getParamId() . " : " . 'Error detected during parameter compilation'); + + $info_file_name = 'info_'.$data->getParamId().'.xml'; + $info_file_path = $this->getWorkingPath().'/'.$info_file_name; + + $doc = new DOMDocument("1.0", "UTF-8"); + if ($doc->load($info_file_path) === FALSE) { + return array( + 'success' => false, + 'message' => $data->getParamId() . " : " . 'Cannot load info file'); + } + + //<paraminfo id="ws_vcxvxcvdsdd"><dimensions dim_1="3" dim_2="1"/><components><component index_1="0" name="ws_vcxvxcvdsdd[0]"/><component index_1="1" name="ws_vcxvxcvdsdd[1]"/><component index_1="2" name="ws_vcxvxcvdsdd[2]"/></components><tables/></paraminfo> + $dimensionsNodes = $doc->getElementsByTagName('dimensions'); + if ($dimensionsNodes->length == 0) { + return array( + 'success' => false, + 'message' => $data->getParamId() . " : " . 'Cannot load dimensions in info file'); + } + + $dim_1 = $dimensionsNodes->item(0)->getAttribute('dim_1'); + $dim_2 = $dimensionsNodes->item(0)->getAttribute('dim_2'); + + return array( + 'success' => true, + 'dimensions' => array( + 'dim_1' => $dim_1, + 'dim_2' => $dim_2, + ), + ); + } +} +?> diff --git a/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php b/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php index f55a4e7..1628d2a 100644 --- a/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php +++ b/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php @@ -20,6 +20,18 @@ class IHMParamManagerClass $this->templateParamsManager = new IHMParamTemplateClass(); } + 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); + } + /* * @brief Add an existing parameter */ diff --git a/src/Request/ParamsRequestImpl/ParamsRequestClass.php b/src/Request/ParamsRequestImpl/ParamsRequestClass.php index 5406ead..6b24bb5 100644 --- a/src/Request/ParamsRequestImpl/ParamsRequestClass.php +++ b/src/Request/ParamsRequestImpl/ParamsRequestClass.php @@ -34,6 +34,9 @@ class ParamsRequestClass extends ProcessRequestClass case ParamsRequestTypeEnumClass::PARAMGEN : $this->requestData->setCmd(KernelConfigClass::getKernelBinPath()."amdaParameterGenerator -p ".$this->requestData->getParamId()); break; + case ParamsRequestTypeEnumClass::PARAMSINFOGEN : + $this->requestData->setCmd(KernelConfigClass::getKernelBinPath()."amdaParameterInfo -p ".$this->requestData->getParamId()); + break; } $this->requestData->setEnvVars(KernelConfigClass::getExecEnvVarArray()); diff --git a/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php b/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php index 7c3ab72..21c8703 100644 --- a/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php +++ b/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php @@ -10,6 +10,7 @@ abstract class ParamsRequestTypeEnumClass const UNKNOWN = ""; const XMLREQUEST = "XMLREQUEST"; const PARAMGEN = "PARAMGEN"; + const PARAMSINFOGEN = "PARAMSINFOGEN"; } /** diff --git a/src/RequestManager.php b/src/RequestManager.php index 3fdfeb5..5fdafde 100644 --- a/src/RequestManager.php +++ b/src/RequestManager.php @@ -11,6 +11,7 @@ function amdaintegration_autoload($class_name) 'InputOutput/IHMImpl/Params/DataMiningImpl', 'InputOutput/IHMImpl/Params/StatisticsImpl', 'InputOutput/IHMImpl/Params/DownloadImpl', + 'InputOutput/IHMImpl/Params/GenInfoParamImpl', 'InputOutput/IHMImpl/Params/PlotImpl', 'InputOutput/IHMImpl/Params/GeneratorImpl', 'InputOutput/IHMImpl/Process', @@ -71,6 +72,7 @@ abstract class FunctionTypeEnumClass { const PARAMS = "params"; const PARAMSGEN = "params_gen"; + const PARAMSGEN = "params_info_gen"; const ACTION = "action"; const PROCESSDELETE = "process_delete"; const PROCESSRUNNINGINFO = "process_running_info"; diff --git a/src/RequestManagerClass.php b/src/RequestManagerClass.php index a434010..5544205 100644 --- a/src/RequestManagerClass.php +++ b/src/RequestManagerClass.php @@ -56,6 +56,8 @@ Class RequestManagerClass { case FunctionTypeEnumClass::PARAMS : case FunctionTypeEnumClass::PARAMSGEN : + case FunctionTypeEnumClass::PARAMSINFOGEN : + return new ParamsRequestClass($user, $userHost); case FunctionTypeEnumClass::ACTION : return new ParamsRequestClass($user, $userHost); case FunctionTypeEnumClass::PROCESSDELETE : @@ -152,4 +154,4 @@ Class RequestManagerClass return $request->getData(); } } -?> \ No newline at end of file +?> diff --git a/src/amdaintegration_autoload.php b/src/amdaintegration_autoload.php index 1d483c6..a460537 100644 --- a/src/amdaintegration_autoload.php +++ b/src/amdaintegration_autoload.php @@ -12,6 +12,7 @@ function amdaintegration_autoload($class_name) 'InputOutput/IHMImpl/Params/DownloadImpl', 'InputOutput/IHMImpl/Params/PlotImpl', 'InputOutput/IHMImpl/Params/GeneratorImpl', + 'InputOutput/IHMImpl/Params/GenInfoParamImpl', 'InputOutput/IHMImpl/Process', 'InputOutput/IHMImpl/ParamInfo', 'InputOutput/IHMImpl/Tools', -- libgit2 0.21.2