*/ public $soapMethods = array("calculateDataPointValue", "calculateDataPointValue_Spacecraft"); // // public $additionalArgs = array("spase://IMPEX/NumericalOutput/LESIA/MAG/Jupiter/sc" => array("StartTime" => "dateTime", "StopTime" => "dateTime", "Sampling"=> "float" ), "spase://IMPEX/NumericalOutput/LESIA/MAG/Jupiter/xyz" => array("StartTime" => "dateTime")); private $calculateDataPointValue_Args = null; private $spacecraft = array("Cassini", "Galileo"); private $internalModel = array("O6", "VIP4", "VIT4", "VIPAL"); private $currentSheet = array("None", "Connerney", "Khurana"); private $coordinateSystem = array("JSO", "JSM", "JSS", "PlanetaryCartesian","PlanetarySpherical","Planetarographic"); /* */ //Extraparam: OutputFormat => netCDF, VOTable public $outputFormat = "VOTable"; private function initArgs() { if ($this->calculateDataPointValue_Args) return; $this->calculateDataPointValue_Args = array(); $this->calculateDataPointValue_Args["InternalModel"] = $this->internalModel; $this->calculateDataPointValue_Args["CurrentSheet"] = $this->currentSheet; $this->calculateDataPointValue_Args["CoordinateSystem"] = $this->coordinateSystem; } protected function createMissionNodes() { $missionNodes = array(); foreach ($this->tree->SimulationModel as $sm) { $ResourceID = trim($sm->ResourceID); $simulationModel = $this->domAmda->createElement('simulationModel'); $simReg = $sm->SimulatedRegion; $simulationModel->setAttribute('xml:id', $sm->ResourceID); $simulationModel->setAttribute('name', $sm->ResourceHeader->ResourceName." : ".$simReg); $simulationModel->setAttribute('desc', $sm->ResourceHeader->Description.'
ReleaseDate: '.$sm->ResourceHeader->ReleaseDate); if (file_exists(DATAPATH.'rank.json')) $cmpArr = json_decode(file_get_contents(DATAPATH.'rank.json'), true); else $cmpArr = null; $index = $cmpArr["$simReg"]; if ($index) $simulationModel->setAttribute('rank',$index); else $simulationModel->setAttribute('rank', 999); $simulationModel->setAttribute('att', "simu/simu$simReg"); // $this->setModelHelp($simulationModel,""); $this->addSimulatedRegionToTargetsFile($simReg, "JSM"); //TODO check this $datasetNodes = $this->createDatasetNodes($simReg); foreach ($datasetNodes as $ds) { $parameterNodes = $this->createParameterNodes($sm->OutputParameters->Parameter, $ds->getAttribute('xml:id')); foreach ($parameterNodes as $node ) $ds->appendChild($node); $simulationModel->appendChild($ds); } $missionNodes[] = $simulationModel; } return $missionNodes; } protected function createDatasetNodes() { $datasetNodes = array(); foreach ($this->soapMethods as $soapMethod) { $datasetNode = $this->domAmda->createElement('dataset'); $datasetNode->setAttribute('name', $soapMethod); if ($soapMethod == "calculateDataPointValue_Spacecraft") $datasetNode->setAttribute('xml:id', $this->prefix."/sc"); else $datasetNode->setAttribute('xml:id', $this->prefix."/xyz"); $datasetNode->setAttribute('globalStart', 'depending on mission'); $datasetNodes[] = $datasetNode; } return $datasetNodes; } protected function createParameterNodes($params, $dsid) { $paramNodes = array(); foreach ($params as $param) { $paramNode = $this->domAmda->createElement('parameter'); $id = $this->param2dd($dsid."/".$param->ParameterKey); $paramNode->setAttribute('xml:id',$id); $paramNode->setAttribute('name', $param->ParameterKey); $paramNode->setAttribute('desc', 'Units: '.$param->Units); $paramNode->setAttribute('shortName',$param->ParameterKey); $paramNode->setAttribute('needsArgs', $this->needsArgs); if ($this->hasComponents($param)) { if (strpos(trim($param->ParameterKey), ',') === false) $comps = explode(' ',trim($param->ParameterKey)); else $comps = explode(',',trim($param->ParameterKey)); $paramNode->setAttribute('size', count($comps)); foreach ($comps as $comp) { $compNode = $this->domAmda->createElement('component'); // $compNode->setAttribute('xml:id', $id."_".$comp); $compNode->setAttribute('xml:id',$this->param2dd($dsid."_".$comp)); $compNode->setAttribute('name', $comp); $compNode->setAttribute('needsArgs', $this->needsArgs); $compNode->setAttribute('shortName',$comp); $paramNode->appendChild($compNode); } } $paramNodes[] = $paramNode; } return $paramNodes; } protected function createSpecialArgs($dom) { $this->initArgs(); $nodes = array(); foreach ($this->calculateDataPointValue_Args as $key => $values) { $node = $dom->createElement('argument'); $node->setAttribute('key', $key); $node->setAttribute('name', $key); $node->setAttribute('type', 'list'); foreach ($values as $value) { $item = $dom->createElement('item'); $item->setAttribute('name',$value); $item->setAttribute('key', $value); $node->appendChild($item); } $node->setAttribute('default', $values[0]); $nodes[] = $node; } $node = $dom->createElement('argument'); return $nodes; } protected function createSpecialScArgs($dom) { $node = $dom->createElement('argument'); $node->setAttribute('key', 'Spacecraft_name'); $node->setAttribute('name', $key); $node->setAttribute('type', 'list'); foreach ($this->spacecraft as $value) { $item = $dom->createElement('item'); $item->setAttribute('name',$value); $item->setAttribute('key', $value); $node->appendChild($item); } $node->setAttribute('default', $this->spacecraft[0]); return $node; } public function makeArgumentsList() { if (!file_exists(SimuTargetsXml)) exit('NOT YET!'.PHP_EOL); if (file_exists($this->templateFile)) unlink($this->templateFile); $TemplatesXml = new DomDocument("1.0"); $TemplatesXml->formatOutput = TRUE; $TemplatesXml->preserveWhiteSpace = FALSE; $rootNode = $TemplatesXml->createElement('paramTemplateList'); $TemplatesXml->appendChild($rootNode); $TargetsXml = new DomDocument("1.0"); $TargetsXml->load(SimuTargetsXml); $targets = $TargetsXml->getElementsByTagName('Target'); foreach ($targets as $target) { if ($target->hasAttribute($this->baseID)) { echo $target->getAttribute('xml:id').PHP_EOL; foreach ($this->soapMethods as $soapMethod) { $paramNode = $TemplatesXml->createElement('paramTemplate'); $paramNode->setAttribute('fileName','##internalField####currentSheet##'); $argsNode = $TemplatesXml->createElement('arguments'); $paramNode->appendChild($argsNode); $specialNodes = $this->createSpecialArgs($TemplatesXml); foreach ($specialNodes as $specialNode) $argsNode->appendChild($specialNode); if ($soapMethod == "calculateDataPointValue") { $missionGrps = json_decode(file_get_contents(RemoteData.$target->nodeValue.".json"), true); $node = $TemplatesXml->createElement('argument'); $node->setAttribute('key', 'url_XYZ'); $node->setAttribute('name', 'Mission Name'); $node->setAttribute('type', 'list'); foreach ($missionGrps as $grp => $missions) { foreach ( $missions as $mission => $datasets) { echo 'MISSION: '.$mission.PHP_EOL; foreach ($datasets as $dataset => $parameters) { echo " ".$dataset.PHP_EOL; foreach ($parameters as $param => $value) { $item = $TemplatesXml->createElement('item'); $item->setAttribute('name', $mission); $item->setAttribute('key', $value); $node->appendChild($item); } } } } //TODO select default s/c for each target $node->setAttribute('default', $value); $argsNode->appendChild($node); $paramNode->setAttribute('paramId', $this->prefix."/xyz"); } else // calculateDataPointValue_Spacecraft { $scNode = $this->createSpecialScArgs($TemplatesXml); $argsNode->appendChild($scNode); $paramNode->setAttribute('paramId', $this->prefix."/sc"); } $rootNode->appendChild($paramNode); } } } $TemplatesXml->save(RemoteData.$this->baseID."/".$this->templateFile); } public function getData($params) { // $r = print_r($params,true); // error_log($r,3,'/home/budnik/LOG'); if (strpos('xyz', $params['ResourceID']) > 0) $realSoapMethod = $this->soapMethods[0]; else $realSoapMethod = $this->soapMethods[1]; $params['ResourceID'] = $this->resourceID; try { $client = new SoapClient($this->url."/".$this->WSDL, array( 'wsdl_cache' => 0, 'trace' => 1, 'soap_version'=>SOAP_1_2 )); } catch (SoapFault $exception) { throw new Exception($exception->getMessage()." ".$exception->getTraceAsString()); } $realSoapMethod = $this->soapMethods[0]; try { $file = $client->__soapCall($realSoapMethod, array($params)); } catch (SoapFault $exception) { throw new Exception($exception->getMessage()." ".$exception->getTraceAsString()); } return $file; } } ?>