AMBARI-8470. Slider View: error message after clicking Start (or Stop) button second time (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0fc4e7f0 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0fc4e7f0 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0fc4e7f0 Branch: refs/heads/trunk Commit: 0fc4e7f0e50135906205e58bfd07acdeec053f05 Parents: 10f4afc Author: Alex Antonenko <[email protected]> Authored: Fri Nov 28 18:35:54 2014 +0200 Committer: Alex Antonenko <[email protected]> Committed: Fri Nov 28 18:52:17 2014 +0200 ---------------------------------------------------------------------- .../ui/app/controllers/slider_app_controller.js | 19 +++++++++---------- .../src/main/resources/ui/app/helpers/ajax.js | 2 +- .../ui/app/mappers/slider_apps_mapper.js | 6 ++++-- .../main/resources/ui/app/models/slider_app.js | 13 +++++++++++++ .../controllers/slider_app_controller_test.js | 10 +++++++--- .../test/unit/mappers/slider_apps_mapper_test.js | 6 +++--- 6 files changed, 37 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/0fc4e7f0/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js index 5c521c2..0684e53 100644 --- a/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js +++ b/contrib/views/slider/src/main/resources/ui/app/controllers/slider_app_controller.js @@ -115,7 +115,7 @@ App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, { statusActionsMap = this.get('statusActionsMap'), status = this.get('model.status'); - this.get('model').set('isActionPerformed', false); + if (this.get('model.isActionFinished')) this.get('model').set('isActionPerformed', false); statusActionsMap[status].forEach(function(action) { if ('destroy' === action) { advanced.pushObject(appActions[action]); @@ -167,12 +167,6 @@ App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, { groupedComponentsHaveErrors: false, /** - * Action is performed. - * @type {Bool} - **/ - isActionRunning: false, - - /** * Custom popup for "Destroy"-action * @method destroyConfirm */ @@ -209,7 +203,7 @@ App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, { */ thaw: function() { var model = this.get('model'); - this.get('model').set('isActionPerformed', true); + this.setStartAction(); return App.ajax.send({ name: 'changeAppState', sender: this, @@ -241,7 +235,7 @@ App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, { */ freeze: function() { var model = this.get('model'); - this.get('model').set('isActionPerformed', true); + this.setStartAction(); return App.ajax.send({ name: 'changeAppState', sender: this, @@ -351,7 +345,7 @@ App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, { * @method destroy */ destroy: function() { - this.get('model').set('isActionPerformed', true); + this.setStartAction(); return App.ajax.send({ name: 'destroyApp', sender: this, @@ -465,6 +459,11 @@ App.SliderAppController = Ember.ObjectController.extend(App.AjaxErrorHandler, { } } } + }, + + setStartAction: function() { + this.get('model').set('isActionPerformed' , true); + this.get('model').set('statusBeforeAction' , this.get('model.status')); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/0fc4e7f0/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js index b622992..bfb976d 100644 --- a/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js +++ b/contrib/views/slider/src/main/resources/ui/app/helpers/ajax.js @@ -99,7 +99,7 @@ var urls = { }, 'mapper.applicationApps': { - real: 'apps/?fields=*', + real: '?fields=apps/*', mock: '/data/apps/apps.json', headers: { Accept: "text/plain; charset=utf-8", http://git-wip-us.apache.org/repos/asf/ambari/blob/0fc4e7f0/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js b/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js index 4718654..4b3fae2 100644 --- a/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js +++ b/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js @@ -239,7 +239,7 @@ App.SliderAppsMapper = App.Mapper.createWithMixins(App.RunPeriodically, { this.set('isWarningPopupShown', false); } - data.items.forEach(function (app) { + data.apps.forEach(function (app) { var componentsId = app.components ? self.parseComponents(app) : [], configs = app.configs ? self.parseConfigs(app) : {}, quickLinks = self.parseQuickLinks(app), @@ -285,6 +285,8 @@ App.SliderAppsMapper = App.Mapper.createWithMixins(App.RunPeriodically, { appRecord.destroyRecord(); } }); - App.SliderApp.store.pushMany('sliderApp', apps); + apps.forEach(function(app) { + App.SliderApp.store.push('sliderApp', app, true); + }); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/0fc4e7f0/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js index 3338534..c669744 100644 --- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js +++ b/contrib/views/slider/src/main/resources/ui/app/models/slider_app.js @@ -34,6 +34,12 @@ App.SliderApp = DS.Model.extend({ status: DS.attr('string'), /** + * Status before performed action + * @type {string} + */ + statusBeforeAction: DS.attr('string'), + + /** * @type {displayStatus} */ displayStatus: DS.attr('string'), @@ -54,6 +60,13 @@ App.SliderApp = DS.Model.extend({ isActionPerformed: DS.attr('boolean'), /** + * @type {boolean} + */ + isActionFinished: function() { + return this.get('status') != this.get('statusBeforeAction'); + }.property('statusBeforeAction', 'status'), + + /** * @type {String} */ http://git-wip-us.apache.org/repos/asf/ambari/blob/0fc4e7f0/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js index 7437a4f..1dd8b70 100644 --- a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js +++ b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/slider_app_controller_test.js @@ -562,12 +562,16 @@ test('quickLinksOrdered', function() { test('Disable Action Button', function() { expect(6); - var controller = this.subject({ - model: Em.Object.create({ + model: Em.Object.extend({ + isActionFinished: function() { + return this.get('status') != this.get('statusBeforeAction'); + }.property('statusBeforeAction', 'status') + }).create({ id: 'someId', name: 'SomeName', - status: 'ACCEPTED' + status: 'ACCEPTED', + statusBeforeAction: '' }), defaultErrorHandler: function() { return true; } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/0fc4e7f0/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js b/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js index 012951f..3e34c953 100644 --- a/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js +++ b/contrib/views/slider/src/main/resources/ui/test/unit/mappers/slider_apps_mapper_test.js @@ -59,7 +59,7 @@ test('parse | add/remove apps', function () { Em.run(function () { App.SliderAppsMapper.parse({ - items: [ + apps: [ {id: '1', type: 't1'}, {id: '2', type: 't2'} ] @@ -72,7 +72,7 @@ test('parse | add/remove apps', function () { Em.run(function () { App.SliderAppsMapper.parse({ - items: [ + apps: [ {id: '2', type: 't2'}, {id: '3', type: 't3'} ] @@ -82,4 +82,4 @@ test('parse | add/remove apps', function () { deepEqual(App.SliderApp.store.all('sliderApp').mapBy('id'), ['2', '3'], 'Delete not-existing app and add new'); -}); \ No newline at end of file +});
