Commit d05bf0bb80c0c8f8840ac52a09a7a246a0698e06
1 parent
1fd0f00c
Exists in
master
and in
112 other branches
Provide to the user some informations about an eventual error.
Showing
3 changed files
with
47 additions
and
23 deletions
Show diff stats
js/app/controllers/EpnTapModule.js
... | ... | @@ -331,8 +331,8 @@ Ext.define('amdaDesktop.EpnTapModule', { |
331 | 331 | this.filter = Array( |
332 | 332 | this.productTypeCB.value !== 'all' ? this.productTypeCB.value : null, // product type |
333 | 333 | this.targetNameCB.value !== 'all' ? this.targetNameCB.value : null, // target name |
334 | - this.timeSelector.getStartTime() !== '' ? this.timeSelector.getStartTime() : null, // start time | |
335 | - this.timeSelector.getStopTime() !== '' ? this.timeSelector.getStopTime() : null // stop time | |
334 | + Ext.Date.format(this.timeSelector.getStartTime(), 'd/m/Y H:i:s'), // start time | |
335 | + Ext.Date.format(this.timeSelector.getStopTime(), 'd/m/Y H:i:s') // stop time | |
336 | 336 | ); |
337 | 337 | |
338 | 338 | AmdaAction.epnTapGetNbRows(selectedServiceId, selectedServiceURL, this.filter, this.updateNbRows); |
... | ... | @@ -480,11 +480,13 @@ Ext.define('amdaDesktop.EpnTapModule', { |
480 | 480 | Among other things, fill the `epnTapGranulesGrid` table (see `EpnTapUI.granulesStore`). |
481 | 481 | */ |
482 | 482 | fillGranules: function(granules) { |
483 | - if (granules == null) { | |
484 | - console.log("There is no granules to add."); | |
483 | + // console.log(granules); | |
484 | + // return; | |
485 | + | |
486 | + if (granules["error"] != null) { | |
487 | + alert(granules["error"]); | |
485 | 488 | } else { |
486 | 489 | try { |
487 | - console.log('Added granules:', granules); | |
488 | 490 | Ext.getCmp('epnTapGranulesGrid').getStore().removeAll(); |
489 | 491 | Ext.getCmp('epnTapGranulesGrid').getStore().add(granules); |
490 | 492 | } catch( e ) { |
... | ... |
js/app/views/IntervalUI.js
... | ... | @@ -72,7 +72,7 @@ Ext.define('amdaUI.IntervalUI', { |
72 | 72 | |
73 | 73 | /** |
74 | 74 | Get the start time field value. |
75 | - - return: A Extjs Date object representing the start time. | |
75 | + - return: A Extjs Date object representing the start time (null if the date is not valid). | |
76 | 76 | */ |
77 | 77 | getStartTime: function() { |
78 | 78 | // get the search form |
... | ... | @@ -85,7 +85,7 @@ Ext.define('amdaUI.IntervalUI', { |
85 | 85 | |
86 | 86 | /** |
87 | 87 | Get the stop time field value. |
88 | - - return: A Extjs Date object representing the stop time. | |
88 | + - return: A Extjs Date object representing the stop time (null if the date is not valid). | |
89 | 89 | */ |
90 | 90 | getStopTime : function() |
91 | 91 | { |
... | ... |
php/classes/VOTableMgr.php
... | ... | @@ -14,6 +14,7 @@ class VOTableMgr { |
14 | 14 | private $stream; // The stream in the VOTable |
15 | 15 | private $c; // Current character position on the stream |
16 | 16 | private $is_little_endian; |
17 | + private $votable_error = false; | |
17 | 18 | |
18 | 19 | function __construct() |
19 | 20 | { |
... | ... | @@ -23,26 +24,31 @@ class VOTableMgr { |
23 | 24 | |
24 | 25 | function addLog($msg) |
25 | 26 | { |
26 | - if (DEBUG_MODE) | |
27 | - fwrite($this->logVotable, date("h:i:s A") . ": " . $msg . "\n"); | |
27 | + if (DEBUG_MODE) | |
28 | + fwrite($this->logVotable, date("h:i:s A") . ": " . $msg . "\n"); | |
28 | 29 | } |
29 | 30 | |
30 | 31 | function load($fileName) { |
31 | - $this->addLog("File name" . $fileName); | |
32 | + $this->addLog("File name " . $fileName); | |
32 | 33 | $this->is_little_endian = array_values(unpack('L1L', pack('V', 1)))[0] == 1; |
33 | 34 | |
34 | 35 | // see http://php.net/manual/en/domdocument.load.php#91384 |
35 | - $opts = array( | |
36 | - 'http' => array('user_agent' => 'PHP libxml agent') | |
36 | + $options = array( | |
37 | + 'http' => array( | |
38 | + 'method' => 'GET', | |
39 | + 'timeout' => '5', | |
40 | + 'user_agent' => 'PHP libxml agent' | |
41 | + ) | |
37 | 42 | ); |
38 | - $context = stream_context_create($opts); | |
43 | + $context = stream_context_create($options); | |
39 | 44 | libxml_set_streams_context($context); |
40 | 45 | |
41 | 46 | $this->xml = new DomDocument(); |
42 | 47 | $res = $this->xml->load($fileName); |
43 | 48 | |
44 | 49 | if(!$res) { |
45 | - $this->addLog("Can not load VOTAble."); | |
50 | + $this->votable_error = "Can not load the XML file. Maybe the service is not accessible."; | |
51 | + $this->addLog("Can not load XML."); | |
46 | 52 | return false; |
47 | 53 | } |
48 | 54 | |
... | ... | @@ -63,21 +69,30 @@ class VOTableMgr { |
63 | 69 | return true; |
64 | 70 | } |
65 | 71 | |
66 | - function isValidSchema() | |
67 | - { | |
68 | - if (!$this->xml) | |
69 | - return FALSE; | |
72 | + function getVotableError() { | |
73 | + return $this->votable_error; | |
74 | + } | |
75 | + | |
76 | + function isValidSchema() { | |
77 | + if ($this->votable_error != false) { | |
78 | + return false; | |
79 | + } | |
80 | + | |
81 | + if (!$this->xml) { | |
82 | + $this->votable_error = "The returned file is not XML."; | |
83 | + return false; | |
84 | + } | |
70 | 85 | |
71 | 86 | $infos = $this->xp->query($this->queryResourceInfo()); |
72 | 87 | foreach($infos as $info) { |
73 | 88 | if($info->getAttribute('value') == 'ERROR') { |
74 | - $this->addLog("There is an error on the VOTable: " . $info->textContent); | |
75 | - return FALSE; | |
89 | + $this->votable_error = $info->textContent; | |
90 | + return false; | |
76 | 91 | } |
77 | 92 | } |
78 | 93 | |
79 | 94 | //ToDo - BRE - add validation!! |
80 | - return TRUE; | |
95 | + return true; | |
81 | 96 | |
82 | 97 | if (DEBUG_MODE) |
83 | 98 | libxml_use_internal_errors(true); |
... | ... | @@ -259,6 +274,9 @@ class VOTableMgr { |
259 | 274 | |
260 | 275 | /** Get the VOTable stream content.*/ |
261 | 276 | public function parseStream() { |
277 | + if (! $this->isValidSchema()) { | |
278 | + return null; | |
279 | + } | |
262 | 280 | $data = Array(); |
263 | 281 | $fields = $this->xp->query($this->queryFields()); |
264 | 282 | $nb_columns = $fields->length; |
... | ... | @@ -266,12 +284,16 @@ class VOTableMgr { |
266 | 284 | $n_value = 0; // index of current value |
267 | 285 | $this->c = 0; // initialize cursor position. |
268 | 286 | $query_stream = $this->xp->query($this->queryStream())->item(0); |
269 | - if($query_stream == NULL) | |
287 | + if($query_stream == NULL) { | |
288 | + $this->votable_error = "There is no STREAM node in the VOTable file."; | |
270 | 289 | return NULL; |
290 | + } | |
271 | 291 | $this->stream = base64_decode($query_stream->textContent); |
272 | 292 | $stream_len = strlen($this->stream); |
273 | - if($stream_len == 0) | |
293 | + if($stream_len == 0) { | |
294 | + $this->votable_error = "There is no result for this query."; | |
274 | 295 | return NULL; |
296 | + } | |
275 | 297 | while($this->c < strlen($this->stream)) { |
276 | 298 | $col_id = $n_value % $nb_columns; |
277 | 299 | $field_node = $fields[$col_id]; |
... | ... |