You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2014/11/02 19:54:20 UTC

git commit: AMBARI-8107 Configs: not prompted when changes are not saved when clicking on scv. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/branch-1.7.0 ef47f5179 -> 63b8b4b2b


AMBARI-8107 Configs: not prompted when changes are not saved when clicking on scv. (atkach)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/63b8b4b2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/63b8b4b2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/63b8b4b2

Branch: refs/heads/branch-1.7.0
Commit: 63b8b4b2be0d53e37bf0f58285ad844fc62f6c02
Parents: ef47f51
Author: atkach <at...@hortonworks.com>
Authored: Sun Nov 2 20:53:59 2014 +0200
Committer: atkach <at...@hortonworks.com>
Committed: Sun Nov 2 20:53:59 2014 +0200

----------------------------------------------------------------------
 .../controllers/main/service/info/configs.js    | 24 ++++++++--
 .../common/configs/config_history_flow.hbs      | 12 ++---
 .../common/configs/service_version_box.hbs      |  8 ++--
 .../views/common/configs/config_history_flow.js | 44 ++++++++++++++++--
 .../main/service/info/config_test.js            | 49 ++++++++------------
 5 files changed, 87 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/controllers/main/service/info/configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index 3a873e0..2b194ae 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -2692,12 +2692,26 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
    * @method selectConfigGroup
    */
   selectConfigGroup: function (event) {
+    var self = this;
+
+    function callback() {
+      self.doSelectConfigGroup(event);
+    }
+
     if (!this.get('isInit')) {
       if (this.hasUnsavedChanges()) {
-        this.showSavePopup(null, event);
+        this.showSavePopup(null, callback);
         return;
       }
     }
+    callback();
+  },
+  /**
+   * switch view to selected group
+   * @param event
+   * @method selectConfigGroup
+   */
+  doSelectConfigGroup: function (event) {
     //clean when switch config group
     this.loadedGroupToOverrideSiteToTagMap = {};
     if (App.get('supports.configHistory')) {
@@ -2724,10 +2738,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
   /**
    * If some configs are changed and user navigates away or select another config-group, show this popup with propose to save changes
    * @param {String} path
-   * @param {object} event - triggered event for selecting another config-group
+   * @param {object} callback - callback with action to change configs view(change group or version)
    * @method showSavePopup
    */
-  showSavePopup: function (path, event) {
+  showSavePopup: function (path, callback) {
     var self = this;
     return App.ModalPopup.show({
       header: Em.I18n.t('common.warning'),
@@ -2756,10 +2770,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
         if (path) {
           self.set('forceTransition', true);
           App.router.route(path);
-        } else if (event) {
+        } else if (callback) {
           // Prevent multiple popups
           self.set('hash', self.getHash());
-          self.selectConfigGroup(event);
+          callback();
         }
         this.hide();
       },

http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/templates/common/configs/config_history_flow.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/config_history_flow.hbs b/ambari-web/app/templates/common/configs/config_history_flow.hbs
index 68d6b11..def5820 100644
--- a/ambari-web/app/templates/common/configs/config_history_flow.hbs
+++ b/ambari-web/app/templates/common/configs/config_history_flow.hbs
@@ -48,7 +48,7 @@
                   &nbsp;<strong>{{view.compareServiceVersion.createdDate}}</strong>
               </div>
               <div class="pull-right operations-button">
-                  <button class="btn btn-success"  {{action revert view.serviceVersionsReferences.compare target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.compareServiceVersion.isCurrent:hidden"}}>{{view.compareServiceVersion.makeCurrentButtonText}}</button>
+                  <button class="btn btn-success"  {{action doAction view.serviceVersionsReferences.compare view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.compareServiceVersion.isCurrent:hidden"}}>{{view.compareServiceVersion.makeCurrentButtonText}}</button>
               </div>
           </div>
       </div>
@@ -63,7 +63,7 @@
               <ul class="dropdown-menu">
                 {{#each serviceVersion in view.dropDownList}}
                   <li {{bindAttr class=":pointer :dropdown-submenu serviceVersion.isDisplayed:not-allowed"}}>
-                    <div class="row-fluid version-in-dropdown " {{action switchVersion serviceVersion target="view"}}>
+                    <div class="row-fluid version-in-dropdown " {{action doAction serviceVersion view.actionTypes.SWITCH target="view"}}>
                       <div class="span2">{{serviceVersion.versionText}}</div>
                       <div class="span6">{{serviceVersion.createdDate}}</div>
                       <div class="span3">{{serviceVersion.author}}</div>
@@ -77,10 +77,10 @@
                         <div class="notes">{{{serviceVersion.fullNotes}}}</div>
                       </div>
                       <div class="version-operations-buttons">
-                        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action switchVersion serviceVersion target="view"}}><i class="icon-search"></i>&nbsp;{{t common.view}}</button>
+                        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action doAction serviceVersion view.actionTypes.SWITCH target="view"}}><i class="icon-search"></i>&nbsp;{{t common.view}}</button>
                         {{#if App.isManager}}
-                        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action compare serviceVersion target="view"}}><i class="icon-copy"></i>&nbsp;{{t common.compare}}</button>
-                        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action revert serviceVersion target="view"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
+                        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action doAction serviceVersion view.actionTypes.COMPARE target="view"}}><i class="icon-copy"></i>&nbsp;{{t common.compare}}</button>
+                        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
                         {{/if}}
                       </div>
                     </ul>
@@ -109,7 +109,7 @@
                     <button class="btn" {{action doCancel target="controller"}} {{bindAttr disabled="view.isDiscardDisabled"}}>{{t common.discard}}</button>
                     <button class="btn btn-success" {{action save target="view"}} {{bindAttr disabled="view.isSaveDisabled"}}>{{t common.save}}</button>
                 </div>
-                <button class="btn btn-success"  {{action revert view.serviceVersionsReferences.displayed target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.isCurrent:hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button>
+                <button class="btn btn-success"  {{action doAction view.serviceVersionsReferences.displayed view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.isCurrent:hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button>
             </div>
           {{/if}}
         </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/templates/common/configs/service_version_box.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/service_version_box.hbs b/ambari-web/app/templates/common/configs/service_version_box.hbs
index 8bd8434..749cb1d 100644
--- a/ambari-web/app/templates/common/configs/service_version_box.hbs
+++ b/ambari-web/app/templates/common/configs/service_version_box.hbs
@@ -19,7 +19,7 @@
 <div {{bindAttr class=":flow-element :pull-left serviceVersion.first:first"}}>
   <div class="arrow-box pull-left"></div>
   <div class="version-box">
-    <div {{bindAttr class=":version-info :box :pull-right serviceVersion.isDisplayed:displayed serviceVersion.isDisabled:grayedOut"}} {{action switchVersion serviceVersion target="view.parentView"}}>
+    <div {{bindAttr class=":version-info :box :pull-right serviceVersion.isDisplayed:displayed serviceVersion.isDisabled:grayedOut"}} {{action doAction serviceVersion view.actionTypes.SWITCH target="view.parentView"}}>
       <div class="top-label">
         <span class="label label-info">{{serviceVersion.versionText}}</span>
         <span class="author pull-right">{{serviceVersion.author}}</span>
@@ -42,10 +42,10 @@
         <div class="notes">{{{serviceVersion.fullNotes}}}</div>
       </div>
       <div class="version-operations-buttons">
-        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action switchVersion serviceVersion target="view.parentView"}}><i class="icon-search"></i>&nbsp;{{t common.view}}</button>
+        <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action doAction serviceVersion view.actionTypes.SWITCH target="view.parentView"}}><i class="icon-search"></i>&nbsp;{{t common.view}}</button>
         {{#if App.isManager}}
-          <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action compare serviceVersion target="view.parentView"}}><i class="icon-copy"></i>&nbsp;{{t common.compare}}</button>
-          <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action revert serviceVersion target="view.parentView"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
+          <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action doAction serviceVersion view.actionTypes.COMPARE target="view.parentView"}}><i class="icon-copy"></i>&nbsp;{{t common.compare}}</button>
+          <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view.parentView"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
         {{/if}}
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/views/common/configs/config_history_flow.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/config_history_flow.js b/ambari-web/app/views/common/configs/config_history_flow.js
index 2e3a3e4..00c7a13 100644
--- a/ambari-web/app/views/common/configs/config_history_flow.js
+++ b/ambari-web/app/views/common/configs/config_history_flow.js
@@ -42,6 +42,15 @@ App.ConfigHistoryFlowView = Em.View.extend({
   compareServiceVersion: null,
 
   /**
+   * types of actions that can't be done to service config versions
+   */
+  actionTypes: {
+    SWITCH: 'switchVersion',
+    COMPARE: 'compare',
+    REVERT: 'revert'
+  },
+
+  /**
    * In reason of absence of properties dynamic values support which passed to an action,
    * used property map to get latest values of properties for action
    */
@@ -157,6 +166,9 @@ App.ConfigHistoryFlowView = Em.View.extend({
   },
 
   serviceVersionBox: Em.View.extend({
+    actionTypes: function() {
+      return this.get('parentView.actionTypes');
+    }.property('parentView.actionTypes'),
     templateName: require('templates/common/configs/service_version_box'),
     didInsertElement: function () {
       $('.version-box').hoverIntent(function() {
@@ -314,10 +326,36 @@ App.ConfigHistoryFlowView = Em.View.extend({
   },
 
   /**
+   * check action constraints prior to invoke it
+   * @param event
+   */
+  doAction: function (event) {
+    var type = event.contexts[1],
+        controller = this.get('controller'),
+        self = this;
+
+    if (type === 'switchVersion') {
+      if (event.context.get("isDisplayed"))  return;
+    } else {
+      var isDisabled = event.context ? event.context.get('isDisabled') : false;
+      if (isDisabled) return;
+    }
+
+    function callback() {
+      self[type].call(self, event);
+    }
+
+    if (controller.hasUnsavedChanges()) {
+      controller.showSavePopup(null, callback);
+      return;
+    }
+    callback();
+  },
+
+  /**
    * switch configs view version to chosen
    */
   switchVersion: function (event) {
-    if (event.context.get("isDisplayed"))  return;
     var version = event.context.get('version');
     var versionIndex = 0;
 
@@ -339,8 +377,6 @@ App.ConfigHistoryFlowView = Em.View.extend({
    * add a second version-info-bar for the chosen version
    */
   compare: function (event) {
-    var isDisabled = event.context ? event.context.get('isDisabled') : false;
-    if (isDisabled) return;
     this.set('controller.compareServiceVersion', event.context);
     this.set('compareServiceVersion', event.context);
     this.get('controller').onConfigGroupChange();
@@ -369,8 +405,6 @@ App.ConfigHistoryFlowView = Em.View.extend({
    */
   revert: function (event) {
     var self = this;
-    var isDisabled = event.context ? event.context.get('isDisabled') : false;
-    if (isDisabled) return;
     var serviceConfigVersion = event.context || Em.Object.create({
       version: this.get('displayedServiceVersion.version'),
       serviceName: this.get('displayedServiceVersion.serviceName'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/test/controllers/main/service/info/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/info/config_test.js b/ambari-web/test/controllers/main/service/info/config_test.js
index aace90b..56e0195 100644
--- a/ambari-web/test/controllers/main/service/info/config_test.js
+++ b/ambari-web/test/controllers/main/service/info/config_test.js
@@ -30,64 +30,52 @@ describe("App.MainServiceInfoConfigsController", function () {
     var tests = [
       {
         path: false,
-        event: false,
+        callback: null,
         action: "onSave",
-        m: "save configs without path/event",
+        m: "save configs without path/callback",
         results: [
           {
             method: "restartServicePopup",
             called: true
-          },
-          {
-            method: "selectConfigGroup",
-            called: false
           }
         ]
       },
       {
         path: true,
-        event: true,
+        callback: true,
         action: "onSave",
-        m: "save configs with path/event",
+        m: "save configs with path/callback",
         results: [
           {
             method: "restartServicePopup",
             called: true
-          },
-          {
-            method: "selectConfigGroup",
-            called: false
           }
         ]
       },
       {
         path: false,
-        event: false,
+        callback: false,
         action: "onDiscard",
-        m: "discard changes without path/event",
+        m: "discard changes without path/callback",
         results: [
           {
             method: "restartServicePopup",
             called: false
-          },
-          {
-            method: "selectConfigGroup",
-            called: false
           }
         ]
       },
       {
         path: false,
-        event: true,
+        callback: true,
         action: "onDiscard",
-        m: "discard changes with event",
+        m: "discard changes with callback",
         results: [
           {
             method: "restartServicePopup",
             called: false
           },
           {
-            method: "selectConfigGroup",
+            method: "callback",
             called: true
           },
           {
@@ -98,7 +86,7 @@ describe("App.MainServiceInfoConfigsController", function () {
       },
       {
         path: true,
-        event: false,
+        callback: null,
         action: "onDiscard",
         m: "discard changes with path",
         results: [
@@ -107,10 +95,6 @@ describe("App.MainServiceInfoConfigsController", function () {
             called: false
           },
           {
-            method: "selectConfigGroup",
-            called: false
-          },
-          {
             field: "forceTransition",
             value: true
           }
@@ -120,7 +104,6 @@ describe("App.MainServiceInfoConfigsController", function () {
 
     beforeEach(function () {
       sinon.stub(mainServiceInfoConfigsController, "restartServicePopup", Em.K);
-      sinon.stub(mainServiceInfoConfigsController, "selectConfigGroup", Em.K);
       sinon.stub(mainServiceInfoConfigsController, "getHash", function () {
         return "hash"
       });
@@ -128,16 +111,22 @@ describe("App.MainServiceInfoConfigsController", function () {
     });
     afterEach(function () {
       mainServiceInfoConfigsController.restartServicePopup.restore();
-      mainServiceInfoConfigsController.selectConfigGroup.restore();
       mainServiceInfoConfigsController.getHash.restore();
     });
 
     tests.forEach(function (t) {
       t.results.forEach(function (r) {
         it(t.m + " " + r.method + " " + r.field, function () {
-          mainServiceInfoConfigsController.showSavePopup(t.path, t.event)[t.action]();
+          if (t.callback) {
+            t.callback = sinon.stub();
+          }
+          mainServiceInfoConfigsController.showSavePopup(t.path, t.callback)[t.action]();
           if (r.method) {
-            expect(mainServiceInfoConfigsController[r.method].calledOnce).to.equal(r.called);
+            if (r.method === 'callback') {
+              expect(t.callback.calledOnce).to.equal(r.called);
+            } else {
+              expect(mainServiceInfoConfigsController[r.method].calledOnce).to.equal(r.called);
+            }
           } else if (r.field) {
             expect(mainServiceInfoConfigsController.get(r.field)).to.equal(r.value);
           }