Commit bb3666936061f286f84b9be6b278c5988ceb5376

Authored by Benjamin Renard
2 parents fe226876 782f5cae

Merge branch master into install-rework

generic_data/SpecialSettings/Settings.xml
1 <?xml version="1.0"?> 1 <?xml version="1.0"?>
2 -<users>  
3 - <user xml:id="budnik"> 2 +<users>
  3 + <user xml:id="genot">
4 <!--- 1024*1024*1000 pour 1000Mo --> 4 <!--- 1024*1024*1000 pour 1000Mo -->
5 - <setting name="DISK_QUOTA" value="1048576000"/> 5 + <setting name="DISK_QUOTA" value="1048576000"/>
  6 + <setting isSetting='true' name="memory_limit" value="100000000"/>
  7 + <setting isSetting='true' name="max_execution_time" value="1200"/>
  8 + </user>
  9 + <user xml:id="budnik">
  10 + <!--- 1024*1024*1000 pour 1000Mo -->
  11 + <setting name="DISK_QUOTA" value="1048576000"/>
6 <setting isSetting='true' name="memory_limit" value="100000000"/> 12 <setting isSetting='true' name="memory_limit" value="100000000"/>
7 <setting isSetting='true' name="max_execution_time" value="1200"/> 13 <setting isSetting='true' name="max_execution_time" value="1200"/>
8 </user> 14 </user>
js/app/controllers/ExplorerModule.js
@@ -105,29 +105,19 @@ Ext.define(&#39;amdaDesktop.ExplorerModule&#39;, @@ -105,29 +105,19 @@ Ext.define(&#39;amdaDesktop.ExplorerModule&#39;,
105 region: 'center' 105 region: 'center'
106 }, 106 },
107 { 107 {
108 - xtype: 'label',  
109 - text: 'Log:',  
110 - margin: '10 0 -5 0',  
111 - region: 'south',  
112 - height: 20  
113 - },  
114 - {  
115 xtype: 'panel', 108 xtype: 'panel',
  109 + title: 'Log',
116 id: 'LogPanel', 110 id: 'LogPanel',
  111 + collapsible: true,
  112 + iconCls: 'icon-align-left',
117 region: 'south', 113 region: 'south',
118 - height: 150,  
119 split: true, 114 split: true,
120 - layout: {  
121 - type: 'vbox',  
122 - align: 'stretch',  
123 - autoSize: true  
124 - },  
125 - autoScroll: true, 115 + height: 150,
126 stateful: true, 116 stateful: true,
127 stateId: 'LogPanel', 117 stateId: 'LogPanel',
128 - buttons: [{  
129 - scope: this,  
130 - text: 'Clear', 118 + tools: [{
  119 + type: 'trash',
  120 + tooltip: 'Clear logs',
131 handler: function () { 121 handler: function () {
132 var logPanel = win.items.get('LogPanel') 122 var logPanel = win.items.get('LogPanel')
133 logPanel.removeAll() 123 logPanel.removeAll()
js/app/views/ExplorerUI.js
@@ -506,6 +506,9 @@ Ext.define(&#39;amdaUI.ExplorerUI&#39;, { @@ -506,6 +506,9 @@ Ext.define(&#39;amdaUI.ExplorerUI&#39;, {
506 }, 506 },
507 507
508 itemcontextmenu: function(view, rec, item, index, e){ 508 itemcontextmenu: function(view, rec, item, index, e){
  509 + // Add record to selection model
  510 + view.ownerCt.getSelectionModel().select(rec);
  511 +
509 // block other events 512 // block other events
510 e.stopEvent(); 513 e.stopEvent();
511 514
js/resources/css/amda.css
@@ -104,6 +104,10 @@ @@ -104,6 +104,10 @@
104 background-image:url( ../images/16x16/workspaces.png ) !important; 104 background-image:url( ../images/16x16/workspaces.png ) !important;
105 } 105 }
106 106
  107 +.icon-align-left {
  108 + background-image: url(../images/16x16/align_left.png);
  109 +}
  110 +
107 .icon-delete { 111 .icon-delete {
108 background-image:url( ../images/icons/fam/delete.gif ) !important; 112 background-image:url( ../images/icons/fam/delete.gif ) !important;
109 } 113 }
@@ -121,6 +125,14 @@ background-image: url(../images/small_cancel_centered.png); @@ -121,6 +125,14 @@ background-image: url(../images/small_cancel_centered.png);
121 } 125 }
122 126
123 /** 127 /**
  128 +Custom tool typ icons
  129 + */
  130 +
  131 +.x-tool-trash {
  132 + background-image: url(../images/trash.png) !important;
  133 +}
  134 +
  135 +/**
124 * RangeMenu Styles 136 * RangeMenu Styles
125 **/ 137 **/
126 138
@@ -489,6 +501,10 @@ p + p { @@ -489,6 +501,10 @@ p + p {
489 opacity: 1.0 !important; 501 opacity: 1.0 !important;
490 } 502 }
491 503
  504 +#LogPanel-splitter-collapseEl {
  505 + display: none;
  506 +}
  507 +
492 .epntap_grid .disabled_row { 508 .epntap_grid .disabled_row {
493 color: gray; 509 color: gray;
494 } 510 }
@@ -504,4 +520,4 @@ p + p { @@ -504,4 +520,4 @@ p + p {
504 .epntap_cell { 520 .epntap_cell {
505 padding: 4px; 521 padding: 4px;
506 white-space: normal; 522 white-space: normal;
507 -}  
508 \ No newline at end of file 523 \ No newline at end of file
  524 +}
js/resources/images/16x16/align_left.png 0 โ†’ 100644

201 Bytes

js/resources/images/trash.png 0 โ†’ 100644

356 Bytes

php/AMDA_METHODS_WSDL.php
@@ -2,17 +2,14 @@ @@ -2,17 +2,14 @@
2 2
3 /** 3 /**
4 * @file AMDA_METHODS_WSDL.php 4 * @file AMDA_METHODS_WSDL.php
5 -* @brief PHP SoapServer for IMPEx WebServices  
6 -*  
7 -* @version $Id: $  
8 -* 5 +* @brief PHP SoapServer for IMPEx WebServices
9 */ 6 */
10 7
11 - require_once 'config.php';  
12 -  
13 - ini_set("soap.wsdl_cache_enabled", "0"); // desactive le cache WSDL  
14 - $server = new SoapServer('../public/wsdl/Methods_AMDA.wsdl');  
15 - $server->setClass('WebServer');  
16 - $server->handle(); 8 + require_once 'config.php';
17 9
  10 + ini_set("soap.wsdl_cache_enabled", "0"); // desactive le cache WSDL
  11 + $server = new SoapServer('../public/wsdl/Methods_AMDA.wsdl');
  12 + $server->setClass('WebServer');
  13 + $server->handle();
  14 +
18 ?> 15 ?>
19 \ No newline at end of file 16 \ No newline at end of file
php/classes/WSClientInterface.php renamed to php/WebServices/Client/WSClientInterface.php
@@ -4,6 +4,7 @@ abstract class WSOutputFileFormat @@ -4,6 +4,7 @@ abstract class WSOutputFileFormat
4 const NETCDF = "netCDF"; 4 const NETCDF = "netCDF";
5 const VOTABLE = "VOTable"; 5 const VOTABLE = "VOTable";
6 const ASCII = "ASCII"; 6 const ASCII = "ASCII";
  7 + const CDF = "CDF";
7 } 8 }
8 9
9 abstract class WSOutputTimeFormat 10 abstract class WSOutputTimeFormat
@@ -29,7 +30,7 @@ abstract class WSOrbitUnit @@ -29,7 +30,7 @@ abstract class WSOrbitUnit
29 30
30 abstract class WSSpacecraft 31 abstract class WSSpacecraft
31 { 32 {
32 - const CASSINI = "Cassini_Public"; 33 + const CASSINI = "Cassini";
33 const GALILEO = "Galileo"; 34 const GALILEO = "Galileo";
34 const VOYAGER1 = "Voyager_1"; 35 const VOYAGER1 = "Voyager_1";
35 const VOYAGER2 = "Voyager_2"; 36 const VOYAGER2 = "Voyager_2";
@@ -117,7 +118,9 @@ Interface WSClientInterface @@ -117,7 +118,9 @@ Interface WSClientInterface
117 118
118 public function getParameter($startTime, $stopTime, $parameterID, $sampling = 0, $userID = "", $password = "", 119 public function getParameter($startTime, $stopTime, $parameterID, $sampling = 0, $userID = "", $password = "",
119 $outputFormat = WSOutputFileFormat::NETCDF, $timeFormat = WSOutputTimeFormat::ISO, $gzip = 0); 120 $outputFormat = WSOutputFileFormat::NETCDF, $timeFormat = WSOutputTimeFormat::ISO, $gzip = 0);
120 - 121 +
  122 + public function getStatus($processID);
  123 +
121 public function getDataset($startTime, $stopTime, $datasetID, $sampling = 0, $userID = "", $password = "", 124 public function getDataset($startTime, $stopTime, $datasetID, $sampling = 0, $userID = "", $password = "",
122 $outputFormat = WSOutputFileFormat::NETCDF, $timeFormat = WSOutputTimeFormat::ISO, $gzip = 0); 125 $outputFormat = WSOutputFileFormat::NETCDF, $timeFormat = WSOutputTimeFormat::ISO, $gzip = 0);
123 126
php/classes/WSClientREST.php renamed to php/WebServices/Client/WSClientREST.php
php/classes/WSClientSOAP.php renamed to php/WebServices/Client/WSClientSOAP.php
@@ -83,7 +83,16 @@ class WSClientSOAP implements WSClientInterface @@ -83,7 +83,16 @@ class WSClientSOAP implements WSClientInterface
83 83
84 return $this->call(__FUNCTION__, $params); 84 return $this->call(__FUNCTION__, $params);
85 } 85 }
86 - 86 +
  87 + public function getStatus($processID)
  88 + {
  89 + $params = array('parameters' => array(
  90 + "id" => $processID
  91 + ));
  92 +
  93 + return $this->call(__FUNCTION__, $params);
  94 + }
  95 +
87 public function getDataset($startTime, $stopTime, $datasetID, $sampling = 0, $userID = "", $password = "", 96 public function getDataset($startTime, $stopTime, $datasetID, $sampling = 0, $userID = "", $password = "",
88 $outputFormat = WSOutputFileFormat::NETCDF, $timeFormat = WSOutputTimeFormat::ISO, $gzip = 0) 97 $outputFormat = WSOutputFileFormat::NETCDF, $timeFormat = WSOutputTimeFormat::ISO, $gzip = 0)
89 { 98 {
php/testWebServer.php renamed to php/WebServices/Tests/testWebServer.php
1 <?php 1 <?php
2 2
3 -require_once("classes/WSClientSOAP.php");  
4 -require_once("classes/WSClientREST.php"); 3 +require_once("../Client/WSClientSOAP.php");
  4 +//require_once("../Client/WSClientREST.php");
5 5
6 function runSuiteTests($client) 6 function runSuiteTests($client)
7 { 7 {
@@ -11,44 +11,44 @@ function runSuiteTests($client) @@ -11,44 +11,44 @@ function runSuiteTests($client)
11 echo "[ERROR] - Error during call of isAlive function".PHP_EOL; 11 echo "[ERROR] - Error during call of isAlive function".PHP_EOL;
12 else 12 else
13 echo "[OK] - isAlive".PHP_EOL; 13 echo "[OK] - isAlive".PHP_EOL;
14 - 14 +
15 //Test getTimeTablesList function without userID & password 15 //Test getTimeTablesList function without userID & password
16 - $res = $client->getTimeTablesList();  
17 - if (!isset($res) || !$res->success)  
18 - echo "[ERROR] - Error during call of getTimeTablesList function - Test 1".PHP_EOL;  
19 - else  
20 - echo "[OK] - getTimeTablesList - Test 1 - ".$res->TimeTablesList.PHP_EOL;  
21 - 16 +// $res = $client->getTimeTablesList();
  17 +// if (!isset($res) || !$res->success)
  18 +// echo "[ERROR] - Error during call of getTimeTablesList function - Test 1".PHP_EOL;
  19 +// else
  20 +// echo "[OK] - getTimeTablesList - Test 1 - ".$res->TimeTablesList.PHP_EOL;
  21 +
22 //Test getTimeTablesList function with userID & password 22 //Test getTimeTablesList function with userID & password
23 - $res = $client->getTimeTablesList("testKernel", "amda"); 23 + $res = $client->getTimeTablesList("budnik", "Sacre-Cour");
24 if (!isset($res) || !$res->success) 24 if (!isset($res) || !$res->success)
25 echo "[ERROR] - Error during call of getTimeTablesList function - Test 2".PHP_EOL; 25 echo "[ERROR] - Error during call of getTimeTablesList function - Test 2".PHP_EOL;
26 else 26 else
27 echo "[OK] - getTimeTablesList - Test 2 - ".$res->TimeTablesList.PHP_EOL; 27 echo "[OK] - getTimeTablesList - Test 2 - ".$res->TimeTablesList.PHP_EOL;
28 - 28 +
29 //Test getTimeTable function without userID & password 29 //Test getTimeTable function without userID & password
30 - $res = $client->getTimeTable("sharedtt_0");  
31 - if (!isset($res) || !$res->success)  
32 - echo "[ERROR] - Error during call of getTimeTable function - Test 1".PHP_EOL;  
33 - else  
34 - echo "[OK] - getTimeTable - Test 1 - ".$res->ttFileURL.PHP_EOL;  
35 - 30 +// $res = $client->getTimeTable("sharedtt_0");
  31 +// if (!isset($res) || !$res->success)
  32 +// echo "[ERROR] - Error during call of getTimeTable function - Test 1".PHP_EOL;
  33 +// else
  34 +// echo "[OK] - getTimeTable - Test 1 - ".$res->ttFileURL.PHP_EOL;
  35 +
36 //Test getTimeTable function with userID & password 36 //Test getTimeTable function with userID & password
37 - $res = $client->getTimeTable("tt_0", "testKernel", "amda"); 37 + $res = $client->getTimeTable("tt_0", "budnik", "Sacre-Cour");
38 if (!isset($res) || !$res->success) 38 if (!isset($res) || !$res->success)
39 echo "[ERROR] - Error during call of getTimeTable function - Test 2".PHP_EOL; 39 echo "[ERROR] - Error during call of getTimeTable function - Test 2".PHP_EOL;
40 else 40 else
41 echo "[OK] - getTimeTable - Test 2 - ".$res->ttFileURL.PHP_EOL; 41 echo "[OK] - getTimeTable - Test 2 - ".$res->ttFileURL.PHP_EOL;
42 - 42 +
43 //Test getParameterList function for impex user 43 //Test getParameterList function for impex user
44 - $res = $client->getParameterList("impex");  
45 - if (!isset($res) || !$res->success)  
46 - echo "[ERROR] - Error during call of getParameterList function - Test 1".PHP_EOL;  
47 - else  
48 - echo "[OK] - getParameterList - Test 1 - ".$res->ParameterList->LocalDataBaseParameters.PHP_EOL;  
49 - 44 +// $res = $client->getParameterList("impex");
  45 +// if (!isset($res) || !$res->success)
  46 +// echo "[ERROR] - Error during call of getParameterList function - Test 1".PHP_EOL;
  47 +// else
  48 +// echo "[OK] - getParameterList - Test 1 - ".$res->ParameterList->LocalDataBaseParameters.PHP_EOL;
  49 +
50 //Test getParameterList function with userID & password 50 //Test getParameterList function with userID & password
51 - $res = $client->getParameterList("testKernel", "amda"); 51 + $res = $client->getParameterList("budnik", "Sacre-Cour");
52 if (!isset($res) || !$res->success) 52 if (!isset($res) || !$res->success)
53 echo "[ERROR] - Error during call of getParameterList function - Test 2".PHP_EOL; 53 echo "[ERROR] - Error during call of getParameterList function - Test 2".PHP_EOL;
54 else 54 else
@@ -57,7 +57,7 @@ function runSuiteTests($client) @@ -57,7 +57,7 @@ function runSuiteTests($client)
57 echo " - UserDefinedParameters : ".$res->ParameterList->UserDefinedParameters.PHP_EOL; 57 echo " - UserDefinedParameters : ".$res->ParameterList->UserDefinedParameters.PHP_EOL;
58 echo " - LocalDataBaseParameters : ".$res->ParameterList->LocalDataBaseParameters.PHP_EOL; 58 echo " - LocalDataBaseParameters : ".$res->ParameterList->LocalDataBaseParameters.PHP_EOL;
59 } 59 }
60 - 60 +
61 //Test getObsDataTree function 61 //Test getObsDataTree function
62 $res = $client->getObsDataTree(); 62 $res = $client->getObsDataTree();
63 if (!isset($res) || !$res->success) 63 if (!isset($res) || !$res->success)
@@ -150,7 +150,7 @@ function runSuiteTests($client) @@ -150,7 +150,7 @@ function runSuiteTests($client)
150 } 150 }
151 } 151 }
152 152
153 -$clientSOAP = new WSClientSOAP("http://localhost/NEWAMDA-BENJAMIN/public/wsdl/Methods_AMDA.wsdl"); 153 +$clientSOAP = new WSClientSOAP("http://apus.irap.omp.eu/NEWAMDA/public/wsdl/Methods_AMDA.wsdl");
154 154
155 echo "==> Suite tests for SOAP client".PHP_EOL; 155 echo "==> Suite tests for SOAP client".PHP_EOL;
156 runSuiteTests($clientSOAP); 156 runSuiteTests($clientSOAP);
php/classes/WSUserMgr.php renamed to php/WebServices/WSUserMgr.php
@@ -8,31 +8,37 @@ @@ -8,31 +8,37 @@
8 class WSUserMgr extends UserMgr 8 class WSUserMgr extends UserMgr
9 { 9 {
10 protected $isSoap; 10 protected $isSoap;
  11 +
  12 + private function throwError($errorType, $msg)
  13 + {
  14 + if ($this->isSoap)
  15 + throw new SoapFault($errorType, $msg);
  16 + else
  17 + return array("error" => $msg);
  18 + }
11 19
12 - /*****************************************************************  
13 - * PUBLIC FUNCTIONS  
14 - *****************************************************************/  
15 -  
16 - public function init($username, $password, $sessionID, $isSoap) 20 + public function init($username, $password, $sessionID, $setPathOnly, $isSoap)
17 { 21 {
18 $this->user = trim($username); 22 $this->user = trim($username);
19 - $this->sessionID = trim($sessionID);  
20 - $this->passwd = trim($password); 23 + if (isset($sessionID))
  24 + $this->sessionID = trim($sessionID);
  25 + if (isset($password))
  26 + $this->passwd = trim($password);
21 27
22 $this->isSoap = isset($isSoap); 28 $this->isSoap = isset($isSoap);
23 29
24 - // Check if user has DD session already open, otherwise - login  
25 - if ($this->ddCheckUser() != 0) 30 + if (isset($password) && ! $setPathOnly)
26 { 31 {
27 - if ($this->ddLogin() != 0) { // DD Login if user is not registered  
28 - if ($this->isSoap) throw new SoapFault("error", "Login procedure failed");  
29 - else return array("error" => "Login procedure failed");  
30 - }  
31 - 32 + // Check if user has DD session already open, otherwise - login
32 if ($this->ddCheckUser() != 0) 33 if ($this->ddCheckUser() != 0)
33 { 34 {
34 - if ($this->isSoap) throw new SoapFault("error", "CheckUser procedure failed");  
35 - else return array("error" => "CheckUser procedure failed"); 35 + if ($this->ddLogin() != 0) { // DD Login if user is not registered
  36 + $this->throwError("loginError", "Login procedure failed");
  37 + }
  38 +
  39 + if ($this->ddCheckUser() != 0) {
  40 + $this->throwError("loginError", "CheckUser procedure failed");
  41 + }
36 } 42 }
37 } 43 }
38 44
@@ -41,30 +47,18 @@ class WSUserMgr extends UserMgr @@ -41,30 +47,18 @@ class WSUserMgr extends UserMgr
41 if (!is_dir($this->userdir)) 47 if (!is_dir($this->userdir))
42 { 48 {
43 if (!$this->createDir()) { 49 if (!$this->createDir()) {
44 - if ($this->isSoap) throw new SoapFault("error", "Cannot create UserDir");  
45 - else return array("error" => "Cannot create UserDir"); 50 + $this->throwError("loginError", "Cannot create UserDir");
46 } 51 }
47 } 52 }
48 -  
49 - // $this->userWS = USERPATH . "/" . $this->user . "/WS/";  
50 - // chmod($this->userWS, 0775);  
51 - // $this->userMissions = $this->getAvailableMissionsByUser();  
52 53
53 $this->setPath(); 54 $this->setPath();
54 -  
55 - return array('success' => true);  
56 - }  
57 -  
58 - public function makeUserWS()  
59 - {  
60 - if (file_exists(USERWSDIR.'LocalParams.xml'))  
61 - unlink(USERWSDIR.'LocalParams.xml');  
62 - // if (!file_exists(USERWSDIR.'LocalParams.xml'))  
63 - symlink(DATAPATH.'/LocalData/LocalParams.xml', USERWSDIR.'LocalParams.xml');  
64 - // $this->makeLocalTree(); 55 + if ( $setPathOnly )
  56 + return array('success' => true);
  57 +
  58 + $this->makeLocalTree();
65 $this->makeRemoteTree(); 59 $this->makeRemoteTree();
66 60
67 - return $this->user; 61 + return array('success' => true);
68 } 62 }
69 } 63 }
70 ?> 64 ?>
71 \ No newline at end of file 65 \ No newline at end of file
php/WebServices/WebServer.php 0 โ†’ 100644
@@ -0,0 +1,736 @@ @@ -0,0 +1,736 @@
  1 +<?php
  2 +/**
  3 +* @file WebServer.php
  4 +* @brief Web services AMDA
  5 +*/
  6 +
  7 +class WebServer
  8 +{
  9 + private $isSoap = false;
  10 + private $userID, $userPWD = null, $sessionID = null, $IPclient;
  11 + private $dataFileName;
  12 + private $requestManager = null;
  13 + private $paramLoader = null;
  14 + private $service;
  15 + private $requestTime;
  16 +
  17 + function __construct()
  18 + {
  19 + if (!is_dir(WSConfigClass::getWsResultDir())) mkdir(WSConfigClass::getWsResultDir(), 0775);
  20 + }
  21 +
  22 + protected function init($data)
  23 + {
  24 + $this->requestTime = date('Ymd',time());
  25 +
  26 + if (!isset($data)) {
  27 + $this->userID = 'impex';
  28 + return array('success' => true);
  29 + }
  30 +
  31 + if(is_object($data)){
  32 + $vars = get_object_vars($data);
  33 + $this->isSoap = true;
  34 + }
  35 + else {
  36 + $vars = $data;
  37 + }
  38 +
  39 + if (isset($vars['userID'])){
  40 + $this->userID = $vars['userID'];
  41 + }
  42 + else {
  43 + $this->userID = 'impex';
  44 + }
  45 +
  46 + $this->sessionID = $this->userID;
  47 +
  48 + if (isset($vars['password']))
  49 + $this->userPWD = $vars['password'];
  50 + else
  51 + $this->userPWD = 'impexfp7';
  52 +
  53 + return array('success' => true, 'vars' => $vars);
  54 + }
  55 +
  56 + private function initUserMgr($setPatOnly = false)
  57 + {
  58 + $wsUserMgr = new WSUserMgr();
  59 + $wsUserMgr->init($this->userID, $this->userPWD, $this->sessionID, $setPatOnly, $this->isSoap);
  60 +
  61 + $this->IPclient = $wsUserMgr->getIPClient();
  62 +
  63 + return array('success' => true);
  64 + }
  65 +
  66 + private function throwError($errorType, $msg)
  67 + {
  68 + if ($this->isSoap)
  69 + throw new SoapFault($errorType, $msg);
  70 + else
  71 + return array("error" => $msg);
  72 + }
  73 +
  74 + private function isGetPlotRequest($name){
  75 +
  76 + return (substr($name,0,7) == 'getplot');
  77 + }
  78 +
  79 + private function xsl2vot($inputName, $outputName)
  80 + {
  81 + // Load Time table
  82 + $xml = new DomDocument("1.0");
  83 + if (!@$xml->load($inputName))
  84 + $this->throwError("wokrspaceError", "Cannot load time table $inputName for ".$this->userID);
  85 +
  86 + // Load XSL file
  87 + $xsl = new DomDocument("1.0");
  88 + if (!@$xsl->load(WSConfigClass::getXslDir()."xml2vot.xsl"))
  89 + $this->throwError("systemError", "Cannot load xsl file");
  90 +
  91 + // Import XSL and write output file in vot format
  92 + $xslt = new XSLTProcessor();
  93 + $xslt->importStylesheet($xsl);
  94 + $vot = new DomDocument("1.0");
  95 + if (!@$vot->loadXML($xslt->transformToXML($xml)))
  96 + $this->throwError("systemError", "Cannot convert time table to VOtable");
  97 +
  98 + if (!$vot->save(WSConfigClass::getWsResultDir().$outputName))
  99 + $this->throwError("systemError", "Cannot save time table to result dir");
  100 + }
  101 +
  102 + private function getDatasetInfo($id)
  103 + {
  104 + $dataSetXml = WSConfigClass::getDataSetInfoDir().$id.".xml";
  105 +
  106 + if (!file_exists($dataSetXml))
  107 + $this->throwError("systemError", "Cannot find info file for dataset ".$id);
  108 +
  109 + $dataSetDom = new DomDocument("1.0");
  110 +
  111 + if (!@$dataSetDom->load($dataSetXml))
  112 + $this->throwError("systemError", "Cannot load info file for dataset ".$id);
  113 +
  114 + return $dataSetDom;
  115 + }
  116 +
  117 +/*
  118 +* get user TimeTables list; Shared for impex
  119 +*/
  120 + private function getTimeTablesCatalogsList($object)
  121 + {
  122 + $this->initUserMgr(true);
  123 + $dom = new DOMDocument("1.0");
  124 +
  125 + if ($this->userID == 'impex') {
  126 + $sharedObjMgr = new SharedObjectsMgr();
  127 + if (!@$dom->load($sharedObjMgr->getTreeFilePath()))
  128 + $this->throwError("workspaceError", "Workspace Error : Cannot load Shared TimeTable list");
  129 + }
  130 + else {
  131 + if (!@$dom->load(USERWSDIR.'Tt.xml'))
  132 + $this->throwError("workspaceError", "Workspace Error : Cannot load TimeTable list for ".$this->userID);
  133 + }
  134 +
  135 + $tagName = $object == "timetables" ? "timetabList" : "catalogList";
  136 + $timetabNode = $dom->getElementsByTagName($tagName);
  137 +
  138 + if ($timetabNode->length < 1){
  139 + $this->throwError("workspaceWarning", "Workspace Warning : No $object");
  140 + }
  141 +
  142 + $outDOM = new DOMDocument("1.0");
  143 + $outDOM->formatOutput = TRUE;
  144 + $outDOM->preserveWhiteSpace = FALSE;
  145 +
  146 + $newNode = $outDOM->importNode($timetabNode->item(0),TRUE);
  147 + $outDOM->appendChild($newNode);
  148 +
  149 + $ttListResult = $object.'_'.$this->userID.'_'.$this->requestTime.'.xml';
  150 +
  151 + if (!$outDOM->save(WSConfigClass::getWsResultDir().$ttListResult))
  152 + $this->throwError("workspaceError", "Workspace Error : problem while saving $object list file");
  153 +
  154 + return WSConfigClass::getUrl().$ttListResult;
  155 + }
  156 +
  157 +/*
  158 +* Get corresponding orbit parameter ID
  159 +*/
  160 + private function getOrbitParameter($orbitRequest)
  161 + {
  162 + if (!file_exists(WSConfigClass::getOrbitsXml()))
  163 + $this->throwError('systemError', "No AMDA system orbits file");
  164 +
  165 + $orbitsXml = new DomDocument();
  166 +
  167 + if (!@$orbitsXml->load(WSConfigClass::getOrbitsXml()))
  168 + $this->throwError('systemError', "Cannot load AMDA system orbits file");
  169 +
  170 + $spacecraft = strtolower($orbitRequest['spacecraft']);
  171 + $spacecraft = str_replace('-', '', $spacecraft);
  172 +
  173 + $xpath = new DOMXpath($orbitsXml);
  174 + $path = '//orbites[@mission="'.$spacecraft.'" and @coordinate_system="'.$orbitRequest['coordinateSystem'].'" and @units="'.$orbitRequest['units'].'" ] ';
  175 +
  176 + $orbits = $xpath->query($path);
  177 +
  178 + foreach ($orbits as $orbit)
  179 + {
  180 + $datasetID = strtr($orbit->getAttribute('dataset'),"_","-");
  181 + $dataSetDom = $this->getDatasetInfo($datasetID);
  182 +
  183 + $paramStart = strtotime($dataSetDom->getElementsByTagName('global_start')->item(0)->nodeValue);
  184 + $paramStop = strtotime($dataSetDom->getElementsByTagName('global_stop')->item(0)->nodeValue);
  185 +
  186 + if(($paramStart <= strtotime($orbitRequest['startTime']) && (strtotime($orbitRequest['stopTime'])) <= $paramStop)) {
  187 +
  188 + return array('success' => true,
  189 + 'parameterID' => $orbit->getAttribute('xml:id')
  190 + );
  191 + }
  192 + }
  193 +
  194 + $this->throwError('systemError',
  195 + "Cannot find orbit data for ".$orbitRequest['spacecraft']." for ".$orbitRequest['startTime']."-".$orbitRequest['stopTime']." in ".$orbitRequest['units']." ".$orbitRequest['coordinateSystem']."($paramStart - $paramStop)");
  196 + }
  197 +
  198 + private function doDownloadRequest($interval, $paramList, $formatInfo)
  199 + {
  200 + if (!isset($this->paramLoader))
  201 + $this->paramLoader = new IHMUserParamLoaderClass();
  202 +
  203 + //Build parameter list
  204 + $params = array();
  205 +
  206 + //TODO template arguments to implement ?
  207 + foreach ($paramList['params'] as $paramId)
  208 + {
  209 + $param = new stdClass;
  210 +
  211 + if (preg_match("#^ws_#",$paramId))
  212 + {
  213 + $res = $this->paramLoader->getDerivedParameterNameFromId($paramId);
  214 +
  215 + if (!$res["success"]) {
  216 + $this->throwError("serverError", "Not available derived parameter $paramId");
  217 + }
  218 + $param->paramid = "ws_".$res['name'];
  219 + }
  220 + else if (preg_match("#^wsd_#",$paramId))
  221 + {
  222 + $res = $this->paramLoader->getUploadedParameterNameFromId($paramId);
  223 +
  224 + if (!$res["success"]){
  225 + $this->throwError("serverError", "Not available parameter $paramId");
  226 + }
  227 + $param->paramid = "wsd_".$res['name'];
  228 + }
  229 + else {
  230 + $param->paramid = $paramId;
  231 + }
  232 + $params[] = $param;
  233 + }
  234 +
  235 + $obj = (object)array(
  236 + "sampling" => $interval['sampling'],
  237 + "startDate" => $interval['startTime'],
  238 + "stopDate" => $interval['stopTime'],
  239 + "list" => $params,
  240 + "fileformat" => $formatInfo['format'],
  241 + "timeformat" => $formatInfo['timeFormat'],
  242 + "compression" => $formatInfo['gzip']
  243 + );
  244 +
  245 + if (!isset($this->requestManager))
  246 + $this->requestManager = new RequestManagerClass();
  247 +
  248 + try {
  249 + $downloadResult = $this->requestManager->runWSRequest($this->userID, $this->IPclient, FunctionTypeEnumClass::PARAMS, $this->service, $obj);
  250 + } catch (Exception $e) {
  251 + $this->throwError("executionError", "Exception detected : ".$e->getMessage());
  252 + }
  253 +
  254 + if (!$downloadResult['success']) {
  255 + $this->throwError("serverError", $downloadResult['message']);
  256 + }
  257 +
  258 + if($downloadResult['status'] == 'in_progress') {
  259 + return ['success' => true, 'status' => 'in progress', 'id' => $downloadResult['id']];
  260 + } elseif ($downloadResult['status'] == 'done')
  261 + {
  262 + $this->deleteProcess($downloadResult['id']);
  263 + return array('success' => true, 'status' => 'done', 'dataFileURLs' => WSConfigClass::getUrl().$downloadResult['result']);
  264 + } else {
  265 + return ['success' => false, 'message' => 'Unknown status ' . $downloadResult['status']];
  266 + }
  267 + }
  268 +
  269 +/*
  270 +* delete process after execution :
  271 +* delete temporary files/folders ( JOBS/process_xxxx, RES/DDxxx );
  272 +* delete job node in processManager.xml
  273 +*/
  274 + private function deleteProcess($id)
  275 + {
  276 + $obj = (object)array('id' => $id);
  277 +
  278 + if (!isset($this->requestManager))
  279 + $this->requestManager = new RequestManagerClass();
  280 +
  281 + try {
  282 + $downloadResult = $this->requestManager->runWSRequest($this->userID, $this->IPclient, FunctionTypeEnumClass::PROCESSDELETE, null, $obj);
  283 + } catch (Exception $e) {
  284 + $this->throwError("deleteProcessError", $e->getMessage());
  285 + }
  286 + }
  287 +
  288 +/*
  289 +* generate AUTH token for access to REST services
  290 +*/
  291 + public function getNewToken()
  292 + {
  293 + // generate token from timeStamp and some salt
  294 + $newToken = md5(1321 * (int)( time() / WSConfigClass::$timeLimitQuery));
  295 +
  296 + return array('success' => true, 'token' => $newToken);
  297 + }
  298 +
  299 +/************************** WEB SERVICES **************************************/
  300 +
  301 +/*
  302 +* public data only : user impex
  303 +*/
  304 + public function getObsDataTree()
  305 + {
  306 + $res = $this->init();
  307 + $this->initUserMgr();
  308 +
  309 + $locParamSrc = USERWSDIR.'LocalParams.xml';
  310 + $locParamDst = substr(strtolower(__FUNCTION__),3).'_'.$this->userID.'_'.$this->requestTime.'_AmdaLocalDataBaseParameters.xml';
  311 +
  312 + if (!copy($locParamSrc,WSConfigClass::getWsResultDir().$locParamDst))
  313 + $this->throwError('workspaceError', 'No Amda Local DataBase Parameters description file');
  314 +
  315 + return array('success' => true,'WorkSpace' => array("LocalDataBaseParameters" => WSConfigClass::getUrl().$locParamDst));
  316 + }
  317 +
  318 +/*
  319 +* get Parameter List for given user
  320 +*/
  321 + public function getParameterList($data)
  322 + {
  323 + $res = $this->init($data);
  324 + $this->initUserMgr();
  325 +
  326 + $vars = $res['vars'];
  327 +
  328 + $locParamSrc = USERWSDIR.'LocalParams.xml';
  329 + $wsParamSrc = USERWSDIR.'WsParams.xml';
  330 +
  331 + $locParamDst = substr(strtolower(__FUNCTION__),3).'_'.$this->userID.'_'.$this->requestTime.'_AmdaLocalDataBaseParameters.xml';
  332 + $wsParamDst = substr(strtolower(__FUNCTION__),3).'_'.$this->userID.'_'.$this->requestTime.'_UserDefinedParameters.xml';
  333 +
  334 + if (!copy($locParamSrc, WSConfigClass::getWsResultDir().$locParamDst))
  335 + $this->throwError('workspaceError', 'No Amda Local DataBase Parameters description file for '.$this->userID);
  336 +
  337 + if (!copy($wsParamSrc, WSConfigClass::getWsResultDir().$wsParamDst))
  338 + $this->throwError('workspaceError', 'No User Defined Parameters description file for '.$this->userID);
  339 +
  340 + return array('success' => true,'ParameterList' =>
  341 + array("UserDefinedParameters" => WSConfigClass::getUrl().$wsParamDst,
  342 + "LocalDataBaseParameters" => WSConfigClass::getUrl().$locParamDst,
  343 + "RemoteDataBaseParameters" => "not implemented"));
  344 + }
  345 +
  346 +/*
  347 +* getParameter
  348 +*/
  349 + public function getParameter($data)
  350 + {
  351 + $res = $this->init($data);
  352 +
  353 + if (!$res['success']){
  354 + $this->throwError("requestError", "Cannot parse request");
  355 + }
  356 +
  357 + $this->initUserMgr();
  358 +
  359 + $vars = $res['vars'];
  360 +
  361 + if (strtotime($vars["stopTime"]) <= strtotime($vars["startTime"])){
  362 + $this->throwError("requestError", "Requested time interval should be greater than 0");
  363 + }
  364 +
  365 + $paramId = array();
  366 + array_push($paramId, $vars["parameterID"]);
  367 +
  368 + if (!$vars["timeFormat"])
  369 + $timeFormat = "ISO8601";
  370 + else
  371 + $timeFormat = $vars["timeFormat"];
  372 +
  373 + if (!$vars["gzip"])
  374 + $gzip = 0;
  375 + else
  376 + $gzip = $vars["gzip"];
  377 +
  378 + if (!$vars["stream"])
  379 + $stream = 0;
  380 + else
  381 + $stream = $vars["stream"];
  382 +
  383 + $this->service = strtolower(__FUNCTION__);
  384 +
  385 + $res = $this->doDownloadRequest(
  386 + array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]),
  387 + array("params" => $paramId),
  388 + array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream));
  389 +
  390 + if ($res['success'])
  391 + return $res;
  392 +
  393 + $this->throwError("serverError", $res['message']);
  394 + }
  395 +
  396 +/*
  397 +* get user Catalogs list; Shared for impex
  398 +*/
  399 + public function getCatalogsList($data)
  400 + {
  401 + $this->init($data);
  402 + $this->init($data);
  403 + return array('success' => true, 'CatalogsList' => $this->getTimeTablesCatalogsList('catalogs'));
  404 + }
  405 +
  406 +/*
  407 +* get user TimeTables list; Shared for impex
  408 +*/
  409 + public function getTimeTablesList($data)
  410 + {
  411 + $this->init($data);
  412 +
  413 + return array('success' => true, 'TimeTablesList' => $this->getTimeTablesCatalogsList('timetables'));
  414 + }
  415 +
  416 + public function isAlive()
  417 + {
  418 + return true;
  419 + }
  420 +
  421 +/*
  422 +* get Dataset
  423 +*/
  424 + public function getDataset($data)
  425 + {
  426 + $res = $this->init($data);
  427 +
  428 + if (!$res['success']){
  429 + $this->throwError("requestError", "Cannot parse request");
  430 + }
  431 +
  432 + $this->initUserMgr();
  433 +
  434 + $vars = $res['vars'];
  435 +
  436 + if (strtotime($vars["stopTime"]) <= strtotime($vars["startTime"])){
  437 + $this->throwError("requestError", "Requested time interval should be greater than 0");
  438 + }
  439 +
  440 + $dataSetDom = $this->getDatasetInfo($vars['datasetID']);
  441 +
  442 + $params = $dataSetDom->getElementsByTagName("parameter");
  443 +
  444 + if ($params->length == 0)
  445 + $this->throwError("systemError", "Cannot find parameter list for dataset ".$vars['datasetID']);
  446 +
  447 + $paramId = array();
  448 +
  449 + foreach ($params as $p)
  450 + $paramId[] = $p->nodeValue;
  451 +
  452 + if (!$vars["sampling"])
  453 + {
  454 + $sampling = $dataSetDom->getElementsByTagName('min_sampling')->item(0)->nodeValue;
  455 +
  456 + $units = substr($sampling,-1);
  457 + $sampling = substr($sampling,0,strlen($sampling)-1);
  458 +
  459 + switch ($units) {
  460 +// case 'S':
  461 +// $sampling = floatval($sampling);
  462 +// break;
  463 + case 'M':
  464 + $sampling = floatval($sampling)*60;
  465 + break;
  466 + case 'H':
  467 + $sampling = floatval($sampling)*60*60;
  468 + break;
  469 + default:
  470 + }
  471 + }
  472 + else {
  473 + $sampling = $vars["sampling"];
  474 + }
  475 +
  476 + if (!$vars["timeFormat"])
  477 + $timeFormat = "ISO8601";
  478 + else
  479 + $timeFormat = $vars["timeFormat"];
  480 +
  481 + if (!$vars["gzip"])
  482 + $gzip = 0;
  483 + else
  484 + $gzip = $vars["gzip"];
  485 +
  486 + if (!$vars["stream"])
  487 + $stream = 0;
  488 + else
  489 + $stream = $vars["stream"];
  490 +
  491 + $this->service = strtolower(__FUNCTION__);
  492 +
  493 + $res = $this->doDownloadRequest(
  494 + array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $sampling),
  495 + array("params" => $paramId),
  496 + array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream));
  497 +
  498 + if ($res['success']) return $res;
  499 +
  500 + $this->throwError("serverError", $res['message']);
  501 + }
  502 +
  503 +/*
  504 +* get status for jobs in batch
  505 +*/
  506 + public function getStatus($data)
  507 + {
  508 + $result = $this->init($data);
  509 +
  510 + $id = $result['vars']['id'];
  511 +
  512 + if (!isset($this->requestManager))
  513 + $this->requestManager = new RequestManagerClass();
  514 +
  515 + try
  516 + {
  517 + $res = $this->requestManager->runWSRequest('nobody', 'nobody', FunctionTypeEnumClass::PROCESSGETINFO, null, $id);
  518 + }
  519 + catch (Exception $e)
  520 + {
  521 + // after first getStatus() call process is deleted
  522 + $jobsManager = new WSJobsManagerClass();
  523 +
  524 + try
  525 + {
  526 + $res = $jobsManager->getResultFromProcessId($id);
  527 + if (!$res['success']) {
  528 + $this->throwError("processError","Cannot retrieve process $id info");
  529 + }
  530 +
  531 + $resultTag = $this->isGetPlotRequest($res['result']) ? 'plotURL' : 'dataFileURLs';
  532 +
  533 + return array('success' => true, 'status' => 'done', $resultTag => WSConfigClass::getUrl().$res['result']);
  534 + }
  535 + catch (Exception $e)
  536 + {
  537 + $this->throwError("getResultFromProcessIdError", "Exception detected : ".$e->getMessage());
  538 + }
  539 + }
  540 +
  541 + if (!$res['success']) {
  542 + $this->throwError("processError","Cannot retrieve process $id info");
  543 + }
  544 +
  545 + if ($res['status'] == 'in_progress') {
  546 + return array('success' => true, 'status' => 'in progress');
  547 + }
  548 +
  549 + if ($res['error']) {
  550 + $this->throwError("processError","Process $id error code");
  551 + }
  552 +
  553 + $this->deleteProcess($res['id']);
  554 +
  555 + $resultTag = $this->isGetPlotRequest($res['result']) ? 'plotURL' : 'dataFileURLs';
  556 +
  557 + return array('success' => true, 'status' => $res['status'], $resultTag => WSConfigClass::getUrl().$res['result']);
  558 + }
  559 +
  560 +/*
  561 +* TODO Can be done by TTCONVERT function of AMDA_Kernel - more hard !!!
  562 +* TODO Think about this if merge/union will be also done by AMDA_Kernel
  563 +*
  564 +* get Time Table : shared for impex ; user' for user
  565 +*/
  566 + public function getTimeTable($data)
  567 + {
  568 + $res = $this->init($data);
  569 +
  570 + if (!$res['success']){
  571 + $this->throwError("requestError", "Cannot parse request");
  572 + }
  573 +
  574 + $this->initUserMgr(true);
  575 +
  576 + $ttID = $res['vars']['ttID'];
  577 +
  578 + if ($this->userID == 'impex') {
  579 + $sharedObjMgr = new SharedObjectsMgr();
  580 + $ttSrc = $sharedObjMgr->getDataFilePath('timeTable', $ttID);
  581 + }
  582 + else
  583 + $ttSrc = USERTTDIR.$ttID.'.xml';
  584 +
  585 + if (!file_exists($ttSrc)) {
  586 + $this->throwError("workspaceError", "No such table ".$ttID." for user ".$this->userID);
  587 + }
  588 +
  589 + $ttDst = substr(strtolower(__FUNCTION__), 3)."_".$this->userID."_".$this->requestTime."_$ttID.xml";
  590 +
  591 + //TODO can be done by
  592 + // $res = $this->requestManager->runWSRequest($this->userID, $this->IPclient,FunctionTypeEnumClass::TTCONVERT, null, $ttID);
  593 + $this->xsl2vot($ttSrc,$ttDst);
  594 +
  595 + return array('success' => true, 'ttFileURL' => WSConfigClass::getUrl().$ttDst);
  596 + }
  597 +
  598 +/*
  599 +* get Orbits
  600 +*/
  601 + public function getOrbites($data)
  602 + {
  603 + $res = $this->init($data);
  604 +
  605 + if (!$res['success']){
  606 + $this->throwError("requestError", "Cannot parse request");
  607 + }
  608 +
  609 + $this->initUserMgr();
  610 +
  611 + $vars = $res['vars'];
  612 +
  613 + if (strtotime($vars["stopTime"]) <= strtotime($vars["startTime"])){
  614 + $this->throwError("requestError", "Requested time interval should be greater than 0");
  615 + }
  616 +
  617 + $spacecraft = $vars["spacecraft"];
  618 + $coordinateSystem = $vars["coordinateSystem"];
  619 +
  620 + if (!$vars["units"])
  621 + $units = "km";
  622 + else
  623 + $units = $vars["units"];
  624 +
  625 + $orbitRequest = array("startTime" => $vars["startTime"],
  626 + "stopTime" => $vars["stopTime"],
  627 + "spacecraft" => $spacecraft,
  628 + "coordinateSystem" => $coordinateSystem,
  629 + "units" => $units
  630 + );
  631 +
  632 + $orbitParam = $this->getOrbitParameter($orbitRequest);
  633 +
  634 + $paramId = array();
  635 + array_push($paramId, $orbitParam['parameterID']);
  636 +
  637 + if (!$vars["timeFormat"])
  638 + $timeFormat = "ISO8601";
  639 + else
  640 + $timeFormat = $vars["timeFormat"];
  641 +
  642 + if (!$vars["gzip"])
  643 + $gzip = 0;
  644 + else
  645 + $gzip = $vars["gzip"];
  646 +
  647 + $this->service = strtolower(__FUNCTION__);
  648 +
  649 + $res = $this->doDownloadRequest(
  650 + array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]),
  651 + array("params" => $paramId),
  652 + array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream));
  653 +
  654 + if ($res['success']) return $res;
  655 +
  656 + $this->throwError("serverError",$res['message']);
  657 + }
  658 +
  659 +/*
  660 +* getPlot : predefined; by mission
  661 +*/
  662 + public function getPlot($data)
  663 + {
  664 + $res = $this->init($data);
  665 +
  666 + if (!$res['success']){
  667 + $this->throwError("requestError", "Cannot parse request");
  668 + }
  669 +
  670 + $this->initUserMgr();
  671 +
  672 + $vars = $res['vars'];
  673 + $mission = $vars["missionID"];
  674 +
  675 + $resultFilePrefix = strtolower(__FUNCTION__)."_".$mission."_".date("YmdHms",strtotime($vars["startTime"]))."_".date("YmdHms",strtotime($vars["stopTime"]));
  676 +
  677 + if ($this->userID != "impex")
  678 + $resultFilePrefix .= "_".$this->userID;
  679 +
  680 + $dom = new DomDocument("1.0");
  681 + if (!@$dom->load(WSConfigClass::getXslDir()."AmdaPlots.xml"))
  682 + $this->throwError("systemError", "Cannot load predefined plot definition"); ;
  683 +
  684 + $missionTag = $dom->getElementById($mission);
  685 + $params = $missionTag->getElementsByTagName('param');
  686 +
  687 + $paramsList = array();
  688 + foreach ($params as $param)
  689 + $paramsList[] = $param->getAttribute('name');
  690 +
  691 + $requestObject = (Object) array(
  692 + "nodeType" => "request",
  693 + "file-format" => "PNG",
  694 + "result-file" => $resultFilePrefix,
  695 + "timesrc" => "Interval",
  696 + "startDate" => $vars["startTime"],
  697 + "stopDate" => $vars["stopTime"],
  698 + "parameters" => array()
  699 + );
  700 +
  701 + foreach ($paramsList as $paramToPlot)
  702 + {
  703 + $paramObject = (Object) array(
  704 + "paramid" => $paramToPlot
  705 + );
  706 +
  707 + $requestObject->{"parameters"}[] = $paramObject;
  708 + }
  709 +
  710 + $this->service = strtolower(__FUNCTION__);
  711 +
  712 + if (!isset($this->requestManager))
  713 + $this->requestManager = new RequestManagerClass();
  714 +
  715 + try {
  716 + $plotResult = $this->requestManager->runWSRequest($this->userID, $this->IPclient, FunctionTypeEnumClass::PARAMS, $this->service, $requestObject);
  717 + } catch (Exception $e) {
  718 + $this->throwError("plotError", "Exeption detected : ".$e->getMessage());
  719 + }
  720 +
  721 + if (!$plotResult['success']) {
  722 + $this->throwError("serverError", $plotResult['message']);
  723 + }
  724 +
  725 + if($plotResult['status'] == 'in_progress') {
  726 + return ['success' => true, 'status' => 'in progress', 'id' => $plotResult['id']];
  727 + } elseif ($plotResult['status'] == 'done')
  728 + {
  729 + $this->deleteProcess($plotResult['id']);
  730 + return array('success' => true, 'status' => 'done', 'plotFileURL' => WSConfigClass::getUrl().$plotResult['result']);
  731 + } else {
  732 + return ['success' => false, 'message' => 'Unknown status ' . $plotResult['status']];
  733 + }
  734 + }
  735 +}
  736 +?>
php/WebServices/xml/AmdaPlots.xml 0 โ†’ 100755
@@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<missions>
  3 + <mission xml:id='ACE'>
  4 + <param name='sw_vb'/>
  5 + <param name='sw_t'/>
  6 + <param name='sw_n'/>
  7 + <param name='imf'/>
  8 + <param name='imf_mag'/>
  9 + </mission>
  10 + <mission xml:id='WIND'>
  11 + <param name='wnd_swe_vmag'/>
  12 + <param name='wnd_swe_vth'/>
  13 + <param name='wnd_swe_n'/>
  14 + <param name='wnd_b' class="mag"/>
  15 + <param name='wnd_bmag'/>
  16 + </mission>
  17 + <mission xml:id='STEREO-A'>
  18 + <param name='vpbulk_sta'/>
  19 + <param name='vth_sta'/>
  20 + <param name='np_sta'/>
  21 + <param name='sta_b'/>
  22 + <param name='sta_btot'/>
  23 + </mission>
  24 + <mission xml:id='STEREO-B'>
  25 + <param name='vpbulk_stb'/>
  26 + <param name='vth_stb'/>
  27 + <param name='np_stb'/>
  28 + <param name='stb_b'/>
  29 + <param name='stb_btot'/>
  30 + </mission>
  31 + <mission xml:id='VEX'>
  32 + <param name='vex_mag_4s'/>
  33 + <param name='vex_mag_4s_tot'/>
  34 + </mission>
  35 + <mission xml:id='OMNI'>
  36 + <param name='omni_sw_v'/>
  37 + <param name='omni_sw_t'/>
  38 + <param name='omni_sw_n'/>
  39 + <param name='omni_imf' />
  40 + <param name='omni_imf_mag'/>
  41 + </mission>
  42 + <mission xml:id='GEOMAG'>
  43 + <param name='omni_kp'/>
  44 + <param name='omni_dst'/>
  45 + <param name='omni_ae'/>
  46 + </mission>
  47 +</missions>
  48 +
php/WebServices/xml/xml2vot.xsl 0 โ†’ 100644
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
  1 +<xsl:stylesheet version="1.0"
  2 +xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3 +
  4 +<xsl:output method="xml"/>
  5 +
  6 +<xsl:template match="/timetable">
  7 + <VOTABLE version='1.1'>
  8 + <DESCRIPTION>
  9 + Name: <xsl:value-of select="name"/>;
  10 + Description: <xsl:value-of select="description"/>;
  11 + Historic: <xsl:value-of select="history"/>;
  12 + Creation Date : <xsl:value-of select="created"/>;
  13 + </DESCRIPTION>
  14 +<RESOURCE>
  15 +<DESCRIPTION>
  16 + AMDA @ CDPP
  17 +</DESCRIPTION>
  18 +<TABLE>
  19 +<FIELD datatype='char' name='Start Time' ID='TimeIntervalStart' ucd='time.start'>
  20 + <DESCRIPTION>time tag for beginning of interval</DESCRIPTION>
  21 +</FIELD>
  22 +<FIELD datatype='char' name='Stop Time' ID='TimeIntervalStop' ucd='time.stop'>
  23 + <DESCRIPTION>time tag for end of interval</DESCRIPTION>
  24 +</FIELD>
  25 +<DATA>
  26 + <TABLEDATA>
  27 + <xsl:for-each select="intervals">
  28 + <TR>
  29 + <TD><xsl:value-of select="start"/></TD>
  30 + <TD><xsl:value-of select="stop"/></TD>
  31 + </TR>
  32 + </xsl:for-each>
  33 + </TABLEDATA>
  34 + </DATA>
  35 + </TABLE>
  36 + </RESOURCE>
  37 + </VOTABLE>
  38 +</xsl:template>
  39 +</xsl:stylesheet>
php/classes/AmdaAction.php
@@ -844,9 +844,9 @@ class AmdaAction @@ -844,9 +844,9 @@ class AmdaAction
844 } 844 }
845 845
846 /* 846 /*
847 -* Get Jobs en cours 847 +* Get running jobs
848 */ 848 */
849 - public function getJobs() 849 + public function getJobs($obj = null)
850 { 850 {
851 $obj = (object) array(); 851 $obj = (object) array();
852 return $this->executeRequest($obj, FunctionTypeEnumClass::PROCESSRUNNINGINFO); 852 return $this->executeRequest($obj, FunctionTypeEnumClass::PROCESSRUNNINGINFO);
@@ -863,10 +863,10 @@ class AmdaAction @@ -863,10 +863,10 @@ class AmdaAction
863 return array('success' => true); 863 return array('success' => true);
864 } 864 }
865 865
866 - if (isset($obj->username) && isset($obj->password) && isset($obj->sessionID)) {  
867 - //$dd = new WSUserMgr();  
868 - //$dd->init($obj->username,$obj->password,$obj->sessionID);  
869 - return array('success' => false, "message" => "AKKA-KERNEL-INT - WS support not implemented"); 866 + if (isset($obj->username) && isset($obj->password) && isset($obj->sessionID))
  867 + {
  868 + $dd = new WSUserMgr();
  869 + $dd->init($obj->username,$obj->password,$obj->sessionID, false);
870 } 870 }
871 else { 871 else {
872 $dd = new UserMgr(); 872 $dd = new UserMgr();
@@ -881,8 +881,11 @@ class AmdaAction @@ -881,8 +881,11 @@ class AmdaAction
881 return array('success' => false, 'message' => 'ddLogin error: '.$res); 881 return array('success' => false, 'message' => 'ddLogin error: '.$res);
882 } 882 }
883 883
884 - if ($dd->user == 'impex') {  
885 - return array('success' => false, "message" => "AKKA-KERNEL-INT - WS support for IMPEx not implemented"); 884 + if ($dd->user == 'impex')
  885 + {
  886 + //if ($dd->getWsSize() > DISK_QUOTA * 100)
  887 + // error_log('Natacha! It is time to CLEAN UP IMPEX WS!',1,'nbourrel@irap.omp.eu');
  888 +// return array('success' => false, "message" => "AKKA-KERNEL-INT - WS support for IMPEx not implemented");
886 } 889 }
887 else { 890 else {
888 // check disk space 891 // check disk space
php/classes/RequestMgr.php
@@ -241,7 +241,8 @@ class RequestMgr extends AmdaObjectMgr @@ -241,7 +241,8 @@ class RequestMgr extends AmdaObjectMgr
241 if ($obj->timesrc != 'Interval') break; 241 if ($obj->timesrc != 'Interval') break;
242 242
243 foreach ($obj->list as $param) 243 foreach ($obj->list as $param)
244 - { 244 + {
  245 +
245 //TODO not in code spase___IMPEX_ !!! 246 //TODO not in code spase___IMPEX_ !!!
246 //TODO other models (tsyganenko etc) 247 //TODO other models (tsyganenko etc)
247 if (preg_match("#^spase___IMPEX_#", $param->paramid)) 248 if (preg_match("#^spase___IMPEX_#", $param->paramid))
@@ -249,14 +250,16 @@ class RequestMgr extends AmdaObjectMgr @@ -249,14 +250,16 @@ class RequestMgr extends AmdaObjectMgr
249 if ($param->template_args->url_XYZ) $params[] = $param->template_args->url_XYZ; 250 if ($param->template_args->url_XYZ) $params[] = $param->template_args->url_XYZ;
250 } 251 }
251 } 252 }
252 - if (!empty($params)) 253 +
  254 + if (!empty($params))
253 { 255 {
  256 + // tab is not defined, iterate over $obj->tabs?
254 $argsTab['param'] = array_unique($params); 257 $argsTab['param'] = array_unique($params);
255 $argsTab['startTime'] = $tab->{'multi-plot-linked'} ? $obj->startDate : $tab->startDate; 258 $argsTab['startTime'] = $tab->{'multi-plot-linked'} ? $obj->startDate : $tab->startDate;
256 $argsTab['stopTime'] = $tab->{'multi-plot-linked'} ? $obj->startDate : $tab->stopDate; 259 $argsTab['stopTime'] = $tab->{'multi-plot-linked'} ? $obj->startDate : $tab->stopDate;
257 } 260 }
258 if (count($argsTab) > 0) $args[] = $argsTab; 261 if (count($argsTab) > 0) $args[] = $argsTab;
259 - 262 +
260 break; 263 break;
261 case 'statistics' : 264 case 'statistics' :
262 return array('success' => true); 265 return array('success' => true);
@@ -264,23 +267,23 @@ class RequestMgr extends AmdaObjectMgr @@ -264,23 +267,23 @@ class RequestMgr extends AmdaObjectMgr
264 default : 267 default :
265 return array('success' => false, 'message' => "unknown action ".$obj->nodeType); 268 return array('success' => false, 'message' => "unknown action ".$obj->nodeType);
266 } 269 }
267 -  
268 - if (count($args) === 0) return array('success' => true);  
269 - 270 +
  271 + if (count($args) === 0) return array('success' => true);
  272 +
270 try 273 try
271 { 274 {
272 $client = new SoapClient(DD_WSDL); 275 $client = new SoapClient(DD_WSDL);
273 } 276 }
274 catch (SoapFault $exception) 277 catch (SoapFault $exception)
275 - { 278 + {
276 return array('success' => false, 'message' => $exception->faultstring); 279 return array('success' => false, 'message' => $exception->faultstring);
277 } 280 }
278 - 281 +
279 $orbitsXml = new DomDocument("1.0"); 282 $orbitsXml = new DomDocument("1.0");
280 $orbitsXml->load(orbitsAllXml); 283 $orbitsXml->load(orbitsAllXml);
281 $tr = array('_' => ':'); 284 $tr = array('_' => ':');
282 -  
283 - foreach ($args as $tab) 285 +
  286 + foreach ($args as $tab)
284 { 287 {
285 $startTime = $tab['startTime']; 288 $startTime = $tab['startTime'];
286 $stopTime = $tab['stopTime']; 289 $stopTime = $tab['stopTime'];
@@ -309,8 +312,8 @@ class RequestMgr extends AmdaObjectMgr @@ -309,8 +312,8 @@ class RequestMgr extends AmdaObjectMgr
309 return array('success' => false, 'message' => "Too big interval for IMPEX request : ".IMPEX_INTERVAL_LIMIT/86400.." day limit!"); 312 return array('success' => false, 'message' => "Too big interval for IMPEX request : ".IMPEX_INTERVAL_LIMIT/86400.." day limit!");
310 } 313 }
311 } 314 }
312 -  
313 - return array('success' => true); 315 +
  316 + return array('success' => true);
314 } 317 }
315 } 318 }
316 ?> 319 ?>
php/classes/UserMgr.php
@@ -542,7 +542,6 @@ unlink(USERWSDIR.&#39;RemoteParams.xml&#39;); @@ -542,7 +542,6 @@ unlink(USERWSDIR.&#39;RemoteParams.xml&#39;);
542 public function ddCheckUser() 542 public function ddCheckUser()
543 { 543 {
544 $this->IP = $this->getIPclient(); 544 $this->IP = $this->getIPclient();
545 -  
546 $cmdCheckUser = "DDCheckUser ".$this->IP." ".$this->user." 1> /dev/null 2> /dev/null"; 545 $cmdCheckUser = "DDCheckUser ".$this->IP." ".$this->user." 1> /dev/null 2> /dev/null";
547 system($cmdCheckUser, $res); 546 system($cmdCheckUser, $res);
548 return $res; 547 return $res;
php/classes/WebServer.php deleted
@@ -1,1037 +0,0 @@ @@ -1,1037 +0,0 @@
1 -<?php  
2 -/**  
3 -* @file WebServer.php  
4 -* @brief Web services AMDA  
5 -*  
6 -* @version $Id: WebServer.php 2968 2015-06-29 13:17:00Z natacha $  
7 -*/  
8 -class WebResultMgr  
9 -{  
10 - private $resDOM;  
11 - private $rootEl;  
12 - private $resXP;  
13 - private $requestManager = null;  
14 - private $paramLoader = null;  
15 -  
16 - function __construct()  
17 - {  
18 - if (!is_dir(WSRESULT))  
19 - mkdir(WSRESULT);  
20 - chmod(WSRESULT,0775);  
21 -  
22 - $this->resDOM = new DOMDocument("1.0");  
23 - $this->resDOM->formatOutput = TRUE;  
24 - $this->resDOM->preserveWhiteSpace = FALSE;  
25 -  
26 - if (!file_exists(wsResultsXml))  
27 - {  
28 - $this->rootEl = $this->resDOM->createElement('wsresults');  
29 - $this->resDOM->appendChild($this->rootEl);  
30 - $this->resDOM->save(wsResultsXml);  
31 - }  
32 -  
33 - $this->resDOM->load(wsResultsXml);  
34 -  
35 - $this->resXP = new DOMXPath($this->resDOM);  
36 -  
37 - $this->rootEl = $this->resDOM->documentElement;  
38 - }  
39 -  
40 - public function addResult($function_name,$vars,$user,$IP,$output){  
41 - $nodes = $this->rootEl->getElementsByTagName($function_name);  
42 - if($nodes->length < 1){  
43 - $funcNode = $this->resDOM->createElement($function_name);  
44 - $this->rootEl->appendChild($funcNode);  
45 - }  
46 - else  
47 - $funcNode = $nodes->item(0);  
48 -  
49 - $oldOutput = $this->resXP->query('//'.$function_name.'/result[@output="'.$output.'"]');  
50 - if ($oldOutput->length > 0)  
51 - $funcNode->removeChild($oldOutput->item(0));  
52 -  
53 - $resNode = $this->resDOM->createElement('result');  
54 - $resNode->setAttribute('date',time());  
55 - $resNode->setAttribute('user',$user);  
56 -// $resNode->setAttribute('IP',$IP);  
57 - $resNode->setAttribute('input',json_encode($vars));  
58 - $resNode->setAttribute('output',$output);  
59 - $funcNode->appendChild($resNode);  
60 -  
61 - $this->resDOM->save(wsResultsXml);  
62 -  
63 - return $resNode;  
64 - }  
65 -  
66 - public function getResOutputName($function_name,$user,$suffixe,$extension)  
67 - {  
68 - $outputFile = WSRESULT.$function_name."_".$user;  
69 - if (isset($suffixe))  
70 - $outputFile .= ("_".$suffixe);  
71 - if (isset($extension))  
72 - $outputFile .= (".".$extension);  
73 - else  
74 - $outputFile .= ".xml";  
75 - return $outputFile;  
76 - }  
77 -}  
78 -  
79 -class WebServer  
80 -{  
81 - private $isSoap = false;  
82 - private $userID, $userPWD, $sessionID;  
83 - private $wsUserMgr;  
84 - private $resultMgr, $myParamsInfoMgr;  
85 - private $dataFileName;  
86 -  
87 - function __construct() {  
88 - $this->userID = 'impex';  
89 - $this->userPWD = 'impexfp7';  
90 - $this->sessionID = $this->userID;  
91 - $this->myParamsInfoMgr = new ParamsInfoMgr();  
92 - $this->resultMgr = new WebResultMgr();  
93 - }  
94 -  
95 - protected function init($data) {  
96 - if(is_object($data))  
97 - {  
98 - $vars = get_object_vars($data);  
99 - $this->isSoap = true;  
100 - }  
101 - else  
102 - $vars = $data;  
103 -  
104 - if (isset($vars['userID']))  
105 - {  
106 - $this->userID = $vars['userID'];  
107 - $this->sessionID = $this->userID;  
108 - }  
109 - else {  
110 - $this->userID = 'impex';  
111 - $this->sessionID = $this->userID;  
112 - }  
113 - if (isset($vars['password']))  
114 - $this->userPWD = $vars['password'];  
115 - else  
116 - $this->userPWD = 'impexfp7';  
117 - return array('success' => true, 'vars' => $vars);  
118 - }  
119 -  
120 - private function setID(){  
121 -  
122 - $nb_min = 10000;  
123 - $nb_max = 99999;  
124 - $nombre = mt_rand($nb_min,$nb_max);  
125 -  
126 - $this->IP = $this->getIPclient();  
127 -  
128 - return "PP".$nombre;  
129 - }  
130 -  
131 -/**  
132 - * Function getIPclient return the IP client sent a request for needs DD scripts (DDHtmlLogin, DDCheckUser, DD_Search)  
133 - *  
134 - * @param void  
135 - * @return string  
136 - */  
137 - private function getIPclient(){  
138 -  
139 - if (getenv('REMOTE_ADDR')) {  
140 - $realIP = getenv('REMOTE_ADDR');  
141 - }  
142 - else {  
143 - //get local IP  
144 - $command="hostname -i";  
145 - $realIP = exec($command);  
146 - }  
147 -  
148 - return $realIP;  
149 - }  
150 -  
151 - private function timeInterval2Days($TimeInterval){  
152 -  
153 - $divDays = 60*60*24;  
154 - $nbDays = floor($TimeInterval / $divDays);  
155 - $divHours = 60*60;  
156 - $nbHours = floor(($TimeInterval - $divDays*$nbDays)/$divHours);  
157 - $nbMin = floor(($TimeInterval - $divDays*$nbDays - $divHours*$nbHours)/60);  
158 - $nbSec = $TimeInterval - $divDays*$nbDays - $divHours*$nbHours - $nbMin*60;  
159 -  
160 - $DD = sprintf("%03d", $nbDays); // format ex. 005 not 5  
161 - $HH = sprintf("%02d", $nbHours); // format ex. 25  
162 - $MM = sprintf("%02d", $nbMin); // format ex. 03 not 3  
163 - $SS = sprintf("%02d", $nbSec); // format ex. 02 not 2  
164 -  
165 - return $DD.':'.$HH.':'.$MM.':'.$SS;  
166 -  
167 - }  
168 -  
169 -/* Start Time into AMDA format YYYY:DOY-1:HH:MM:SS */  
170 - private function startTime2Days($startTime){  
171 -  
172 - $ddStart = getdate($startTime);  
173 - $date_start = sprintf("%04d",$ddStart["year"]).":".sprintf("%03d", $ddStart["yday"]).":"  
174 - .sprintf("%02d",$ddStart["hours"]).":".sprintf("%02d",$ddStart["minutes"]).":"  
175 - .sprintf("%02d",$ddStart["seconds"]);  
176 - return $date_start;  
177 - }  
178 -  
179 - private function rrmdir($dir){  
180 - if (is_dir($dir)) {  
181 - $objects = scandir($dir);  
182 -  
183 - foreach ($objects as $object) { // Recursively delete a directory that is not empty and directorys in directory  
184 - if ($object != "." && $object != "..") { // If object isn't a directory recall recursively this function  
185 - if (filetype($dir."/".$object) == "dir")  
186 - $this->rrmdir($dir."/".$object);  
187 - else  
188 - unlink($dir."/".$object);  
189 - }  
190 - }  
191 - reset($objects);  
192 - rmdir($dir);  
193 - }  
194 - }  
195 -  
196 - protected function initUserMgr() {  
197 - if (isset($this->wsUserMgr))  
198 - return array('success' => true);  
199 - $this->wsUserMgr = new WSUserMgr();  
200 - $this->wsUserMgr->init($this->userID,$this->userPWD,$this->sessionID, $this->isSoap);  
201 -  
202 - return array('success' => true);  
203 - }  
204 -  
205 - public function getTimeTablesList($data) {  
206 - if(is_object($data))  
207 - {  
208 - $vars = get_object_vars($data);  
209 - $this->isSoap = true;  
210 - }  
211 - else  
212 - $vars = $data;  
213 - if (isset($vars['userID']) && $vars['userID'] == 'impex'){  
214 - if ($this->isSoap) throw new SoapFault("server00","Server Error: AMDA Login procedure failed");  
215 - else return array("error" => "Server Error: AMDA Login procedure failed");  
216 - }  
217 -  
218 -  
219 - $res = $this->init($data);  
220 - $vars = $res['vars'];  
221 -  
222 - $ttListWSresult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID);  
223 -  
224 - $dom = new DOMDocument("1.0");  
225 - if ($this->userID == 'impex') {  
226 - $sharedObjMgr = new SharedObjectsMgr();  
227 - $loadDom = $dom->load($sharedObjMgr->getTreeFilePath());  
228 - }  
229 - else  
230 - $loadDom = $dom->load(USERPATH.$this->userID.'/WS/Tt.xml');  
231 -  
232 - if ($loadDom == FALSE){  
233 - if ($this->isSoap) throw new SoapFault("server00","Server Error: AMDA Login procedure failed");  
234 - else return array("error" => "Server Error: AMDA Login procedure failed");  
235 - }  
236 -  
237 - $timetabNode = $dom->documentElement->getElementsByTagName('timetabList');  
238 -  
239 - if ($timetabNode->length < 1){  
240 - if ($this->isSoap) throw new SoapFault("server03","Cannot reach TT list");  
241 - else return array('success' => false, 'message' => "Server Error: Cannot reach TT list");  
242 - }  
243 - $outDOM = new DOMDocument("1.0");  
244 - $outDOM->formatOutput = TRUE;  
245 - $outDOM->preserveWhiteSpace = FALSE;  
246 -  
247 - $newNode = $outDOM->importNode($timetabNode->item(0),TRUE);  
248 - $outDOM->appendChild($newNode);  
249 -  
250 -  
251 - $outXP = new domxpath($outDOM);  
252 - $ttNodes = $outXP->query('//timetab');  
253 -  
254 - $outDOM->save($ttListWSresult);  
255 -  
256 - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID,$ttListWSresult);  
257 -  
258 - $ttListResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$ttListWSresult);  
259 -  
260 - $timeTablesList = array('success' => true, 'TimeTablesList' => $ttListResult);  
261 -  
262 - return $timeTablesList;  
263 -  
264 - }  
265 -  
266 - public function getTimeTable($data) {  
267 - $res = $this->init($data);  
268 -  
269 - $vars = $res['vars'];  
270 - $ttID = $vars['ttID'];  
271 -  
272 - if ($this->userID == 'impex') {  
273 - $sharedObjMgr = new SharedObjectsMgr();  
274 - $ttSrc = $sharedObjMgr->getDataFilePath('timeTable', $ttID);  
275 - }  
276 - else  
277 - $ttSrc = USERPATH.$this->userID.'/TT/'.$ttID.'.xml';  
278 -  
279 - if (!file_exists($ttSrc)) {  
280 - if ($this->isSoap) throw new SoapFault("server03","Cannot reach time table");  
281 - else return array('success' => false, 'message' => "Cannot reach time table");  
282 - }  
283 -  
284 - $ttWSresult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID,$ttID);  
285 -  
286 - if (!copy($ttSrc,$ttWSresult)){  
287 - if ($this->isSoap) throw new SoapFault("server04","Cannot copy time table");  
288 - else return array('success' => false, 'message' => "Cannot copy time table");  
289 - }  
290 -  
291 - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID, $ttWSresult);  
292 -  
293 - $myTimeTableMgr = new TimeTableMgr($this->userID);  
294 - $ttWSresultVot = $myTimeTableMgr->xsl2vot($ttWSresult);  
295 - if( file_exists ( $ttWSresultVot)){  
296 - copy($ttWSresultVot, $ttWSresult);  
297 - unlink( $ttWSresultVot ) ;  
298 - }  
299 - return array('success' => true, 'ttFileURL' => 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$ttWSresult));  
300 -  
301 - }  
302 -  
303 -  
304 - public function isAlive(){  
305 - $res = $this->init($data);  
306 - return true;  
307 - }  
308 -  
309 -  
310 - public function getObsDataTree() {  
311 -  
312 - $res = $this->init();  
313 -  
314 - $resMgr = $this->initUserMgr();  
315 -  
316 - $vars = $res['vars'];  
317 -  
318 - $locParamSrc = USERPATH.$this->userID.'/WS/LocalParams.xml';  
319 -// $remoteParamSrc = USERPATH.$this->userID.'/WS/RemoteParams.xml';  
320 - $wsParamSrc = USERPATH.$this->userID.'/WS/WsParams.xml';  
321 - $locParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'LocalParams');  
322 -// $remoteParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,'RemoteParams');  
323 - $wsParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'WsParams');  
324 -  
325 - if (!copy($locParamSrc,$locParamResult))  
326 - $locParamResult = '';  
327 - else {  
328 - $piBase = new DomDocument("1.0");  
329 - $piBase->formatOutput = true;  
330 - $piBase->preserveWhiteSpace = false;  
331 -  
332 - $dom = new DomDocument("1.0");  
333 - $dom->load($locParamResult);  
334 -  
335 - $xsl = new DomDocument("1.0");  
336 - $xsl->load(XMLPATH.'dd2WStree.xsl');  
337 -  
338 - $xslt = new XSLTProcessor();  
339 - $xslt->importStylesheet($xsl);  
340 -  
341 - $dom->loadXML($xslt->transformToXML($dom));  
342 -  
343 - $dom->formatOutput = true;  
344 - $dom->preserveWhiteSpace = false;  
345 - $chum_ger = $dom->getElementById("Rosetta@C-G : Plot Only!");  
346 - if ($chum_ger != NULL) $chum_ger->setAttribute("target","Churyumov-Gerasimenko");  
347 -  
348 - $dom->save($locParamResult);  
349 - }  
350 -// if (!copy($remoteParamSrc,$remoteParamResult))  
351 -// $remoteParamResult = '';  
352 - if (!copy($wsParamSrc,$wsParamResult))  
353 - $wsParamResult = '';  
354 -  
355 - if ($locParamResult !='') $locParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$locParamResult);  
356 -// if ($remoteParamResult !='') $remoteParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$remoteParamResult);  
357 - if ($wsParamResult !='') $wsParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$wsParamResult);  
358 -  
359 - if (($locParamResult =='') && ($remoteParamResult =='') && ($wsParamResult =='')){  
360 - if ($this->isSoap) throw new SoapFault("server05","No params descriptions .xml files for ".$this->userID." user");  
361 - else return array('success' => false, 'message' => "No params descriptions .xml files for ".$this->userID." user");  
362 - }  
363 -  
364 - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID,$wsParamResult.";".$locParamResult.";".$remoteParamResult);  
365 -  
366 - return array('success' => true,'WorkSpace' => array("LocalDataBaseParameters"=>$locParamResult, "RemoteDataBaseParameters"=>$remoteParamResult));  
367 - }  
368 -  
369 - public function getPlot($data) {  
370 -  
371 - $res = $this->init($data);  
372 - $resMgr = $this->initUserMgr();  
373 -  
374 - $vars = $res['vars'];  
375 - $mission = $vars["missionID"];  
376 -  
377 - $ID = $this->setID(); // unique JobID  
378 - $resDirName = WSRESULT.$ID; // Define a temporary directory for results  
379 -  
380 - if (is_dir($resDirName))  
381 - $this->rrmdir($resDirName);  
382 - mkdir($resDirName);  
383 - chmod($resDirName,0775);  
384 -  
385 - $dom = new DomDocument("1.0");  
386 - $dom->load(plotsXml);  
387 -  
388 - $missionTag = $dom->getElementById($mission);  
389 - $params = $missionTag->getElementsByTagName('param');  
390 -  
391 - $paramsList = array();  
392 - foreach ($params as $param)  
393 - $paramsList[] = $param->getAttribute('name');  
394 -  
395 - $requestObject = (Object) array(  
396 - "nodeType" => "request",  
397 - "file-format" => "PNG",  
398 - "file-output" => "WS",  
399 - "ws-result-file" => $resDirName."/request.list.png",  
400 - "last-plotted-tab" => 1,  
401 - "timesrc" => "Interval",  
402 - "startDate" => $vars["startTime"],  
403 - "stopDate" => $vars["stopTime"],  
404 - "tabs" => array()  
405 - );  
406 -  
407 - $pageObject = (Object) array(  
408 - "id" => 1,  
409 - "multi-plot-linked" => true,  
410 - "page-margins-activated" => true,  
411 - "page-margin-x" => 5,  
412 - "page-margin-y" => 5,  
413 - "page-orientation" => "portrait",  
414 - "page-dimension" => "ISO A4",  
415 - "page-layout-type" => "vertical",  
416 - "page-layout-object" => (Object) array(  
417 - "layout-panel-height" => 0.25,  
418 - "layout-panel-spacing" => 0,  
419 - "layout-expand" => false  
420 - ),  
421 - "panels" => array()  
422 - );  
423 -  
424 - foreach ($paramsList as $paramToPlot)  
425 - {  
426 - $panelObject = (Object) array(  
427 - "panel-plot-type" => "timePlot",  
428 - "axes" => array(),  
429 - "params" => array()  
430 - );  
431 -  
432 - $timeAxisObject = (Object) array(  
433 - "id" => "time",  
434 - "axis-type" => "time",  
435 - "axis-range-extend" => true  
436 - );  
437 - $panelObject->{"axes"}[] = $timeAxisObject;  
438 -  
439 - $yAxisObject = (Object) array(  
440 - "id" => "y-left",  
441 - "axis-type" => "y-left",  
442 - "axis-range-extend" => true  
443 - );  
444 - $panelObject->{"axes"}[] = $yAxisObject;  
445 -  
446 - $paramObject = (Object) array(  
447 - "id" => 1,  
448 - "param-id" => $paramToPlot,  
449 - "param-drawing-type" => "serie",  
450 - "param-drawing-object" => (Object) array(  
451 - "serie-yaxis" => "y-left",  
452 - "serie-lines-activated" => true  
453 - )  
454 - );  
455 - $panelObject->{"params"}[] = $paramObject;  
456 -  
457 - $pageObject->{"panels"}[] = $panelObject;  
458 - }  
459 -  
460 - $requestObject->{"tabs"}[] = $pageObject;  
461 -  
462 - require_once(INTEGRATION_SRC_DIR."RequestManager.php");  
463 - if (!isset($this->requestManager))  
464 - $this->requestManager = new RequestManagerClass();  
465 -  
466 - try {  
467 - $plotResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $requestObject);  
468 - } catch (Exception $e) {  
469 - if ($this->isSoap) throw new SoapFault("plot01", 'Exception detected : '.$e->getMessage());  
470 - else return array('success' => false, 'message' => 'Exception detected : '.$e->getMessage());  
471 - }  
472 -  
473 - return array('success' => true, 'plotDirectoryURL' => $ID);  
474 - }  
475 -  
476 - public function getResultPlot($data) {  
477 -  
478 - $res = $this->init($data);  
479 - $vars = $res['vars'];  
480 - $ID = $vars["plotDirectoryURL"];  
481 - $filename = WSRESULT.$ID."/request.list.png";  
482 - if (file_exists($filename)) {  
483 - $plotWSresult=WSRESULT.$ID."/request.list.png";  
484 - return array('success' => true, 'plotFileURL' => 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$plotWSresult));  
485 - }  
486 - else  
487 - return array('success' => false);  
488 -  
489 - }  
490 -  
491 -  
492 - public function getParameterList($data) {  
493 -  
494 - $res = $this->init($data);  
495 -  
496 - $resMgr = $this->initUserMgr();  
497 -  
498 - $vars = $res['vars'];  
499 -  
500 - $locParamSrc = USERPATH.$this->userID.'/WS/LocalParams.xml';  
501 -// $remoteParamSrc = USERPATH.$this->userID.'/WS/RemoteParams.xml';  
502 - $wsParamSrc = USERPATH.$this->userID.'/WS/WsParams.xml';  
503 - $locParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'LocalParams');  
504 -// $remoteParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,'RemoteParams');  
505 - $wsParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'WsParams');  
506 -  
507 - if (!copy($locParamSrc,$locParamResult))  
508 - $locParamResult = '';  
509 - else {  
510 - $piBase = new DomDocument("1.0");  
511 - $piBase->formatOutput = true;  
512 - $piBase->preserveWhiteSpace = false;  
513 -  
514 - $dom = new DomDocument("1.0");  
515 - $dom->load($locParamResult);  
516 -  
517 - $xsl = new DomDocument("1.0");  
518 - $xsl->load(XMLPATH.'dd2WStree.xsl');  
519 -  
520 - $xslt = new XSLTProcessor();  
521 - $xslt->importStylesheet($xsl);  
522 -  
523 - $dom->loadXML($xslt->transformToXML($dom));  
524 -  
525 - $dom->formatOutput = true;  
526 - $dom->preserveWhiteSpace = false;  
527 - $chum_ger = $dom->getElementById("Rosetta@C-G : Plot Only!");  
528 - if ($chum_ger != NULL) $chum_ger->setAttribute("target","Churyumov-Gerasimenko");  
529 - $dom->save($locParamResult);  
530 - }  
531 -// if (!copy($remoteParamSrc,$remoteParamResult))  
532 -// $remoteParamResult = '';  
533 - if (!copy($wsParamSrc,$wsParamResult))  
534 - $wsParamResult = '';  
535 -  
536 - if ($locParamResult !='') $locParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$locParamResult);  
537 -// if ($remoteParamResult !='') $remoteParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$remoteParamResult);  
538 - if ($wsParamResult !='') $wsParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$wsParamResult);  
539 -  
540 - if (($locParamResult =='') && ($remoteParamResult =='') && ($wsParamResult =='')){  
541 - if ($this->isSoap) throw new SoapFault("server05","No params descriptions .xml files for ".$this->userID." user");  
542 - else return array('success' => false, 'message' => "No params descriptions .xml files for ".$this->userID." user");  
543 - }  
544 -  
545 - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID,$wsParamResult.";".$locParamResult.";".$remoteParamResult);  
546 -  
547 - return array('success' => true,'ParameterList' => array("UserDefinedParameters"=>$wsParamResult, "LocalDataBaseParameters"=>$locParamResult, "RemoteDataBaseParameters"=>$remoteParamResult));  
548 - }  
549 -///////////////////////////////////////START GET DATASET ///////////////////////////////  
550 - public function getParameter($data) {  
551 -  
552 - $multiParam = false;  
553 -  
554 - $res = $this->init($data);  
555 -  
556 - $resMgr = $this->initUserMgr();  
557 -  
558 - if (!$res['success']){  
559 - if ($this->isSoap) throw new SoapFault("server01","Cannot init user manager");  
560 - else return array('success' => false, 'message' => "Cannot init user manager");  
561 - }  
562 -  
563 - $vars = $res['vars'];  
564 -  
565 - if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0){  
566 - if ($this->isSoap) throw new SoapFault("request01","Start time must be higher than stop time");  
567 - else return array('success' => false, 'message' => "Start time must be higher than stop time");  
568 - }  
569 - elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0){  
570 - if ($this->isSoap) throw new SoapFault("request02","You time interval equal 0 start is ".$vars["stopTime"]." stop is ".$vars["startTime"]);  
571 - else return array('success' => false, 'message' => "You time interval equal 0");  
572 - }  
573 -  
574 - $dataFileName = $this->getDataFileName($vars, $multiParam);  
575 -  
576 - if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName'];  
577 - else {  
578 - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']);  
579 - else return array('success' => false, 'message' => $dataFileName['message']);  
580 - }  
581 -  
582 -  
583 - $paramId = array();  
584 - array_push($paramId, $vars["parameterID"]);  
585 -// $paramId[] = $vars["parameterID"];  
586 -  
587 - if (!$vars["timeFormat"])  
588 - $timeFormat = "ISO8601";  
589 - else  
590 - $timeFormat = $vars["timeFormat"];  
591 -  
592 - if (!$vars["gzip"])  
593 - $gzip = 0;  
594 - else  
595 - $gzip = $vars["gzip"];  
596 -/*  
597 - if (!$vars["stream"])  
598 - $stream = 0;  
599 - else  
600 - $stream = $vars["stream"];*/  
601 -  
602 - $res = $this->doDownloadRequest(  
603 - array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]),  
604 - array("params" => $paramId),  
605 - array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID),  
606 - array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream),  
607 - $dataFileName);  
608 -  
609 -  
610 - if ($res['success']) return $res;  
611 - else {  
612 - if ($this->isSoap) throw new SoapFault("request03",$res['message']);  
613 - else return array('success' => false, 'message' => $res['message']);  
614 - }  
615 - }  
616 -///////////////////////////////////////START GET ORBITES ///////////////////////////////  
617 - public function getOrbites($data) {  
618 -  
619 - $multiParam = false;  
620 -  
621 - $res = $this->init($data);  
622 -  
623 - $resMgr = $this->initUserMgr();  
624 -  
625 - if (!$resMgr['success']){  
626 - if ($this->isSoap) throw new SoapFault("server01","Cannot init user manager");  
627 - else return array('success' => false, 'message' => "Cannot init user manager");  
628 - }  
629 -  
630 - $vars = $res['vars'];  
631 -  
632 - if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0){  
633 - if ($this->isSoap) throw new SoapFault("request01","Start time must be higher than stop time");  
634 - else return array('success' => false, 'message' => "Start time must be higher than stop time");  
635 - }  
636 - elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0){  
637 - if ($this->isSoap) throw new SoapFault("request02","You time interval equal 0 start is ".$vars["stopTime"]." stop is ".$vars["startTime"]);  
638 - else return array('success' => false, 'message' => "You time interval equal 0");  
639 - }  
640 -  
641 -  
642 -  
643 - $spacecraft = $vars["spacecraft"];  
644 - $coordinateSystem = $vars["coordinateSystem"];  
645 - if ($spacecraft == "GALILEO") $spacecraft = ucfirst(strtolower($spacecraft));  
646 - if (!$vars["units"])  
647 - $units = "km";  
648 - else  
649 - $units = $vars["units"];  
650 -  
651 - $paramId = array();  
652 -  
653 - $orbitRequest = array("startTime" => $vars["startTime"],  
654 - "stopTime" => $vars["stopTime"],  
655 - "spacecraft" => $spacecraft,  
656 - "coordinateSystem" => $coordinateSystem,  
657 - "units" => $units  
658 - );  
659 -  
660 -  
661 - $orbitesParam = $this->getOrbitesParameter($orbitRequest);  
662 - if ($orbitesParam['success']) $orbParam = $orbitesParam['parameterID'];  
663 - else {  
664 - $orbParam = 'successEstfalse';  
665 - if ($this->isSoap) throw new SoapFault("request03",$orbitesParam['message']);  
666 - else return array('success' => false, 'message' => $orbitesParam['message']);  
667 - }  
668 -  
669 -  
670 - $dataFileName = $this->getDataFileName($orbitesParam, $multiParam);  
671 -  
672 - if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName'];  
673 - else {  
674 - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']);  
675 - else return array('success' => false, 'message' => $dataFileName['message']);  
676 - }  
677 -  
678 - array_push($paramId, $orbParam);  
679 -// $paramId[] = $vars["parameterID"];  
680 -  
681 - if (!$vars["timeFormat"])  
682 - $timeFormat = "ISO8601";  
683 - else  
684 - $timeFormat = $vars["timeFormat"];  
685 -  
686 - if (!$vars["gzip"])  
687 - $gzip = 0;  
688 - else  
689 - $gzip = $vars["gzip"];  
690 -  
691 - $res = $this->doDownloadRequest(  
692 - array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]),  
693 - array("params" => $paramId),  
694 - array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID),  
695 - array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream),  
696 - $dataFileName);  
697 -  
698 -  
699 - if ($res['success']) return $res;  
700 - else {  
701 - if ($this->isSoap) throw new SoapFault("request03",$res['message']);  
702 - else return array('success' => false, 'message' => $res['message']);  
703 - }  
704 - }  
705 -  
706 -///////////////////////////////////////START GET DATASET ///////////////////////////////  
707 -  
708 -  
709 - public function getDataset($data) {  
710 - $multiParam = true;  
711 -  
712 - $res = $this->init($data);  
713 -  
714 - $resMgr = $this->initUserMgr();  
715 -  
716 - $vars = $res['vars'];  
717 -  
718 - if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0){  
719 - if ($this->isSoap) throw new SoapFault("request01","Start time must be higher than stop time");  
720 - else return array('success' => false, 'message' => "Start time must be higher than stop time");  
721 - }  
722 - elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0){  
723 - if ($this->isSoap) throw new SoapFault("request02","You time interval equal 0");  
724 - else return array('success' => false, 'message' => "You time interval equal 0");  
725 - }  
726 -  
727 - $dataFileName = $this->getDataFileName($vars, $multiParam);  
728 -  
729 - if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName'];  
730 - else {  
731 - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']);  
732 - else return array('success' => false, 'message' => $dataFileName['message']);  
733 - }  
734 - $paramId = array();  
735 - $localData = simplexml_load_file(USERPATH.$this->userID.'/WS/LocalParams.xml');  
736 -  
737 - if (!$vars["sampling"]){  
738 -$xpath = "//dataset[@xml:id='".$vars['datasetID']."']/@sampling";  
739 -$tmp = $localData->xpath($xpath);  
740 -$vars["sampling"] = (string)$tmp[0];  
741 -  
742 -$matches=array();  
743 -preg_match("/([a-z])$/", $vars["sampling"], $matches);  
744 -  
745 -  
746 -$dataFileName = $this->getDataFileName($vars, $multiParam);  
747 -  
748 -if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName'];  
749 -else {  
750 - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']);  
751 - else return array('success' => false, 'message' => $dataFileName['message']);  
752 -}  
753 -  
754 -$vars["sampling"] = strtr($vars["sampling"], array($matches[1] => ""));  
755 - switch ($matches[1]) {  
756 - case 's':  
757 - $sampling = floatval($vars["sampling"]);  
758 - break;  
759 - case 'm':  
760 - $sampling = floatval($vars["sampling"])*60;  
761 - break;  
762 - case 'h':  
763 - $sampling = floatval($vars["sampling"])*60*60;  
764 - break;  
765 - default:  
766 - }  
767 - }  
768 -  
769 - $xpath = "//dataset[@xml:id='".$vars['datasetID']."']/parameter/@*[namespace-uri()='http://www.w3.org/XML/1998/namespace' and local-name()='id']";  
770 - $pars = $localData->xpath($xpath);  
771 -  
772 - foreach ($pars as $p)  
773 - $paramId[] = (string)$p[0];  
774 -  
775 - if (!$vars["timeFormat"])  
776 - $timeFormat = "ISO8601";  
777 - else  
778 - $timeFormat = $vars["timeFormat"];  
779 -  
780 - if (!$vars["gzip"])  
781 - $gzip = 0;  
782 - else  
783 - $gzip = $vars["gzip"];  
784 -  
785 - $res = $this->doDownloadRequest(  
786 - array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $sampling),  
787 - array("params" => $paramId),  
788 - array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID),  
789 - array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream),  
790 - $dataFileName);  
791 -  
792 -  
793 - if ($res['success']) return $res;  
794 - else {  
795 - if ($this->isSoap) throw new SoapFault("request03",$res['message']);  
796 - else return array('success' => false, 'message' => $res['message']);  
797 - }  
798 - }  
799 -  
800 -////////////////////////////////////////END GET PARAMETERS /////////////////////////////////  
801 - protected function getOrbitesParameter($orbitRequest) {  
802 -  
803 - $orbitesXml = new DomDocument();  
804 -  
805 - if (file_exists(orbitesXml)) {  
806 - $orbitesXml -> load(orbitesXml);  
807 - $xpath = new DOMXpath($orbitesXml);  
808 - $path = '//orbites[@mission="'.$orbitRequest['spacecraft'].'" and @coordinate_system="'.$orbitRequest['coordinateSystem'].'" and @units="'.$orbitRequest['units'].'" ] ';  
809 -  
810 - $orbites = $xpath->query($path);  
811 - foreach ($orbites as $orbite){  
812 - $paramInfo = $this->myParamsInfoMgr->GetDDInfoFromParameterID($orbite->getAttribute('xml:id'));  
813 - $paramStart = $paramInfo['dataset']['starttime'];  
814 - $paramStop = $paramInfo['dataset']['stoptime'];  
815 -  
816 - if((strtotime($paramStart) <= strtotime($orbitRequest['startTime']) && (strtotime($orbitRequest['stopTime'])) <= strtotime($paramStop))) {  
817 -  
818 - return array('success' => true,  
819 - 'parameterID' => $orbite->getAttribute('xml:id'),  
820 - 'startTime' => $orbitRequest['startTime'],  
821 - 'stopTime' => $orbitRequest['stopTime']  
822 - );  
823 - }  
824 - }  
825 - return array('success' => false,  
826 - 'message' =>  
827 - "Cannot find orbites for ".$orbitRequest['spacecraft']." between ".$orbitRequest['startTime']." in ".$orbitRequest['units']." ".$orbitRequest['coordinateSystem']." and ".$orbitRequest['stopTime']." ($paramStart - $paramStop) ");  
828 - }  
829 - else {  
830 - return array('success' => false, 'message' => "Orbits file doesn't exist");  
831 - }  
832 - }  
833 -  
834 -  
835 - protected function doDownloadRequest($interval,$paramList,$user,$formatInfo,$dataFileName) {  
836 - if ($interval['sampling'])  
837 - $structure = 0;// sampling  
838 - else  
839 - $structure = 2; // not sampling  
840 -  
841 - $fileExtension = "";  
842 - switch ($formatInfo['format'])  
843 - {  
844 - case 'netCDF' :  
845 - if (!$jobMgr){  
846 - if ($this->isSoap) throw new SoapFault("server01","netCDF format not implemented");  
847 - else return array('success' => false, 'message' => "netCDF format not implemented");  
848 - }  
849 - break;  
850 - case 'VOTable' :  
851 - $fileformat = "vot";  
852 - $kernelExtension = ".vot";  
853 - $wsExtension = ".xml";  
854 - break;  
855 - case 'ASCII' :  
856 - default :  
857 - $fileformat = "ASCII";  
858 - $kernelExtension = ".txt";  
859 - $wsExtension = ".txt";  
860 - }  
861 -  
862 - switch ($formatInfo['timeFormat'])  
863 - {  
864 - case 'unixtime' :  
865 - $timeformat = 'Timestamp';  
866 - break;  
867 - default :  
868 - $timeformat = 'YYYY-MM-DDThh:mm:ss';  
869 - }  
870 -  
871 - if ($formatInfo['gzip'] == 1)  
872 - {  
873 - $compression = "gzip";  
874 - $kernelExtension .= ".gz";  
875 - $wsExtension .= ".gz";  
876 - }  
877 - else  
878 - $compression = "";  
879 -  
880 - require_once(INTEGRATION_SRC_DIR."RequestManager.php");  
881 - IHMConfigClass::setUserName($this->userID);  
882 - if (!isset($this->paramLoader))  
883 - $this->paramLoader = new IHMUserParamLoaderClass();  
884 -  
885 - //Build parameter list  
886 - $params = array();  
887 -  
888 - //TODO template arguments to implementer ?  
889 - foreach ($paramList['params'] as $paramId)  
890 - {  
891 - $param = new stdClass;  
892 -  
893 - if (preg_match("#^ws_#",$paramId))  
894 - {  
895 - $res = $this->paramLoader->getDerivedParameterNameFromId($paramId);  
896 - if (!$res["success"])  
897 - {  
898 - if ($this->isSoap) throw new SoapFault("server02", 'Not available derived parameter '.$paramId);  
899 - else return array('success' => false, 'message' => 'Not available derived parameter '.$paramId);  
900 - }  
901 - $param->paramid = "ws_".$res['name'];  
902 - }  
903 - else if (preg_match("#^wsd_#",$paramId))  
904 - {  
905 - $res = $this->paramLoader->getUploadedParameterNameFromId($paramId);  
906 - if (!$res["success"])  
907 - {  
908 - if ($this->isSoap) throw new SoapFault("server02", 'Not available user parameter '.$paramId);  
909 - else return array('success' => false, 'message' => 'Not available user parameter '.$paramId);  
910 - }  
911 - $param->paramid = "wsd_".$res['name'];  
912 - }  
913 - else  
914 - {  
915 - $param->paramid = $paramId;  
916 - }  
917 -  
918 - $params[] = $param;  
919 - }  
920 -  
921 - $obj = (object)array(  
922 - "nodeType" => "download",  
923 - "downloadSrc" => "0",  
924 - "structure" => $structure,  
925 - "refparamSampling" => false,  
926 - "sampling" => $interval['sampling'],  
927 - "timesrc" => "Interval",  
928 - "startDate" => $interval['startTime'],  
929 - "stopDate" => $interval['stopTime'],  
930 - "list" => $params,  
931 - "fileformat" => $fileformat,  
932 - "timeformat" => $timeformat,  
933 - "compression" => $compression,  
934 - "disablebatch" => true  
935 - );  
936 -  
937 - if (!isset($this->requestManager))  
938 - $this->requestManager = new RequestManagerClass();  
939 -  
940 - try {  
941 - $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $obj);  
942 - } catch (Exception $e) {  
943 - if ($this->isSoap) throw new SoapFault("server02", 'Exception detected : '.$e->getMessage());  
944 - else return array('success' => false, 'message' => 'Exception detected : '.$e->getMessage());  
945 - }  
946 -  
947 - if (!$downloadResult['success'])  
948 - {  
949 - if ($this->isSoap) throw new SoapFault("server03", $downloadResult['message']);  
950 - else return array('success' => false, 'message' => $downloadResult['message']);  
951 - }  
952 -  
953 - $resultFile = USERPATH.$this->userID.'/RES/'.$downloadResult['folder'].'/'.$downloadResult['result'];  
954 - $resultFile .= $kernelExtension;  
955 -  
956 - if (!file_exists($resultFile))  
957 - {  
958 - if ($this->isSoap) throw new SoapFault("server04", 'Cannot retrieve result file '.$resultFile);  
959 - else return array('success' => false, 'message' => 'Cannot retrieve result file');  
960 - }  
961 -  
962 - rename($resultFile, WSRESULT.$this->dataFileName.$wsExtension);  
963 - $outputFile = WSRESULT.$this->dataFileName.$wsExtension;  
964 - chmod ($outputFile, 0664);  
965 - $outputFile = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$outputFile);  
966 -  
967 - $obj = (object)array(  
968 - 'id' => $downloadResult['id']  
969 - );  
970 -  
971 - try {  
972 - $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PROCESSDELETE, $obj);  
973 - } catch (Exception $e) {  
974 - //Nothing to do  
975 - }  
976 -  
977 - return array('success' => true, 'dataFileURLs' => $outputFile);  
978 -  
979 - }  
980 -  
981 - protected function timeIntervalToDuration($startTime,$stopTime) {  
982 -  
983 - $duration = strtotime($stopTime) - strtotime($startTime);  
984 - $durationDay = intval($duration/(86400));  
985 - $duration = $duration - $durationDay*86400;  
986 - $durationHour = intval($duration/(3600));  
987 - $duration = $duration - $durationHour*3600;  
988 - $durationMin = intval($duration/(60));  
989 - $durationSec = $duration - $durationMin*60;  
990 -  
991 - return array("success" => true, "days" => sprintf("%04s", strval($durationDay)),  
992 - "hours" => sprintf("%02s", strval($durationHour)),  
993 - "mins" => sprintf("%02s", strval($durationMin)),  
994 - "secs" => sprintf("%02s", strval($durationSec))  
995 - );  
996 - }  
997 -  
998 - protected function getDataFileName($vars, $multiParam){  
999 - if ($vars['startTime'] && $vars['stopTime'] && $vars['parameterID'] && !$multiParam){  
1000 - $fileName = $vars['parameterID']."-".strtotime($vars['startTime'])."-".strtotime($vars['stopTime']);  
1001 - if (isset($vars['sampling']) && $vars['sampling'] != "" && $vars['sampling'] != 0)  
1002 - $fileName .= "-".$vars['sampling'];  
1003 - return array('success' => true, 'fileName' => $fileName);  
1004 - }  
1005 - else if ($vars['startTime'] && $vars['stopTime'] && $vars['datasetID'] && $multiParam){  
1006 - $datasetName = strtr($vars["datasetID"], array(":" => "_"));  
1007 - $fileName = $datasetName."-".strtotime($vars['startTime'])."-".strtotime($vars['stopTime']);  
1008 - if (isset($vars['sampling']) && $vars['sampling'] != "" && $vars['sampling'] != 0)  
1009 - $fileName .= "-".$vars['sampling'];  
1010 - return array('success' => true, 'fileName' => $fileName);  
1011 - }  
1012 - else {  
1013 - if (!$vars['startTime'])  
1014 - $message="Start time not specified";  
1015 - if (!$vars['stopTime'])  
1016 - $message="Stop time not specified";  
1017 - if (!$vars['parameterID'] && !$multiParam)  
1018 - $message="Parameter not specified";  
1019 - if (!$vars['datasetID'] && $multiParam)  
1020 - $message="DataSet not specified";  
1021 - return array('success' => false, 'message' => $message);  
1022 - }  
1023 - }  
1024 -  
1025 - private function compress($srcName, $dstName) {  
1026 -  
1027 - $fp = fopen($srcName, "r");  
1028 - $data = fread ($fp, filesize($srcName));  
1029 - fclose($fp);  
1030 -  
1031 - $zp = gzopen($dstName, "w9");  
1032 - gzwrite($zp, $data);  
1033 - gzclose($zp);  
1034 - }  
1035 -  
1036 -}  
1037 -?>  
1038 \ No newline at end of file 0 \ No newline at end of file
php/config.php
1 <?php 1 <?php
2 - /** 2 +/**
3 * @file config.php 3 * @file config.php
4 * @version $Id: config.php 2368 2014-05-21 08:46:23Z elena $ 4 * @version $Id: config.php 2368 2014-05-21 08:46:23Z elena $
5 */ 5 */
@@ -35,6 +35,7 @@ if (!defined(&#39;PHP_VERSION_ID&#39;)) { @@ -35,6 +35,7 @@ if (!defined(&#39;PHP_VERSION_ID&#39;)) {
35 define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); 35 define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
36 } 36 }
37 if (!defined('MAGIC_FILE')) define('MAGIC_FILE','/usr/share/misc/magic'); 37 if (!defined('MAGIC_FILE')) define('MAGIC_FILE','/usr/share/misc/magic');
  38 +
38 date_default_timezone_set('UTC'); 39 date_default_timezone_set('UTC');
39 40
40 // GUESTS LOGIN section 41 // GUESTS LOGIN section
@@ -48,7 +49,7 @@ define(&#39;DISK_QUOTA_standard&#39;, 1024*1024*200); // 200MB @@ -48,7 +49,7 @@ define(&#39;DISK_QUOTA_standard&#39;, 1024*1024*200); // 200MB
48 // max lines of uploaded ascii file to show 49 // max lines of uploaded ascii file to show
49 define('MAX_FILE_INDEX_TO_SHOW', 100); 50 define('MAX_FILE_INDEX_TO_SHOW', 100);
50 // private key used to be considerate as a trust client for some functions of DD web service 51 // private key used to be considerate as a trust client for some functions of DD web service
51 -define('DDSERVICE_PRIVATEKEY','!%p856Dc'); 52 +define('DDSERVICE_PRIVATEKEY', '!%p856Dc');
52 53
53 54
54 // BATCH JOBS section 55 // BATCH JOBS section
@@ -58,12 +59,13 @@ define(&#39;DDSERVICE_PRIVATEKEY&#39;,&#39;!%p856Dc&#39;); @@ -58,12 +59,13 @@ define(&#39;DDSERVICE_PRIVATEKEY&#39;,&#39;!%p856Dc&#39;);
58 //define('TIMEOUT', '100'); //TODO secs wait before job is killed OR 'max_execution_time' - kill automatic? 59 //define('TIMEOUT', '100'); //TODO secs wait before job is killed OR 'max_execution_time' - kill automatic?
59 60
60 // EPN-TAP services 61 // EPN-TAP services
61 -define('EPNTAP_APIS','http://voparis-tap.obspm.fr/__system__/tap/run/tap/sync');  
62 -define('EPNTAP_AMDA','http://cdpp-epntap.irap.omp.eu/__system__/tap/run/tap/sync'); 62 +define('EPNTAP_APIS', 'http://voparis-tap.obspm.fr/__system__/tap/run/tap/sync');
  63 +define('EPNTAP_AMDA', 'http://cdpp-epntap.irap.omp.eu/__system__/tap/run/tap/sync');
63 64
64 // PHP run-time settings 65 // PHP run-time settings
65 ini_set('memory_limit',128000000); 66 ini_set('memory_limit',128000000);
66 ini_set('max_execution_time',600); // max PHP execution 67 ini_set('max_execution_time',600); // max PHP execution
  68 +
67 ini_set('default_socket_timeout', 600); //TODO if this is needed ? IMPEX LONG DURATION WEBSERVICES 69 ini_set('default_socket_timeout', 600); //TODO if this is needed ? IMPEX LONG DURATION WEBSERVICES
68 // to avoid 403 error while copying from URL 70 // to avoid 403 error while copying from URL
69 ini_set('user_agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:7.0) Gecko/201001012 Firefox/7.0'); 71 ini_set('user_agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:7.0) Gecko/201001012 Firefox/7.0');
@@ -74,7 +76,6 @@ ini_set(&#39;user_agent&#39;, &#39;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:7.0) Gecko/201 @@ -74,7 +76,6 @@ ini_set(&#39;user_agent&#39;, &#39;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:7.0) Gecko/201
74 76
75 // General Info dirs 77 // General Info dirs
76 define('DATAPATH', IHM_SRC_DIR.'/generic_data/'); 78 define('DATAPATH', IHM_SRC_DIR.'/generic_data/');
77 -//define('Param', DATAPATH.'Param/');  
78 define('LocalData', DATAPATH.'/LocalData/'); 79 define('LocalData', DATAPATH.'/LocalData/');
79 define('PARAMS_LOCALDB_DIR', LocalData.'/ParamDef/'); 80 define('PARAMS_LOCALDB_DIR', LocalData.'/ParamDef/');
80 define('PARAMS_LOCALINFO_DIR', LocalData.'/ParamInfo/'); 81 define('PARAMS_LOCALINFO_DIR', LocalData.'/ParamInfo/');
@@ -85,7 +86,6 @@ define(&#39;DataSetInfo&#39;, LocalData.&#39;/DataSetInfo/&#39;); @@ -85,7 +86,6 @@ define(&#39;DataSetInfo&#39;, LocalData.&#39;/DataSetInfo/&#39;);
85 define('RemoteData', DATAPATH.'/RemoteData/'); 86 define('RemoteData', DATAPATH.'/RemoteData/');
86 define('Functions', DATAPATH.'/Functions/'); 87 define('Functions', DATAPATH.'/Functions/');
87 define('HelpAuto', DATAPATH.'/help/auto/'); 88 define('HelpAuto', DATAPATH.'/help/auto/');
88 -//define('Plot', DATAPATH.'Plot/');  
89 define('Hst', DATAPATH.'/Hst/'); 89 define('Hst', DATAPATH.'/Hst/');
90 define('SpecialSettingsDir',DATAPATH.'/SpecialSettings/'); 90 define('SpecialSettingsDir',DATAPATH.'/SpecialSettings/');
91 91
@@ -109,15 +109,9 @@ define(&#39;USERPATH&#39;, IHM_SRC_DIR.&#39;/data/&#39;); @@ -109,15 +109,9 @@ define(&#39;USERPATH&#39;, IHM_SRC_DIR.&#39;/data/&#39;);
109 // Shared dir 109 // Shared dir
110 define('SHAREDPATH', IHM_SRC_DIR.'/shared_data/'); 110 define('SHAREDPATH', IHM_SRC_DIR.'/shared_data/');
111 111
112 -// WEB SERVICES section  
113 -define('WSRESULT', USERPATH.'/WSRESULT/'); // Web Services result directory  
114 -define('wsResultsXml',WSRESULT.'/WSresults.xml'); // Web Service result file  
115 -define('plotsXml', IHM_SRC_DIR.'/public/WebServices/XML/AmdaPlots.xml'); // Web Service getPlot : list of parameters to plot  
116 -  
117 // Web Service servers WSDL : $_SERVER['SERVER_NAME'] (par apache) gethostname() (par command) 112 // Web Service servers WSDL : $_SERVER['SERVER_NAME'] (par apache) gethostname() (par command)
118 $SERVER_NAME = $_SERVER['SERVER_NAME'] ? $_SERVER['SERVER_NAME'] : gethostname(); 113 $SERVER_NAME = $_SERVER['SERVER_NAME'] ? $_SERVER['SERVER_NAME'] : gethostname();
119 define('webAlias',"http://".$SERVER_NAME.APACHE_ALIAS); 114 define('webAlias',"http://".$SERVER_NAME.APACHE_ALIAS);
120 -define('wsdl_AMDA', webAlias."/public/wsdl/Methods_AMDA.wsdl");  
121 115
122 define('DD_WSDL',DDSERVICE.'/dd.wsdl'); 116 define('DD_WSDL',DDSERVICE.'/dd.wsdl');
123 117
@@ -129,6 +123,7 @@ define(&#39;XMLPATH&#39;, IHM_SRC_DIR.&#39;/php/XML/&#39;); @@ -129,6 +123,7 @@ define(&#39;XMLPATH&#39;, IHM_SRC_DIR.&#39;/php/XML/&#39;);
129 123
130 require_once(INTEGRATION_BASE_PATH.'/src/amdaintegration_autoload.php'); 124 require_once(INTEGRATION_BASE_PATH.'/src/amdaintegration_autoload.php');
131 125
  126 +
132 global $API; 127 global $API;
133 $API = array( 128 $API = array(
134 'AmdaAction'=>array( 129 'AmdaAction'=>array(
php/makeOrbitsList.php
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 $instruments = $node->getElementsByTagName('instrument'); 43 $instruments = $node->getElementsByTagName('instrument');
44 foreach ($instruments as $ins) 44 foreach ($instruments as $ins)
45 { 45 {
46 - if ($ins->getAttribute('name') != 'Ephemeris') continue; 46 + if (substr($ins->getAttribute('name'),0,9) != 'Ephemeris') continue; // Ephemeris: cruise
47 $parameters = $ins->getElementsByTagName('parameter'); 47 $parameters = $ins->getElementsByTagName('parameter');
48 foreach ($parameters as $parameter) 48 foreach ($parameters as $parameter)
49 { 49 {
@@ -59,7 +59,12 @@ @@ -59,7 +59,12 @@
59 $orbitNode->setAttribute('xml:id',$parameter->getAttribute('xml:id')); 59 $orbitNode->setAttribute('xml:id',$parameter->getAttribute('xml:id'));
60 $orbitNode->setAttribute('coordinate_system', $paramXml->info->coordinates_system); 60 $orbitNode->setAttribute('coordinate_system', $paramXml->info->coordinates_system);
61 $orbitNode->setAttribute('units', $paramXml->info->units); 61 $orbitNode->setAttribute('units', $paramXml->info->units);
62 - $orbitNode->setAttribute('mission', $node->getAttribute('name')); 62 +
  63 + $name = strtolower($node->getAttribute('name'));
  64 + $name = preg_replace('/\s+/', '', $name);
  65 + $name = str_replace('-', '', $name);
  66 +
  67 + $orbitNode->setAttribute('mission', $name);
63 68
64 if ( $node->tagName == 'observatory' ) 69 if ( $node->tagName == 'observatory' )
65 $orbitNode->setAttribute('missionGroup',$node->parentNode->getAttribute('name')); 70 $orbitNode->setAttribute('missionGroup',$node->parentNode->getAttribute('name'));
php/rest/auth.php 0 โ†’ 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +<?php
  2 +
  3 +/**
  4 + * @file getParameter.php
  5 + * @brief REST interface for service getParameter
  6 + *
  7 + *
  8 + * @version $Id: $
  9 + */
  10 +
  11 +require_once '../config.php';
  12 +
  13 +$amda_ws = new WebServer();
  14 +$result = $amda_ws->getNewToken($_GET);
  15 +
  16 +if ($result['success']) {
  17 + echo $result['token'];
  18 +} else {
  19 + echo $result['message'];
  20 +}
  21 +
  22 +?>
0 \ No newline at end of file 23 \ No newline at end of file
php/rest/getDataset.php 0 โ†’ 100644
@@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
  1 +<?php
  2 +/**
  3 + * @file getDataset.php
  4 + * @brief REST interface for service getDataset
  5 + */
  6 +
  7 +//ini_set("allow_url_fopen", true);
  8 + require_once '../config.php';
  9 +
  10 + if (!key_exists("token", $_GET))
  11 + {
  12 + $result = array('success' => false, 'message' => "Authentication is required for this webservice.");
  13 + exit(json_encode($result));
  14 + }
  15 +
  16 + $amda_ws = new WebServer();
  17 +
  18 + if ($amda_ws->getNewToken()['token'] != $_GET["token"])
  19 + {
  20 + $result = array('success' => false, 'status' => 'expired', 'message' => "Token expired. Please authenticate again.");
  21 + } else
  22 + {
  23 + $result = $amda_ws->getDataset($_GET);
  24 + }
  25 +
  26 + echo json_encode($result);
  27 +?>
php/rest/getDatasetData.php deleted
@@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
1 -<?php  
2 -/**  
3 -* @file getParameter.php  
4 -* @brief REST interface for service getParameter  
5 -*  
6 -*  
7 -* @version $Id: $  
8 -*/  
9 - ini_set("allow_url_fopen", true);  
10 - require_once '../config.php';  
11 -  
12 - $amda_ws = new WebServer();  
13 - $result = $amda_ws->getDataset($_GET);  
14 -  
15 - if ($result['success']){  
16 - $file = str_replace("http://oberoi.cesr.fr/AMDA-WS/",BASE_PATH ,$result['dataFileURLs']);  
17 -  
18 - if ($file){  
19 -// header('Content-type: text/xml');  
20 -// $contenu = file_get_contents($file);  
21 -// error_log($contenu,3,'/home/natacha/TMP/tmp.xml');  
22 -// echo $contenu;  
23 -  
24 -header('Content-type: text/xml');  
25 -$doc = new DOMDocument();  
26 -$doc->load($file);  
27 -echo $doc->saveXML();  
28 -  
29 -  
30 - }  
31 - }  
32 - else {  
33 - $success = "false";  
34 - echo '<?xml version="1.0" encoding="UTF-8"?><getParameterResponse>';  
35 - echo '<success>'.$success.'</success>';  
36 - echo '<message>'.$result['message'].'</message></getParameterResponse>';  
37 - }  
38 -?>  
php/rest/getOrbites.php
1 <?php 1 <?php
2 -  
3 -/**  
4 -* @file getParameter.php  
5 -* @brief REST interface for service getParameter  
6 -*  
7 -*  
8 -* @version $Id: $  
9 -*/  
10 2
11 - require_once '../config.php'; 3 +/**
  4 + * @file getOrbites.php
  5 + * @brief REST interface for service getOrbites
  6 + */
12 7
13 - $amda_ws = new WebServer();  
14 - $result = $amda_ws->getOrbites($_GET); 8 + require_once '../config.php';
15 9
16 - if ($result['success']){  
17 - echo $result['dataFileURLs'];  
18 - }  
19 - else {  
20 - echo $result['message'];  
21 - } 10 + if (!key_exists("token", $_GET))
  11 + {
  12 + $result = array('success' => false, 'message' => "Authentication is required for this webservice.");
  13 + exit(json_encode($result));
  14 + }
  15 +
  16 + $amda_ws = new WebServer();
  17 +
  18 + if ($amda_ws->getNewToken()['token'] != $_GET["token"])
  19 + {
  20 + $result = array('success' => false, 'status' => 'expired', 'message' => "Token expired. Please authenticate again.");
  21 + } else
  22 + {
  23 + $result = $amda_ws->getOrbites($_GET);
  24 + }
  25 +
  26 + echo json_encode($result);
22 27
23 ?> 28 ?>
24 \ No newline at end of file 29 \ No newline at end of file
php/rest/getParameter.php
1 <?php 1 <?php
2 -  
3 -/**  
4 -* @file getParameter.php  
5 -* @brief REST interface for service getParameter  
6 -*  
7 -*  
8 -* @version $Id: $  
9 -*/  
10 2
11 - require_once '../config.php'; 3 +/**
  4 + * @file getParameter.php
  5 + * @brief REST interface for service getParameter
  6 + */
12 7
13 - $amda_ws = new WebServer();  
14 - $result = $amda_ws->getParameter($_GET); 8 + require_once '../config.php';
15 9
16 - if ($result['success']){  
17 - echo $result['dataFileURLs'];  
18 - }  
19 - else {  
20 - echo $result['message'];  
21 - } 10 + if (!key_exists("token", $_GET))
  11 + {
  12 + $result = array('success' => false, 'message' => "Authentication is required for this webservice.");
  13 + exit(json_encode($result));
  14 + }
  15 +
  16 + $amda_ws = new WebServer();
22 17
  18 + if ($amda_ws->getNewToken()['token'] != $_GET["token"])
  19 + {
  20 + $result = array('success' => false, 'status' => 'expired', 'message' => "Token expired. Please authenticate again.");
  21 + } else
  22 + {
  23 + $result = $amda_ws->getParameter($_GET);
  24 + }
  25 +
  26 + echo json_encode($result);
23 ?> 27 ?>
24 \ No newline at end of file 28 \ No newline at end of file
php/rest/getStatus.php 0 โ†’ 100644
@@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
  1 +<?php
  2 +
  3 +/**
  4 + * @file getStatus.php
  5 + * @brief REST interface for service getParameter
  6 + *
  7 + * @version $Id: $
  8 + */
  9 +
  10 +require_once '../config.php';
  11 +
  12 +if (!key_exists("id", $_GET)) {
  13 + $result = array('success' => false, 'message' => "You must provide a job id");
  14 +} else {
  15 + $amda_ws = new WebServer();
  16 + $result = $amda_ws->getStatus($_GET);
  17 +}
  18 +echo json_encode($result);
0 \ No newline at end of file 19 \ No newline at end of file
php/rest/getTimeTablesList.php
@@ -3,23 +3,20 @@ @@ -3,23 +3,20 @@
3 /** 3 /**
4 * @file getTimeTablesList.php 4 * @file getTimeTablesList.php
5 * @brief REST interface for service getTimeTablesList 5 * @brief REST interface for service getTimeTablesList
6 -*  
7 -*  
8 -* @version $Id: $  
9 */ 6 */
10 7
11 - require_once '../config.php'; 8 + require_once '../config.php';
12 9
13 - $amda_ws = new WebServer(); 10 + $amda_ws = new WebServer();
14 11
15 - $result = $amda_ws->getTimeTablesList($_GET); 12 + $result = $amda_ws->getTimeTablesList($_GET);
16 13
17 - if ($result['success']){  
18 - echo $result['TimeTablesList'];  
19 - }  
20 - else {  
21 - echo $result['message'];  
22 - } 14 + if ($result['success'])
  15 + {
  16 + echo $result['TimeTablesList'];
  17 + }
  18 + else
  19 + {
  20 + echo $result['message'];
  21 + }
23 ?> 22 ?>
24 -  
25 -  
public/WebServices/XML/AmdaPlots.xml deleted
@@ -1,49 +0,0 @@ @@ -1,49 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<des>  
3 - <missions>  
4 - <mission xml:id='ACE' name='ACE'>  
5 - <param name='sw_vb' class="plasma" description="velocity_magnitude" instrument="SWEPAM"/>  
6 - <param name='sw_t' class="plasma" description="temperature_radial" instrument="SWEPAM"/>  
7 - <param name='sw_n' class="plasma" description="ion_density" instrument="SWEPAM"/>  
8 - <param name='imf' class="mag" description="magnetic_field_vector" instrument="MAG"/>  
9 - <param name='imf_mag' class="mag" description="magnetic_field_magnitude" instrument="MAG"/>  
10 - </mission>  
11 - <mission xml:id='WIND' name='WIND'>  
12 - <param name='wnd_swe_vmag' class="plasma" description="velocity_magnitude" instrument="SWE"/>  
13 - <param name='wnd_swe_vth' class="plasma" description="v_thermal" instrument="SWE"/>  
14 - <param name='wnd_swe_n' class="plasma" description="ion_density" instrument="SWE"/>  
15 - <param name='wnd_b' class="mag" description="magnetic_field_vector" instrument="MFI"/>  
16 - <param name='wnd_bmag' class="mag" description="magnetic_field_magnitude" instrument="MFI"/>  
17 - </mission>  
18 - <mission xml:id='STEREO-A' name='STA'>  
19 - <param name='vpbulk_sta' class="plasma" description="velocity_magnitude" instrument="PLASTIC"/>  
20 - <param name='vth_sta' class="plasma" description="v_thermal" instrument="PLASTIC"/>  
21 - <param name='np_sta' class="plasma" description="ion_density" instrument="PLASTIC"/>  
22 - <param name='sta_b' class="mag" description="magnetic_field_vector" instrument="MAG" />  
23 - <param name='sta_btot' class="mag" description="magnetic_field_magnitude" instrument="MAG" />  
24 - </mission>  
25 - <mission xml:id='STEREO-B' name='STB'>  
26 - <param name='vpbulk_stb' class="plasma" description="velocity_magnitude" instrument="PLASTIC"/>  
27 - <param name='vth_stb' class="plasma" description="v_thermal" instrument="PLASTIC"/>  
28 - <param name='np_stb' class="plasma" description="ion_density" instrument="PLASTIC"/>  
29 - <param name='stb_b' class="mag" description="magnetic_field_vector" instrument="MAG"/>  
30 - <param name='stb_btot' class="mag" description="magnetic_field_magnitude" instrument="MAG"/>  
31 - </mission>  
32 - <mission xml:id='VEX' name='VEX'>  
33 - <param name='vex_mag_4s' class="mag" description="magnetic_field_magnitude" instrument="MAG"/>  
34 - <param name='vex_mag_4s_tot' class="mag" description="magnetic_field_magnitude" instrument="MAG"/>  
35 - </mission>  
36 - <mission xml:id='OMNI' name='OMNI'>  
37 - <param name='omni_sw_v' class="plasma" description="velocity" instrument="imf/sw/indices"/>  
38 - <param name='omni_sw_t' class="plasma" description="temperature" instrument="imf/sw/indices"/>  
39 - <param name='omni_sw_n' class="plasma" description="density" instrument="imf/sw/indices"/>  
40 - <param name='omni_imf' class="mag" description="magnetic_field_magnitude" instrument="imf/sw/indices"/>  
41 - <param name='omni_imf_mag' class="mag" description="magnetic_field_magnitude" instrument="imf/sw/indices"/>  
42 - </mission>  
43 - <mission xml:id='GEOMAG' name='GEOMAG'>  
44 - <param name='omni_kp' class="mag" description="geomagnetic_indices" instrument="imf/sw/indices"/>  
45 - <param name='omni_dst' class="mag" description="geomagnetic_indices" instrument="imf/sw/indices"/>  
46 - <param name='omni_ae' class="mag" description="geomagnetic_indices" instrument="imf/sw/indices"/>  
47 - </mission>  
48 - </missions>  
49 -</des>  
public/wsdl/Methods_AMDA.wsdl
@@ -30,34 +30,32 @@ @@ -30,34 +30,32 @@
30 <xs:element name="getParameter" type="tns:getParameter"/> 30 <xs:element name="getParameter" type="tns:getParameter"/>
31 <xs:element name="getParameterResponse" type="tns:getParameterResponse"/> 31 <xs:element name="getParameterResponse" type="tns:getParameterResponse"/>
32 32
33 - <xs:element name="getDataset" type="tns:getDataset"/> 33 + <xs:element name="getDataset" type="tns:getDataset"/>
34 <xs:element name="getDatasetResponse" type="tns:getDatasetResponse"/> 34 <xs:element name="getDatasetResponse" type="tns:getDatasetResponse"/>
35 35
36 - <xs:element name="getPlot" type="tns:getPlot"/> 36 + <xs:element name="getPlot" type="tns:getPlot"/>
37 <xs:element name="getPlotResponse" type="tns:getPlotResponse"/> 37 <xs:element name="getPlotResponse" type="tns:getPlotResponse"/>
38 38
39 - <xs:element name="getResultPlot" type="tns:getResultPlot"/>  
40 - <xs:element name="getResultPlotResponse" type="tns:getResultPlotResponse"/>  
41 -  
42 <xs:element name="getOrbites" type="tns:getOrbites"/> 39 <xs:element name="getOrbites" type="tns:getOrbites"/>
43 <xs:element name="getOrbitesResponse" type="tns:getOrbitesResponse"/> 40 <xs:element name="getOrbitesResponse" type="tns:getOrbitesResponse"/>
44 41
45 <xs:element name="getObsDataTreeResponse" type="tns:getObsDataTreeResponse"/> 42 <xs:element name="getObsDataTreeResponse" type="tns:getObsDataTreeResponse"/>
46 43
  44 + <xs:element name="getStatus" type="tns:getStatus"/>
  45 + <xs:element name="getStatusResponse" type="tns:getStatusResponse"/>
  46 +
47 <xs:element name="alive" type="xs:boolean"/> 47 <xs:element name="alive" type="xs:boolean"/>
48 48
49 <xs:complexType name="getObsDataTreeResponse"> 49 <xs:complexType name="getObsDataTreeResponse">
50 <xs:sequence> 50 <xs:sequence>
51 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean"> 51 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
52 <xs:annotation> 52 <xs:annotation>
53 - <xs:documentation>If methode is OK success = true, else success = false</xs:documentation> 53 + <xs:documentation>If method is OK success = true, else success = false</xs:documentation>
54 </xs:annotation> 54 </xs:annotation>
55 </xs:element> 55 </xs:element>
56 <xs:element name="WorkSpace" type="tns:WorkSpace" minOccurs="1" maxOccurs="1"> 56 <xs:element name="WorkSpace" type="tns:WorkSpace" minOccurs="1" maxOccurs="1">
57 <xs:annotation> 57 <xs:annotation>
58 - <xs:documentation>Url's of AmdaUserTree file which must be generated  
59 - after connections. Contents: AMDA local parameters, Remote  
60 - Parameters, Shared Predefined Parameters. </xs:documentation> 58 + <xs:documentation>Url's of AMDA local parameters </xs:documentation>
61 </xs:annotation> 59 </xs:annotation>
62 </xs:element> 60 </xs:element>
63 </xs:sequence> 61 </xs:sequence>
@@ -67,15 +65,12 @@ @@ -67,15 +65,12 @@
67 <xs:sequence> 65 <xs:sequence>
68 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1"> 66 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1">
69 <xs:annotation> 67 <xs:annotation>
70 - <xs:documentation>ID of AMDA user storing in the 3DView. Must TBD. If no  
71 - user ID, result is shared Timetables from IMPEX user.  
72 - </xs:documentation> 68 + <xs:documentation>ID of AMDA user. If no user ID, user is IMPEX</xs:documentation>
73 </xs:annotation> 69 </xs:annotation>
74 </xs:element> 70 </xs:element>
75 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"> 71 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
76 <xs:annotation> 72 <xs:annotation>
77 - <xs:documentation>Crypt Password of AMDA user storing in the 3DView.  
78 - Must TBD encryption types</xs:documentation> 73 + <xs:documentation>Crypt Password of AMDA user </xs:documentation>
79 </xs:annotation> 74 </xs:annotation>
80 </xs:element> 75 </xs:element>
81 </xs:sequence> 76 </xs:sequence>
@@ -85,8 +80,7 @@ @@ -85,8 +80,7 @@
85 <xs:sequence> 80 <xs:sequence>
86 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean"> 81 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
87 <xs:annotation> 82 <xs:annotation>
88 - <xs:documentation>Url of TimeTables storage file with TimeTables  
89 - ID's.</xs:documentation> 83 + <xs:documentation>If method is OK success = true, else success = false</xs:documentation>
90 </xs:annotation> 84 </xs:annotation>
91 </xs:element> 85 </xs:element>
92 <xs:element name="TimeTablesList" minOccurs="0" maxOccurs="1" type="xs:anyURI"> 86 <xs:element name="TimeTablesList" minOccurs="0" maxOccurs="1" type="xs:anyURI">
@@ -102,13 +96,12 @@ @@ -102,13 +96,12 @@
102 <xs:sequence> 96 <xs:sequence>
103 <xs:element name="userID" type="xs:string" minOccurs="1" maxOccurs="1"> 97 <xs:element name="userID" type="xs:string" minOccurs="1" maxOccurs="1">
104 <xs:annotation> 98 <xs:annotation>
105 - <xs:documentation>ID of AMDA user</xs:documentation> 99 + <xs:documentation>ID of AMDA user. If no user ID, user is IMPEX</xs:documentation>
106 </xs:annotation> 100 </xs:annotation>
107 </xs:element> 101 </xs:element>
108 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"> 102 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
109 <xs:annotation> 103 <xs:annotation>
110 - <xs:documentation>Crypt Password of AMDA user storing in the 3DView.  
111 - Must TBD encryption types</xs:documentation> 104 + <xs:documentation>Crypt Password of AMDA user</xs:documentation>
112 </xs:annotation> 105 </xs:annotation>
113 </xs:element> 106 </xs:element>
114 </xs:sequence> 107 </xs:sequence>
@@ -118,16 +111,14 @@ @@ -118,16 +111,14 @@
118 <xs:sequence> 111 <xs:sequence>
119 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean"> 112 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
120 <xs:annotation> 113 <xs:annotation>
121 - <xs:documentation>Url of TimeTables storage file with TimeTables  
122 - ID's.</xs:documentation> 114 + <xs:documentation>If method is OK success = true, else success = false</xs:documentation>
123 </xs:annotation> 115 </xs:annotation>
124 </xs:element> 116 </xs:element>
125 <xs:element name="ParameterList" type="tns:ParameterList" minOccurs="1" 117 <xs:element name="ParameterList" type="tns:ParameterList" minOccurs="1"
126 maxOccurs="1"> 118 maxOccurs="1">
127 <xs:annotation> 119 <xs:annotation>
128 - <xs:documentation>Url of AmdaUserTree file which must be generated after  
129 - the user connections Contents: User groups local parameters, User  
130 - remote parameters, user predefined parameters. </xs:documentation> 120 + <xs:documentation>Url of UserDefinedParameters, Url of AmdaLocalDataBaseParameters,
  121 + Url of RemoteDataBaseParameters ( not implemented ) </xs:documentation>
131 </xs:annotation> 122 </xs:annotation>
132 </xs:element> 123 </xs:element>
133 </xs:sequence> 124 </xs:sequence>
@@ -135,7 +126,7 @@ @@ -135,7 +126,7 @@
135 126
136 <xs:simpleType name="enumSpacecraft"> 127 <xs:simpleType name="enumSpacecraft">
137 <xs:restriction base="xs:string"> 128 <xs:restriction base="xs:string">
138 - <xs:enumeration value="Cassini_Public"/> 129 + <xs:enumeration value="Cassini"/>
139 <xs:enumeration value="Galileo"/> 130 <xs:enumeration value="Galileo"/>
140 <xs:enumeration value="Voyager_1"/> 131 <xs:enumeration value="Voyager_1"/>
141 <xs:enumeration value="Voyager_2"/> 132 <xs:enumeration value="Voyager_2"/>
@@ -170,7 +161,19 @@ @@ -170,7 +161,19 @@
170 <xs:enumeration value="ISEE-2"/> 161 <xs:enumeration value="ISEE-2"/>
171 </xs:restriction> 162 </xs:restriction>
172 </xs:simpleType> 163 </xs:simpleType>
173 - 164 +
  165 + <xs:simpleType name="enumMission">
  166 + <xs:restriction base="xs:string">
  167 + <xs:enumeration value="ACE"/>
  168 + <xs:enumeration value="STEREO-A"/>
  169 + <xs:enumeration value="STEREO-B"/>
  170 + <xs:enumeration value="WIND"/>
  171 + <xs:enumeration value="VEX"/>
  172 + <xs:enumeration value="OMNI"/>
  173 + <xs:enumeration value="GEOMAG"/>
  174 + </xs:restriction>
  175 + </xs:simpleType>
  176 +
174 <xs:simpleType name="WorkSpaceValue"> 177 <xs:simpleType name="WorkSpaceValue">
175 <xs:restriction base="xs:string"> 178 <xs:restriction base="xs:string">
176 <xs:enumeration value="TimeTables"/> 179 <xs:enumeration value="TimeTables"/>
@@ -673,21 +676,18 @@ of a set of typically orthogonal axes. @@ -673,21 +676,18 @@ of a set of typically orthogonal axes.
673 </xs:element> 676 </xs:element>
674 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1"> 677 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1">
675 <xs:annotation> 678 <xs:annotation>
676 - <xs:documentation>ID of AMDA user storing in the 3DView. Must TBD For  
677 - public data is optional. </xs:documentation> 679 + <xs:documentation>ID of AMDA user. If no user ID, user is IMPEX</xs:documentation>
678 </xs:annotation> 680 </xs:annotation>
679 </xs:element> 681 </xs:element>
680 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"> 682 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
681 <xs:annotation> 683 <xs:annotation>
682 - <xs:documentation>Crypt Password of AMDA user storing in the 3DView.  
683 - Must TBD encryption types Required for predefined parameters.  
684 - </xs:documentation> 684 + <xs:documentation>Crypt Password of AMDA user </xs:documentation>
685 </xs:annotation> 685 </xs:annotation>
686 </xs:element> 686 </xs:element>
687 <xs:element name="outputFormat" minOccurs="0" maxOccurs="1"> 687 <xs:element name="outputFormat" minOccurs="0" maxOccurs="1">
688 <xs:annotation> 688 <xs:annotation>
689 - <xs:documentation> Choice is possible between the two formats: netCDF,  
690 - ASCII and VOTable. If the format is not specified it will be netCDF 689 + <xs:documentation> Choice is possible between the four formats: netCDF, CDF,
  690 + ASCII and VOTable. If the format is not specified it will be ASCIIF
691 by default</xs:documentation> 691 by default</xs:documentation>
692 </xs:annotation> 692 </xs:annotation>
693 <xs:simpleType> 693 <xs:simpleType>
@@ -695,6 +695,7 @@ of a set of typically orthogonal axes. @@ -695,6 +695,7 @@ of a set of typically orthogonal axes.
695 <xs:enumeration value="netCDF"/> 695 <xs:enumeration value="netCDF"/>
696 <xs:enumeration value="VOTable"/> 696 <xs:enumeration value="VOTable"/>
697 <xs:enumeration value="ASCII"/> 697 <xs:enumeration value="ASCII"/>
  698 + <xs:enumeration value="CDF"/>
698 </xs:restriction> 699 </xs:restriction>
699 </xs:simpleType> 700 </xs:simpleType>
700 </xs:element> 701 </xs:element>
@@ -724,20 +725,77 @@ of a set of typically orthogonal axes. @@ -724,20 +725,77 @@ of a set of typically orthogonal axes.
724 <xs:sequence> 725 <xs:sequence>
725 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean"> 726 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
726 <xs:annotation> 727 <xs:annotation>
727 - <xs:documentation>Url of TimeTables storage file with TimeTables  
728 - ID's.</xs:documentation> 728 + <xs:documentation>If method is OK success = true, else success = false</xs:documentation>
729 </xs:annotation> 729 </xs:annotation>
730 </xs:element> 730 </xs:element>
731 - <xs:element maxOccurs="unbounded" minOccurs="0" name="dataFileURLs"  
732 - type="xs:anyURI"> 731 + <xs:element maxOccurs="unbounded" minOccurs="0" name="dataFileURLs" type="xs:anyURI">
733 <xs:annotation> 732 <xs:annotation>
734 - <xs:documentation>URLs of results data files. If not URLs - not data for 733 + <xs:documentation>URLs of results data files. If no URLs - no data for
735 required parameters</xs:documentation> 734 required parameters</xs:documentation>
736 </xs:annotation> 735 </xs:annotation>
737 </xs:element> 736 </xs:element>
  737 + <xs:element maxOccurs="1" minOccurs="0" name="status">
  738 + <xs:annotation>
  739 + <xs:documentation></xs:documentation>
  740 + </xs:annotation>
  741 + <xs:simpleType>
  742 + <xs:restriction base="xs:string">
  743 + <xs:enumeration value="in progress"/>
  744 + <xs:enumeration value="error"/>
  745 + </xs:restriction>
  746 + </xs:simpleType>
  747 + </xs:element>
  748 + <xs:element maxOccurs="1" minOccurs="0" name="id" type="xs:string">
  749 + <xs:annotation>
  750 + <xs:documentation>process ID</xs:documentation>
  751 + </xs:annotation>
  752 + </xs:element>
738 </xs:sequence> 753 </xs:sequence>
739 </xs:complexType> 754 </xs:complexType>
740 - 755 +
  756 + <xs:complexType name="getStatus">
  757 + <xs:sequence>
  758 + <xs:element minOccurs="1" maxOccurs="1" name="id" type="xs:string">
  759 + <xs:annotation>
  760 + <xs:documentation>process ID</xs:documentation>
  761 + </xs:annotation>
  762 + </xs:element>
  763 + </xs:sequence>
  764 + </xs:complexType>
  765 +
  766 + <xs:complexType name="getStatusResponse">
  767 + <xs:sequence>
  768 + <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
  769 + <xs:annotation>
  770 + <xs:documentation></xs:documentation>
  771 + </xs:annotation>
  772 + </xs:element>
  773 + <xs:element maxOccurs="unbounded" minOccurs="0" name="dataFileURLs" type="xs:anyURI">
  774 + <xs:annotation>
  775 + <xs:documentation>URLs of results data files. If no URLs - no data for
  776 + required parameters</xs:documentation>
  777 + </xs:annotation>
  778 + </xs:element>
  779 + <xs:element maxOccurs="1" minOccurs="0" name="plotURL" type="xs:anyURI">
  780 + <xs:annotation>
  781 + <xs:documentation>URLs of results plot files. If no URLs - no data for
  782 + required parameters</xs:documentation>
  783 + </xs:annotation>
  784 + </xs:element>
  785 + <xs:element maxOccurs="1" minOccurs="0" name="status">
  786 + <xs:annotation>
  787 + <xs:documentation></xs:documentation>
  788 + </xs:annotation>
  789 + <xs:simpleType>
  790 + <xs:restriction base="xs:string">
  791 + <xs:enumeration value="in progress"/>
  792 + <xs:enumeration value="error"/>
  793 + </xs:restriction>
  794 + </xs:simpleType>
  795 + </xs:element>
  796 + </xs:sequence>
  797 + </xs:complexType>
  798 +
741 <xs:complexType name="getDataset"> 799 <xs:complexType name="getDataset">
742 <xs:sequence> 800 <xs:sequence>
743 <xs:element name="startTime" type="xs:string" minOccurs="1" maxOccurs="1"> 801 <xs:element name="startTime" type="xs:string" minOccurs="1" maxOccurs="1">
@@ -763,21 +821,18 @@ of a set of typically orthogonal axes. @@ -763,21 +821,18 @@ of a set of typically orthogonal axes.
763 </xs:element> 821 </xs:element>
764 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1"> 822 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1">
765 <xs:annotation> 823 <xs:annotation>
766 - <xs:documentation>ID of AMDA user. For  
767 - public data is optional. </xs:documentation> 824 + <xs:documentation>ID of AMDA user. If no user ID, user is IMPEX</xs:documentation>
768 </xs:annotation> 825 </xs:annotation>
769 </xs:element> 826 </xs:element>
770 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"> 827 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
771 <xs:annotation> 828 <xs:annotation>
772 - <xs:documentation>Crypt Password of AMDA user.  
773 - Must TBD encryption types Required for predefined parameters.  
774 - </xs:documentation> 829 + <xs:documentation>Crypt Password of AMDA user </xs:documentation>
775 </xs:annotation> 830 </xs:annotation>
776 </xs:element> 831 </xs:element>
777 <xs:element name="outputFormat" minOccurs="0" maxOccurs="1"> 832 <xs:element name="outputFormat" minOccurs="0" maxOccurs="1">
778 <xs:annotation> 833 <xs:annotation>
779 - <xs:documentation> Choice is possible between the 3 formats: netCDF,  
780 - ASCII and VOTable. If the format is not specified it will be netCDF 834 + <xs:documentation> Choice is possible between the four formats: netCDF, CDF,
  835 + ASCII and VOTable. If the format is not specified it will be ASCII
781 by default</xs:documentation> 836 by default</xs:documentation>
782 </xs:annotation> 837 </xs:annotation>
783 <xs:simpleType> 838 <xs:simpleType>
@@ -785,6 +840,7 @@ of a set of typically orthogonal axes. @@ -785,6 +840,7 @@ of a set of typically orthogonal axes.
785 <xs:enumeration value="netCDF"/> 840 <xs:enumeration value="netCDF"/>
786 <xs:enumeration value="VOTable"/> 841 <xs:enumeration value="VOTable"/>
787 <xs:enumeration value="ASCII"/> 842 <xs:enumeration value="ASCII"/>
  843 + <xs:enumeration value="CDF"/>
788 </xs:restriction> 844 </xs:restriction>
789 </xs:simpleType> 845 </xs:simpleType>
790 </xs:element> 846 </xs:element>
@@ -814,17 +870,32 @@ of a set of typically orthogonal axes. @@ -814,17 +870,32 @@ of a set of typically orthogonal axes.
814 <xs:sequence> 870 <xs:sequence>
815 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean"> 871 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
816 <xs:annotation> 872 <xs:annotation>
817 - <xs:documentation>Url of TimeTables storage file with TimeTables  
818 - ID's.</xs:documentation> 873 + <xs:documentation></xs:documentation>
819 </xs:annotation> 874 </xs:annotation>
820 </xs:element> 875 </xs:element>
821 <xs:element maxOccurs="unbounded" minOccurs="0" name="dataFileURLs" 876 <xs:element maxOccurs="unbounded" minOccurs="0" name="dataFileURLs"
822 type="xs:anyURI"> 877 type="xs:anyURI">
823 <xs:annotation> 878 <xs:annotation>
824 <xs:documentation>URLs of results data files. If not URLs - not data for 879 <xs:documentation>URLs of results data files. If not URLs - not data for
825 - required parameters</xs:documentation> 880 + required datasets</xs:documentation>
826 </xs:annotation> 881 </xs:annotation>
827 </xs:element> 882 </xs:element>
  883 + <xs:element maxOccurs="1" minOccurs="0" name="status">
  884 + <xs:annotation>
  885 + <xs:documentation></xs:documentation>
  886 + </xs:annotation>
  887 + <xs:simpleType>
  888 + <xs:restriction base="xs:string">
  889 + <xs:enumeration value="in progress"/>
  890 + <xs:enumeration value="error"/>
  891 + </xs:restriction>
  892 + </xs:simpleType>
  893 + </xs:element>
  894 + <xs:element maxOccurs="1" minOccurs="0" name="id" type="xs:string">
  895 + <xs:annotation>
  896 + <xs:documentation>process ID</xs:documentation>
  897 + </xs:annotation>
  898 + </xs:element>
828 </xs:sequence> 899 </xs:sequence>
829 </xs:complexType> 900 </xs:complexType>
830 901
@@ -840,7 +911,7 @@ of a set of typically orthogonal axes. @@ -840,7 +911,7 @@ of a set of typically orthogonal axes.
840 <xs:documentation>Stop time in ISO 8601 format</xs:documentation> 911 <xs:documentation>Stop time in ISO 8601 format</xs:documentation>
841 </xs:annotation> 912 </xs:annotation>
842 </xs:element> 913 </xs:element>
843 - <xs:element name="missionID" type="xs:string" minOccurs="1" maxOccurs="1"> 914 + <xs:element name="missionID" type="tns:enumMission" minOccurs="1" maxOccurs="1">
844 <xs:annotation> 915 <xs:annotation>
845 <xs:documentation>Id of mission defined in 916 <xs:documentation>Id of mission defined in
846 Amda LocalParams.xml</xs:documentation> 917 Amda LocalParams.xml</xs:documentation>
@@ -853,7 +924,7 @@ of a set of typically orthogonal axes. @@ -853,7 +924,7 @@ of a set of typically orthogonal axes.
853 </xs:element> 924 </xs:element>
854 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"> 925 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
855 <xs:annotation> 926 <xs:annotation>
856 - <xs:documentation>Password of AMDA</xs:documentation> 927 + <xs:documentation>Password of AMDA user</xs:documentation>
857 </xs:annotation> 928 </xs:annotation>
858 </xs:element> 929 </xs:element>
859 </xs:sequence> 930 </xs:sequence>
@@ -866,32 +937,23 @@ of a set of typically orthogonal axes. @@ -866,32 +937,23 @@ of a set of typically orthogonal axes.
866 <xs:documentation>success or not</xs:documentation> 937 <xs:documentation>success or not</xs:documentation>
867 </xs:annotation> 938 </xs:annotation>
868 </xs:element> 939 </xs:element>
869 - <xs:element name="plotDirectoryURL" type="xs:string" minOccurs="1" maxOccurs="1">  
870 - <xs:annotation>  
871 - <xs:documentation>URL of directory of png file</xs:documentation>  
872 - </xs:annotation>  
873 - </xs:element>  
874 - </xs:sequence>  
875 - </xs:complexType>  
876 -  
877 - <xs:complexType name="getResultPlot">  
878 - <xs:sequence>  
879 - <xs:element name="plotDirectoryURL" type="xs:string" minOccurs="1" maxOccurs="1"> 940 + <xs:element maxOccurs="1" minOccurs="0" name="status">
880 <xs:annotation> 941 <xs:annotation>
881 - <xs:documentation>URL of directory of png file</xs:documentation> 942 + <xs:documentation></xs:documentation>
882 </xs:annotation> 943 </xs:annotation>
  944 + <xs:simpleType>
  945 + <xs:restriction base="xs:string">
  946 + <xs:enumeration value="in progress"/>
  947 + <xs:enumeration value="error"/>
  948 + </xs:restriction>
  949 + </xs:simpleType>
883 </xs:element> 950 </xs:element>
884 - </xs:sequence>  
885 - </xs:complexType>  
886 -  
887 - <xs:complexType name="getResultPlotResponse">  
888 - <xs:sequence>  
889 - <xs:element name="success" minOccurs="1" maxOccurs="1" type="xs:boolean"> 951 + <xs:element maxOccurs="1" minOccurs="0" name="id" type="xs:string">
890 <xs:annotation> 952 <xs:annotation>
891 - <xs:documentation>success=true if plot exists and else false </xs:documentation> 953 + <xs:documentation>process ID</xs:documentation>
892 </xs:annotation> 954 </xs:annotation>
893 </xs:element> 955 </xs:element>
894 - <xs:element name="plotFileURL" type="xs:anyURI" minOccurs="0" maxOccurs="1"> 956 + <xs:element name="plotFileURL" type="xs:string" minOccurs="0" maxOccurs="1">
895 <xs:annotation> 957 <xs:annotation>
896 <xs:documentation>URL of png file</xs:documentation> 958 <xs:documentation>URL of png file</xs:documentation>
897 </xs:annotation> 959 </xs:annotation>
@@ -913,7 +975,7 @@ of a set of typically orthogonal axes. @@ -913,7 +975,7 @@ of a set of typically orthogonal axes.
913 </xs:element> 975 </xs:element>
914 <xs:element name="spacecraft" type="tns:enumSpacecraft" maxOccurs="1" minOccurs="1"> 976 <xs:element name="spacecraft" type="tns:enumSpacecraft" maxOccurs="1" minOccurs="1">
915 <xs:annotation> 977 <xs:annotation>
916 - <xs:documentation>List of spavecrafts from AMDA</xs:documentation> 978 + <xs:documentation>List of spacecraft from AMDA</xs:documentation>
917 </xs:annotation> 979 </xs:annotation>
918 </xs:element> 980 </xs:element>
919 <xs:element name="coordinateSystem" type="tns:enumCoordinateSystemName" minOccurs="1" maxOccurs="1"> 981 <xs:element name="coordinateSystem" type="tns:enumCoordinateSystemName" minOccurs="1" maxOccurs="1">
@@ -948,21 +1010,18 @@ of a set of typically orthogonal axes. @@ -948,21 +1010,18 @@ of a set of typically orthogonal axes.
948 </xs:element> 1010 </xs:element>
949 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1"> 1011 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1">
950 <xs:annotation> 1012 <xs:annotation>
951 - <xs:documentation>ID of AMDA user storing in the 3DView. Must TBD For  
952 - public data is optional. </xs:documentation> 1013 + <xs:documentation>ID of AMDA user. If no user ID, user is IMPEX</xs:documentation>
953 </xs:annotation> 1014 </xs:annotation>
954 </xs:element> 1015 </xs:element>
955 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"> 1016 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
956 <xs:annotation> 1017 <xs:annotation>
957 - <xs:documentation>Crypt Password of AMDA user storing in the 3DView.  
958 - Must TBD encryption types Required for predefined parameters.  
959 - </xs:documentation> 1018 + <xs:documentation>Crypt Password of AMDA user </xs:documentation>
960 </xs:annotation> 1019 </xs:annotation>
961 </xs:element> 1020 </xs:element>
962 <xs:element name="outputFormat" minOccurs="0" maxOccurs="1"> 1021 <xs:element name="outputFormat" minOccurs="0" maxOccurs="1">
963 <xs:annotation> 1022 <xs:annotation>
964 - <xs:documentation> Choice is possible between the two formats: netCDF,  
965 - ASCII and VOTable. If the format is not specified it will be netCDF 1023 + <xs:documentation> Choice is possible between the four formats: netCDF, CDF,
  1024 + ASCII and VOTable. If the format is not specified it will be ASCII
966 by default</xs:documentation> 1025 by default</xs:documentation>
967 </xs:annotation> 1026 </xs:annotation>
968 <xs:simpleType> 1027 <xs:simpleType>
@@ -970,6 +1029,7 @@ of a set of typically orthogonal axes. @@ -970,6 +1029,7 @@ of a set of typically orthogonal axes.
970 <xs:enumeration value="netCDF"/> 1029 <xs:enumeration value="netCDF"/>
971 <xs:enumeration value="VOTable"/> 1030 <xs:enumeration value="VOTable"/>
972 <xs:enumeration value="ASCII"/> 1031 <xs:enumeration value="ASCII"/>
  1032 + <xs:enumeration value="CDF"/>
973 </xs:restriction> 1033 </xs:restriction>
974 </xs:simpleType> 1034 </xs:simpleType>
975 </xs:element> 1035 </xs:element>
@@ -999,8 +1059,7 @@ of a set of typically orthogonal axes. @@ -999,8 +1059,7 @@ of a set of typically orthogonal axes.
999 <xs:sequence> 1059 <xs:sequence>
1000 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean"> 1060 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
1001 <xs:annotation> 1061 <xs:annotation>
1002 - <xs:documentation>Url of TimeTables storage file with TimeTables  
1003 - ID's.</xs:documentation> 1062 + <xs:documentation></xs:documentation>
1004 </xs:annotation> 1063 </xs:annotation>
1005 </xs:element> 1064 </xs:element>
1006 <xs:element maxOccurs="unbounded" minOccurs="0" name="dataFileURLs" 1065 <xs:element maxOccurs="unbounded" minOccurs="0" name="dataFileURLs"
@@ -1010,6 +1069,22 @@ of a set of typically orthogonal axes. @@ -1010,6 +1069,22 @@ of a set of typically orthogonal axes.
1010 required parameters</xs:documentation> 1069 required parameters</xs:documentation>
1011 </xs:annotation> 1070 </xs:annotation>
1012 </xs:element> 1071 </xs:element>
  1072 + <xs:element maxOccurs="1" minOccurs="0" name="status">
  1073 + <xs:annotation>
  1074 + <xs:documentation></xs:documentation>
  1075 + </xs:annotation>
  1076 + <xs:simpleType>
  1077 + <xs:restriction base="xs:string">
  1078 + <xs:enumeration value="in progress"/>
  1079 + <xs:enumeration value="error"/>
  1080 + </xs:restriction>
  1081 + </xs:simpleType>
  1082 + </xs:element>
  1083 + <xs:element maxOccurs="1" minOccurs="0" name="id" type="xs:string">
  1084 + <xs:annotation>
  1085 + <xs:documentation>process ID</xs:documentation>
  1086 + </xs:annotation>
  1087 + </xs:element>
1013 </xs:sequence> 1088 </xs:sequence>
1014 </xs:complexType> 1089 </xs:complexType>
1015 1090
@@ -1017,21 +1092,17 @@ of a set of typically orthogonal axes. @@ -1017,21 +1092,17 @@ of a set of typically orthogonal axes.
1017 <xs:sequence> 1092 <xs:sequence>
1018 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1"> 1093 <xs:element name="userID" type="xs:string" minOccurs="0" maxOccurs="1">
1019 <xs:annotation> 1094 <xs:annotation>
1020 - <xs:documentation>ID of AMDA user storing in the 3DView. Must  
1021 - TBD</xs:documentation> 1095 + <xs:documentation>ID of AMDA user. If no user ID, user is IMPEX</xs:documentation>
1022 </xs:annotation> 1096 </xs:annotation>
1023 </xs:element> 1097 </xs:element>
1024 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"> 1098 <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1">
1025 <xs:annotation> 1099 <xs:annotation>
1026 - <xs:documentation>Crypt Password of AMDA user storing in the 3DView.  
1027 - Must TBD encryption types Required for predefined parameters.  
1028 - </xs:documentation> 1100 + <xs:documentation>Crypt Password of AMDA user </xs:documentation>
1029 </xs:annotation> 1101 </xs:annotation>
1030 </xs:element> 1102 </xs:element>
1031 <xs:element name="ttID" type="xs:string" minOccurs="1" maxOccurs="1"> 1103 <xs:element name="ttID" type="xs:string" minOccurs="1" maxOccurs="1">
1032 <xs:annotation> 1104 <xs:annotation>
1033 - <xs:documentation>Id of time tables(TT) defined in  
1034 - AmdaUserTree.xml</xs:documentation> 1105 + <xs:documentation>Id of time table</xs:documentation>
1035 </xs:annotation> 1106 </xs:annotation>
1036 </xs:element> 1107 </xs:element>
1037 </xs:sequence> 1108 </xs:sequence>
@@ -1040,8 +1111,7 @@ of a set of typically orthogonal axes. @@ -1040,8 +1111,7 @@ of a set of typically orthogonal axes.
1040 <xs:sequence> 1111 <xs:sequence>
1041 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean"> 1112 <xs:element name="success" minOccurs="0" maxOccurs="1" type="xs:boolean">
1042 <xs:annotation> 1113 <xs:annotation>
1043 - <xs:documentation>Url of TimeTables storage file with TimeTables  
1044 - ID's.</xs:documentation> 1114 + <xs:documentation></xs:documentation>
1045 </xs:annotation> 1115 </xs:annotation>
1046 </xs:element> 1116 </xs:element>
1047 <xs:element name="ttFileURL" type="xs:anyURI" minOccurs="1" maxOccurs="1"> 1117 <xs:element name="ttFileURL" type="xs:anyURI" minOccurs="1" maxOccurs="1">
@@ -1071,7 +1141,7 @@ of a set of typically orthogonal axes. @@ -1071,7 +1141,7 @@ of a set of typically orthogonal axes.
1071 </wsdl:message> 1141 </wsdl:message>
1072 1142
1073 <wsdl:message name="getObsDataTree"> 1143 <wsdl:message name="getObsDataTree">
1074 - <wsdl:part name="parameters" element="tns:emptyElement"> </wsdl:part> 1144 + <wsdl:part name="parameters" element="tns:emptyElement"></wsdl:part>
1075 </wsdl:message> 1145 </wsdl:message>
1076 1146
1077 <wsdl:message name="getObsDataTreeResponse"> 1147 <wsdl:message name="getObsDataTreeResponse">
@@ -1103,7 +1173,7 @@ of a set of typically orthogonal axes. @@ -1103,7 +1173,7 @@ of a set of typically orthogonal axes.
1103 </wsdl:message> 1173 </wsdl:message>
1104 1174
1105 <wsdl:message name="getDataset"> 1175 <wsdl:message name="getDataset">
1106 - <wsdl:part name="parameters" element="tns:getDataset"> </wsdl:part> 1176 + <wsdl:part name="parameters" element="tns:getDataset"></wsdl:part>
1107 </wsdl:message> 1177 </wsdl:message>
1108 1178
1109 <wsdl:message name="getDatasetResponse"> 1179 <wsdl:message name="getDatasetResponse">
@@ -1118,15 +1188,14 @@ of a set of typically orthogonal axes. @@ -1118,15 +1188,14 @@ of a set of typically orthogonal axes.
1118 <wsdl:part name="parameters" element="tns:getPlotResponse"> </wsdl:part> 1188 <wsdl:part name="parameters" element="tns:getPlotResponse"> </wsdl:part>
1119 </wsdl:message> 1189 </wsdl:message>
1120 1190
1121 - <wsdl:message name="getResultPlot">  
1122 - <wsdl:part name="parameters" element="tns:getResultPlot"> </wsdl:part> 1191 + <wsdl:message name="getStatus">
  1192 + <wsdl:part name="parameters" element="tns:getStatus"></wsdl:part>
1123 </wsdl:message> 1193 </wsdl:message>
1124 1194
1125 - <wsdl:message name="getResultPlotResponse">  
1126 - <wsdl:part name="parameters" element="tns:getResultPlotResponse"> </wsdl:part> 1195 + <wsdl:message name="getStatusResponse">
  1196 + <wsdl:part name="parameters" element="tns:getStatusResponse"> </wsdl:part>
1127 </wsdl:message> 1197 </wsdl:message>
1128 -  
1129 - 1198 +
1130 <wsdl:message name="getOrbites"> 1199 <wsdl:message name="getOrbites">
1131 <wsdl:part name="parameters" element="tns:getOrbites"> </wsdl:part> 1200 <wsdl:part name="parameters" element="tns:getOrbites"> </wsdl:part>
1132 </wsdl:message> 1201 </wsdl:message>
@@ -1171,7 +1240,12 @@ of a set of typically orthogonal axes. @@ -1171,7 +1240,12 @@ of a set of typically orthogonal axes.
1171 <wsdl:input message="tns:getParameter"> </wsdl:input> 1240 <wsdl:input message="tns:getParameter"> </wsdl:input>
1172 <wsdl:output message="tns:getParameterResponse"> </wsdl:output> 1241 <wsdl:output message="tns:getParameterResponse"> </wsdl:output>
1173 </wsdl:operation> 1242 </wsdl:operation>
1174 - 1243 +
  1244 + <wsdl:operation name="getStatus">
  1245 + <wsdl:input message="tns:getStatus"> </wsdl:input>
  1246 + <wsdl:output message="tns:getStatusResponse"> </wsdl:output>
  1247 + </wsdl:operation>
  1248 +
1175 <wsdl:operation name="getDataset"> 1249 <wsdl:operation name="getDataset">
1176 <wsdl:input message="tns:getDataset"> </wsdl:input> 1250 <wsdl:input message="tns:getDataset"> </wsdl:input>
1177 <wsdl:output message="tns:getDatasetResponse"> </wsdl:output> 1251 <wsdl:output message="tns:getDatasetResponse"> </wsdl:output>
@@ -1182,11 +1256,6 @@ of a set of typically orthogonal axes. @@ -1182,11 +1256,6 @@ of a set of typically orthogonal axes.
1182 <wsdl:output message="tns:getPlotResponse"> </wsdl:output> 1256 <wsdl:output message="tns:getPlotResponse"> </wsdl:output>
1183 </wsdl:operation> 1257 </wsdl:operation>
1184 1258
1185 - <wsdl:operation name="getResultPlot">  
1186 - <wsdl:input message="tns:getResultPlot"> </wsdl:input>  
1187 - <wsdl:output message="tns:getResultPlotResponse"> </wsdl:output>  
1188 - </wsdl:operation>  
1189 -  
1190 <wsdl:operation name="getOrbites"> 1259 <wsdl:operation name="getOrbites">
1191 <wsdl:input message="tns:getOrbites"> </wsdl:input> 1260 <wsdl:input message="tns:getOrbites"> </wsdl:input>
1192 <wsdl:output message="tns:getOrbitesResponse"> </wsdl:output> 1261 <wsdl:output message="tns:getOrbitesResponse"> </wsdl:output>
@@ -1253,8 +1322,8 @@ of a set of typically orthogonal axes. @@ -1253,8 +1322,8 @@ of a set of typically orthogonal axes.
1253 <soap:body use="literal"/> 1322 <soap:body use="literal"/>
1254 </wsdl:output> 1323 </wsdl:output>
1255 </wsdl:operation> 1324 </wsdl:operation>
1256 -  
1257 - <wsdl:operation name="getDataset"> 1325 +
  1326 + <wsdl:operation name="getStatus">
1258 <soap:operation soapAction="" style="document"/> 1327 <soap:operation soapAction="" style="document"/>
1259 <wsdl:input> 1328 <wsdl:input>
1260 <soap:body use="literal"/> 1329 <soap:body use="literal"/>
@@ -1263,8 +1332,8 @@ of a set of typically orthogonal axes. @@ -1263,8 +1332,8 @@ of a set of typically orthogonal axes.
1263 <soap:body use="literal"/> 1332 <soap:body use="literal"/>
1264 </wsdl:output> 1333 </wsdl:output>
1265 </wsdl:operation> 1334 </wsdl:operation>
1266 -  
1267 - <wsdl:operation name="getPlot"> 1335 +
  1336 + <wsdl:operation name="getDataset">
1268 <soap:operation soapAction="" style="document"/> 1337 <soap:operation soapAction="" style="document"/>
1269 <wsdl:input> 1338 <wsdl:input>
1270 <soap:body use="literal"/> 1339 <soap:body use="literal"/>
@@ -1274,7 +1343,7 @@ of a set of typically orthogonal axes. @@ -1274,7 +1343,7 @@ of a set of typically orthogonal axes.
1274 </wsdl:output> 1343 </wsdl:output>
1275 </wsdl:operation> 1344 </wsdl:operation>
1276 1345
1277 - <wsdl:operation name="getResultPlot"> 1346 + <wsdl:operation name="getPlot">
1278 <soap:operation soapAction="" style="document"/> 1347 <soap:operation soapAction="" style="document"/>
1279 <wsdl:input> 1348 <wsdl:input>
1280 <soap:body use="literal"/> 1349 <soap:body use="literal"/>
@@ -1309,7 +1378,7 @@ of a set of typically orthogonal axes. @@ -1309,7 +1378,7 @@ of a set of typically orthogonal axes.
1309 1378
1310 <wsdl:service name="Methods_AMDA"> 1379 <wsdl:service name="Methods_AMDA">
1311 <wsdl:port name="Methods_AMDAPort" binding="tns:Methods_AMDASoapBinding"> 1380 <wsdl:port name="Methods_AMDAPort" binding="tns:Methods_AMDASoapBinding">
1312 - <soap:address location="http://apus.cesr.fr/AMDA-TEST/php/AMDA_METHODS_WSDL.php"/> 1381 + <soap:address location="http://amdadev.irap.omp.eu/php/AMDA_METHODS_WSDL.php"/>
1313 </wsdl:port> 1382 </wsdl:port>
1314 </wsdl:service> 1383 </wsdl:service>
1315 </wsdl:definitions> 1384 </wsdl:definitions>