From d960c8344d3eee26ba435709fc048a57cb2fc204 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Thu, 27 Feb 2014 17:46:49 +0100 Subject: [PATCH] Quality Gates: better handling of errors --- .../webapp/javascripts/quality-gate/app.coffee | 17 +++++++++++++---- .../main/webapp/javascripts/quality-gate/app.js | 10 ++++++++++ .../quality-gate-detail-condition-view.coffee | 8 +++++--- .../views/quality-gate-detail-condition-view.js | 5 +++-- .../quality-gate-detail-header-view.coffee | 7 ++++--- .../views/quality-gate-detail-header-view.js | 5 +++-- .../quality-gate-detail-renaming-view.coffee | 7 ++++--- .../views/quality-gate-detail-renaming-view.js | 5 +++-- .../views/quality-gate-new-view.coffee | 4 ++-- 9 files changed, 47 insertions(+), 21 deletions(-) diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/app.coffee b/sonar-server/src/main/webapp/javascripts/quality-gate/app.coffee index 06e97b566ff..b40dd599f91 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/app.coffee +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/app.coffee @@ -37,6 +37,14 @@ requirejs [ QualityGateRouter ) -> + # Create a generic error handler for ajax requests + jQuery.ajaxSetup + error: (jqXHR) -> + if jqXHR.responseJSON?.errors? + alert _.pluck(jqXHR.responseJSON.errors, 'msg').join '. ' + else + alert jqXHR.responseText + # Create a Quality Gate Application App = new Marionette.Application @@ -80,7 +88,8 @@ requirejs [ App.openFirstQualityGate() if initial # Load metrics and the list of quality gates before start the application - jQuery.when(App.metrics.fetch(), App.qualityGates.fetch()).done -> - jQuery('.quality-gate-page-loader').remove() - # Start the application - App.start() + jQuery.when(App.metrics.fetch(), App.qualityGates.fetch()) + .done -> + jQuery('.quality-gate-page-loader').remove() + # Start the application + App.start() diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/app.js b/sonar-server/src/main/webapp/javascripts/quality-gate/app.js index 4e664ec8f13..51ec105c419 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/app.js +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/app.js @@ -31,6 +31,16 @@ requirejs(['backbone', 'backbone.marionette', 'handlebars', 'quality-gate/collections/quality-gates', 'quality-gate/collections/metrics', 'quality-gate/views/quality-gate-sidebar-list-view', 'quality-gate/router', 'handlebars-extensions'], function(Backbone, Marionette, Handlebars, QualityGates, Metrics, QualityGateSidebarListItemView, QualityGateRouter) { var App; + jQuery.ajaxSetup({ + error: function(jqXHR) { + var _ref; + if (((_ref = jqXHR.responseJSON) != null ? _ref.errors : void 0) != null) { + return alert(_.pluck(jqXHR.responseJSON.errors, 'msg').join('. ')); + } else { + return alert(jqXHR.responseText); + } + } + }); App = new Marionette.Application; App.metrics = new Metrics; App.qualityGates = new QualityGates; diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee index 114b897e1f1..5cf922fcfe0 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee @@ -77,9 +77,11 @@ define [ op: @ui.operatorSelect.val() warning: @ui.warningInput.val() error: @ui.errorInput.val() - @model.save().done => - @options.collectionView.updateConditions() - @hideSpinner() + @model.save() + .always => + @hideSpinner() + .done => + @options.collectionView.updateConditions() deleteCondition: -> diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js index c93a5b62674..2c61f70392f 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js @@ -94,9 +94,10 @@ warning: this.ui.warningInput.val(), error: this.ui.errorInput.val() }); - return this.model.save().done(function() { - _this.options.collectionView.updateConditions(); + return this.model.save().always(function() { return _this.hideSpinner(); + }).done(function() { + return _this.options.collectionView.updateConditions(); }); }; diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.coffee b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.coffee index c2ec768d610..e8401a75442 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.coffee +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.coffee @@ -36,14 +36,15 @@ define [ @options.detailView.showHeaderSpinner() data = if set then { id: @model.id } else {} method = if set then 'set_as_default' else 'unset_default' - jQuery.ajax({ + jQuery.ajax type: 'POST' url: "#{baseUrl}/api/qualitygates/#{method}" data: data - }).done => + .always => + @options.detailView.hideHeaderSpinner() + .done => @options.app.unsetDefaults @model.id @model.set 'default', !@model.get('default') - @options.detailView.hideHeaderSpinner() setAsDefault: -> diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.js b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.js index 2641adc13e8..760b0f487de 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.js +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-header-view.js @@ -54,10 +54,11 @@ type: 'POST', url: "" + baseUrl + "/api/qualitygates/" + method, data: data + }).always(function() { + return _this.options.detailView.hideHeaderSpinner(); }).done(function() { _this.options.app.unsetDefaults(_this.model.id); - _this.model.set('default', !_this.model.get('default')); - return _this.options.detailView.hideHeaderSpinner(); + return _this.model.set('default', !_this.model.get('default')); }); }; diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.coffee b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.coffee index cd557648e4a..e5b77853540 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.coffee +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.coffee @@ -26,16 +26,17 @@ define [ rename: -> @options.detailView.showHeaderSpinner() newName = @ui.input.val() - jQuery.ajax({ + jQuery.ajax url: "#{baseUrl}/api/qualitygates/rename" type: 'POST' data: id: @model.id name: newName - }).done => + .always => + @options.detailView.hideHeaderSpinner() + .done => @model.set 'name', newName @options.detailView.showHeader() - @options.detailView.hideHeaderSpinner() cancel: -> diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.js b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.js index 4339214161b..983f29a17a1 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.js +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-renaming-view.js @@ -40,10 +40,11 @@ id: this.model.id, name: newName } + }).always(function() { + return _this.options.detailView.hideHeaderSpinner(); }).done(function() { _this.model.set('name', newName); - _this.options.detailView.showHeader(); - return _this.options.detailView.hideHeaderSpinner(); + return _this.options.detailView.showHeader(); }); }; diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-new-view.coffee b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-new-view.coffee index a0dfca698a3..681c63cfe4f 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-new-view.coffee +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-new-view.coffee @@ -28,11 +28,11 @@ define [ save: -> @showHeaderSpinner() name = @ui.input.val() - jQuery.ajax({ + jQuery.ajax url: "#{baseUrl}/api/qualitygates/create" type: 'POST' data: name: name - }).done (r) => + .done (r) => @model.set r @options.app.qualityGates.add @model @options.app.router.navigate "show/#{@model.id}", trigger: true -- 2.39.5