requestData)) return false; if ($this->requestData->getType(ProcessTypeEnumClass::KILL)) return true; $this->requestData->setType(ProcessTypeEnumClass::RUN); switch ($this->requestData->getRequestType()) { case ParamsRequestTypeEnumClass::XMLREQUEST : $cmd = ""; foreach ($this->requestData->getRequestNodes() as $request_index => $requestNode) { if ($cmd != "") $cmd .= " && "; $cmd .= KernelConfigClass::getKernelBinPath()."amdaXMLRequestorTool ".$this->getRequestFilePath($request_index); } $this->requestData->setCmd($cmd); break; 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()); if (!parent::init()) return false; $this->requestData->setSuccess(false); $this->requestData->setLastErrorMessage('Cannot init params request'); if ($this->requestData->getCompilationPath() == '') { $this->requestData->setLastErrorMessage('Compilation path for params request not defined'); return false; } if (!is_dir($this->requestData->getCompilationPath())) { if (!mkdir($this->requestData->getCompilationPath(),0777)) { $this->requestData->setLastErrorMessage('Cannot create compilation path for params request'); return false; } } if ($this->requestData->getRequestType() == ParamsRequestTypeEnumClass::XMLREQUEST) { foreach ($this->requestData->getRequestNodes() as $request_index => $requestNode) { //inject time restriction if (count($this->requestData->getParamsTimeRestrictions()) > 0) { //Here foreach ($this->requestData->getParamsTimeRestrictions() as $paramId => $timeRestriction) { $requestNode->getParamsTimeRestrictions()->addParamTimeRestriction($paramId, strtotime($timeRestriction)); } } //create XML request file $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $requestNode->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params request XML file for request'); return false; } $doc->appendChild($xmlNode); if (!$doc->save($this->getRequestFilePath($request_index))) { $this->requestData->setLastErrorMessage('Cannot save params request XML file for request'); return false; } //libxml_use_internal_errors(true); if (!$doc->schemaValidate(KernelConfigClass::getXSDRequestFilePath())) { //$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'/*.' ('.$error_msg.')'*/); return false; } //libxml_use_internal_errors(false); } } //create config files KernelConfigClass::write($this->requestData->getWorkingPath(), $this->requestData->getCompilationPath(), $this->requestData->getLocalBasePath()); //copy parameters files foreach ($this->requestData->getParamsToCopy() as $key => $value) { if (!file_exists($value)) { $this->requestData->setLastErrorMessage('Cannot find param definition file for '.$key); return false; } $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()).$key.".xml"; if (!copy($value,$destinationFile)) { $this->requestData->setLastErrorMessage('Cannot copy param definition file for '.$key); return false; } // get datasetID for statistics $doc = new DOMDocument("1.0", "UTF-8"); if (@$doc->load($value)) { $dsID = $doc->getElementsByTagName('dataset_id'); if ($dsID->length > 0) { if ($dsID->item(0)->nodeValue) $dsName = $dsID->item(0)->nodeValue; elseif (strpos($key, 'spase_') !== false) $dsName = 'impex'; else $dsName = 'unknown'; $this->requestData->addDatasetForStat($dsName); } } touch($destinationFile, filemtime($value)); } //create processed params files foreach ($this->requestData->getProcessParamsToCreate() as $key => $value) { $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $value["param"]->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params XML file for '.$key); return false; } $doc->appendChild($xmlNode); /*if (!$doc->schemaValidate(KernelConfigClass::getXSDParameterFilePath())) { $this->requestData->setLastErrorMessage('Params XML file not valid for '.$key); return false; }*/ $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()).$key.".xml"; if (!$doc->save($destinationFile)) { $this->requestData->setLastErrorMessage('Cannot save params XML file for '.$key); return false; } touch($destinationFile, $value["dateModif"]); } //create local params files foreach ($this->requestData->getLocalParamsToCreate() as $key => $value) { $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $value["param"]->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params XML file for '.$key); return false; } $doc->appendChild($xmlNode); $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()).$key.".xml"; if (!$doc->save($destinationFile)) { $this->requestData->setLastErrorMessage('Cannot save params XML file for '.$key); return false; } $this->requestData->addDatasetForStat('uploadedData'); touch($destinationFile, $value["dateModif"]); } //create and copy local params files foreach ($this->requestData->getLocalParamsToCreateAndCopy() as $key => $value) { $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $value["param"]->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params XML file for '.$key); return false; } $doc->appendChild($xmlNode); $originFile = IHMConfigClass::getUserWSPath().$key.".xml"; $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()).$key.".xml"; if (!$doc->save($destinationFile) || !$doc->save($originFile)) { $this->requestData->setLastErrorMessage('Cannot save params XML file for '.$key); return false; } touch($originFile, $value["dateModif"]); touch($destinationFile, $value["dateModif"]); } return true; } /* * @brief Run a params request */ public function run() { $amdaStat = new AmdaStats($this->requestData->getUser()); if (count($this->requestData->getDatasetForStat()) > 0) $amdaStat->addTask(IHMConfigClass::getUserName(), $this->requestData->getTask(), $this->requestData->getDatasetForStat()); return parent::run(); } /* * @brief Get the request file path for AMDA_Kernel */ private function getRequestFilePath($request_index) { return $this->requestData->getWorkingPath()."request_".$request_index.".xml"; } } ?>