Commit d05bf0bb80c0c8f8840ac52a09a7a246a0698e06

Authored by Nathanael Jourdane
1 parent 1fd0f00c

Provide to the user some informations about an eventual error.

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];
... ...