You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jg...@apache.org on 2018/05/16 16:38:00 UTC

[ambari] branch branch-feature-AMBARI-14714 updated (753f41d -> 2301672)

This is an automated email from the ASF dual-hosted git repository.

jgolieb pushed a change to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git.


    from 753f41d  AMBARI-23746. Host components request fails due to missing component ID (#1265)
     new 4587fc6  Removed "Stack and Versions" view and a lot of related code that is no longer needed.
     new 2301672  Captured upgrade states as constants for future use.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 ambari-web/app/app.js                              |  112 +-
 ambari-web/app/controllers.js                      |    1 -
 ambari-web/app/controllers/application.js          |   34 -
 .../app/controllers/global/cluster_controller.js   |   55 -
 .../app/controllers/global/update_controller.js    |    1 -
 .../highAvailability/progress_popup_controller.js  |    3 -
 .../main/admin/stack_and_upgrade_controller.js     | 2226 ------------
 ambari-web/app/data/controller_route.js            |    4 -
 ambari-web/app/mappers.js                          |    3 +-
 .../app/mappers/socket/upgrade_state_mapper.js     |   42 -
 ambari-web/app/router.js                           |   12 +-
 ambari-web/app/routes/main.js                      |   70 -
 ambari-web/app/routes/stack_upgrade_routes.js      |   95 -
 ambari-web/app/templates/application.hbs           |   26 -
 .../app/templates/main/admin/stack_and_upgrade.hbs |   22 -
 .../main/admin/stack_upgrade/services.hbs          |  123 -
 .../admin/stack_upgrade/stack_upgrade_wizard.hbs   |  340 --
 .../stack_upgrade/upgrade_configs_merge_table.hbs  |    2 +-
 .../upgrade_configs_recommend_table.hbs            |    2 +-
 .../admin/stack_upgrade/upgrade_version_box.hbs    |  116 -
 .../admin/stack_upgrade/upgrade_version_column.hbs |  121 -
 .../main/admin/stack_upgrade/versions.hbs          |   71 -
 .../app/templates/main/host/stack_versions.hbs     |   10 +-
 ambari-web/app/utils/ajax/ajax.js                  |   41 -
 ambari-web/app/utils/constants.js                  |   12 +-
 ambari-web/app/views.js                            |    7 -
 .../common/modal_popups/cluster_check_popup.js     |   38 +-
 ambari-web/app/views/main/admin.js                 |    7 -
 .../app/views/main/admin/stack_and_upgrade_view.js |   24 -
 .../views/main/admin/stack_upgrade/menu_view.js    |   70 -
 .../main/admin/stack_upgrade/services_view.js      |  146 -
 .../stack_upgrade/upgrade_version_box_view.js      |  635 ----
 .../stack_upgrade/upgrade_version_column_view.js   |  120 -
 .../admin/stack_upgrade/upgrade_wizard_view.js     |  520 ---
 .../main/admin/stack_upgrade/versions_view.js      |  254 --
 .../app/views/main/host/stack_versions_view.js     |    7 -
 ambari-web/app/views/main/menu.js                  |    8 -
 ambari-web/test/app_test.js                        |  176 -
 .../controllers/global/cluster_controller_test.js  |  152 -
 .../controllers/global/update_controller_test.js   |    1 -
 .../progress_popup_controller_test.js              |    6 -
 .../admin/stack_and_upgrade_controller_test.js     | 3606 --------------------
 .../mappers/socket/upgrade_state_mapper_test.js    |   80 -
 .../main/admin/stack_upgrade/menu_view_test.js     |   59 -
 .../main/admin/stack_upgrade/services_view_test.js |   91 -
 .../stack_upgrade/upgrade_version_box_view_test.js | 1552 ---------
 .../upgrade_version_column_view_test.js            |  193 --
 .../stack_upgrade/upgrade_wizard_view_test.js      |  956 ------
 .../main/admin/stack_upgrade/version_view_test.js  |  604 ----
 49 files changed, 70 insertions(+), 12786 deletions(-)
 delete mode 100644 ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
 delete mode 100644 ambari-web/app/mappers/socket/upgrade_state_mapper.js
 delete mode 100644 ambari-web/app/routes/stack_upgrade_routes.js
 delete mode 100644 ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
 delete mode 100644 ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
 delete mode 100644 ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
 delete mode 100644 ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs
 delete mode 100644 ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_column.hbs
 delete mode 100644 ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs
 delete mode 100644 ambari-web/app/views/main/admin/stack_and_upgrade_view.js
 delete mode 100644 ambari-web/app/views/main/admin/stack_upgrade/menu_view.js
 delete mode 100644 ambari-web/app/views/main/admin/stack_upgrade/services_view.js
 delete mode 100644 ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
 delete mode 100644 ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
 delete mode 100644 ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
 delete mode 100644 ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
 delete mode 100644 ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
 delete mode 100644 ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
 delete mode 100644 ambari-web/test/views/main/admin/stack_upgrade/menu_view_test.js
 delete mode 100644 ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js
 delete mode 100644 ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
 delete mode 100644 ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_column_view_test.js
 delete mode 100644 ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
 delete mode 100644 ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js

-- 
To stop receiving notification emails like this one, please contact
jgolieb@apache.org.

[ambari] 01/02: Removed "Stack and Versions" view and a lot of related code that is no longer needed.

Posted by jg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jgolieb pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git

commit 4587fc6cd38a215335063c7a473e810a47f42c32
Author: Jason Golieb <jg...@hortonworks.com>
AuthorDate: Tue May 15 14:36:05 2018 -0700

    Removed "Stack and Versions" view and a lot of related code that is no longer needed.
---
 ambari-web/app/app.js                              |  112 +-
 ambari-web/app/controllers.js                      |    1 -
 ambari-web/app/controllers/application.js          |   34 -
 .../app/controllers/global/cluster_controller.js   |   55 -
 .../app/controllers/global/update_controller.js    |    1 -
 .../highAvailability/progress_popup_controller.js  |    3 -
 .../main/admin/stack_and_upgrade_controller.js     | 2226 ------------
 ambari-web/app/data/controller_route.js            |    4 -
 ambari-web/app/mappers.js                          |    3 +-
 .../app/mappers/socket/upgrade_state_mapper.js     |   42 -
 ambari-web/app/router.js                           |   12 +-
 ambari-web/app/routes/main.js                      |   70 -
 ambari-web/app/routes/stack_upgrade_routes.js      |   95 -
 ambari-web/app/templates/application.hbs           |   26 -
 .../app/templates/main/admin/stack_and_upgrade.hbs |   22 -
 .../main/admin/stack_upgrade/services.hbs          |  123 -
 .../admin/stack_upgrade/stack_upgrade_wizard.hbs   |  340 --
 .../stack_upgrade/upgrade_configs_merge_table.hbs  |    2 +-
 .../upgrade_configs_recommend_table.hbs            |    2 +-
 .../admin/stack_upgrade/upgrade_version_box.hbs    |  116 -
 .../admin/stack_upgrade/upgrade_version_column.hbs |  121 -
 .../main/admin/stack_upgrade/versions.hbs          |   71 -
 .../app/templates/main/host/stack_versions.hbs     |   10 +-
 ambari-web/app/utils/ajax/ajax.js                  |   41 -
 ambari-web/app/views.js                            |    7 -
 .../common/modal_popups/cluster_check_popup.js     |   38 +-
 ambari-web/app/views/main/admin.js                 |    7 -
 .../app/views/main/admin/stack_and_upgrade_view.js |   24 -
 .../views/main/admin/stack_upgrade/menu_view.js    |   70 -
 .../main/admin/stack_upgrade/services_view.js      |  146 -
 .../stack_upgrade/upgrade_version_box_view.js      |  635 ----
 .../stack_upgrade/upgrade_version_column_view.js   |  120 -
 .../admin/stack_upgrade/upgrade_wizard_view.js     |  520 ---
 .../main/admin/stack_upgrade/versions_view.js      |  254 --
 .../app/views/main/host/stack_versions_view.js     |    7 -
 ambari-web/app/views/main/menu.js                  |    8 -
 ambari-web/test/app_test.js                        |  176 -
 .../controllers/global/cluster_controller_test.js  |  152 -
 .../controllers/global/update_controller_test.js   |    1 -
 .../progress_popup_controller_test.js              |    6 -
 .../admin/stack_and_upgrade_controller_test.js     | 3606 --------------------
 .../mappers/socket/upgrade_state_mapper_test.js    |   80 -
 .../main/admin/stack_upgrade/menu_view_test.js     |   59 -
 .../main/admin/stack_upgrade/services_view_test.js |   91 -
 .../stack_upgrade/upgrade_version_box_view_test.js | 1552 ---------
 .../upgrade_version_column_view_test.js            |  193 --
 .../stack_upgrade/upgrade_wizard_view_test.js      |  956 ------
 .../main/admin/stack_upgrade/version_view_test.js  |  604 ----
 48 files changed, 59 insertions(+), 12785 deletions(-)

diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index 0dc9ca9..9614e28 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -45,7 +45,7 @@ module.exports = Em.Application.create({
   isClusterUser: false,
   isPermissionDataLoaded: false,
   auth: undefined,
-  isOnlyViewUser: function() {
+  isOnlyViewUser: function () {
     return App.auth && (App.auth.length == 0 || (App.isAuthorized('VIEW.USE') && App.auth.length == 1));
   }.property('auth'),
 
@@ -62,102 +62,20 @@ module.exports = Em.Application.create({
   isKerberosEnabled: false,
 
   /**
-   * state of stack upgrade process
-   * states:
-   *  - NOT_REQUIRED
-   *  - PENDING
-   *  - IN_PROGRESS
-   *  - HOLDING
-   *  - COMPLETED
-   *  - ABORTED
-   *  - HOLDING_FAILED
-   *  - HOLDING_TIMEDOUT
-   * @type {String}
-   */
-  upgradeState: 'NOT_REQUIRED',
-
-  /**
-   * Check if upgrade is in INIT state
-   * 'INIT' is set on upgrade start and when it's finished
-   * @type {boolean}
-   */
-  upgradeInit: Em.computed.equal('upgradeState', 'NOT_REQUIRED'),
-
-  /**
-   * flag is true when upgrade process is running
-   * @returns {boolean}
-   */
-  upgradeInProgress: Em.computed.equal('upgradeState', 'IN_PROGRESS'),
-
-  /**
-   * Checks if update process is completed
-   * @type {boolean}
-   */
-  upgradeCompleted: Em.computed.equal('upgradeState', 'COMPLETED'),
-
-  /**
-   * flag is true when upgrade process is waiting for user action
-   * to proceed, retry, perform manual steps etc.
-   * @returns {boolean}
-   */
-  upgradeHolding: function() {
-    return this.get('upgradeState').contains("HOLDING") || this.get('upgradeAborted');
-  }.property('upgradeState', 'upgradeAborted'),
-
-  /**
-   * flag is true when upgrade process is aborted
-   * SHOULD behave similar to HOLDING_FAILED state
-   * @returns {boolean}
-   */
-  upgradeAborted: function () {
-    return this.get('upgradeState') === "ABORTED" && !App.router.get('mainAdminStackAndUpgradeController.isSuspended');
-  }.property('upgradeState', 'router.mainAdminStackAndUpgradeController.isSuspended'),
-
-  /**
-   * flag is true when upgrade process is suspended
-   * @returns {boolean}
-   */
-  upgradeSuspended: function () {
-    return this.get('upgradeState') === "ABORTED" && App.router.get('mainAdminStackAndUpgradeController.isSuspended');
-  }.property('upgradeState', 'router.mainAdminStackAndUpgradeController.isSuspended'),
-
-  /**
-   * RU is running
-   * @type {boolean}
-   */
-  upgradeIsRunning: Em.computed.or('upgradeInProgress', 'upgradeHolding'),
-
-  /**
-   * flag is true when upgrade process is running or suspended
-   * or wizard used by another user
-   * @returns {boolean}
-   */
-  wizardIsNotFinished: function () {
-    return this.get('upgradeIsRunning') ||
-           this.get('upgradeSuspended') ||
-           App.router.get('wizardWatcherController.isNonWizardUser');
-  }.property('upgradeIsRunning', 'upgradeAborted', 'router.wizardWatcherController.isNonWizardUser', 'upgradeSuspended'),
-
-  /**
    * @param {string} authRoles
    * @returns {boolean}
    */
   havePermissions: function (authRoles) {
     var result = false;
-    authRoles = $.map(authRoles.split(","), $.trim);
-
-    // When Upgrade running(not suspended) only operations related to upgrade should be allowed
-    if ((!this.get('upgradeSuspended') && !authRoles.contains('CLUSTER.UPGRADE_DOWNGRADE_STACK')) &&
-      !App.get('supports.opsDuringRollingUpgrade') &&
-      !['NOT_REQUIRED', 'COMPLETED'].contains(this.get('upgradeState')) ||
-      !App.auth){
-      return false;
-    }
 
-    authRoles.forEach(function (auth) {
-      result = result || App.auth.contains(auth);
-    });
+    if (App.auth) {
+      authRoles = $.map(authRoles.split(","), $.trim);
 
+      authRoles.forEach(function (auth) {
+        result = result || App.auth.contains(auth);
+      });
+    }
+    
     return result;
   },
   /**
@@ -174,7 +92,7 @@ module.exports = Em.Application.create({
    */
   stackVersionURL: function () {
     return '/stacks/{0}/versions/{1}'.format(this.get('currentStackName') || 'HDP', this.get('currentStackVersionNumber'));
-  }.property('currentStackName','currentStackVersionNumber'),
+  }.property('currentStackName', 'currentStackVersionNumber'),
 
   falconServerURL: function () {
     var falconService = this.Service.find().findProperty('serviceName', 'FALCON');
@@ -188,7 +106,7 @@ module.exports = Em.Application.create({
    * Because this value is retrieved from the cardinality of the component, it is safe to keep in app.js
    * since its value will not change during the lifetime of the application.
    */
-  doesATSSupportKerberos: function() {
+  doesATSSupportKerberos: function () {
     var YARNService = App.StackServiceComponent.find().filterProperty('serviceName', 'YARN');
     if (YARNService.length) {
       var ATS = App.StackServiceComponent.find().findProperty('componentName', 'APP_TIMELINE_SERVER');
@@ -201,7 +119,7 @@ module.exports = Em.Application.create({
   clusterName: null,
   clockDistance: null, // server clock - client clock
   currentStackVersion: '',
-  currentStackName: function() {
+  currentStackName: function () {
     return Em.get((this.get('currentStackVersion') || this.get('defaultStackVersion')).match(/(.+)-\d.+/), '1');
   }.property('currentStackVersion', 'defaultStackVersion'),
 
@@ -260,7 +178,7 @@ module.exports = Em.Application.create({
    */
   isRMHaEnabled: function () {
     var result = false;
-    var rmStackComponent = App.StackServiceComponent.find().findProperty('componentName','RESOURCEMANAGER');
+    var rmStackComponent = App.StackServiceComponent.find().findProperty('componentName', 'RESOURCEMANAGER');
     if (rmStackComponent && rmStackComponent.get('isMultipleAllowed')) {
       result = this.HostComponent.find().filterProperty('componentName', 'RESOURCEMANAGER').length > 1;
     }
@@ -275,7 +193,7 @@ module.exports = Em.Application.create({
    */
   isRAHaEnabled: function () {
     var result = false;
-    var raStackComponent = App.StackServiceComponent.find().findProperty('componentName','RANGER_ADMIN');
+    var raStackComponent = App.StackServiceComponent.find().findProperty('componentName', 'RANGER_ADMIN');
     if (raStackComponent && raStackComponent.get('isMultipleAllowed')) {
       result = App.HostComponent.find().filterProperty('componentName', 'RANGER_ADMIN').length > 1;
     }
@@ -326,11 +244,11 @@ module.exports = Em.Application.create({
       return App.StackService.find().filterProperty('isServiceMetricsService').mapProperty('serviceName');
     }.property('App.router.clusterController.isLoaded'),
 
-    supportsServiceCheck: function() {
+    supportsServiceCheck: function () {
       return App.StackService.find().filterProperty('serviceCheckSupported').mapProperty('serviceName');
     }.property('App.router.clusterController.isLoaded'),
 
-    supportsDeleteViaUI: function() {
+    supportsDeleteViaUI: function () {
       return App.StackService.find().filterProperty('supportDeleteViaUi').mapProperty('serviceName');
     }.property('App.router.clusterController.isLoaded')
   }),
diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index 7f1b494..7e5b046 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -89,7 +89,6 @@ require('controllers/main/admin/highAvailability/journalNode/step5_controller');
 require('controllers/main/admin/highAvailability/journalNode/step6_controller');
 require('controllers/main/admin/highAvailability/journalNode/step7_controller');
 require('controllers/main/admin/highAvailability/journalNode/step8_controller');
-require('controllers/main/admin/stack_and_upgrade_controller');
 require('controllers/main/admin/stack_upgrade_history_controller');
 require('controllers/main/admin/serviceGroups_controller');
 require('controllers/main/admin/serviceAccounts_controller');
diff --git a/ambari-web/app/controllers/application.js b/ambari-web/app/controllers/application.js
index d813d89..b36e529 100644
--- a/ambari-web/app/controllers/application.js
+++ b/ambari-web/app/controllers/application.js
@@ -74,40 +74,6 @@ App.ApplicationController = Em.Controller.extend(App.Persist, {
    */
   showUpgradeLabel: Em.computed.or('App.upgradeInProgress', 'App.upgradeHolding', 'App.upgradeSuspended'),
 
-  /**
-   * @return {{msg: string, cls: string, icon: string}}
-   */
-  upgradeMap: function () {
-    var upgradeInProgress = App.get('upgradeInProgress');
-    var upgradeHolding = App.get('upgradeHolding');
-    var upgradeSuspended = App.get('upgradeSuspended');
-    var isDowngrade = App.router.get('mainAdminStackAndUpgradeController.isDowngrade');
-    var typeSuffix = isDowngrade ? 'downgrade' : 'upgrade';
-    var hasUpgradePrivilege = App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK');
-    if (upgradeInProgress) {
-      return {
-        cls: hasUpgradePrivilege? 'upgrade-in-progress' : 'upgrade-in-progress not-allowed-cursor',
-        icon: 'glyphicon-cog',
-        msg: Em.I18n.t('admin.stackVersions.version.' + typeSuffix + '.running')
-      }
-    }
-    if (upgradeHolding) {
-      return {
-        cls: hasUpgradePrivilege? 'upgrade-holding' : 'upgrade-holding not-allowed-cursor',
-        icon: 'glyphicon-pause',
-        msg: Em.I18n.t('admin.stackVersions.version.' + typeSuffix + '.pause')
-      }
-    }
-    if (upgradeSuspended) {
-      return {
-        cls: hasUpgradePrivilege? 'upgrade-aborted' : 'upgrade-aborted not-allowed-cursor',
-        icon: 'glyphicon-pause',
-        msg: Em.I18n.t('admin.stackVersions.version.' + typeSuffix + '.suspended')
-      }
-    }
-    return {};
-  }.property('App.upgradeInProgress', 'App.upgradeHolding', 'App.upgradeSuspended', 'App.router.mainAdminStackAndUpgradeController.isDowngrade'),
-
   startKeepAlivePoller: function() {
     if (!this.get('isPollerRunning')) {
      this.set('isPollerRunning',true);
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index e0122f2..0763ab7 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -182,7 +182,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
     hostsController.updateStatusCounters();
 
     this.loadClusterInfo();
-    this.restoreUpgradeState();
     App.router.get('wizardWatcherController').getUser();
 
     this.loadClusterDataToModel();
@@ -309,60 +308,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
     });
   },
 
-  /**
-   * restore upgrade status from server
-   * and make call to get latest status from server
-   * Also loading all upgrades to App.StackUpgradeHistory model
-   */
-  restoreUpgradeState: function () {
-    var self = this;
-    return this.getAllUpgrades().done(function (data) {
-      var upgradeController = App.router.get('mainAdminStackAndUpgradeController');
-      var allUpgrades = data.items.sortProperty('Upgrade.request_id');
-      var lastUpgradeData = allUpgrades.pop();
-      if (lastUpgradeData){
-        var status = lastUpgradeData.Upgrade.request_status;
-        var lastUpgradeNotFinished = (self.isSuspendedState(status) || self.isRunningState(status));
-        if (lastUpgradeNotFinished){
-          /**
-           * No need to display history if there is only one running or suspended upgrade.
-           * Because UI still needs to provide user the option to resume the upgrade via the Upgrade Wizard UI.
-           * If there is more than one upgrade. Show/Hive the tab based on the status.
-           */
-          var hasFinishedUpgrades = allUpgrades.some(function (item) {
-            var status = item.Upgrade.request_status;
-            if (!self.isRunningState(status)){
-              return true;
-            }
-          }, self);
-          App.set('upgradeHistoryAvailable', hasFinishedUpgrades);
-        } else {
-          //There is at least one finished upgrade. Display it.
-          App.set('upgradeHistoryAvailable', true);
-        }
-      } else {
-        //There is no upgrades at all.
-        App.set('upgradeHistoryAvailable', false);
-      }
-
-      //completed upgrade shouldn't be restored
-      if (lastUpgradeData) {
-        if (lastUpgradeData.Upgrade.request_status !== "COMPLETED") {
-          upgradeController.restoreLastUpgrade(lastUpgradeData);
-        }
-      } else {
-        upgradeController.initDBProperties();
-      }
-
-      App.stackUpgradeHistoryMapper.map(data);
-      upgradeController.loadStackVersionsToModel(true).done(function () {
-        upgradeController.loadCompatibleVersions();
-        upgradeController.updateCurrentStackVersion();
-        App.set('stackVersionsAvailable', App.StackVersion.find().content.length > 0);
-      });
-    });
-  },
-
   isRunningState: function(status){
     if (status) {
       return "IN_PROGRESS" === status || "PENDING" === status || status.contains("HOLDING");
diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js
index 14cd3cc..5f38eef 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -209,7 +209,6 @@ App.UpdateController = Em.Controller.extend({
     App.StompClient.subscribe('/events/hosts', App.hostStateMapper.map.bind(App.hostStateMapper));
     App.StompClient.subscribe('/events/alert_definitions', App.alertDefinitionsMapperAdapter.map.bind(App.alertDefinitionsMapperAdapter));
     App.StompClient.subscribe('/events/alert_group', App.alertGroupsMapperAdapter.map.bind(App.alertGroupsMapperAdapter));
-    App.StompClient.subscribe('/events/upgrade', App.upgradeStateMapper.map.bind(App.upgradeStateMapper));
   },
 
   /**
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js
index 9d8f33e..133ae41 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/progress_popup_controller.js
@@ -160,9 +160,6 @@ App.HighAvailabilityProgressPopupController = Ember.Controller.extend({
       this.calculateHostsData(hostsData);
       App.HostPopup.initPopup(popupTitle, this, false, this.get("requestIds")[0]);
       if (this.isRequestRunning(hostsData)) {
-        if (this.get('progressController.name') === 'mainAdminStackAndUpgradeController') {
-          this.doPolling();
-        }
         this.addObserver('progressController.logs.length', this, 'getDataFromProgressController');
       }
     }
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
deleted file mode 100644
index 50c0902..0000000
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ /dev/null
@@ -1,2226 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage, {
-  name: 'mainAdminStackAndUpgradeController',
-
-  /**
-   * @type {boolean}
-   */
-  isLoaded: false,
-
-  /**
-   * @type {object}
-   * @default null
-   */
-  upgradeData: null,
-
-  /**
-   * @type {number}
-   * @default null
-   */
-  upgradeId: null,
-
-  /**
-   * Start version of upgrade
-   * @type {string}
-   * @default null
-   */
-  fromVersion: null,
-
-  /**
-   * @type {string}
-   * @default null
-   */
-  upgradeVersion: null,
-
-  /**
-   * @type {string}
-   * @default null
-   */
-  upgradeType: null,
-
-  /**
-   * @type {Em.Object}
-   */
-  upgradeTypeConfig: Em.computed.findByKey('upgradeMethods', 'type', 'upgradeType'),
-
-  /**
-   * @type {boolean}
-   */
-  cantBeStarted: Em.computed.alias('upgradeTypeConfig.cantBeStarted'),
-
-  /**
-   * @type {boolean}
-   */
-  showPauseButton: Em.computed.and('!App.upgradeSuspended', '!App.upgradeCompleted', '!App.upgradeInit'),
-
-  /**
-   * @type {boolean}
-   * @default true
-   */
-  downgradeAllowed: true,
-
-  /**
-   * @type {string}
-   * @default null
-   */
-  upgradeTypeDisplayName: null,
-
-  /**
-   * @type {object}
-   * @default null
-   */
-  failuresTolerance: null,
-
-  /**
-   * @type {boolean}
-   * @default false
-   */
-  isDowngrade: false,
-
-  /**
-   * flag which indicate that upgrade suspended
-   * @type {boolean}
-   * @default false
-   */
-  isSuspended: false,
-
-  /**
-   * version that currently applied to server
-   * should be plain object, because stored to localStorage
-   * @type {object|null}
-   */
-  currentVersion: null,
-
-  /**
-   * versions to which cluster could be upgraded
-   * @type {Array}
-   */
-  targetVersions: [],
-
-  /**
-   * @type {object}
-   * @default null
-   */
-  slaveComponentStructuredInfo: null,
-
-  /**
-   * @type {Array}
-   */
-  serviceCheckFailuresServicenames: [],
-
-  /**
-   * @type {boolean}
-   * @default false
-   */
-  isUpgradeTypesLoaded: false,
-
-  /**
-   * @type {string}
-   */
-  getSupportedUpgradeError: '',
-
-  /**
-   * Restricted type of upgrade, can't be viewed in wizard.
-   * It's status visible only in upgrade status label
-   * @type {boolean}
-   * @default false
-   */
-  isWizardRestricted: false,
-
-  /**
-   * @type {string}
-   */
-  wizardModalTitle: function () {
-    var repoVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', this.get('toVersion'));
-    return this.getUpgradeDowngradeHeader(
-      this.get('upgradeTypeDisplayName'),
-      this.get('upgradeVersion'),
-      this.get('isDowngrade'),
-      repoVersion
-    );
-  }.property('upgradeTypeDisplayName', 'upgradeVersion', 'isDowngrade'),
-
-
-  /**
-   * @param {string} upgradeType
-   * @param {string} upgradeVersion
-   * @param {boolean} isDowngrade
-   * @param {boolean} isPatch
-   * @returns {string}
-   */
-  getUpgradeDowngradeHeader: function(upgradeType, upgradeVersion, isDowngrade, repoVersion) {
-    if (isDowngrade) {
-      return Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(upgradeVersion);
-    }
-    if (repoVersion && repoVersion.get('isPatch')) {
-      return Em.I18n.t('admin.stackUpgrade.dialog.upgrade.patch.header').format(upgradeType, upgradeVersion);
-    }
-    if (repoVersion && repoVersion.get('isMaint')) {
-      return Em.I18n.t('admin.stackUpgrade.dialog.upgrade.maint.header').format(upgradeType, upgradeVersion);
-    }
-    return Em.I18n.t('admin.stackUpgrade.dialog.upgrade.header').format(upgradeType, upgradeVersion);
-  },
-
-  /**
-   * methods through which cluster could be upgraded, "allowed" indicated if the method is allowed
-   * by stack upgrade path
-   * @type {Array}
-   */
-  upgradeMethods: [
-    Em.Object.create({
-      displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.title'),
-      type: 'ROLLING',
-      icon: "glyphicon glyphicon-dashboard",
-      description: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.description'),
-      selected: false,
-      allowed: true,
-      isCheckComplete: false,
-      isCheckRequestInProgress: false,
-      precheckResultsMessage: '',
-      precheckResultsTitle: '',
-      action: '',
-      isWizardRestricted: false
-    }),
-    Em.Object.create({
-      displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.title'),
-      type: 'NON_ROLLING',
-      icon: "icon-bolt",
-      description: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.description'),
-      selected: false,
-      allowed: true,
-      isCheckComplete: false,
-      isCheckRequestInProgress: false,
-      precheckResultsMessage: '',
-      precheckResultsTitle: '',
-      action: '',
-      isWizardRestricted: false
-    }),
-    Em.Object.create({
-      displayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.HOU.title'),
-      type: 'HOST_ORDERED',
-      icon: "icon-bolt",
-      description: '',
-      selected: false,
-      allowed: false,
-      isCheckComplete: false,
-      isCheckRequestInProgress: false,
-      precheckResultsMessage: '',
-      precheckResultsTitle: '',
-      action: '',
-      isWizardRestricted: !App.supports.enabledWizardForHostOrderedUpgrade,
-      cantBeStarted: true
-    })
-  ],
-
-  /**
-   * pre-check messages map
-   * @type {object}
-   */
-  preCheckMessages: {
-    'WARNING': {
-      template: 'admin.stackUpgrade.preCheck.warning.message',
-      precheckResultsMessageClass: 'ORANGE',
-      isPrecheckFailed: false,
-      precheckResultsMessageIconClass: 'glyphicon glyphicon-warning-sign'
-    },
-    'BYPASS': {
-      template: 'admin.stackUpgrade.preCheck.bypass.message',
-      precheckResultsMessageClass: 'RED',
-      isPrecheckFailed: false,
-      precheckResultsMessageIconClass: 'glyphicon glyphicon-remove',
-      bypassedFailures: true
-    },
-    'FAIL': {
-      template: 'admin.stackUpgrade.preCheck.fail.message',
-      precheckResultsMessageClass: 'RED',
-      isPrecheckFailed: true,
-      precheckResultsMessageIconClass: 'glyphicon glyphicon-remove'
-    }
-  },
-
-  runningCheckRequests: [],
-
-  /**
-   * @type {boolean} true if some request that should disable actions is in progress
-   */
-  requestInProgress: false,
-
-  /**
-   * @type {number} repo id, request for which is currently in progress
-   */
-  requestInProgressRepoId: null,
-
-  /**
-   * @type {boolean} true while no updated upgrade info is loaded after retry
-   */
-  isRetryPending: false,
-
-  /**
-   * properties that stored to localStorage to resume wizard progress
-   */
-  wizardStorageProperties: [
-    'fromVersion',
-    'upgradeId',
-    'upgradeVersion',
-    'toVersion',
-    'currentVersion',
-    'upgradeTypeDisplayName',
-    'upgradeType',
-    'failuresTolerance',
-    'isDowngrade',
-    'downgradeAllowed',
-    'isSuspended',
-    'isWizardRestricted'
-  ],
-
-  /**
-   * mutable properties of Upgrade Task
-   * @type {Array}
-   */
-  taskDetailsProperties: ['status', 'stdout', 'stderr', 'error_log', 'host_name', 'output_log'],
-
-  /**
-   * Context for Finalize item
-   * @type {string}
-   */
-  finalizeContext: 'Confirm Finalize',
-
-  /**
-   * Context for Slave component failures manual item
-   * @type {string}
-   */
-  slaveFailuresContext: "Check Component Versions",
-
-  /**
-   * Context for Service check (may include slave component) failures manual item
-   * @type {string}
-   */
-  serviceCheckFailuresContext: "Verifying Skipped Failures",
-
-  /**
-   * Check if current item is Finalize
-   * @type {boolean}
-   */
-  isFinalizeItem: false,
-
-  isLoadUpgradeDataPending: false,
-
-  /**
-   * path to the mock json
-   * @type {String}
-   */
-  mockRepoUrl: '/data/stack_versions/repo_versions_all.json',
-
-  /**
-   * api to get RepoVersions
-   * @type {String}
-   */
-  realRepoUrl: function () {
-    return App.get('apiPrefix') + '/stacks?fields=versions/repository_versions/RepositoryVersions,' +
-      'versions/repository_versions/operating_systems/*,versions/repository_versions/operating_systems/repositories/*';
-  }.property('App.stackVersionURL'),
-
-  /**
-   * path to the mock json
-   * @type {String}
-   */
-  mockStackUrl: '/data/stack_versions/stack_version_all.json',
-
-  /**
-   * api to get ClusterStackVersions with repository_versions (use to init data load)
-   * @type {String}
-   */
-  realStackUrl: function () {
-    return App.get('apiPrefix') + '/clusters/' + App.get('clusterName') +
-      '/stack_versions?fields=*,repository_versions/*,repository_versions/operating_systems/OperatingSystems/*,repository_versions/operating_systems/repositories/*';
-  }.property('App.clusterName'),
-
-  /**
-   * api to get ClusterStackVersions without repository_versions (use to update data)
-   * @type {String}
-   */
-  realUpdateUrl: function () {
-    return App.get('apiPrefix') + '/clusters/' + App.get('clusterName') + '/stack_versions?fields=ClusterStackVersions/*';
-  }.property('App.clusterName'),
-
-  /**
-   * Determines if list of services with checks that failed and were skipped by user during the upgrade is loaded
-   * @type {boolean}
-   */
-  areSkippedServiceChecksLoaded: false,
-
-  /**
-   * List of services with checks that failed and were skipped by user during the upgrade
-   * @type {array}
-   */
-  skippedServiceChecks: [],
-
-  /**
-   * status of tasks/items/groups which should be grayed out and disabled
-   * @type {Array}
-   */
-  nonActiveStates: ['PENDING', 'ABORTED'],
-
-  /**
-   * status of Upgrade request
-   * @type {string}
-   */
-  requestStatus: function () {
-    if (this.get('upgradeData.Upgrade') && App.get('upgradeSuspended')) {
-      return 'SUSPENDED';
-    } else if (this.get('upgradeData.Upgrade')){
-      return this.get('upgradeData.Upgrade.request_status');
-    } else {
-      return 'INIT';
-    }
-  }.property('upgradeData.Upgrade.request_status', 'App.upgradeSuspended'),
-
-  init: function () {
-    this.initDBProperties();
-  },
-
-  /**
-   * restore data from localStorage
-   */
-  initDBProperties: function () {
-    var props = this.getDBProperties(this.get('wizardStorageProperties'));
-    Em.keys(props).forEach(function (k) {
-      if (!Em.isNone(props[k])) {
-        this.set(k, props[k]);
-      }
-    }, this);
-  },
-
-  /**
-   * load all data:
-   * - upgrade data
-   * - stack versions
-   * - repo versions
-   */
-  load: function () {
-    var dfd = $.Deferred();
-    var self = this;
-
-    this.loadStackVersionsToModel(true).done(function () {
-      self.loadRepoVersionsToModel().done(function() {
-        self.loadCompatibleVersions().done(function() {
-          self.updateCurrentStackVersion();
-          dfd.resolve();
-        });
-      });
-    });
-    return dfd.promise();
-  },
-
-  updateCurrentStackVersion: function(){
-    var currentVersion = App.StackVersion.find().findProperty('state', 'CURRENT');
-    if (currentVersion) {
-      this.set('currentVersion', {
-        stack_name: currentVersion.get('repositoryVersion.stackVersionType'),
-        repository_version: currentVersion.get('repositoryVersion.repositoryVersion'),
-        repository_name: currentVersion.get('repositoryVersion.displayName'),
-        id: currentVersion.get('repositoryVersion.id')
-      });
-    }
-  },
-
-  /**
-   * load upgrade tasks by upgrade id
-   * @return {$.Deferred}
-   * @param {boolean} onlyState
-   */
-  loadUpgradeData: function (onlyState) {
-    var upgradeId = this.get('upgradeId'),
-      deferred = $.Deferred(),
-      self = this;
-
-    if (Em.isNone(upgradeId)) {
-      deferred.resolve();
-    } else {
-      this.set('isLoadUpgradeDataPending', true);
-      App.ajax.send({
-        name: (onlyState) ? 'admin.upgrade.state' : 'admin.upgrade.data',
-        sender: this,
-        data: {
-          id: upgradeId
-        },
-        success: 'loadUpgradeDataSuccessCallback'
-      }).then(deferred.resolve).always(function () {
-          self.set('isLoadUpgradeDataPending', false);
-        });
-    }
-    return deferred.promise();
-  },
-
-  /**
-   * parse and push upgrade tasks to controller
-   * @param data
-   */
-  loadUpgradeDataSuccessCallback: function (data) {
-    if (Em.isNone(data)) return;
-    App.set('upgradeState', data.Upgrade.request_status);
-    this.setDBProperty('upgradeState', data.Upgrade.request_status);
-    this.set('isSuspended', data.Upgrade.suspended);
-    this.setDBProperty('isSuspended', data.Upgrade.suspended);
-    if (data.upgrade_groups) {
-      this.updateUpgradeData(data);
-    }
-    if (this.get('isRetryPending') && data.Upgrade.request_status !== 'ABORTED') {
-      this.setProperties({
-        requestInProgress: false,
-        isRetryPending: false
-      });
-    }
-    if (data.Upgrade.request_status === 'COMPLETED') {
-      this.finish();
-    }
-  },
-
-  loadCompatibleVersions: function() {
-    return App.ajax.send({
-      name: 'admin.upgrade.get_compatible_versions',
-      sender: this,
-      data: {
-        stackName: App.get('currentStackName'),
-        stackVersion: App.get('currentStackVersionNumber')
-      },
-      success: 'loadCompatibleVersionsSuccessCallback'
-    });
-  },
-
-  /**
-   *
-   * @param {object} data
-   */
-  loadCompatibleVersionsSuccessCallback: function(data) {
-    App.RepositoryVersion.find().forEach(function(repo) {
-      var version = repo.get('repositoryVersion');
-      repo.set('isCompatible', data.items.someProperty('CompatibleRepositoryVersions.repository_version', version));
-    });
-  },
-
-  /**
-   * update data of Upgrade
-   * @param {object} newData
-   */
-  updateUpgradeData: function (newData) {
-    var oldData = this.get('upgradeData'),
-      nonActiveStates = this.get('nonActiveStates'),
-      groupsMap = {},
-      itemsMap = {};
-
-    if (Em.isNone(oldData) || (newData.upgrade_groups.length !== oldData.upgradeGroups.length)) {
-      this.initUpgradeData(newData);
-    } else {
-      //create entities maps
-      newData.upgrade_groups.forEach(function (newGroup) {
-        groupsMap[newGroup.UpgradeGroup.group_id] = newGroup.UpgradeGroup;
-        newGroup.upgrade_items.forEach(function (item) {
-          itemsMap[item.UpgradeItem.stage_id] = item.UpgradeItem;
-        })
-      });
-
-      //update existed entities with new data
-      oldData.upgradeGroups.forEach(function (oldGroup) {
-        oldGroup.set('status', groupsMap[oldGroup.get('group_id')].status);
-        oldGroup.set('display_status', groupsMap[oldGroup.get('group_id')].display_status);
-        oldGroup.set('progress_percent', groupsMap[oldGroup.get('group_id')].progress_percent);
-        oldGroup.set('completed_task_count', groupsMap[oldGroup.get('group_id')].completed_task_count);
-        oldGroup.upgradeItems.forEach(function (item) {
-          item.set('status', itemsMap[item.get('stage_id')].status);
-          item.set('display_status', itemsMap[item.get('stage_id')].display_status);
-          item.set('progress_percent', itemsMap[item.get('stage_id')].progress_percent);
-        });
-        var hasExpandableItems = oldGroup.upgradeItems.some(function (item) {
-          return !nonActiveStates.contains(item.get('status'));
-        });
-        oldGroup.set('hasExpandableItems', hasExpandableItems);
-      });
-      oldData.set('Upgrade', newData.Upgrade);
-    }
-  },
-
-  /**
-   * change structure of Upgrade
-   * In order to maintain nested views in template object should have direct link to its properties, for example
-   * item.UpgradeItem.<properties> -> item.<properties>
-   * @param {object} newData
-   */
-  initUpgradeData: function (newData) {
-    var upgradeGroups = [],
-      nonActiveStates = this.get('nonActiveStates');
-
-    //wrap all entities into App.upgradeEntity
-    newData.upgrade_groups.forEach(function (newGroup) {
-      var hasExpandableItems = newGroup.upgrade_items.some(function (item) {
-          return !nonActiveStates.contains(item.UpgradeItem.status);
-        }),
-        oldGroup = App.upgradeEntity.create({type: 'GROUP', hasExpandableItems: hasExpandableItems}, newGroup.UpgradeGroup),
-        upgradeItems = [];
-      newGroup.upgrade_items.forEach(function (item) {
-        var oldItem = App.upgradeEntity.create({type: 'ITEM'}, item.UpgradeItem);
-        this.formatMessages(oldItem);
-        oldItem.set('tasks', []);
-        upgradeItems.pushObject(oldItem);
-      }, this);
-      upgradeItems.reverse();
-      oldGroup.set('upgradeItems', upgradeItems);
-      upgradeGroups.pushObject(oldGroup);
-    }, this);
-    upgradeGroups.reverse();
-    this.set('upgradeData', Em.Object.create({
-      upgradeGroups: upgradeGroups,
-      Upgrade: newData.Upgrade
-    }));
-    this.set('downgradeAllowed', newData.Upgrade.downgrade_allowed);
-    this.setDBProperty('downgradeAllowed', newData.Upgrade.downgrade_allowed);
-  },
-
-  /**
-   * format upgrade item text
-   * @param {App.upgradeEntity} oldItem
-   */
-  formatMessages: function (oldItem) {
-    var text = oldItem.get('text');
-    var messages = [];
-
-    try {
-      var messageArray = JSON.parse(text);
-      for (var i = 0; i < messageArray.length; i++) {
-        messages.push(messageArray[i].message);
-      }
-      oldItem.set('text', messages.join(' '));
-    } catch (err) {
-      console.warn('Upgrade Item has malformed text');
-    }
-    oldItem.set('messages', messages);
-  },
-
-  /**
-   * request Upgrade Item and its tasks from server
-   * @param {Em.Object} item
-   * @param {Function} customCallback
-   * @return {$.ajax}
-   */
-  getUpgradeItem: function (item, customCallback) {
-    return App.ajax.send({
-      name: 'admin.upgrade.upgrade_item',
-      sender: this,
-      data: {
-        upgradeId: item.get('request_id'),
-        groupId: item.get('group_id'),
-        stageId: item.get('stage_id')
-      },
-      success: customCallback || 'getUpgradeItemSuccessCallback'
-    });
-  },
-
-  /**
-   * success callback of <code>getTasks</code>
-   * @param {object} data
-   */
-  getUpgradeItemSuccessCallback: function (data) {
-    this.get('upgradeData.upgradeGroups').forEach(function (group) {
-      if (group.get('group_id') === data.UpgradeItem.group_id) {
-        group.get('upgradeItems').forEach(function (item) {
-          if (item.get('stage_id') === data.UpgradeItem.stage_id) {
-            if (item.get('tasks.length')) {
-              data.tasks.forEach(function (task) {
-                var currentTask = item.get('tasks').findProperty('id', task.Tasks.id);
-                this.get('taskDetailsProperties').forEach(function (property) {
-                  currentTask.set(property, task.Tasks[property]);
-                }, this);
-              }, this);
-            } else {
-              var tasks = [];
-              data.tasks.forEach(function (task) {
-                tasks.pushObject(App.upgradeEntity.create({type: 'TASK'}, task.Tasks));
-              });
-              item.set('tasks', tasks);
-            }
-            item.set('isTasksLoaded', true);
-          }
-        }, this);
-      }
-    }, this);
-  },
-
-  /**
-   * Failures info may includes service_check and host_component failures. These two types should be displayed separately.
-   */
-  getServiceCheckItemSuccessCallback: function(data) {
-    var task = data.tasks[0];
-    var info = {
-      hosts: [],
-      host_detail: {}
-    };
-
-    if (task && task.Tasks && task.Tasks.structured_out && task.Tasks.structured_out.failures) {
-      this.set('serviceCheckFailuresServicenames', task.Tasks.structured_out.failures.service_check || []);
-      if (task.Tasks.structured_out.failures.host_component) {
-        for (var hostname in task.Tasks.structured_out.failures.host_component){
-          info.hosts.push(hostname);
-        }
-        info.host_detail = task.Tasks.structured_out.failures.host_component;
-      }
-      this.set('slaveComponentStructuredInfo', info);
-    }
-  },
-
-  getSlaveComponentItemSuccessCallback: function(data) {
-    var info = data.tasks[0];
-    if (info && info.Tasks && info.Tasks.structured_out) {
-      this.set('slaveComponentStructuredInfo', info.Tasks.structured_out);
-    }
-  },
-
-  /**
-   * downgrade confirmation popup
-   * @param {object} event
-   */
-  confirmDowngrade: function (event) {
-    var self = this;
-    if(!this.get('currentVersion')){
-      this.updateCurrentStackVersion();
-    }
-    var currentVersion = this.get('currentVersion');
-    return App.showConfirmationPopup(
-      function() {
-        self.downgrade.call(self, currentVersion, event);
-      },
-      Em.I18n.t('admin.stackUpgrade.downgrade.body').format(currentVersion.repository_name),
-      null,
-      Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(this.get('upgradeVersion')),
-      Em.I18n.t('admin.stackUpgrade.downgrade.proceed')
-    );
-  },
-
-  /**
-   * make call to start downgrade process
-   * @param {object} currentVersion
-   * @param {object} event
-   */
-  downgrade: function (currentVersion, event) {
-    var self = this;
-    this.set('requestInProgress', true);
-    this.abortUpgrade().done(function() {
-      var interval = setInterval(function() {
-        if (self.get('upgradeData.Upgrade.request_status') == 'ABORTED') {
-          clearInterval(interval);
-          self.startDowngrade(currentVersion);
-        }
-      }, 1000);
-    });
-  },
-
-  /**
-   * abort upgrade (in order to start Downgrade)
-   */
-  abortUpgrade: function () {
-    var errorCallback = this.get('isDowngrade') ? 'abortDowngradeErrorCallback' : 'abortUpgradeErrorCallback';
-    return App.ajax.send({
-      name: 'admin.upgrade.abort',
-      sender: this,
-      data: {
-        upgradeId: this.get('upgradeId'),
-        isDowngrade: this.get('isDowngrade')
-      },
-      error: errorCallback
-    });
-  },
-
-  /**
-   * just request ro start downgrade,
-   * should be performed only if <code>abortUpgrade<code> was completed
-   */
-  startDowngrade: function(currentVersion) {
-   App.ajax.send({
-      name: 'admin.downgrade.start',
-      sender: this,
-      data: {
-        value: currentVersion.repository_version,
-        label: this.get('upgradeVersion'),
-        id: currentVersion.id,
-        isDowngrade: true,
-        upgradeType: this.get('upgradeType')
-      },
-      success: 'upgradeSuccessCallback',
-      callback: function() {
-        this.sender.set('requestInProgress', false);
-      }
-    });
-  },
-
-  /**
-   * suspend upgrade (in order to restart it later)
-   */
-  abortUpgradeWithSuspend: function () {
-    var errorCallback = this.get('isDowngrade') ? 'abortDowngradeErrorCallback' : 'abortUpgradeErrorCallback';
-    return App.ajax.send({
-      name: 'admin.upgrade.suspend',
-      sender: this,
-      data: {
-        upgradeId: this.get('upgradeId'),
-        isDowngrade: this.get('isDowngrade')
-      },
-      error: errorCallback
-    });
-  },
-
-  /**
-   * error callback of <code>abortUpgrade()</code>
-   * @param {object} data
-   */
-  abortUpgradeErrorCallback: function (data) {
-    var header = Em.I18n.t('admin.stackUpgrade.state.paused.fail.header');
-    var body = Em.I18n.t('admin.stackUpgrade.state.paused.fail.body');
-    if (data && data.responseText) {
-      try {
-        var json = $.parseJSON(data.responseText);
-        body = body + ' ' + json.message;
-      } catch (err) {}
-    }
-    App.showAlertPopup(header, body);
-  },
-
-  /**
-   * error callback of <code>abortDowngrade()</code>
-   * @param {object} data
-   */
-  abortDowngradeErrorCallback: function (data) {
-    var header = Em.I18n.t('admin.stackDowngrade.state.paused.fail.header');
-    var body = Em.I18n.t('admin.stackDowngrade.state.paused.fail.body');
-    if(data && data.responseText){
-      try {
-        var json = $.parseJSON(data.responseText);
-        body = body + ' ' + json.message;
-      } catch (err) {}
-    }
-    App.showAlertPopup(header, body);
-  },
-
-  retryUpgrade: function () {
-    this.setProperties({
-      requestInProgress: true,
-      isRetryPending: true
-    });
-    return App.ajax.send({
-      name: 'admin.upgrade.retry',
-      sender: this,
-      data: {
-        upgradeId: this.get('upgradeId')
-      }
-    });
-  },
-
-  /**
-   * make call to start upgrade process and show popup with current progress
-   * @param {object} version
-   */
-  upgrade: function (version) {
-    this.set('requestInProgress', true);
-    App.ajax.send({
-      name: 'admin.upgrade.start',
-      sender: this,
-      data: version,
-      success: 'upgradeSuccessCallback',
-      error: 'upgradeErrorCallback',
-      callback: function() {
-        this.sender.set('requestInProgress', false);
-      }
-    });
-    this.setDBProperty('currentVersion', this.get('currentVersion'));
-
-    // Show a "preparing the upgrade..." dialog in case the api call returns too slow
-    if (App.router.get('currentState.name') != 'stackUpgrade') {
-      this.showPreparingUpgradeIndicator();
-    }
-  },
-
-  /**
-   * Should progress bar be displayed when preparing upgrade,
-   * should show after Upgrade Options window and before Upgrade Wizard
-   * @method showPreparingUpgradeIndicator
-   */
-  showPreparingUpgradeIndicator: function () {
-    return App.ModalPopup.show({
-      header: '',
-      showFooter: false,
-      showCloseButton: false,
-      bodyClass: Em.View.extend({
-        templateName: require('templates/wizard/step8/step8_log_popup'),
-        controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
-
-        /**
-         * Css-property for progress-bar
-         * @type {string}
-         */
-        barWidth: 'width: 100%;',
-        progressBarClass: 'progress log_popup',
-
-        /**
-         * Popup-message
-         * @type {string}
-         */
-        message: Em.I18n.t('admin.stackUpgrade.dialog.prepareUpgrade.header'),
-
-        /**
-         * Hide popup when upgrade wizard is open
-         * @method autoHide
-         */
-        autoHide: function () {
-          if (!this.get('controller.requestInProgress')) {
-            this.get('parentView').hide();
-          }
-        }.observes('controller.requestInProgress')
-      })
-    });
-  },
-
-  /**
-   * error callback of <code>upgrade()</code>
-   * @param {object} data
-   */
-  upgradeErrorCallback: function (data) {
-    var header = Em.I18n.t('admin.stackVersions.upgrade.start.fail.title');
-    var body = "";
-    if (data && data.responseText) {
-      try {
-        var json = $.parseJSON(data.responseText);
-        body = json.message;
-      } catch (err) {}
-    }
-    App.showAlertPopup(header, body);
-  },
-
-  /**
-   * success callback of <code>upgrade()</code>
-   * @param {object} data
-   */
-  upgradeSuccessCallback: function (data, opt, params) {
-    this.set('upgradeData', null);
-    this.set('upgradeId', data.resources[0].Upgrade.request_id);
-    this.set('toVersion', params.value);
-    this.set('upgradeVersion', params.label);
-    this.set('isDowngrade', !!params.isDowngrade);
-    var upgradeMethod = this.get('upgradeMethods').findProperty('type', params.type),
-        upgradeTypeDisplayName = null,
-        upgradeType = null,
-        isWizardRestricted = false;
-
-    if (upgradeMethod) {
-      upgradeTypeDisplayName = upgradeMethod.get('displayName');
-      upgradeType = upgradeMethod.get('type');
-      isWizardRestricted = upgradeMethod.get('isWizardRestricted');
-    }
-
-    this.set('isWizardRestricted', isWizardRestricted);
-    this.set('upgradeType', upgradeType);
-    this.set('upgradeTypeDisplayName', upgradeTypeDisplayName);
-    this.set('failuresTolerance', Em.Object.create({
-      skipComponentFailures: params.skipComponentFailures == 'true',
-      skipSCFailures: params.skipSCFailures == 'true'
-    }));
-    this.setDBProperties({
-      upgradeVersion: params.label,
-      upgradeId: data.resources[0].Upgrade.request_id,
-      toVersion: params.value,
-      upgradeState: 'PENDING',
-      isDowngrade: !!params.isDowngrade,
-      upgradeType: upgradeType,
-      isWizardRestricted: isWizardRestricted,
-      upgradeTypeDisplayName: upgradeTypeDisplayName,
-      failuresTolerance: Em.Object.create({
-        skipComponentFailures: params.skipComponentFailures == 'true',
-        skipSCFailures: params.skipSCFailures == 'true'
-      })
-    });
-    App.set('upgradeState', 'PENDING');
-    App.clusterStatus.setClusterStatus({
-      wizardControllerName: this.get('name'),
-      localdb: App.db.data
-    });
-    this.load();
-    this.openUpgradeDialog();
-  },
-
-  /**
-   * success callback of updating upgrade options including failures tolerance. etc
-   * @param {object} data
-   */
-  updateOptionsSuccessCallback: function (data, opt, params) {
-    this.set('failuresTolerance', Em.Object.create({
-      skipComponentFailures: params.skipComponentFailures == 'true',
-      skipSCFailures: params.skipSCFailures == 'true'
-    }));
-  },
-
-  /**
-   * run upgrade checks and add results to each method object and set selected method
-   * @param {Em.Object} version
-   */
-  runUpgradeMethodChecks: function(version) {
-    this.get('upgradeMethods').forEach(function (method) {
-      if (method.get('allowed')) {
-        this.runPreUpgradeCheckOnly({
-          id: version.get('id'),
-          label: version.get('displayName'),
-          type: method.get('type')
-        });
-      } else {
-        //if method not supported in current stack version, mark as check completed
-        method.setProperties({
-          isCheckComplete: false,
-          isCheckRequestInProgress: false,
-          action: ''
-        });
-      }
-    }, this);
-  },
-
-  getConfigsWarnings: function (configsMergeWarning) {
-    var configs = [];
-    if (configsMergeWarning && Em.get(configsMergeWarning, 'UpgradeChecks.status') === 'WARNING') {
-      var configsMergeCheckData = Em.get(configsMergeWarning, 'UpgradeChecks.failed_detail');
-      if (configsMergeCheckData && Em.isArray(configsMergeCheckData)) {
-        configs = configsMergeCheckData.reduce(function (allConfigs, item) {
-          var isDeprecated = Em.isNone(item.new_stack_value),
-            willBeRemoved = Em.isNone(item.result_value);
-
-          return allConfigs.concat({
-            type: item.type,
-            name: item.property,
-            wasModified: (!isDeprecated && !willBeRemoved && Em.compare(item.current, item.result_value) === 0),
-            currentValue: item.current,
-            recommendedValue: isDeprecated ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated') : item.new_stack_value,
-            isDeprecated: isDeprecated,
-            resultingValue: willBeRemoved ? Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved') : item.result_value,
-            willBeRemoved: willBeRemoved
-          });
-        }, []);
-      }
-    }
-    return configs;
-  },
-
-  showUpgradeOptions: function ( version ) {
-    this.upgradeOptions(false, version, true);
-  },
-
-  /**
-   * Open upgrade options window: upgrade type and failures tolerance
-   * @param {boolean} isInUpgradeWizard
-   * @param {object} version
-   * @return App.ModalPopup
-   */
-  upgradeOptions: function (isInUpgradeWizard, version, preUpgradeShow) {
-    var self = this,
-      upgradeMethods = this.get('upgradeMethods'),
-      runningCheckRequests = this.get('runningCheckRequests');
-    if (!isInUpgradeWizard) {
-      upgradeMethods.setEach('isCheckRequestInProgress', true);
-      upgradeMethods.setEach('selected', false);
-      var request = this.getSupportedUpgradeTypes(Ember.Object.create({
-        stackName: App.get('currentStackVersion').split('-')[0],
-        stackVersion: App.get('currentStackVersion').split('-')[1],
-        toVersion: version.get('repositoryVersion')
-      })).done(function () {
-          if (App.get('router.currentState.name') === 'versions' && App.get('router.currentState.parentState.name') === 'stackAndUpgrade') {
-            self.runUpgradeMethodChecks(version);
-          }
-      }).always(function () {
-        self.set('isUpgradeTypesLoaded', true);
-        self.set('runningCheckRequests', runningCheckRequests.rejectProperty('type', 'ALL'));
-        });
-      request.type = 'ALL';
-      this.get('runningCheckRequests').push(request);
-    } else {
-      this.set('isUpgradeTypesLoaded', true);
-    }
-
-    return App.ModalPopup.show({
-      encodeBody: false,
-      primary: function() {
-        if ( preUpgradeShow ) return false;
-        if ( isInUpgradeWizard || this.get('controller.getSupportedUpgradeError') ) return Em.I18n.t('ok');
-        return Em.I18n.t('common.proceed');
-      }.property('controller.getSupportedUpgradeError'),
-      secondary: function() {
-        if (preUpgradeShow) return Em.I18n.t('common.dismiss');
-        if (this.get('controller.getSupportedUpgradeError')) return null;
-        return Em.I18n.t('common.cancel');
-      }.property('controller.getSupportedUpgradeError'),
-      secondaryClass: preUpgradeShow ? 'btn-success' : '',
-      classNames: ['upgrade-options-popup'],
-      header: preUpgradeShow ? Em.I18n.t('admin.stackVersions.version.preUpgrade.header') : Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.header'),
-      controller: this,
-      showFooter: function() {
-        return this.get('controller.isUpgradeTypesLoaded') || preUpgradeShow;
-      }.property('controller.isUpgradeTypesLoaded'),
-      bodyClass: Em.View.extend({
-        templateName: require('templates/main/admin/stack_upgrade/upgrade_options'),
-        didInsertElement: function () {
-          App.tooltip($(".failure-tolerance-tooltip"), {
-            placement: "top",
-            title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.tolerance.tooltip')
-          });
-          Em.run.later(this, function () {
-            App.tooltip($(".img-thumbnail.check-failed"), {
-              placement: "bottom",
-              title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip')
-            });
-            App.tooltip($(".not-allowed-by-version"), {
-              placement: "bottom",
-              title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.notAllowed')
-            });
-          }, 1000);
-        },
-        upgradeMethods: function () {
-          self.updateSelectedMethod(isInUpgradeWizard);
-          return self.get('upgradeMethods');
-        }.property().volatile(),
-        isInUpgradeWizard: isInUpgradeWizard,
-        showPreUpgradeChecks: App.get('supports.preUpgradeCheck') && !isInUpgradeWizard,
-        versionText: (function () {
-          if ( preUpgradeShow ) return Em.I18n.t('admin.stackVersions.version.preUpgrade.bodyMsg.version').format(version.get('displayName'));
-          if ( isInUpgradeWizard ) return '';
-          return Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.bodyMsg.version').format(version.get('displayName'));
-        })(),
-        selectMethod: function (event) {
-          if (isInUpgradeWizard || !event.context.get('allowed') || event.context.get('isPrecheckFailed')) return;
-          var selectedMethod = event.context;
-          self.updateSelectedMethod(isInUpgradeWizard);
-          self.get('upgradeMethods').forEach(function (method) {
-            method.set('selected', false);
-          });
-          selectedMethod.set('selected', true);
-          this.set('parentView.selectedMethod', selectedMethod);
-        },
-        runAction: function (event) {
-          var method = event.context,
-            action = method.get('action');
-          if (action) {
-            this.get(action)(event);
-          }
-        },
-        rerunCheck: function (event) {
-          self.runPreUpgradeCheckOnly({
-            id: version.get('id'),
-            label: version.get('displayName'),
-            type: event.context.get('type')
-          });
-        },
-        openMessage: function (event) {
-          if (isInUpgradeWizard || !event.context.get('allowed')) return;
-          var data = event.context.get('precheckResultsData');
-
-          var failTitle = Em.I18n.t('popup.clusterCheck.Upgrade.fail.title');
-          var failAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.fail.alert'));
-          var bypassedFailures = data.items.filterProperty('UpgradeChecks.status', 'BYPASS').length > 0;
-          if (data.items.filterProperty('UpgradeChecks.status', 'ERROR').length == 0 && bypassedFailures) {
-            failTitle = Em.I18n.t('popup.clusterCheck.Upgrade.bypassed-failures.title');
-            failAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.bypassed-failures.alert'));
-          }
-
-          var header = Em.I18n.t('popup.clusterCheck.Upgrade.header').format(version.get('displayName')),
-            warningTitle = Em.I18n.t('popup.clusterCheck.Upgrade.warning.title'),
-            warningAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.warning.alert')),
-            configsMergeWarning = data.items.findProperty('UpgradeChecks.id', "CONFIG_MERGE"),
-            popupData = {
-              items: data.items.rejectProperty('UpgradeChecks.id', 'CONFIG_MERGE')
-            },
-            configs = self.getConfigsWarnings(configsMergeWarning);
-          App.showClusterCheckPopup(popupData, {
-            header: header,
-            failTitle: failTitle,
-            failAlert: failAlert,
-            warningTitle: warningTitle,
-            warningAlert: warningAlert,
-            primary: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.rerun'),
-            secondary: Em.I18n.t('common.cancel'),
-            bypassedFailures: bypassedFailures,
-            callback: function () {
-              self.runPreUpgradeCheckOnly.call(self, {
-                id: version.get('id'),
-                label: version.get('displayName'),
-                type: event.context.get('type')
-              });
-            }
-          }, configs);
-        },
-        upgradeShow: !preUpgradeShow
-      }),
-
-      /**
-       * @type {Em.Object}
-       * @default null
-       */
-      selectedMethod: null,
-      skipComponentFailures: self.get('failuresTolerance.skipComponentFailures'),
-      skipSCFailures: self.get('failuresTolerance.skipSCFailures'),
-      disablePrimary: function () {
-        if (isInUpgradeWizard || this.get('controller.getSupportedUpgradeError')) return false;
-        var selectedMethod = this.get('selectedMethod');
-        if (selectedMethod) {
-          if (App.get('supports.preUpgradeCheck')) {
-            return selectedMethod.get('isPrecheckFailed') || selectedMethod.get('isCheckRequestInProgress');
-          } else {
-            return false;
-          }
-        } else {
-          return true;
-        }
-      }.property('selectedMethod', 'selectedMethod.isPrecheckFailed', 'selectedMethod.isCheckRequestInProgress'),
-      onPrimary: function () {
-        this.hide();
-        if (isInUpgradeWizard) {
-          return App.ajax.send({
-            name: 'admin.upgrade.update.options',
-            sender: self,
-            data: {
-              upgradeId: self.get('upgradeId'),
-              skipComponentFailures: Boolean(this.get('skipComponentFailures')).toString(),
-              skipSCFailures: Boolean(this.get('skipSCFailures')).toString()
-            },
-            success: 'updateOptionsSuccessCallback'
-          });
-        } else {
-          var upgradeMethod = self.get('upgradeMethods').findProperty('selected');
-          version.upgradeType = upgradeMethod.get('type');
-          version.upgradeTypeDisplayName = upgradeMethod.get('displayName');
-          version.skipComponentFailures = this.get('skipComponentFailures');
-          version.skipSCFailures = this.get('skipSCFailures');
-
-          var toVersion = version.get('displayName');
-          var bodyMessage = Em.Object.create({
-            confirmButton: Em.I18n.t('yes'),
-            confirmMsg: upgradeMethod.get('type') === 'ROLLING' ?
-              Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg').format(toVersion) :
-              Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg').format(toVersion)
-          });
-          return App.showConfirmationFeedBackPopup(function (query) {
-            return self.runPreUpgradeCheck.call(self, version);
-          }, bodyMessage);
-        }
-      }
-    });
-  },
-
-  /**
-   * open upgrade options from upgrade wizard
-   */
-  openUpgradeOptions: function () {
-    if (this.get('isDowngrade')) return;
-    this.upgradeOptions(true, null);
-  },
-
-  /**
-   * upgrade confirmation popup including upgrade options: upgrade type and failures tolerance
-   * @param {object} version
-   * @return App.ModalPopup
-   */
-  confirmUpgrade: function (version) {
-    this.upgradeOptions(false, version);
-  },
-
-  /**
-   * send request for pre upgrade check only
-   */
-  runPreUpgradeCheckOnly: function (data) {
-    if (App.get('supports.preUpgradeCheck')) {
-      var method = this.get('upgradeMethods').findProperty('type', data.type);
-      method.setProperties({
-        isCheckComplete: false,
-        isCheckRequestInProgress: true,
-        action: ''
-      });
-      var request = App.ajax.send({
-        name: "admin.upgrade.pre_upgrade_check",
-        sender: this,
-        data: data,
-        success: 'runPreUpgradeCheckOnlySuccess',
-        error: 'runPreUpgradeCheckOnlyError',
-        callback: function () {
-          var runningCheckRequests = this.sender.get('runningCheckRequests');
-          method.set('isCheckRequestInProgress', false);
-          this.sender.set('runningCheckRequests', runningCheckRequests.rejectProperty('type', this.data.type));
-        }
-      });
-      request.type = data.type;
-      this.get('runningCheckRequests').push(request);
-    }
-  },
-
-  /**
-   * send request to get available upgrade tye names
-   */
-  getSupportedUpgradeTypes: function(data) {
-    this.set('isUpgradeTypesLoaded', false);
-    this.set('getSupportedUpgradeError', '');
-    return App.ajax.send({
-      name: "admin.upgrade.get_supported_upgradeTypes",
-      sender: this,
-      data: data,
-      success: "getSupportedUpgradeTypesSuccess",
-      error: "getSupportedUpgradeTypesError"
-    });
-  },
-
-  /**
-   * success callback of <code>getSupportedUpgradeTypes()</code>
-   * @param data {object}
-   */
-  getSupportedUpgradeTypesSuccess: function (data) {
-    var supportedUpgradeTypes = data.items[0] && data.items[0].CompatibleRepositoryVersions.upgrade_types;
-    this.get('upgradeMethods').forEach(function (method) {
-      method.set('allowed', Boolean(supportedUpgradeTypes && supportedUpgradeTypes.contains(method.get('type'))));
-    });
-  },
-
-  /**
-   * error callback of <code>getSupportedUpgradeTypes()</code>
-   * @param xhr {object}
-   */
-  getSupportedUpgradeTypesError: function (xhr) {
-    var response;
-    try {
-      response = JSON.parse(xhr.responseText);
-    } catch (e) {
-      response = {message: xhr.statusText};
-    }
-    this.set('getSupportedUpgradeError', response.message);
-  },
-
-  /**
-   * success callback of <code>runPreUpgradeCheckOnly()</code>
-   * Show a message how many fails/warnings/bypass/passed
-   * on clicking that message a popup window show up
-   * @param data {object}
-   * @param opt {object}
-   * @param params {object}
-   */
-  runPreUpgradeCheckOnlySuccess: function (data, opt, params) {
-    var properties = {
-      precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.title'),
-      precheckResultsData: data,
-      isCheckComplete: true,
-      action: 'openMessage',
-      precheckResultsMessage: '',
-      recheckResultsMessageClass: 'GREEN',
-      isPrecheckFailed: false,
-      precheckResultsMessageIconClass: 'glyphicon glyphicon-ok',
-      bypassedFailures: false
-    };
-
-    Object.keys(this.get('preCheckMessages')).forEach(function(status) {
-      if (data.items.someProperty('UpgradeChecks.status', status)) {
-        properties = this.formatPreCheckMessage(status, data, properties);
-      }
-    }, this);
-
-    if (!properties.precheckResultsMessage) {
-      properties.precheckResultsMessage = Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed');
-    }
-    this.get('upgradeMethods').findProperty('type', params.type).setProperties(properties);
-    this.updateSelectedMethod(false);
-    this.addPrecheckMessageTooltip();
-  },
-
-  /**
-   * @method formatPreCheckMessage
-   * @param {string} type
-   * @param {object} data
-   * @param {object} defaults
-   * @returns {object}
-   */
-  formatPreCheckMessage: function(type, data, defaults) {
-    var length = data.items.filterProperty('UpgradeChecks.status', type).length;
-    var properties = this.get('preCheckMessages')[type] || {};
-    var message = Em.I18n.t(properties.template).format(length, defaults.precheckResultsMessage);
-    defaults = $.extend(defaults, properties);
-    delete defaults.template;
-    defaults.precheckResultsMessage = message;
-    return defaults;
-  },
-
-  addPrecheckMessageTooltip: function() {
-    Em.run.later(this, function () {
-      // add tooltip for the type with preCheck errors
-      App.tooltip($(".img-thumbnail.check-failed"), {
-        placement: "bottom",
-        title: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip')
-      });
-      // destroy the tooltip for the type wo preCheck errors
-      $(".img-thumbnail").not(".check-failed").not(".not-allowed-by-version").tooltip("destroy");
-    }, 1000);
-  },
-
-  runPreUpgradeCheckOnlyError: function (request, ajaxOptions, error, data, params) {
-    var method = this.get('upgradeMethods').findProperty('type', params.type);
-    method.setProperties({
-      precheckResultsMessage: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.link'),
-      precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.title'),
-      precheckResultsMessageClass: 'RED',
-      isPrecheckFailed: true,
-      precheckResultsMessageIconClass: 'glyphicon glyphicon-warning-sign',
-      action: 'rerunCheck'
-    });
-  },
-
-  /**
-   * In Upgrade Wizard: update which method already been selected on open
-   * Not in upgrade wizard: de-select the method with pre-check errors
-   * @param isInUpgradeWizard {boolean}
-   */
-  updateSelectedMethod: function (isInUpgradeWizard) {
-    if (isInUpgradeWizard) {
-      this.get('upgradeMethods').forEach(function (method) {
-        method.set('selected', method.get('type') === this.get('upgradeType'));
-      }, this);
-    } else {
-      var ruMethod = this.get('upgradeMethods').findProperty('type', 'ROLLING');
-      var euMethod = this.get('upgradeMethods').findProperty('type', 'NON_ROLLING');
-      if (ruMethod && ruMethod.get('isPrecheckFailed')) ruMethod.set('selected', false);
-      if (euMethod && euMethod.get('isPrecheckFailed')) euMethod.set('selected', false);
-    }
-  },
-
-  /**
-   * send request for pre upgrade check
-   * @param version
-   */
-  runPreUpgradeCheck: function(version) {
-    var params = {
-      value: version.get('repositoryVersion'),
-      label: version.get('displayName'),
-      type: version.get('upgradeType'),
-      skipComponentFailures: version.get('skipComponentFailures') ? 'true' : 'false',
-      skipSCFailures: version.get('skipSCFailures') ? 'true' : 'false',
-      id: version.get('id'),
-      targetStack: version.get('displayName')
-    };
-    if (App.get('supports.preUpgradeCheck')) {
-      this.set('requestInProgress', true);
-      App.ajax.send({
-        name: "admin.upgrade.pre_upgrade_check",
-        sender: this,
-        data: params,
-        success: "runPreUpgradeCheckSuccess",
-        error: "runPreUpgradeCheckError"
-      });
-    } else {
-      this.upgrade(params);
-    }
-  },
-
-  /**
-   * success callback of <code>runPreUpgradeCheckSuccess()</code>
-   * if there are some fails - it shows popup else run upgrade
-   * @param data {object}
-   * @param opt {object}
-   * @param params {object}
-   * @returns {App.ModalPopup|undefined}
-   */
-  runPreUpgradeCheckSuccess: function (data, opt, params) {
-    var self = this;
-    if (data.items.someProperty('UpgradeChecks.status', 'FAIL') || data.items.someProperty('UpgradeChecks.status', 'WARNING') || data.items.someProperty('UpgradeChecks.status', 'BYPASS')) {
-      this.set('requestInProgress', false);
-      var hasFails = data.items.someProperty('UpgradeChecks.status', 'FAIL'),
-        header = Em.I18n.t('popup.clusterCheck.Upgrade.header').format(params.label),
-        failTitle = Em.I18n.t('popup.clusterCheck.Upgrade.fail.title'),
-        failAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.fail.alert')),
-        warningTitle = Em.I18n.t('popup.clusterCheck.Upgrade.warning.title'),
-        warningAlert = new Em.Handlebars.SafeString(Em.I18n.t('popup.clusterCheck.Upgrade.warning.alert')),
-        bypassedFailures = data.items.someProperty('UpgradeChecks.status', 'BYPASS').length > 0,
-        configsMergeWarning = data.items.findProperty('UpgradeChecks.id', 'CONFIG_MERGE'),
-        popupData = {
-          items: data.items.rejectProperty('UpgradeChecks.id', 'CONFIG_MERGE')
-        },
-        configs = this.getConfigsWarnings(configsMergeWarning);
-      App.showClusterCheckPopup(popupData, {
-        header: header,
-        failTitle: failTitle,
-        failAlert: failAlert,
-        warningTitle: warningTitle,
-        warningAlert: warningAlert,
-        bypassedFailures: bypassedFailures,
-        noCallbackCondition: hasFails,
-        callback: function () {
-          self.upgrade(params);
-        }
-      }, configs, params.label);
-    } else {
-      this.upgrade(params);
-    }
-  },
-
-  runPreUpgradeCheckError: function() {
-    this.set('requestInProgress', false);
-  },
-
-  confirmRetryUpgrade: function (version) {
-    var self = this;
-    return App.showConfirmationPopup(
-      function () {
-        self.retryUpgrade();
-      },
-      Em.I18n.t('admin.stackUpgrade.upgrade.retry.confirm.body').format(version.get('displayName')),
-      null,
-      this.getUpgradeDowngradeHeader(version.get('upgradeTypeDislayName'), version.get('displayName'))
-    );
-  },
-
-  confirmRetryDowngrade: function () {
-    var self = this,
-      currentVersion = this.get('currentVersion');
-    return App.showConfirmationPopup(
-      function() {
-        self.retryUpgrade();
-      },
-      Em.I18n.t('admin.stackUpgrade.downgrade.retry.body').format(currentVersion.repository_name),
-      null,
-      Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format(currentVersion.repository_name),
-      Em.I18n.t('admin.stackUpgrade.downgrade.proceed')
-    );
-  },
-
-  /**
-   * confirmation popup before install repository version
-   */
-  installRepoVersionPopup: function (repo) {
-    var availableServices = repo.get('stackServices').filter(function(service) {
-      return App.Service.find(service.get('name')).get('isLoaded') && service.get('isAvailable') && service.get('isUpgradable');
-    }, this);
-    if (!availableServices.length && !repo.get('isStandard')){
-      return App.showAlertPopup( Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title'), Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.noAvailableServices').format(repo.get('displayName')) );
-    }
-    var self = this;
-    var bodyContent = repo.get('isPatch')
-      ? Em.I18n.t('admin.stackVersions.version.install.patch.confirm')
-      : Em.I18n.t('admin.stackVersions.version.install.confirm');
-    return App.ModalPopup.show({
-      header: Em.I18n.t('popup.confirmation.commonHeader'),
-      popupBody: bodyContent.format(repo.get('displayName')),
-      skipDependencyCheck: false,
-      bodyClass: Em.View.extend({
-        classNames: ['install-repo-confirmation'],
-        content: availableServices,
-        showAvailableServices: repo.get('isPatch') || repo.get('isMaint'),
-        templateName: require('templates/common/modal_popups/install_repo_confirmation')
-      }),
-      onPrimary: function () {
-        self.installRepoVersion(repo);
-        this._super();
-      }
-    });
-  },
-
-  /**
-   * sends request to install repoVersion to the cluster
-   * and create clusterStackVersion resourse
-   * @param {Em.Object} repo
-   * @return {$.ajax}
-   * @method installRepoVersion
-   */
-  installRepoVersion: function (repo) {
-    this.set('requestInProgress', true);
-    this.set('requestInProgressRepoId', repo.get('id'));
-
-    var data = {
-      ClusterStackVersions: {
-        stack: repo.get('stackVersionType'),
-        version: repo.get('stackVersionNumber'),
-        repository_version: repo.get('repositoryVersion')
-      },
-      id: repo.get('id')
-    };
-    return App.ajax.send({
-      name: 'admin.stack_version.install.repo_version',
-      sender: this,
-      data: data,
-      success: 'installRepoVersionSuccess',
-      error: 'installRepoVersionError',
-      callback: function() {
-        this.sender.set('requestInProgress', false);
-        this.sender.set('requestInProgressRepoId', null);
-      }
-    });
-  },
-
-  /**
-   * transform repo data into json for
-   * saving changes to repository version
-   * @param {Em.Object} repo
-   * @returns {{operating_systems: Array}}
-   */
-  prepareRepoForSaving: function(repo) {
-    var repoVersion = { "operating_systems": [] };
-    var ambari_managed_repositories = !repo.get('useRedhatSatellite');
-    repo.get('operatingSystems').forEach(function (os, k) {
-      repoVersion.operating_systems.push({
-        "OperatingSystems": {
-          "os_type": os.get("osType"),
-          "ambari_managed_repositories": ambari_managed_repositories
-        },
-        "repositories": []
-      });
-      os.get('repositories').forEach(function (repository) {
-        repoVersion.operating_systems[k].repositories.push({
-          "Repositories": {
-            "base_url": repository.get('baseUrl'),
-            "repo_id": repository.get('repoId'),
-            "repo_name": repository.get('repoName')
-          }
-        });
-      });
-    });
-    return repoVersion;
-  },
-
-  /**
-   * Return stack version for the repo object
-   * @param {Em.Object} repo
-   * */
-  getStackVersionNumber: function(repo){
-    var stackVersionNumber = repo.get('stackVersion');
-    if(null == stackVersionNumber)
-      stackVersionNumber = App.get('currentStackVersion');
-    return stackVersionNumber;
-  },
-
-  /**
-   * perform validation if <code>skip<code> is  false and run save if
-   * validation successfull or run save without validation is <code>skip<code> is true
-   * @param {Em.Object} repo
-   * @param {boolean} skip
-   * @returns {$.Deferred}
-   */
-  saveRepoOS: function (repo, skip) {
-    var self = this;
-    var deferred = $.Deferred();
-    this.validateRepoVersions(repo, skip).done(function(data) {
-      if (data.length > 0) {
-        deferred.resolve(data);
-      } else {
-        var repoVersion = self.prepareRepoForSaving(repo);
-        var stackVersionNumber = self.getStackVersionNumber(repo);
-
-        App.ajax.send({
-          name: 'admin.stack_versions.edit.repo',
-          sender: this,
-          data: {
-            stackName: App.get('currentStackName'),
-            stackVersion: stackVersionNumber,
-            repoVersionId: repo.get('repoVersionId'),
-            repoVersion: repoVersion
-          }
-        }).success(function() {
-          deferred.resolve([]);
-        });
-      }
-    });
-    return deferred.promise();
-  },
-
-  /**
-   * send request for validation for each repository
-   * @param {Em.Object} repo
-   * @param {boolean} skip
-   * @returns {*}
-   */
-  validateRepoVersions: function(repo, skip) {
-    var deferred = $.Deferred(),
-      totalCalls = 0,
-      invalidUrls = [];
-
-    if (skip) {
-      deferred.resolve(invalidUrls);
-    } else {
-      var stackVersionNumber = this.getStackVersionNumber(repo);
-      repo.get('operatingSystems').forEach(function (os) {
-        if (os.get('isSelected')) {
-          os.get('repositories').forEach(function (repo) {
-            totalCalls++;
-            this.validationCall(repo, os, stackVersionNumber)
-            .success(function () {
-              totalCalls--;
-              if (totalCalls === 0) deferred.resolve(invalidUrls);
-            })
-            .error(function () {
-              repo.set('hasError', true);
-              invalidUrls.push(repo);
-              totalCalls--;
-              if (totalCalls === 0) deferred.resolve(invalidUrls);
-            });
-          }, this);
-        } else {
-          return deferred.resolve(invalidUrls);
-        }
-      }, this);
-    }
-    return deferred.promise();
-  },
-
-  /**
-   *
-   * @param {Em.Object} repo
-   * @param {Em.Object} os
-   * @param {string} stackVersionNumber
-   */
-  validationCall: function(repo, os, stackVersionNumber) {
-    return App.ajax.send({
-      name: 'admin.stack_versions.validate.repo',
-      sender: this,
-      data: {
-        repo: repo,
-        repoName: repo.get('repoName'),
-        repoId: repo.get('repoId'),
-        baseUrl: repo.get('baseUrl'),
-        osType: os.get('osType'),
-        stackName: App.get('currentStackName'),
-        stackVersion: stackVersionNumber
-      }
-    })
-  },
-
-  /**
-   * success callback for <code>installRepoVersion()<code>
-   * saves request id to the db
-   * @param data
-   * @param opt
-   * @param params
-   * @method installStackVersionSuccess
-   */
-  installRepoVersionSuccess: function (data, opt, params) {
-    if (data && data.statusText === "timeout") {
-      App.showAlertPopup(Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title'), Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout'));
-      return false;
-    }
-    var version = App.RepositoryVersion.find(params.id);
-    App.db.set('repoVersionInstall', 'id', [data.Requests.id]);
-    App.clusterStatus.setClusterStatus({
-      wizardControllerName: this.get('name'),
-      localdb: App.db.data
-    });
-    version.set('defaultStatus', 'INSTALLING');
-    if (version.get('stackVersion')) {
-      version.set('stackVersion.state', 'INSTALLING');
-    }
-  },
-
-  /**
-   * error callback for <code>installRepoVersion()<code>
-   * show the error message
-   * @param data
-   * @method installStackVersionSuccess
-   */
-  installRepoVersionError: function (data, opt, params) {
-    var header = Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title');
-    var body = "";
-    if (data && data.responseText) {
-      try {
-        var json = $.parseJSON(data.responseText);
-        body = json.message;
-      } catch (err) {}
-    }
-    if (data && data.statusText === "timeout") {
-      body = Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout');
-    }
-    var version = App.RepositoryVersion.find(params.id);
-    version.set('defaultStatus', 'INSTALL_FAILED');
-    if (version.get('stackVersion')) {
-      version.set('stackVersion.state', 'INSTALL_FAILED');
-    }
-    App.showAlertPopup(header, body);
-  },
-
-  /**
-   * opens a popup with installations state per host
-   * @param {Em.Object} version
-   * @method showProgressPopup
-   */
-  showProgressPopup: function(version) {
-    var popupTitle = Em.I18n.t('admin.stackVersions.details.install.hosts.popup.title').format(version.get('displayName'));
-    var requestIds = this.getRepoVersionInstallId();
-    var hostProgressPopupController = App.router.get('highAvailabilityProgressPopupController');
-    hostProgressPopupController.initPopup(popupTitle, requestIds, this);
-  },
-
-  getRepoVersionInstallId: function() {
-    if (App.get('testMode')) return [1];
-
-    var requestIds = App.db.get('repoVersionInstall', 'id');
-    var lastRepoVersionInstall = App.router.get('backgroundOperationsController.services').find(function(request) {
-      return request.get('name').startsWith('Install version');
-    });
-    if (lastRepoVersionInstall &&
-      (!requestIds || !requestIds.contains(lastRepoVersionInstall.get('id')))) {
-      requestIds = [lastRepoVersionInstall.get('id')];
-    }
-    return requestIds || [];
-  },
-
-  /**
-   * reset upgradeState to NOT_REQUIRED when upgrade is COMPLETED
-   * and clean auxiliary data
-   */
-  finish: function () {
-    var upgradeVersion = this.get('upgradeVersion') && this.get('upgradeVersion').match(/[a-zA-Z]+\-\d+\.\d+/);
-    this.setDBProperties({
-      fromVersion: undefined,
-      upgradeId: undefined,
-      upgradeState: 'NOT_REQUIRED',
-      upgradeVersion: undefined,
-      currentVersion: undefined,
-      upgradeTypeDisplayName: undefined,
-      upgradeType: undefined,
-      isWizardRestricted: false,
-      failuresTolerance: undefined,
-      isDowngrade: undefined,
-      downgradeAllowed: undefined
-    });
-    this.initDBProperties();
-    App.clusterStatus.setClusterStatus({
-      localdb: App.db.data
-    });
-    if (upgradeVersion && upgradeVersion[0]) {
-      App.set('currentStackVersion', upgradeVersion[0]);
-    }
-    App.set('upgradeState', 'NOT_REQUIRED');
-  },
-
-  /**
-   * Check <code>App.upgradeState</code> for HOLDING
-   * If it is, send request to check if current item is Finalize
-   * @method updateFinalize
-   */
-  updateFinalize: function () {
-    var upgradeState = App.get('upgradeState');
-    if (upgradeState === 'HOLDING') {
-      return App.ajax.send({
-        name: 'admin.upgrade.finalizeContext',
-        sender: this,
-        success: 'updateFinalizeSuccessCallback',
-        error: 'updateFinalizeErrorCallback'
-      })
-    }
-    else {
-      this.set('isFinalizeItem', false);
-    }
-  }.observes('App.upgradeState'),
-
-  /**
-   *
-   * @param {object|null} data
-   * @method updateFinalizeSuccessCallback
-   */
-  updateFinalizeSuccessCallback: function (data) {
-    var context = data ? Em.get(data, 'items.firstObject.upgrade_groups.firstObject.upgrade_items.firstObject.UpgradeItem.context') : '';
-    this.set('isFinalizeItem', context === this.get('finalizeContext'));
-  },
-
-  updateFinalizeErrorCallback: function() {
-    this.set('isFinalizeItem', false);
-  },
-
-  /**
-   * show dialog with tasks of upgrade
-   * @return {App.ModalPopup}
-   */
-  openUpgradeDialog: function () {
-    if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK') && !this.get('isWizardRestricted')) {
-      App.propertyDidChange('upgradeSuspended');
-      App.router.transitionTo('admin.stackUpgrade');
-    }
-  },
-
-  /**
-   * returns url to get data for repoVersion or clusterStackVersion
-   * @param {Boolean} stack true if load clusterStackVersion
-   * @param {Boolean} fullLoad true if load all data
-   * @returns {String}
-   * @method getUrl
-   */
-  getUrl: function(stack, fullLoad) {
-    if (App.get('testMode')) {
-      return stack ? this.get('mockStackUrl') : this.get('mockRepoUrl')
-    } else {
-      if (fullLoad) {
-        return stack ? this.get('realStackUrl') : this.get('realRepoUrl');
-      } else {
-        return this.get('realUpdateUrl');
-      }
-    }
-  },
-
-  /**
-   * get stack versions from server and push it to model
-   * @return {*}
-   * @method loadStackVersionsToModel
-   */
-  loadStackVersionsToModel: function (fullLoad) {
-    var dfd = $.Deferred();
-    App.HttpClient.get(this.getUrl(true, fullLoad), App.stackVersionMapper, {
-      complete: function () {
-        dfd.resolve();
-      }
-    });
-    return dfd.promise();
-  },
-
-  /**
-   * get repo versions from server and push it to model
-   * @return {*}
-   * @params {Boolean} isUpdate - if true loads part of data that need to be updated
-   * @method loadRepoVersionsToModel()
-   */
-  loadRepoVersionsToModel: function () {
-    var dfd = $.Deferred();
-    App.HttpClient.get(this.getUrl(false, true), App.repoVersionMapper, {
-      complete: function () {
-        dfd.resolve();
-      }
-    });
-    return dfd.promise();
-  },
-
-  /**
-   * set status to Upgrade item
-   * @param item
-   * @param status
-   */
-  setUpgradeItemStatus: function(item, status) {
-    this.set('requestInProgress', true);
-    return App.ajax.send({
-      name: 'admin.upgrade.upgradeItem.setState',
-      sender: this,
-      data: {
-        upgradeId: item.get('request_id'),
-        itemId: item.get('stage_id'),
-        groupId: item.get('group_id'),
-        status: status
-      },
-      callback: function() {
-        this.sender.set('requestInProgress', false);
-      }
-    }).done(function () {
-      item.set('status', status);
-    });
-  },
-
-  currentVersionObserver: function () {
-    var versionNumber = this.get('currentVersion.repository_version');
-    var currentVersionObject = App.RepositoryVersion.find().findProperty('status', 'CURRENT');
-    var versionName = currentVersionObject && currentVersionObject.get('stackVersionType');
-    App.set('isStormMetricsSupported', versionName != 'HDP' || stringUtils.compareVersions(versionNumber, '2.2.2') > -1 || !versionNumber);
-  }.observes('currentVersion.repository_version'),
-
-  /**
-   * get the installed repositories of HDP from server
-   */
-  loadRepositories: function () {
-    if (App.router.get('clusterController.isLoaded') && App.get('currentStackVersion')) {
-      var nameVersionCombo = App.get('currentStackVersion');
-      var stackName = nameVersionCombo.split('-')[0];
-      var stackVersion = nameVersionCombo.split('-')[1];
-      App.ajax.send({
-        name: 'cluster.load_repositories',
-        sender: this,
-        data: {
-          stackName: stackName,
-          stackVersion: stackVersion
-        },
-        success: 'loadRepositoriesSuccessCallback',
-        error: 'loadRepositoriesErrorCallback'
-      });
-    }
-  }.observes('App.router.clusterController.isLoaded'),
-
-  loadRepositoriesSuccessCallback: function (data) {
-    var allRepos = [];
-    data.items.forEach(function (os) {
-      os.repositories.forEach(function (repository) {
-        var osType = repository.Repositories.os_type;
-        var repo = Em.Object.create({
-          baseUrl: repository.Repositories.base_url,
-          osType: osType,
-          repoId: repository.Repositories.repo_id,
-          repoName : repository.Repositories.repo_name,
-          stackName : repository.Repositories.stack_name,
-          stackVersion : repository.Repositories.stack_version,
-          isFirst: false
-        });
-        var group = allRepos.findProperty('name', osType);
-        if (!group) {
-          group = {
-            name: osType,
-            repositories: []
-          };
-          repo.set('isFirst', true);
-          allRepos.push(group);
-        }
-        group.repositories.push(repo);
-      });
-    }, this);
-    allRepos.stackVersion = App.get('currentStackVersionNumber');
-    this.set('allRepos', allRepos);
-  },
-
-  loadRepositoriesErrorCallback: function (request, ajaxOptions, error) {
-
-  },
-
-  /**
-   * @returns {$.ajax}
-   */
-  suspendUpgrade: function () {
-    var self = this;
-    return this.abortUpgradeWithSuspend().done(function () {
-      App.set('upgradeState', 'ABORTED');
-      self.setDBProperty('upgradeState', 'ABORTED');
-      App.clusterStatus.setClusterStatus({
-        wizardControllerName: self.get('name'),
-        localdb: App.db.data
-      });
-    });
-  },
-
-  /**
-   * @returns {$.ajax}
-   */
-  resumeUpgrade: function() {
-    var self = this;
-    this.retryUpgrade().done(function () {
-      App.set('upgradeState', 'PENDING');
-      App.propertyDidChange('upgradeSuspended');
-      self.setDBProperty('upgradeState', 'PENDING');
-      App.clusterStatus.setClusterStatus({
-        wizardControllerName: self.get('name'),
-        localdb: App.db.data
-      });
-    });
-  },
-
-  /**
-   *
-   * @param {Em.Object} version
-   */
-  confirmRevertPatchUpgrade: function(version) {
-    var self = this;
-    var currentStack = App.RepositoryVersion.find(this.get('currentVersion.id'));
-
-    App.ModalPopup.show({
-      header: Em.I18n.t('popup.confirmation.commonHeader'),
-      popupBody: Em.I18n.t('admin.stackVersions.upgrade.patch.revert.confirmation'),
-      bodyClass: Em.View.extend({
-        classNames: ['revert-patch-upgrade-confirmation'],
-        servicesToBeReverted: this.getServicesToBeReverted(version, currentStack),
-        stackFromVersion: version.get('displayName'),
-        stackToVersion: currentStack.get('displayNameSimple'),
-        templateName: require('templates/common/modal_popups/revert_patch_upgrade_confirmation')
-      }),
-      onPrimary: function () {
-        self.revertPatchUpgrade(version);
-        this._super();
-      }
-    });
-  },
-
-  /**
-   *
-   * @param {Em.Object} version
-   * @param {Em.Object} currentStack
-   * @returns {Array}
-   */
-  getServicesToBeReverted: function(version, currentStack) {
-    return version.get('stackServices').filter(function(_service) {
-      var originalService = App.Service.find(_service.get('name'));
-      var isOriginal = originalService.get('desiredRepositoryVersionId') === version.get('id')
-      return (originalService.get('isLoaded') && _service.get('isAvailable')) && isOriginal;
-    }).map(function(_service) {
-      return {
-        displayName: _service.get('displayName'),
-        fromVersion: _service.get('latestVersion'),
-        toVersion: currentStack.get('stackServices').findProperty('name', _service.get('name')).get('latestVersion')
-      }
-    });
-  },
-
-  /**
-   *
-   * @param {Em.Object} version
-   * @returns {$.ajax}
-   */
-  revertPatchUpgrade: function (version) {
-    this.set('requestInProgress', true);
-    return App.ajax.send({
-      name: 'admin.upgrade.revert',
-      sender: this,
-      success: 'upgradeSuccessCallback',
-      error: 'upgradeErrorCallback',
-      callback: function () {
-        this.sender.set('requestInProgress', false);
-      },
-      data: {
-        upgradeId: version.get('stackVersion').get('revertUpgradeId'),
-        id: version.get('id'),
-        value: version.get('repositoryVersion'),
-        label: version.get('displayName'),
-        isDowngrade: true
-      }
-    });
-  },
-
-  /**
-   * @param {App.RepositoryVersion} version
-   * @returns {Em.Object}
-   */
-  confirmDiscardRepoVersion: function(version) {
-    var self = this;
-    return App.showConfirmationPopup(function() {
-      self.discardRepoVersion(version);
-    });
-  },
-
-  /**
-   * @param {App.RepositoryVersion} version
-   * @returns {$.ajax}
-   */
-  discardRepoVersion: function(version) {
-    this.set('requestInProgress', true);
-    return App.ajax.send({
-      name: 'admin.stack_versions.discard',
-      sender: this,
-      callback: function () {
-        this.sender.set('requestInProgress', false);
-      },
-      data: {
-        id: version.get('id'),
-        stackName: version.get('stackVersionType'),
-        stackVersion: version.get('stackVersionNumber')
-      },
-    });
-  },
-
-  /**
-   * restore last Upgrade data
-   * @param {object} lastUpgradeData
-   */
-  restoreLastUpgrade: function(lastUpgradeData) {
-    var self = this;
-    var upgradeType = this.get('upgradeMethods').findProperty('type', lastUpgradeData.Upgrade.upgrade_type);
-    const isDowngrade = lastUpgradeData.Upgrade.direction === 'DOWNGRADE';
-    this.setDBProperties({
-      toVersion: lastUpgradeData.Upgrade.associated_version,
-      upgradeId: lastUpgradeData.Upgrade.request_id,
-      isDowngrade,
-      upgradeState: lastUpgradeData.Upgrade.request_status,
-      upgradeType: lastUpgradeData.Upgrade.upgrade_type,
-      isWizardRestricted: upgradeType.get('isWizardRestricted'),
-      downgradeAllowed: lastUpgradeData.Upgrade.downgrade_allowed,
-      upgradeTypeDisplayName: upgradeType.get('displayName'),
-      isSuspended: lastUpgradeData.Upgrade.suspended,
-      failuresTolerance: {
-        skipComponentFailures: lastUpgradeData.Upgrade.skip_failures,
-        skipSCFailures: lastUpgradeData.Upgrade.skip_service_check_failures
-      }
-    });
-    this.initDBProperties();
-    App.set('upgradeState', lastUpgradeData.Upgrade.request_status);
-    this.loadRepoVersionsToModel().done(function () {
-      var toVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', lastUpgradeData.Upgrade.associated_version);
-      self.setDBProperty('upgradeVersion', toVersion && toVersion.get('displayName'));
-      self.set('upgradeVersion', toVersion && toVersion.get('displayName'));
-    });
-  },
-
-  /**
-   * Build table from configs list and open new window to show this table
-   * @param configs
-   */
-  openConfigsInNewWindow: function (configs) {
-    var newWindow;
-    var output = '';
-
-    output += '<table style="text-align: left;"><thead><tr>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.configType') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.propertyName') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.currentValue') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.recommendedValue') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.resultingValue') + '</th>' +
-        '</tr></thead><tbody>';
-
-    configs.context.forEach(function (config) {
-      output += '<tr>' +
-          '<td>' + config.type + '</td>' +
-          '<td>' + config.name + '</td>' +
-          '<td>' + config.currentValue + '</td>' +
-          '<td>' + config.recommendedValue + '</td>' +
-          '<td>' + config.resultingValue + '</td>' +
-          '</tr>';
-    });
-
-    output += '</tbody></table>';
-    newWindow = window.open();
-    newWindow.document.write(output);
-    newWindow.focus();
-  },
-
-  /**
-   * load version for services to display on Choose Services page
-   * should load from VersionDefinition endpoint
-   */
-  loadServiceVersionFromVersionDefinitions: function () {
-    return App.ajax.send({
-      name: 'cluster.load_current_repo_stack_services',
-      sender: this,
-      data: {
-        clusterName: App.get('clusterName')
-      },
-      success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
-      error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
-    });
-  },
-
-  serviceVersionsMap: {},
-
-  /**
-   * @param {object|null} jsonData
-   */
-  loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
-    var rv = Em.getWithDefault(jsonData, 'items', []).filter(function(i) {
-      return Em.getWithDefault(i, 'ClusterStackVersions.stack', null) === App.get('currentStackName') &&
-       Em.getWithDefault(i, 'ClusterStackVersions.version', null) === App.get('currentStackVersionNumber');
-    })[0];
-    var map = this.get('serviceVersionsMap');
-    var stackServices = Em.getWithDefault(rv || {}, 'repository_versions.0.RepositoryVersions.stack_services', false);
-    if (stackServices) {
-      stackServices.forEach(function (item) {
-        map[item.name] = item.versions[0];
-      });
-    }
-  },
-
-  loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) {}
-
-});
diff --git a/ambari-web/app/data/controller_route.js b/ambari-web/app/data/controller_route.js
index 13d0380..193a353 100644
--- a/ambari-web/app/data/controller_route.js
+++ b/ambari-web/app/data/controller_route.js
@@ -70,10 +70,6 @@ module.exports = [
     route: 'main.services.rollbackHighAvailability'
   },
   {
-    wizardControllerName: App.router.get('mainAdminStackAndUpgradeController.name'),
-    route: App.db.get('MainAdminStackAndUpgrade', 'upgradeState') === 'NOT_REQUIRED' ? 'main.admin.stackAndUpgrade.index' : 'main.admin.stackAndUpgrade.versions'
-  },
-  {
     wizardControllerName: App.router.get('widgetWizardController.name'),
     route: 'main.createWidget'
   },
diff --git a/ambari-web/app/mappers.js b/ambari-web/app/mappers.js
index f310d44..49bd42e 100644
--- a/ambari-web/app/mappers.js
+++ b/ambari-web/app/mappers.js
@@ -51,5 +51,4 @@ require('mappers/socket/host_component_status_mapper');
 require('mappers/socket/alert_summary_mapper');
 require('mappers/socket/host_state_mapper');
 require('mappers/socket/alert_definitions_mapper_adapter');
-require('mappers/socket/alert_groups_mapper_adapter');
-require('mappers/socket/upgrade_state_mapper');
+require('mappers/socket/alert_groups_mapper_adapter');
\ No newline at end of file
diff --git a/ambari-web/app/mappers/socket/upgrade_state_mapper.js b/ambari-web/app/mappers/socket/upgrade_state_mapper.js
deleted file mode 100644
index 1670ed5..0000000
--- a/ambari-web/app/mappers/socket/upgrade_state_mapper.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-var App = require('app');
-
-App.upgradeStateMapper = App.QuickDataMapper.create({
-
-  /**
-   * @param {object} event
-   */
-  map: function (event) {
-    var controller = App.router.get('mainAdminStackAndUpgradeController');
-    if (event.type === 'CREATE') {
-      controller.restoreLastUpgrade({Upgrade: event});
-    }
-    //TODO rename type to eventType
-    if (event.type === 'UPDATE' && controller.get('upgradeId') === event.request_id) {
-      if (!Em.isNone(event.request_status)) {
-        App.set('upgradeState', event.request_status);
-        controller.setDBProperty('upgradeState', event.request_status);
-      }
-      if (!Em.isNone(event.suspended)) {
-        controller.set('isSuspended', event.suspended);
-        controller.setDBProperty('isSuspended', event.suspended);
-      }
-    }
-  }
-});
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index c1e060f..2c11aa9 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -709,16 +709,8 @@ App.Router = Em.Router.extend({
                 route = wizardControllerRoute.route;
               }
             }
-            if (wizardControllerRoute && wizardControllerRoute.wizardControllerName === 'mainAdminStackAndUpgradeController') {
-              var clusterController = App.router.get('clusterController');
-              clusterController.loadClusterName().done(function(){
-                clusterController.restoreUpgradeState().done(function(){
-                  callback(route);
-                });
-              });
-            } else {
-              callback(route);
-            }
+
+            callback(route);
           });
         });
       } else {
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index 8589b32..ab2ef31 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -88,18 +88,6 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
       }
     });
   },
-  /*
-   routePath: function(router,event) {
-   if (router.getAuthenticated()) {
-   App.router.get('clusterController').loadClusterName(false);
-   router.get('mainController').initialize();
-   // TODO: redirect to last known state
-   } else {
-   Ember.run.next(function () {
-   router.transitionTo('login');
-   });
-   }
-   }, */
 
   index: Ember.Route.extend({
     route: '/',
@@ -580,64 +568,6 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
       }
     }),
 
-    stackAndUpgrade: Em.Route.extend({
-      route: '/stack',
-      breadcrumbs: null,
-      connectOutlets: function (router) {
-        router.set('mainAdminController.category', "stackAndUpgrade");
-        router.set('mainAdminController.categoryLabel', Em.I18n.t('admin.stackUpgrade.title'));
-        router.get('mainAdminController').connectOutlet('mainAdminStackAndUpgrade');
-      },
-
-      index: Em.Route.extend({
-        route: '/',
-        redirectsTo: 'services'
-      }),
-
-      services: Em.Route.extend({
-
-        breadcrumbs: {
-          label: Em.I18n.t('common.stack')
-        },
-
-        route: '/services',
-        connectOutlets: function (router, context) {
-          router.get('mainAdminStackAndUpgradeController').connectOutlet('mainAdminStackServices');
-        }
-      }),
-
-      versions: Em.Route.extend({
-        breadcrumbs: {
-          label: Em.I18n.t('common.versions')
-        },
-        route: '/versions',
-        connectOutlets: function (router, context) {
-          router.get('mainAdminStackAndUpgradeController').connectOutlet('MainAdminStackVersions');
-        }
-      }),
-
-      upgradeHistory: Em.Route.extend({
-
-        breadcrumbs: {
-          label: Em.I18n.t('common.upgrade.history')
-        },
-
-        route: '/history',
-        connectOutlets: function (router, context) {
-          router.get('mainAdminStackAndUpgradeController').connectOutlet('mainAdminStackUpgradeHistory');
-        },
-      }),
-
-      stackNavigate: function (router, event) {
-        var parent = event.view._parentView;
-        parent.deactivateChildViews();
-        event.view.set('active', "active");
-        router.transitionTo(event.context);
-      }
-    }),
-    
-    stackUpgrade: require('routes/stack_upgrade_routes'),
-
     adminAdvanced: Em.Route.extend({
       route: '/advanced',
       connectOutlets: function (router) {
diff --git a/ambari-web/app/routes/stack_upgrade_routes.js b/ambari-web/app/routes/stack_upgrade_routes.js
deleted file mode 100644
index d36253a..0000000
--- a/ambari-web/app/routes/stack_upgrade_routes.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-module.exports = App.WizardRoute.extend({
-  route: 'stack/upgrade',
-
-  breadcrumbs: {
-    labelBindingPath: 'App.router.mainAdminStackAndUpgradeController.wizardModalTitle'
-  },
-
-  enter: function (router) {
-    if (App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
-      router.get('mainController').dataLoading().done(function () {
-        Ember.run.next(function () {
-          //if upgrade id is absent then upgrade is completed
-          if (Em.isNone(App.db.get('MainAdminStackAndUpgrade', 'upgradeId'))) {
-            router.transitionTo('main.admin.stackAndUpgrade.versions');
-            return null;
-          }
-
-          App.router.get('updateController').set('isWorking', false);
-
-          return App.ModalPopup.show({
-            classNames: ['upgrade-wizard-modal'],
-            modalDialogClasses: ['modal-xlg'],
-            headerClass: Em.View.extend({
-              header: Em.computed.alias('controller.wizardModalTitle'),
-              controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
-              template: Ember.Handlebars.compile(
-                '{{view.header}}' +
-                '<div {{bindAttr class=":upgrade-options-link controller.isDowngrade:disabled" disabled="controller.isDowngrade"}} {{action openUpgradeOptions target="controller"}}>' +
-                '<i class="icon-cogs"></i><a>{{t admin.stackVersions.version.upgrade.upgradeOptions.header}}</a>' +
-                '</div>'
-              )
-            }),
-            bodyClass: App.upgradeWizardView,
-            primary: Em.I18n.t('common.dismiss'),
-            secondary: null,
-            didInsertElement: function () {
-              this._super();
-              this.fitHeight();
-              this.fitInnerHeight();
-            },
-
-            /**
-             * fit height of scrollable block inside of modal body
-             */
-            fitInnerHeight: function () {
-              var block = this.$().find('.modal .modal-body');
-              var scrollable = this.$().find('.modal .scrollable-block');
-
-              scrollable.css('max-height', Number(block.css('max-height').slice(0, -2)) - block.height());
-              block.css('max-height', 'none');
-            },
-            onPrimary: function () {
-              this.closeWizard();
-            },
-            onClose: function () {
-              this.closeWizard();
-            },
-            closeWizard: function () {
-              App.router.get('updateController').set('isWorking', true);
-              App.router.transitionTo('main.admin.stackAndUpgrade.versions');
-              this.hide();
-              if (['NOT_REQUIRED', 'COMPLETED'].contains(App.get('upgradeState'))) {
-                location.reload();
-              }
-            }
-          });
-        });
-      });
-    } else {
-      Em.run.next(function () {
-        App.router.transitionTo('main.views');
-      });
-    }
-  }
-});
diff --git a/ambari-web/app/templates/application.hbs b/ambari-web/app/templates/application.hbs
index b108a94..5748c83 100644
--- a/ambari-web/app/templates/application.hbs
+++ b/ambari-web/app/templates/application.hbs
@@ -202,32 +202,6 @@
 
   <div class="container main-container">
     <div id="content">
-      {{#if App.wizardIsNotFinished}}
-        <div class="ru-badge row">
-          {{#if isExistingClusterDataLoaded}}
-            <p class="col-md-4 col-md-offset-4">
-              {{#if App.router.wizardWatcherController.isNonWizardUser}}
-                <span class="label upgrade-in-progress">
-                  <i class="glyphicon glyphicon-cog"></i>&nbsp;{{App.router.wizardWatcherController.wizardDisplayName}}
-                </span>
-              {{/if}}
-              {{#if showUpgradeLabel}}
-                <a href="#" {{action "openUpgradeDialog" target="App.router.mainAdminStackAndUpgradeController"}}>
-                  <span {{bindAttr class="upgradeMap.cls :label"}}>
-                    <i {{bindAttr class="upgradeMap.icon :glyphicon"}}></i>&nbsp;
-                    {{upgradeMap.msg}}
-                  </span>
-                </a>
-              {{/if}}
-            </p>
-          {{/if}}
-        </div>
-        <div class="row">
-          {{#if App.router.mainAdminStackAndUpgradeController.isFinalizeItem}}
-          <p class="col-md-10 col-md-offset-1 alert alert-danger">{{t admin.stackVersions.version.upgrade.notFinalized.warning}}</p>
-          {{/if}}
-        </div>
-      {{/if}}
       {{outlet}}
     </div>
   </div>
diff --git a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs b/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
deleted file mode 100644
index e0a7242..0000000
--- a/ambari-web/app/templates/main/admin/stack_and_upgrade.hbs
+++ /dev/null
@@ -1,22 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="stack-upgrade-page">
-  {{view App.MainAdminStackMenuView}}
-  {{outlet}}
-</div>
\ No newline at end of file
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
deleted file mode 100644
index f1c61f9..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/services.hbs
+++ /dev/null
@@ -1,123 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-
-<div class="row">
-  <h2 class="table-title col-sm-1">{{t common.stack}}</h2>
-</div>
-<table class="table table-hover">
-  <thead>
-  <tr>
-    <th>{{t common.service}}</th>
-    <th>{{t common.version}}</th>
-    <th>{{t common.status}}</th>
-    <th>{{t common.description}}</th>
-  </tr>
-  </thead>
-  <tbody>
-    {{#each service in view.services}}
-    <tr>
-      <td class="service-display-name">{{service.displayName}}</td>
-      <td class="service-stack-version">{{service.serviceVersionDisplay}}</td>
-      <td class="stack-version-state">
-        {{#if service.isInstalled}}
-          <span class="label label-success">{{t common.installed}}</span>
-        {{else}}
-          <a {{bindAttr class=":path-link view.isAddServiceAvailable::not-active-link"}} {{action goToAddService service.serviceName target="view"}}>
-            {{t services.service.add}}</a>
-        {{/if}}
-      </td>
-      <td class="service-description">{{{service.comments}}}</td>
-    </tr>
-    {{/each}}
-  </tbody>
-</table>
-
-{{#unless App.stackVersionsAvailable}}
-
-  <div class="header">
-    <strong>{{t admin.cluster.repositories.repositories}}</strong>
-  </div>
-  <ul class="nav nav-tabs">
-    <li class="active">
-      <a href="javascript:void(null);">{{view.allRepositoriesGroups.stackVersion}}</a>
-    </li>
-  </ul>
-
-  <div class="admin-cluster">
-    <div class="repositories-table">
-      <div class="thead">
-        <div class="th os-th">{{t common.os}}</div>
-        <div class="th name-th">{{t common.name}}</div>
-        <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div>
-      </div>
-      <div class="tbody">
-        {{#each repoGroup in view.allRepositoriesGroups}}
-          <div class="trow">
-            <div class="os-td">
-              <label>
-                <span class="os">{{repoGroup.name}}</span>
-              </label>
-            </div>
-            <div style="width:89%">
-              {{#each repository in repoGroup.repositories}}
-                <div class="sub-trow">
-                  <div class="name-td">{{repository.repoId}}</div>
-                  <!--edit mode for current url-->
-                  {{#if repository.onEdit}}
-                    <div {{bindAttr class=":url-td repository.empty-error:textfield-error repository.invalid-error:textfield-error"}}>
-                      {{view Ember.TextField valueBinding="repository.baseUrl" class="form-control"}}
-                    </div>
-                    <div class="clear-td">
-                      {{#if repository.clearAll}}
-                        <a {{action "clearGroupLocalRepository" repository target="view" }}>
-                          <i class="glyphicon glyphicon-remove-sign"></i>
-                        </a>
-                      {{/if}}
-                    </div>
-                    <div class="edit-buttons-td">
-                      <a class="btn btn-default" {{action doCancel repository target="view"}}>{{t common.cancel}}</a>
-                    </div>
-                    <div class="edit-buttons-td">
-                      {{#if repository.empty-error}}
-                        <a class="btn btn-primary" disabled="disabled">{{t common.save}}</a>
-                      {{else}}
-                        <a class="btn btn-primary" {{action saveRepoUrls repository target="view"}}>{{t common.save}}</a>
-                      {{/if}}
-                    </div>
-                    <!--non-edit mode for current url-->
-                  {{else}}
-                    <div class="url-text-td">
-                      {{repository.baseUrl}}
-                    </div>
-                    <div class="edit-td">
-                      <a {{action "onEditClick" repository target="view" }}>
-                        <i class="glyphicon glyphicon-edit"></i> {{t common.edit}}
-                      </a>
-                    </div>
-                  {{/if}}
-                </div>
-              {{/each}}
-            </div>
-          </div>
-        {{/each}}
-      </div>
-    </div>
-  </div>
-
-{{/unless}}
\ No newline at end of file
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
deleted file mode 100644
index 332594e..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ /dev/null
@@ -1,340 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="stack-upgrade-dialog">
-
-  <div {{bindAttr class="view.isLoaded::hidden :row"}}>
-    <div class="col-md-2 task-list-main-wrap">{{statusIcon controller.requestStatus}}
-      &nbsp;{{view.upgradeStatusLabel}}</div>
-    <div class="col-md-7">
-      {{view App.ProgressBarView
-        progressBinding="view.overallProgress"
-        statusBinding="controller.requestStatus"
-      }}
-    </div>
-    <div class="col-md-1">
-      {{view.overallProgress}}%
-    </div>
-    <div class="col-md-2 pause-button pull-right">
-        {{#if view.isLoaded}}
-            {{#if showPauseButton}}
-                {{#if isDowngrade}}
-                  <button
-                    class="btn btn-default pull-right" {{action confirmPauseDowngrade target="view"}}>{{t admin.stackUpgrade.pauseDowngrade}}</button>
-                {{else}}
-                  <button
-                    class="btn btn-default pull-right" {{action confirmPauseUpgrade target="view"}}>{{t admin.stackUpgrade.pauseUpgrade}}</button>
-                {{/if}}
-            {{/if}}
-        {{/if}}
-    </div>
-  </div>
-
-  <div class="task-list scrollable-block task-list-main-wrap upgrade-groups">
-      {{#if view.isLoaded}}
-        <div class="panel-group">
-            {{#if view.runningItem}}
-              <div class="panel panel-default details-box row">
-                <div class="panel-heading row">
-                  <div class="pull-left col-md-6">
-                      {{t admin.stackUpgrade.dialog.inProgress}}&nbsp;{{view.runningItem.text}}
-                  </div>
-                    {{#if view.isDetailsOpened}}
-                      <div class="pull-right col-md-6">
-                        <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
-                           data-toggle="collapse">
-                            {{t admin.stackUpgrade.dialog.details.hide}}
-                        </a>
-                      </div>
-                    {{else}}
-                      <div class="pull-right col-md-6">
-                        <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
-                           data-toggle="collapse">
-                            {{t admin.stackUpgrade.dialog.details.open}}
-                        </a>
-                      </div>
-                    {{/if}}
-                </div>
-                <div id="collapseBox" class="panel-collapse collapse">
-                  <div class="panel-body">
-                      {{#if view.runningItem.isTasksLoaded}}
-                        <div class="clear col-md-12">
-                            {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
-                        </div>
-                      {{else}}
-                          {{view App.SpinnerView classNames="clear"}}
-                      {{/if}}
-                  </div>
-                </div>
-              </div>
-            {{/if}}
-            {{#if view.failedItem}}
-                {{#unless view.isSlaveComponentFailuresItem}}
-                  <div class="panel panel-default details-box row">
-                    <div class="panel-heading row">
-                      <div class="pull-left col-md-6">
-                          {{t admin.stackUpgrade.dialog.failed}}&nbsp;{{view.failedItem.text}}
-                      </div>
-                        {{#if view.isDetailsOpened}}
-                          <div class="pull-right col-md-6">
-                            <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
-                               data-toggle="collapse">
-                                {{t admin.stackUpgrade.dialog.details.hide}}
-                            </a>
-                          </div>
-                        {{else}}
-                          <div class="pull-right col-md-6">
-                            <a href="#collapseBox" class="pull-right" {{action toggleDetails target="view"}}
-                               data-toggle="collapse">
-                                {{t admin.stackUpgrade.dialog.details.open}}
-                            </a>
-                          </div>
-                        {{/if}}
-                    </div>
-                    <div id="collapseBox" class="panel-collapse collapse">
-                      <div class="panel-body">
-                          {{#if view.failedItem.isTasksLoaded}}
-                            <div class="clear col-md-12">
-                                {{view App.upgradeTaskView contentBinding="view.taskDetails" outsideViewBinding="view.outsideView"}}
-                            </div>
-                          {{else}}
-                              {{view App.SpinnerView classNames="clear"}}
-                          {{/if}}
-                      </div>
-                    </div>
-                      {{#if view.isHoldingState}}
-                        <div class="button-row">
-                            {{#if view.isDowngradeAvailable}}
-                              <button
-                                class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.failedItem target="controller"}}>{{t common.downgrade}}</button>
-                            {{/if}}
-                            {{#if view.canSkipFailedItem}}
-                              <button
-                                class="btn btn-warning" {{bindAttr disabled="controller.requestInProgress"}} {{action continue view.failedItem target="view"}}>{{t admin.stackUpgrade.dialog.continue}}</button>
-                            {{/if}}
-                          <button
-                            class="btn btn-default" {{bindAttr disabled="controller.requestInProgress"}} {{action retry view.failedItem target="view"}}>{{t common.retry}}</button>
-                        </div>
-                      {{/if}}
-                  </div>
-                {{/unless}}
-            {{/if}}
-        {{#if view.plainManualItem}}
-          <div class="panel panel-default details-box">
-            <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
-            {{#if view.manualItem.messages.length}}
-              {{#each message in view.manualItem.messages}}
-                <p class="manual-steps-content">{{message}}</p>
-              {{/each}}
-            {{else}}
-              <p class="manual-steps-content">{{t admin.stackUpgrade.dialog.skipped.failures}}</p>
-            {{/if}}
-            <label class="message">
-              {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
-            </label>
-            <div class="button-row">
-              {{#if view.isDowngradeAvailable}}
-                <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
-              {{/if}}
-              <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
-                {{t common.proceed}}
-              </button>
-            </div>
-          </div>
-        {{/if}}
-        {{#if view.isFinalizeItem}}
-          <div class="panel panel-default details-box">
-            <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
-            {{#if isDowngrade}}
-              <p class="manual-steps-content">{{t admin.stackUpgrade.finalize.message.downgrade}}</p>
-            {{else}}
-                {{#if view.isRevertibleUpgrade}}
-                  <p class="manual-steps-content">{{{view.revertibleFinalizeMessage}}}</p>
-                {{else}}
-                  <p class="manual-steps-content">{{t admin.stackUpgrade.finalize.message.upgrade}}</p>
-                {{/if}}
-            {{/if}}
-              <p class="manual-steps-content"><strong>{{t admin.stackUpgrade.finalize.message.autoStart}}</strong></p>
-
-            {{#if areSkippedServiceChecksLoaded}}
-              {{#if skippedServiceChecks.length}}
-                <div>{{t admin.stackUpgrade.finalize.message.skippedServiceChecks}}</div>
-                <ul>
-                  {{#each serviceName in skippedServiceChecks}}
-                    <li>{{serviceName}}</li>
-                  {{/each}}
-                </ul>
-                <div>{{t admin.stackUpgrade.finalize.message.testServices}}</div>
-              {{/if}}
-            {{else}}
-              {{view App.SpinnerView}}
-            {{/if}}
-
-            <label class="message">
-              {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
-            </label>
-            <div class="button-row">
-              {{#if view.isDowngradeAvailable}}
-                <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
-              {{/if}}
-                <button class="btn btn-default" {{action confirmPauseUpgrade target="view"}}>{{t admin.stackUpgrade.finalize.later}}</button>
-                <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
-                  {{t common.finalize}}
-                </button>
-            </div>
-          </div>
-        {{/if}}
-        {{#if view.isSlaveComponentFailuresItem}}
-          <div class="panel panel-default details-box">
-            <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
-            <div class="slave-failures-info">
-            <p>
-              {{#if areSlaveComponentFailuresHostsLoaded}}
-                {{t admin.stackUpgrade.failedHosts.message}}
-                <a href="#" {{action showFailedHosts target="view"}}>{{view.failedHostsMessage}}</a>
-              {{else}}
-                {{view App.SpinnerView}}
-              {{/if}}
-                </p>
-                <p>
-                  {{t admin.stackUpgrade.failedHosts.options}}
-                <ul>
-                  {{#if view.isOutOfSync}}
-                    <li>{{t admin.stackUpgrade.failedHosts.isOutOfSync.options.first}}</li>
-                    <li>{{t admin.stackUpgrade.failedHosts.isOutOfSync.options.second}}</li>
-                  {{/if}}
-                  <li>{{t admin.stackUpgrade.failedHosts.options.first}}</li>
-                  {{#if view.isDowngradeAvailable}}
-                    <li>{{t admin.stackUpgrade.failedHosts.options.second}}</li>
-                  {{/if}}
-                </ul>
-                </p>
-            </div>
-            {{#unless view.isHoldingState}}
-              <label class="message">
-                {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
-              </label>
-            {{/unless}}
-            <div class="button-row">
-              {{#if view.isDowngradeAvailable}}
-                <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
-              {{/if}}
-              {{#if view.isHoldingState}}
-                <button class="btn btn-default" {{bindAttr disabled="controller.requestInProgress"}} {{action retry view.failedItem target="view"}}>{{t common.retry}}</button>
-              {{else}}
-              <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
-                {{t common.proceed}}
-              </button>
-              {{/if}}
-            </div>
-          </div>
-        {{/if}}
-        {{#if view.isServiceCheckFailuresItem}}
-          <div class="panel panel-default details-box">
-            <p class="manual-steps-title"><strong>{{t admin.stackUpgrade.dialog.manual}}</strong></p>
-
-            {{#if areServiceCheckFailuresServicenamesLoaded}}
-              {{#if serviceCheckFailuresServicenames.length}}
-                <div class="service-check-failures-info">
-                  <p class="service-check-failures-title"><strong>{{t admin.stackUpgrade.dialog.manual.serviceCheckFailures.title}}</strong></p>
-                  <div>{{t admin.stackUpgrade.dialog.manual.serviceCheckFailures.msg1}}</div>
-                  <ul class="failed-info-list">
-                    {{#each serviceName in serviceCheckFailuresServicenames}}
-                      <li>{{serviceName}}</li>
-                    {{/each}}
-                  </ul>
-                  <div>{{t admin.stackUpgrade.dialog.manual.serviceCheckFailures.msg2}}</div>
-                </div>
-              {{/if}}
-              {{#if slaveComponentStructuredInfo.hosts.length}}
-                <div class="slave-failures-info">
-                  <p class="slave-failures-title"><strong>{{t admin.stackUpgrade.dialog.manual.slaveComponentFailures.title}}</strong></p>
-                  <p>
-                    {{t admin.stackUpgrade.failedHosts.message}}
-                      <a href="#" {{action showFailedHosts target="view"}}>{{view.failedHostsMessage}}</a>
-                  </p>
-                  <p>
-                    {{t admin.stackUpgrade.failedHosts.options}}
-                  <ul>
-                    <li>{{t admin.stackUpgrade.failedHosts.options.first}}</li>
-                    <li>{{t admin.stackUpgrade.failedHosts.options.third}}</li>
-                    {{#if view.isDowngradeAvailable}}
-                      <li>{{t admin.stackUpgrade.failedHosts.options.second}}</li>
-                    {{/if}}
-                  </ul>
-                  </p>
-                </div>
-              {{/if}}
-            {{else}}
-                {{view App.SpinnerView}}
-            {{/if}}
-
-            <label class="message">
-              {{view App.CheckboxView checkedBinding="view.isManualDone" labelTranslate="admin.stackUpgrade.dialog.manualDone"}}
-            </label>
-            <div class="button-row">
-              {{#if view.isDowngradeAvailable}}
-                  <button class="btn btn-danger" {{bindAttr disabled="controller.requestInProgress"}} {{action confirmDowngrade view.manualItem target="controller"}}>{{t common.downgrade}}</button>
-              {{/if}}
-              <button class="btn btn-success" {{bindAttr disabled="view.isManualProceedDisabled"}} {{action complete view.manualItem target="view"}}>
-                {{t common.proceed}}
-              </button>
-            </div>
-          </div>
-        {{/if}}
-        {{#if view.noActiveItem}}
-          <div class="panel panel-default details-box">
-            <div>
-              {{t admin.stackUpgrade.dialog.notActive}}
-            </div>
-          </div>
-        {{/if}}
-        {{#if App.upgradeSuspended}}
-          <div class="panel panel-default details-box">
-            <label class="message">
-            {{#if isDowngrade}}
-              {{t admin.stackUpgrade.dialog.suspended.downgrade}}
-            {{else}}
-              {{t admin.stackUpgrade.dialog.suspended}}
-            {{/if}}
-            </label>
-            <div class="button-row">
-              {{#if isDowngrade}}
-                <button class="btn btn-primary" {{action resumeUpgrade target="controller"}}>
-                  {{t admin.stackUpgrade.dialog.resume.downgrade}}
-                </button>
-              {{else}}
-                <button class="btn btn-primary" {{action resumeUpgrade target="controller"}}>
-                  {{t admin.stackUpgrade.dialog.resume}}
-                </button>
-              {{/if}}
-            </div>
-          </div>
-        {{/if}}
-      </div>
-      {{#each group in view.upgradeGroups}}
-        {{#if group.isVisible}}
-          {{view App.upgradeGroupView contentBinding="group"}}
-        {{/if}}
-      {{/each}}
-    {{/if}}
-  </div>
-  {{#unless view.isLoaded}}
-    {{view App.SpinnerView}}
-  {{/unless}}
-</div>
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs
index b78ba5a..aecf410 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_merge_table.hbs
@@ -17,7 +17,7 @@
 }}
 
 <h4 class="configurations-changes-header">{{t popup.clusterCheck.Upgrade.configsMerge.title}}</h4>
-<a {{action openConfigsInNewWindow view.configs target="App.router.mainAdminStackAndUpgradeController"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
+<a {{action openConfigsInNewWindow view.configs target="view"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
   <i class="icon-external-link"></i> <span>{{t common.open}}</span>
 </a>
 <div class="alert alert-warning">
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs
index 8df3327..be0bfce 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_configs_recommend_table.hbs
@@ -17,7 +17,7 @@
 }}
 
 <h4 class="configurations-changes-header">{{t popup.clusterCheck.Upgrade.configsRecommend.title}}</h4>
-<a {{action openConfigsInNewWindow view.configs target="App.router.mainAdminStackAndUpgradeController"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
+<a {{action openConfigsInNewWindow view.configs target="view"}} {{translateAttr title="common.openNewWindow"}} class="pull-right open-in-new-window" href="#">
   <i class="icon-external-link"></i> <span id="i18n-34">{{t common.open}}</span>
 </a>
 <div class="alert alert-warning">
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs
deleted file mode 100644
index d40483d..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_box.hbs
+++ /dev/null
@@ -1,116 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-{{#if view.isOutOfSync}}
-  <i class="glyphicon glyphicon-exclamation-sign out-of-sync-badge"></i>
-{{/if}}
-
-<p {{bindAttr class=":version view.isRepoUrlsEditDisabled:not-active-link"}}>
-  <span>{{view.content.displayName}}</span>
-  <a class="pull-right not-active link-tooltip" {{action editRepositories target="view"}}>
-    <i class="glyphicon glyphicon-edit"></i>
-  </a>
-</p>
-<p class="repository-name">({{view.content.repositoryVersion}})</p>
-
-<p class="patch-icon">
-  {{#if view.content.isMaint}}
-    <i class="icon-wrench"></i>&nbsp;{{t common.maint}}
-  {{/if}}
-  {{#if view.content.isPatch}}
-    <i class="icon-bug"></i>&nbsp;{{t common.patch}}
-  {{/if}}
-  {{#if view.content.isService}}
-    <i class="icon-umbrella"></i>&nbsp;{{t common.service}}
-  {{/if}}
-</p>
-
-
-<div {{bindAttr class="view.stateElement.isInstalling:installing :align-center :state :repo-version-tooltip"}}>
-  {{#if view.stateElement.isButton}}
-    <button class="btn btn-primary"
-      {{action runAction target="view"}}
-      {{bindAttr disabled="view.stateElement.isDisabled"}}>
-      {{view.stateElement.text}}
-    </button>
-  {{/if}}
-  {{#if view.stateElement.isButtonGroup}}
-    <div class="btn-group">
-      <button class="btn btn-primary"
-        {{action runAction target="view"}}
-        {{bindAttr disabled="view.stateElement.isDisabled"}}>
-        {{view.stateElement.text}}
-      </button>
-      <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" {{bindAttr disabled="view.stateElement.isDisabled"}}>
-        <span class="caret"></span>
-      </button>
-      <ul class="dropdown-menu">
-        {{#each button in view.stateElement.buttons}}
-          <li {{bindAttr class="button.isDisabled:disabled"}}>
-            <a {{action runAction button.action target="view"}}>
-              {{button.text}}
-            </a>
-          </li>
-        {{/each}}
-      </ul>
-    </div>
-  {{/if}}
-  {{#if view.stateElement.isLabel}}
-    <span {{bindAttr class="view.stateElement.class"}}>{{view.stateElement.text}}</span>
-  {{/if}}
-  {{#if view.stateElement.isLink}}
-    {{#if view.stateElement.iconClass}}
-      <i {{bindAttr class="view.stateElement.iconClass" disabled="view.stateElement.isDisabled"}}></i>
-    {{/if}}
-    <a href="#" {{action runAction target="view"}}
-        {{bindAttr disabled="view.stateElement.isDisabled"}}>{{view.stateElement.text}}</a>
-    {{#if view.stateElement.isInstalling}}
-      {{view App.ProgressBarView
-        progressBinding="view.installProgress"
-        statusBinding="view.PROGRESS_STATUS"
-      }}
-    {{/if}}
-  {{/if}}
-  {{#if view.stateElement.isSpinner}}
-    {{view App.SpinnerView}}
-  {{/if}}
-</div>
-
-<div class="hosts-section">
-  <div class="hosts-bar">{{t common.hosts}}</div>
-  <div class="row host-link">
-    <div class="col-md-4 align-center not-installed-hosts">
-      <div><a href="#" class="hosts-tooltip not-active" {{bindAttr data-original-title="view.content.noInitHostsTooltip" }}
-        {{action showHosts view.versionStateMap.not_installed target="view"}}>
-        {{view.notInstalledHosts.length}}</a></div>
-      <div>{{t admin.stackVersions.version.notInstalled}}</div>
-    </div>
-    <div class="col-md-4 align-center installed-hosts">
-      <div><a href="#" class="hosts-tooltip not-active" {{bindAttr data-original-title="view.content.noInstalledHostsTooltip" }}
-        {{action showHosts view.versionStateMap.installed target="view"}}>
-        {{view.installedHosts.length}}</a></div>
-      <div>{{t common.installed}}</div>
-    </div>
-    <div class="col-md-4 align-center current-hosts">
-      <div><a href="#" class="hosts-tooltip not-active" {{bindAttr data-original-title="view.content.noCurrentHostsTooltip" }}
-        {{action showHosts view.versionStateMap.current target="view"}}>
-        {{view.currentHosts.length}}</a></div>
-      <div>{{t common.current}}</div>
-    </div>
-  </div>
-</div>
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_column.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_column.hbs
deleted file mode 100644
index bfeae65..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_version_column.hbs
+++ /dev/null
@@ -1,121 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-{{#if view.isOutOfSync}}
-  <i class="glyphicon glyphicon-exclamation-sign out-of-sync-badge"></i>
-{{/if}}
-
-<p class="version-column-display-name">
-  {{#if view.content.isStandard}}
-    <span>{{view.content.displayNameSimple}}</span>
-  {{else}}
-    <span>{{view.content.displayName}}</span>
-  {{/if}}
-</p>
-
-<p class="version-column-display-type">
-  {{#if view.content.isMaint}}
-    <i class="icon-wrench"></i>&nbsp;{{t common.maint}}
-  {{/if}}
-  {{#if view.content.isPatch}}
-    <i class="icon-bug"></i>&nbsp;{{t common.patch}}
-  {{/if}}
-  {{#if view.content.isService}}
-    <i class="icon-umbrella"></i>&nbsp;{{t common.service}}
-  {{/if}}
-</p>
-
-<p class="version-column-show-details">
-  <a {{action openVersionBoxPopup target="view"}}>{{t admin.stackVersions.version.column.showDetails}}</a>
-</p>
-<div {{bindAttr class="view.stateElement.isInstalling:installing :align-center :state :repo-version-tooltip"}}>
-  {{#if view.stateElement.isButton}}
-    <button class="btn btn-primary"
-      {{action runAction target="view"}}
-      {{bindAttr disabled="view.stateElement.isDisabled"}}>
-      {{view.stateElement.text}}
-    </button>
-  {{/if}}
-  {{#if view.stateElement.isButtonGroup}}
-    <div class="btn-group">
-      <button class="btn btn-primary"
-        {{action runAction target="view"}}
-        {{bindAttr disabled="view.stateElement.isDisabled"}}>
-        {{view.stateElement.text}}
-      </button>
-      <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" {{bindAttr disabled="view.stateElement.isDisabled"}}>
-        <span class="caret"></span>
-      </button>
-      <ul class="dropdown-menu">
-        {{#each button in view.stateElement.buttons}}
-          <li {{bindAttr class="button.isDisabled:disabled"}}>
-            <a {{action runAction button.action target="view"}}>
-              {{button.text}}
-            </a>
-          </li>
-        {{/each}}
-      </ul>
-    </div>
-  {{/if}}
-  {{#if view.stateElement.isLabel}}
-    <div class="label-wrapper">
-      <span {{bindAttr class="view.stateElement.class"}}>{{view.stateElement.text}}</span>
-      {{#if view.stateElement.canBeReverted}}
-        <button class="btn dropdown-toggle" data-toggle="dropdown">
-          <span class="caret"></span>
-        </button>
-        <ul class="dropdown-menu">
-          <li>
-            <a {{action runAction view.stateElement.action target="view"}}>
-              {{view.stateElement.actionText}}
-            </a>
-          </li>
-        </ul>
-      {{/if}}
-    </div>
-  {{/if}}
-  {{#if view.stateElement.isLink}}
-    {{#if view.stateElement.iconClass}}
-      <i {{bindAttr class="view.stateElement.iconClass" disabled="view.stateElement.isDisabled"}}></i>
-    {{/if}}
-    <a href="#" {{action runAction target="view"}}
-        {{bindAttr disabled="view.stateElement.isDisabled"}}>{{view.stateElement.text}}</a>
-    {{#if view.stateElement.isInstalling}}
-      {{view App.ProgressBarView
-          progressBinding="view.installProgress"
-          statusBinding="view.PROGRESS_STATUS"
-          }}
-    {{/if}}
-  {{/if}}
-  {{#if view.stateElement.isSpinner}}
-    {{view App.SpinnerView}}
-  {{/if}}
-</div>
-
-<div class="services-section">
-  {{#each service in view.services}}
-    <p class="service-version-info">
-       <span {{bindAttr class="service.isVersionInvisible:invisible service.isAvailable:available :label"}}>
-           {{service.latestVersion}}
-       </span>
-        {{#if service.notUpgradable}}
-          <i class="icon-info-sign not-upgradable"></i>
-        {{/if}}
-    </p>
-  {{/each}}
-</div>
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs
deleted file mode 100644
index 47f9a2d..0000000
--- a/ambari-web/app/templates/main/admin/stack_upgrade/versions.hbs
+++ /dev/null
@@ -1,71 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div id="versions-filter-section" class="btn-toolbar">
-  {{#havePermissions "AMBARI.MANAGE_STACK_VERSIONS"}}
-    <button class="btn btn-primary" {{action goToVersions target="view"}}  {{bindAttr disabled="App.router.wizardWatcherController.isNonWizardUser"}} id="manage-versions-link">
-        <i class="icon-external-link"></i>&nbsp;{{t admin.stackVersions.manageVersions}}
-    </button>
-  {{/havePermissions}}
-  <div class="btn-group display-inline-block">
-    <button class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
-      <span class="filters-label">{{t common.filter}}: </span>
-        <span>
-          {{view.selectedCategory.label}}
-          <span class="caret"></span>
-        </span>
-    </button>
-    <ul class="dropdown-menu">
-      {{#each category in view.categories}}
-        <li>
-          <a {{action selectCategory category target="view"}} href="#">
-            {{category.label}}
-          </a>
-        </li>
-      {{/each}}
-    </ul>
-  </div>
-</div>
-<div id="versions-section" class="row col-md-12">
-  <div class="col-md-3 left-menu-table">
-    <table class="table border-extended-table">
-      <thead>
-      </thead>
-      <tbody>
-        {{#each service in view.services}}
-          <tr>
-            <td class="service-display-name">{{service.displayName}}</td>
-          </tr>
-        {{/each}}
-      </tbody>
-    </table>
-  </div>
-  <div class="col-md-9 versions-slides">
-    {{#if isLoaded}}
-      <div class="versions-slides-bar">
-        {{#each version in view.repoVersions}}
-          {{#if version.isVisible}}
-            {{view App.UpgradeVersionColumnView contentBinding="version"}}
-          {{/if}}
-        {{/each}}
-      </div>
-    {{else}}
-      {{view App.SpinnerView}}
-    {{/if}}
-  </div>
-</div>
diff --git a/ambari-web/app/templates/main/host/stack_versions.hbs b/ambari-web/app/templates/main/host/stack_versions.hbs
index cf167a4..5cc7ee3 100644
--- a/ambari-web/app/templates/main/host/stack_versions.hbs
+++ b/ambari-web/app/templates/main/host/stack_versions.hbs
@@ -43,13 +43,9 @@
           {{#if version.isCurrent}}
             <span class="label label-success">{{t common.current}}</span>
           {{else}}
-            {{#if version.isInstalling}}
-              <a href="#" {{action showInstallProgress version target="view"}}><i class="glyphicon glyphicon-cog in_progress"></i>&nbsp;{{version.displayStatus}}</a>
-            {{else}}
-              {{version.displayStatus}}
-              {{#if version.isOutOfSync}}
-                {{view view.outOfSyncInfo}}
-              {{/if}}
+            {{version.displayStatus}}
+            {{#if version.isOutOfSync}}
+              {{view view.outOfSyncInfo}}
             {{/if}}
           {{/if}}
         </td>
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index fbc26ae..d288030 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1867,47 +1867,6 @@ var urls = {
     'mock': ''
   },
 
-  'admin.stack_versions.edit.repo': {
-    'real': '/stacks/{stackName}/versions/{stackVersion}/repository_versions/{repoVersionId}',
-    'mock': '',
-    'type': 'PUT',
-    'format': function (data) {
-      return {
-        data: JSON.stringify(data.repoVersion)
-      }
-    }
-  },
-  'admin.stack_versions.validate.repo': {
-    'real': '/stacks/{stackName}/versions/{stackVersion}/operating_systems/{osType}/repositories/{repoId}?validate_only=true',
-    'mock': '',
-    'type': 'POST',
-    'format': function (data) {
-      return {
-        data: JSON.stringify({
-          "Repositories": {
-            "base_url": data.baseUrl,
-            "repo_name": data.repoName
-          }
-        })
-      }
-    }
-  },
-
-  'admin.stack_versions.discard': {
-    'real': '/stacks/{stackName}/versions/{stackVersion}/repository_versions/{id}',
-    'mock': '',
-    'type': 'PUT',
-    'format': function (data) {
-      return {
-        data: JSON.stringify({
-          "RepositoryVersions":{
-            "hidden": "true"
-          }
-        })
-      }
-    }
-  },
-
   'admin.upgrade.pre_upgrade_check': {
     'real': '/clusters/{clusterName}/rolling_upgrades_check?fields=*&UpgradeChecks/repository_version_id={id}&UpgradeChecks/upgrade_type={type}',
     'mock': '/data/stack_versions/pre_upgrade_check.json'
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index 163484e..92156b5 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -231,18 +231,11 @@ require('views/main/admin/serviceAccounts_view');
 require('views/main/admin/serviceGroups_view');
 require('views/main/admin/serviceGroups/upgradeStatus_view');
 require('views/main/admin/serviceGroups/serviceGroup_view');
-require('views/main/admin/stack_upgrade/upgrade_wizard_view');
-require('views/main/admin/stack_upgrade/upgrade_version_box_view');
-require('views/main/admin/stack_upgrade/upgrade_version_column_view');
 require('views/main/admin/stack_upgrade/upgrade_group_view');
 require('views/main/admin/stack_upgrade/upgrade_task_view');
 require('views/main/admin/stack_upgrade/upgrade_history_view');
 require('views/main/admin/stack_upgrade/upgrade_history_details_view');
-require('views/main/admin/stack_upgrade/services_view');
-require('views/main/admin/stack_upgrade/versions_view');
-require('views/main/admin/stack_upgrade/menu_view');
 require('views/main/admin/stack_upgrade/failed_hosts_modal_view');
-require('views/main/admin/stack_and_upgrade_view');
 require('views/main/admin/mpack_upgrade_view');
 require('views/main/admin/mpack_upgrade_view');
 require('views/main/admin/mpackUpgrade/downloadOptions_view');
diff --git a/ambari-web/app/views/common/modal_popups/cluster_check_popup.js b/ambari-web/app/views/common/modal_popups/cluster_check_popup.js
index bef3c90..01f77ce 100644
--- a/ambari-web/app/views/common/modal_popups/cluster_check_popup.js
+++ b/ambari-web/app/views/common/modal_popups/cluster_check_popup.js
@@ -88,16 +88,50 @@ App.showClusterCheckPopup = function (data, popup, configs) {
   });
 };
 
+/**
+ * Build table from configs list and open new window to show this table
+ * @param configs
+ */
+function openConfigsInNewWindow(configs) {
+  var newWindow;
+  var output = '';
+
+  output += '<table style="text-align: left;"><thead><tr>' +
+      '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.configType') + '</th>' +
+      '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.propertyName') + '</th>' +
+      '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.currentValue') + '</th>' +
+      '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.recommendedValue') + '</th>' +
+      '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.resultingValue') + '</th>' +
+      '</tr></thead><tbody>';
+
+  configs.context.forEach(function (config) {
+    output += '<tr>' +
+        '<td>' + config.type + '</td>' +
+        '<td>' + config.name + '</td>' +
+        '<td>' + config.currentValue + '</td>' +
+        '<td>' + config.recommendedValue + '</td>' +
+        '<td>' + config.resultingValue + '</td>' +
+        '</tr>';
+  });
+
+  output += '</tbody></table>';
+  newWindow = window.open();
+  newWindow.document.write(output);
+  newWindow.focus();
+};
+
 App.getMergeConflictsView = function (configs) {
   return Em.View.extend({
     templateName: require('templates/main/admin/stack_upgrade/upgrade_configs_merge_table'),
-    configs: configs
+    configs: configs,
+    openConfigsInNewWindow: openConfigsInNewWindow
   });
 };
 
 App.getNewStackRecommendationsView = function (configs) {
   return Em.View.extend({
     templateName: require('templates/main/admin/stack_upgrade/upgrade_configs_recommend_table'),
-    configs: configs
+    configs: configs,
+    openConfigsInNewWindow: openConfigsInNewWindow
   });
 };
diff --git a/ambari-web/app/views/main/admin.js b/ambari-web/app/views/main/admin.js
index 05d0f56..c132a16 100644
--- a/ambari-web/app/views/main/admin.js
+++ b/ambari-web/app/views/main/admin.js
@@ -23,13 +23,6 @@ App.MainAdminView = Em.View.extend({
   selectedBinding: 'controller.category',
   categories: function() {
     var items = [];
-    if(App.isAuthorized('CLUSTER.VIEW_STACK_DETAILS, CLUSTER.UPGRADE_DOWNGRADE_STACK') || (App.get('upgradeInProgress') || App.get('upgradeHolding'))) {
-      items.push({
-        name: 'stackAndUpgrade',
-        url: 'stackAndUpgrade.index',
-        label: Em.I18n.t('admin.stackUpgrade.title')
-      });
-    }
     if(App.isAuthorized('SERVICE.SET_SERVICE_USERS_GROUPS') || (App.get('upgradeInProgress') || App.get('upgradeHolding'))) {
       items.push({
         name: 'adminServiceAccounts',
diff --git a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js b/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
deleted file mode 100644
index 09e34b0..0000000
--- a/ambari-web/app/views/main/admin/stack_and_upgrade_view.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainAdminStackAndUpgradeView = Em.View.extend({
-  templateName: require('templates/main/admin/stack_and_upgrade')
-});
-
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/menu_view.js b/ambari-web/app/views/main/admin/stack_upgrade/menu_view.js
deleted file mode 100644
index b3a9df8..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/menu_view.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainAdminStackMenuView = Em.CollectionView.extend({
-  tagName: 'ul',
-  classNames: ["nav", "nav-tabs", "background-text"],
-  defaultRoute: 'services',
-
-  content: function () {
-    return [
-      Em.Object.create({
-        name: 'services',
-        label: Em.I18n.t('common.stack'),
-        routing: 'services'
-      }),
-      Em.Object.create({
-        name: 'versions',
-        label: Em.I18n.t('common.versions'),
-        routing: 'versions',
-        hidden: !App.get('stackVersionsAvailable')
-      }),
-      Em.Object.create({
-        name: 'upgradeHistory',
-        label: Em.I18n.t('common.upgrade.history'),
-        routing: 'upgradeHistory',
-        hidden: !App.get('upgradeHistoryAvailable')
-      })
-    ]
-  }.property('App.stackVersionsAvailable'),
-
-  didInsertElement: function () {
-    this.activateView();
-  },
-
-  activateView: function () {
-    var defaultRoute = App.router.get('currentState.name') || this.get('defaultRoute');
-    $.each(this._childViews, function () {
-      this.set('active', (this.get('content.routing') == defaultRoute) ? "active" : "");
-    });
-  },
-
-  deactivateChildViews: function () {
-    $.each(this._childViews, function () {
-      this.set('active', "");
-    });
-  },
-
-  itemViewClass: Em.View.extend({
-    classNameBindings: ["active"],
-    active: "",
-    template: Ember.Handlebars.compile('{{#unless view.content.hidden}}<a {{action stackNavigate view.content.routing }} href="#"> {{unbound view.content.label}}</a>{{/unless}}')
-  })
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
deleted file mode 100644
index 257087d..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-var App = require('app');
-
-App.MainAdminStackServicesView = Em.View.extend({
-  templateName: require('templates/main/admin/stack_upgrade/services'),
-
-  isAddServiceAvailable: function () {
-    return App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK');
-  }.property('App.supports.opsDuringRollingUpgrade', 'App.upgradeState', 'App.isAdmin'),
-
-  /**
-   * @type {Array}
-   */
-  services: function() {
-    var services = App.supports.installGanglia ? App.StackService.find() : App.StackService.find().without(App.StackService.find('GANGLIA'));
-    var controller = this.get('controller');
-    controller.loadServiceVersionFromVersionDefinitions().complete(function () {
-      return services.map(function(s) {
-        s.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[s.get('serviceName')]);
-        s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName')));
-        return s;
-      });
-    });
-    return services;
-  }.property('App.router.clusterController.isLoaded'),
-
-  didInsertElement: function () {
-    if (!App.get('stackVersionsAvailable')) {
-      this.get('controller').loadStackVersionsToModel(true).done(function () {
-        App.set('stackVersionsAvailable', App.StackVersion.find().content.length > 0);
-      });
-      this.get('controller').loadRepositories();
-    }
-  },
-
-  /**
-   * launch Add Service wizard
-   * @param event
-   */
-  goToAddService: function (event) {
-    if (!App.isAuthorized('SERVICE.ADD_DELETE_SERVICES') || !App.supports.enableAddDeleteServices) {
-      return;
-    } else if (event.context == "KERBEROS") {
-      App.router.get('mainAdminKerberosController').checkAndStartKerberosWizard();
-      App.router.get('kerberosWizardController').setDBProperty('onClosePath', 'main.admin.stackAndUpgrade.services');
-    } else {
-      App.router.get('addServiceController').set('serviceToInstall', event.context);
-      App.router.get('addServiceController').setDBProperty('onClosePath', 'main.admin.stackAndUpgrade.services');
-      App.get('router').transitionTo('main.serviceAdd');
-    }
-  },
-
-  /**
-   * List of all repo-groups
-   * @type {Object[][]}
-   */
-  allRepositoriesGroups: function () {
-    var repos = this.get('controller.allRepos');
-    var reposGroup = [];
-    var repositories = [];
-    reposGroup.set('stackVersion', App.get('currentStackVersionNumber'));
-    if (repos) {
-      repos.forEach(function (group) {
-        group.repositories.forEach (function(repo) {
-          var cur_repo = Em.Object.create({
-            'repoId': repo.repoId,
-            'id': repo.repoId + '-' + repo.osType,
-            'repoName' : repo.repoName,
-            'stackName' : repo.stackName,
-            'stackVersion' : repo.stackVersion,
-            'baseUrl': repo.baseUrl,
-            'originalBaseUrl': repo.baseUrl,
-            'osType': repo.osType,
-            'onEdit': false,
-            'empty-error': !repo.baseUrl,
-            'undo': false,
-            'clearAll': repo.baseUrl
-          });
-          var cur_group = reposGroup.findProperty('name', group.name);
-          if (!cur_group) {
-            cur_group = Ember.Object.create({
-              name: group.name,
-              repositories: []
-            });
-            reposGroup.push(cur_group);
-          }
-          cur_group.repositories.push(cur_repo);
-          repositories.push(cur_repo);
-        });
-      });
-    }
-    this.set('allRepos', repositories);
-    return reposGroup;
-  }.property('controller.allRepos'),
-
-  /**
-   * Onclick handler for edit action of each repo, enter edit mode
-   * @param {object} event
-   */
-  onEditClick:function (event) {
-    var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
-    if (targetRepo) {
-      targetRepo.set('onEdit', true);
-    }
-  },
-
-  /**
-   * Handler for clear icon click
-   * @method clearGroupLocalRepository
-   * @param {object} event
-   */
-  clearGroupLocalRepository: function (event) {
-    this.doActionForGroupLocalRepository(event, '');
-  },
-
-  /**
-   * Common handler for repo groups actions
-   * @method doActionForGroupLocalRepository
-   * @param {object} event
-   * @param {string} newBaseUrlField
-   */
-  doActionForGroupLocalRepository: function (event, newBaseUrlField) {
-    var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
-    if (targetRepo) {
-      targetRepo.set('baseUrl', Em.isEmpty(newBaseUrlField) ? '' : Em.get(targetRepo, newBaseUrlField));
-    }
-  },
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
deleted file mode 100644
index c0786a3..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
+++ /dev/null
@@ -1,635 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-App.UpgradeVersionBoxView = Em.View.extend({
-  templateName: require('templates/main/admin/stack_upgrade/upgrade_version_box'),
-  classNames: ['version-box'],
-  classNameBindings: ['versionClass'],
-
-  /**
-   * @type {string}
-   * @constant
-   */
-  PROGRESS_STATUS: 'IN_PROGRESS',
-
-  /**
-   * @type {boolean}
-   */
-  upgradeCheckInProgress: false,
-
-  /**
-   * progress of version installation
-   * @type {number}
-   */
-  installProgress: function() {
-    if (App.get('testMode')) return 100;
-
-    var installRequest, requestIds = this.get('controller').getRepoVersionInstallId();
-    if (requestIds) {
-      installRequest = App.router.get('backgroundOperationsController.services').findProperty('id', requestIds[0]);
-    }
-    return (installRequest) ? installRequest.get('progress') : 0;
-  }.property('App.router.backgroundOperationsController.serviceTimestamp'),
-
-  /**
-   * version is upgrading or downgrading
-   * @type {boolean}
-   */
-  isUpgrading: function () {
-    return (this.get('controller.upgradeVersion') === this.get('content.displayName') ||
-            this.get('controller.fromVersion') === this.get('content.repositoryVersion'))
-            && App.get('upgradeState') !== 'NOT_REQUIRED';
-  }.property('App.upgradeState', 'content.displayName', 'controller.upgradeVersion'),
-
-  isRepoUrlsEditDisabled: function () {
-    return ['INSTALLING', 'UPGRADING'].contains(this.get('content.status')) || this.get('isUpgrading') || (!App.isAuthorized('AMBARI.MANAGE_STACK_VERSIONS'));
-  }.property('content.status', 'isUpgrading'),
-
-  /**
-   * @type {string}
-   */
-  versionClass: function () {
-    return this.get('content.status') === 'CURRENT' ? 'current-version-box' : '';
-  }.property('content.status'),
-
-  /**
-   * @type {boolean}
-   */
-  isOutOfSync: Em.computed.equal('content.status', 'OUT_OF_SYNC'),
-
-  /**
-   * map containing version (id, label)
-   * this is used as param for <code>showHosts<code> method
-   * @type {Object}
-   */
-  versionStateMap: {
-    'current': {
-      'type': 'CURRENT',
-      'value': ['CURRENT'],
-      'property': 'currentHosts',
-      'label': Em.I18n.t('admin.stackVersions.hosts.popup.header.current')
-    },
-    'installed': {
-      'type': 'INSTALLED',
-      'value': ['INSTALLED'],
-      'property': 'installedHosts',
-      'label': Em.I18n.t('admin.stackVersions.hosts.popup.header.installed')
-    },
-    'not_installed': {
-      'type': 'NOT_INSTALLED',
-      'value': ['INSTALLING', 'INSTALL_FAILED', 'OUT_OF_SYNC'],
-      'property': 'notInstalledHosts',
-      'label': Em.I18n.t('admin.stackVersions.hosts.popup.header.not_installed')
-    }
-  },
-
-  /**
-   * @type {object}
-   * @default null
-   */
-  content: null,
-
-  /**
-   * map of properties which correspond to particular state of Upgrade version
-   * @type {object}
-   */
-  statePropertiesMap: {
-    'CURRENT': {
-      isLabel: true,
-      text: Em.I18n.t('common.current'),
-      class: 'label label-success'
-    },
-    'NOT_REQUIRED': {
-      isButton: true,
-      text: Em.I18n.t('admin.stackVersions.version.installNow'),
-      action: 'installRepoVersionPopup'
-    },
-    'LOADING': {
-      isSpinner: true,
-      class: 'spinner'
-    },
-    'INSTALLING': {
-      iconClass: 'glyphicon glyphicon-cog',
-      isLink: true,
-      text: Em.I18n.t('hosts.host.stackVersions.status.installing'),
-      action: 'showProgressPopup'
-    },
-    'INSTALLED': {
-      iconClass: 'glyphicon glyphicon-ok',
-      isButtonGroup: true,
-      text: Em.I18n.t('common.installed'),
-      action: null
-    },
-    'SUSPENDED': {
-      isButton: true,
-      text: Em.I18n.t('admin.stackUpgrade.dialog.resume'),
-      action: 'resumeUpgrade'
-    },
-    'CURRENT_PATCH': {
-      isLabel: true,
-      text: Em.I18n.t('common.current'),
-      class: 'label label-success'
-    }
-  },
-
-  /**
-   * object that describes how content should be displayed
-   * @type {Em.Object}
-   * TODO remove <code>isUpgrading</code> condition when transition of version states in API fixed
-   */
-  stateElement: function () {
-    var statePropertiesMap = this.get('statePropertiesMap');
-    var status = this.get('content.status');
-    var element = Em.Object.create({
-      status: status,
-      isInstalling: Em.computed.equal('status', 'INSTALLING'),
-      buttons: [],
-      isDisabled: false
-    });
-    var isSuspended = App.get('upgradeSuspended');
-
-    if (status === 'CURRENT' && this.get('content.isPatch') && !this.get('isUpgrading')) {
-      element.setProperties(statePropertiesMap['CURRENT_PATCH']);
-      element.set('canBeReverted', this.get('content.stackVersion').get('supportsRevert'));
-      element.set('action', 'confirmRevertPatchUpgrade');
-      element.set('actionText', Em.I18n.t('common.revert'));
-    }
-    else if (['INSTALLING', 'CURRENT'].contains(status) && !this.get('content.isPatch')) {
-      element.setProperties(statePropertiesMap[status]);
-    }
-    else if (status === 'NOT_REQUIRED') {
-      this.processNotRequiredState(element);
-    }
-    else if ((status === 'INSTALLED' && !this.get('isUpgrading')) || (['INSTALL_FAILED', 'OUT_OF_SYNC'].contains(status))) {
-      this.processPreUpgradeState(element);
-    }
-    else if (this.get('isUpgrading') && !isSuspended) {
-      this.processUpgradingState(element);
-    }
-    else if (isSuspended) {
-      this.processSuspendedState(element);
-    }
-    //For restricted upgrade wizard should be disabled in any state
-    if (this.get('controller.isWizardRestricted') || (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK'))) {
-      element.set('isDisabled', true);
-    }
-    return element;
-  }.property(
-    'content.status',
-    'controller.isDowngrade',
-    'isUpgrading',
-    'controller.requestInProgress',
-    'controller.requestInProgressRepoId',
-    'parentView.repoVersions.@each.status',
-    'isCurrentStackPresent'
-  ),
-
-  /**
-   * check if actions of NOT_REQUIRED stack version disabled
-   * @returns {boolean}
-   */
-  isDisabledOnInit: function() {
-    return  this.get('controller.requestInProgress') ||
-            !this.get('isCurrentStackPresent') ||
-            !this.get('content.isCompatible') ||
-            (App.get('upgradeIsRunning') && !App.get('upgradeSuspended')) ||
-            this.get('parentView.repoVersions').someProperty('status', 'INSTALLING');
-  },
-
-  /**
-   * @param {Em.Object} element
-   */
-  processSuspendedState: function(element) {
-    element.setProperties(this.get('statePropertiesMap')['SUSPENDED']);
-    var text = this.get('controller.isDowngrade')
-      ? Em.I18n.t('admin.stackUpgrade.dialog.resume.downgrade')
-      : Em.I18n.t('admin.stackUpgrade.dialog.resume');
-    element.set('text', this.get('isVersionColumnView') ? Em.I18n.t('common.resume'): text);
-    element.set('isDisabled', this.get('controller.requestInProgress'));
-  },
-
-  /**
-   * @param {Em.Object} element
-   */
-  processUpgradingState: function(element) {
-    element.set('isLink', true);
-    element.set('action', 'openUpgradeDialog');
-    if (['HOLDING', 'HOLDING_FAILED', 'HOLDING_TIMEDOUT', 'ABORTED'].contains(App.get('upgradeState'))) {
-      element.set('iconClass', 'glyphicon glyphicon-pause');
-      if (this.get('controller.isDowngrade')) {
-        element.set('text', Em.I18n.t('admin.stackVersions.version.downgrade.pause'));
-      }
-      else {
-        element.set('text', Em.I18n.t('admin.stackVersions.version.upgrade.pause'));
-      }
-    }
-    else {
-      element.set('iconClass', 'glyphicon glyphicon-cog');
-      if (this.get('controller.isDowngrade')) {
-        element.set('text', Em.I18n.t('admin.stackVersions.version.downgrade.running'));
-      }
-      else {
-        element.set('text', Em.I18n.t('admin.stackVersions.version.upgrade.running'));
-      }
-    }
-  },
-
-  /**
-   * @param {Em.Object} element
-   */
-  processPreUpgradeState: function(element) {
-    var currentVersion = this.get('controller.currentVersion');
-    var status = this.get('content.status');
-    var isVersionHigherThanCurrent = stringUtils.compareVersions(
-        this.get('content.repositoryVersion'),
-        Em.get(currentVersion, 'repository_version')
-      ) === 1;
-    var isDisabled = this.isDisabledOnInstalled();
-    if (Em.get(currentVersion, 'stack_name') !== this.get('content.stackVersionType') || isVersionHigherThanCurrent) {
-      switch (status){
-        case 'OUT_OF_SYNC':
-          element.set('isButton', true);
-          element.set('text', this.get('isVersionColumnView') ? Em.I18n.t('common.reinstall') : Em.I18n.t('admin.stackVersions.version.reinstall'));
-          element.set('action', 'installRepoVersionPopup');
-          break;
-        case 'INSTALL_FAILED':
-          element.set('isButton', true);
-          element.set('text', this.get('isVersionColumnView') ? Em.I18n.t('common.reinstall') : Em.I18n.t('admin.stackVersions.version.reinstall'));
-          element.set('action', 'installRepoVersionPopup');
-          break;
-        default:
-          var isVersionColumnView = this.get('isVersionColumnView');
-          var stackServices = this.get('content.stackServices');
-          var isUpgradable = stackServices && (this.get('content.isStandard') || stackServices.some( function(stackService){
-              return stackService.get('isUpgradable');
-          }));
-          var isPatch = this.get('content.isPatch');
-          var isMaint = this.get('content.isMaint');
-
-          element.set('isButtonGroup', true);
-          if (isUpgradable){
-            element.set('text', isVersionColumnView ? Em.I18n.t('common.upgrade') : Em.I18n.t('admin.stackVersions.version.performUpgrade'));
-            element.set('action', 'confirmUpgrade');
-            element.get('buttons').pushObject({
-              text: isVersionColumnView ? Em.I18n.t('common.reinstall') : Em.I18n.t('admin.stackVersions.version.reinstall'),
-              action: 'installRepoVersionPopup',
-              isDisabled: isDisabled
-            });
-
-            element.get('buttons').pushObject({
-              text: Em.I18n.t('admin.stackVersions.version.preUpgradeCheck'),
-              action: 'showUpgradeOptions',
-              isDisabled: isDisabled
-            });
-          }
-          else{
-            element.set('iconClass', 'icon-ok');
-            element.set('text', Em.I18n.t('common.installed'))
-          }
-
-          if ( isPatch || isMaint ) {
-            element.get('buttons').pushObject({
-              text: Em.I18n.t('common.hide'),
-              action: 'confirmDiscardRepoVersion',
-              isDisabled: isDisabled
-            });
-          }
-
-      }
-      element.set('isDisabled', isDisabled);
-    }
-    else {
-      element.setProperties(this.get('statePropertiesMap')['INSTALLED']);
-      if (this.get('content.isPatch') || this.get('content.isMaint')) {
-        element.get('buttons').pushObject({
-          text: Em.I18n.t('common.hide'),
-          action: 'confirmDiscardRepoVersion',
-          isDisabled: isDisabled
-        });
-      }
-    }
-  },
-
-  /**
-   * @param {Em.Object} element
-   */
-  processNotRequiredState: function(element) {
-    var isDisabledOnInit = this.isDisabledOnInit();
-    var requestInProgressRepoId = this.get('controller.requestInProgressRepoId');
-    var status = this.get('content.status');
-
-    if (requestInProgressRepoId && requestInProgressRepoId === this.get('content.id')) {
-      element.setProperties(this.get('statePropertiesMap')['LOADING']);
-    } else {
-      element.setProperties(this.get('statePropertiesMap')[status]);
-    }
-    element.set('isDisabled', isDisabledOnInit);
-    element.set('isButtonGroup', true);
-    element.set('isButton', false);
-    element.get('buttons').pushObject({
-      text: Em.I18n.t('common.hide'),
-      action: 'confirmDiscardRepoVersion',
-      isDisabled: isDisabledOnInit
-    });
-  },
-
-  /**
-   * check if actions of INSTALLED stack version disabled
-   * @returns {boolean}
-   */
-  isDisabledOnInstalled: function() {
-    return !this.get('isCurrentStackPresent') ||
-      !App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK') ||
-      this.get('controller.requestInProgress') ||
-      this.get('parentView.repoVersions').someProperty('status', 'INSTALLING') ||
-      (this.get('controller.isDowngrade') &&
-        (this.get('controller.currentVersion.repository_name') === this.get('controller.upgradeVersion'))
-      );
-  },
-
-  didInsertElement: function () {
-    App.tooltip($('.link-tooltip'), {title: Em.I18n.t('admin.stackVersions.version.linkTooltip')});
-    App.tooltip($('.hosts-tooltip'));
-    App.tooltip($('.out-of-sync-badge'), {title: Em.I18n.t('hosts.host.stackVersions.status.out_of_sync')});
-    if (!this.get('content.isCompatible')) {
-      App.tooltip(this.$(".repo-version-tooltip"), {
-        title: Em.I18n.t('admin.stackVersions.version.noCompatible.tooltip')
-      });
-    }
-    Em.run.later(this, function () {
-      if (this.get('state') !== 'inDOM') {
-        return;
-      }
-      if (this.get('maintenanceHosts').length + this.get('notRequiredHosts').length) {
-        App.tooltip(this.$('.hosts-section'), {placement: 'bottom', title: Em.I18n.t('admin.stackVersions.version.hostsInfoTooltip').format(
-          this.get('maintenanceHosts').length + this.get('notRequiredHosts').length, this.get('maintenanceHosts').length, this.get('notRequiredHosts').length
-        )});
-      }
-    }, 1000);
-  },
-
-  willDestroyElement: function () {
-    $('.link-tooltip').tooltip('destroy');
-    $('.hosts-tooltip').tooltip('destroy');
-    $('.out-of-sync-badge').tooltip('destroy');
-  },
-
-  isCurrentStackPresent: Ember.computed('parentView.repoVersions.@each.stackVersion.state', function () {
-    return this.get('parentView.repoVersions').someProperty('stackVersion.state', 'CURRENT');
-  }),
-
-  /**
-   * run custom action of controller
-   */
-  runAction: function (event) {
-    var target = event && event.target,
-      action = event && event.context || this.get('stateElement.action');
-    if (target && ($(target).hasClass('disabled') || $(target).parent().hasClass('disabled'))) {
-      return;
-    }
-    if (action) {
-      this.get('controller')[action](this.get('content'));
-    }
-  },
-
-  /**
-   * @param App.RepositoryVersion
-   * */
-  getStackVersionNumber: function(repository){
-    var stackVersion = null;
-    var systems = repository.get('operatingSystems');
-
-    systems.forEach(function (os) {
-      os.get('repositories').forEach(function (repo) {
-        stackVersion = repo.get('stackVersion');
-        if (null != stackVersion)
-          return stackVersion;
-      });
-    });
-
-    return stackVersion;
-  },
-
-  /**
-   * show popup with repositories to edit
-   * @return {App.ModalPopup}
-   */
-  editRepositories: function () {
-    var self = this;
-    var repoRecord = App.RepositoryVersion.find(this.get('content.id'));
-    //make deep copy of repoRecord
-    var repo = Em.Object.create({
-      repoVersionId: repoRecord.get('id'),
-      displayName: repoRecord.get('displayName'),
-      repositoryVersion: repoRecord.get('displayName'),
-      stackVersion: self.getStackVersionNumber(repoRecord),
-      useRedhatSatellite: repoRecord.get('useRedhatSatellite'),
-      operatingSystems: repoRecord.get('operatingSystems').map(function (os) {
-        return Em.Object.create({
-          osType: os.get('osType'),
-          isSelected: true,
-          repositories: os.get('repositories').map(function (repository) {
-            return Em.Object.create({
-              repoName: repository.get('repoName'),
-              repoId: repository.get('repoId'),
-              baseUrl: repository.get('baseUrl'),
-              hasError: false
-            });
-          })
-        });
-      })
-    });
-
-    return this.get('isRepoUrlsEditDisabled') ? null : App.ModalPopup.show({
-      classNames: ['repository-list', 'common-modal-wrapper'],
-      modalDialogClasses: ['modal-lg'],
-      skipValidation: false,
-      autoHeight: false,
-      /**
-       * @type {boolean}
-       */
-      serverValidationFailed: false,
-      bodyClass: Ember.View.extend({
-        content: repo,
-        skipCheckBox: App.CheckboxView.extend({
-          repoBinding: 'parentView.content',
-          checkboxClassNames: ["align-checkbox"],
-          change: function() {
-            this.get('repo.operatingSystems').forEach(function(os) {
-              os.get('repositories').forEach(function(repo) {
-                repo.set('skipValidation', this.get('checked'));
-              }, this);
-            }, this);
-          }
-        }),
-
-        /**
-         * set <code>disablePrimary</code> of popup depending on base URL validation
-         */
-        uiValidation: function () {
-          var disablePrimary = !(App.get('isAdmin') && !App.get('isOperator'));
-
-          this.get('content.operatingSystems').forEach(function (os) {
-            os.get('repositories').forEach(function (repo) {
-              disablePrimary = !disablePrimary ? repo.get('hasError') : disablePrimary;
-            }, this);
-          }, this);
-          this.set('parentView.disablePrimary', disablePrimary);
-        },
-        templateName: require('templates/main/admin/stack_upgrade/edit_repositories'),
-        didInsertElement: function () {
-          App.tooltip($("[rel=skip-validation-tooltip], [rel=use-redhat-tooltip]"), {placement: 'right'});
-        },
-        willDestroyElement: function () {
-          $("[rel=skip-validation-tooltip], [rel=use-redhat-tooltip]").tooltip('destroy');
-        }
-      }),
-      header: Em.I18n.t('common.repositories'),
-      primary: Em.I18n.t('common.save'),
-      disablePrimary: false,
-      onPrimary: function () {
-        var self = this;
-        App.get('router.mainAdminStackAndUpgradeController').saveRepoOS(repo, this.get('skipValidation')).done(function(data){
-          if (data.length > 0) {
-            self.set('serverValidationFailed', true);
-            self.set('disablePrimary', true);
-          } else {
-            self.hide();
-          }
-        })
-      }
-    });
-  },
-
-  /**
-   * shows popup with listed hosts wich has current state of hostStackVersion
-   * @param {object} event
-   * @returns {App.ModalPopup}
-   * @method showHostsListPopup
-   */
-  showHosts: function (event) {
-    var status = event.contexts[0];
-    var displayName = this.get('content.displayName');
-    var hosts = this.get(status['property']);
-    var self = this;
-    var title = status.type === 'CURRENT'
-      ? Em.I18n.t('admin.stackVersions.hosts.popup.current.title').format(displayName, hosts.length)
-      : Em.I18n.t('admin.stackVersions.hosts.popup.title').format(displayName, status.label, hosts.length);
-    hosts.sort();
-    if (hosts.length) {
-      return App.ModalPopup.show({
-        bodyClass: Ember.View.extend({
-          title: title,
-          hosts: hosts,
-          template: Em.Handlebars.compile('<h4>{{view.title}}</h4><div class="limited-height-2">{{#each view.hosts}}<div>{{this}}</div>{{/each}}</div>')
-        }),
-        header: Em.I18n.t('admin.stackVersions.hosts.popup.header').format(status.label),
-        primary: Em.I18n.t('admin.stackVersions.hosts.popup.primary'),
-        secondary: Em.I18n.t('common.close'),
-        onPrimary: function () {
-          this.hide();
-          if ($('.version-box-popup .modal')) {
-            $('.version-box-popup .modal .modal-footer .btn-success').click();
-          }
-          self.filterHostsByStack(displayName, status.value);
-        }
-      });
-    }
-  },
-
-  /**
-   * goes to the hosts page with content filtered by repo_version_name and repo_version_state
-   * @param {string} displayName
-   * @param {Array} states
-   * @method filterHostsByStack
-   */
-  filterHostsByStack: function (displayName, states) {
-    if (Em.isNone(displayName) || Em.isNone(states) || !states.length) return;
-    App.router.get('mainHostController').filterByStack(displayName, states);
-    App.router.get('mainHostController').set('showFilterConditionsFirstLoad', true);
-    App.router.get('mainHostController').set('filterChangeHappened', true);
-    App.router.transitionTo('hosts.index');
-  },
-
-  /**
-   * Not installed hosts should exclude 1.not required hosts 2. Maintenance Mode hosts,
-   * or it maybe confusing to users
-   * @type {Array}
-   */
-  notInstalledHosts: function () {
-    var notInstalledHosts = this.get('content.notInstalledHosts') || App.get('allHostNames');
-    var notRequiredHosts = this.get('notRequiredHosts');
-    var maintenanceHosts = this.get('maintenanceHosts');
-    if (notInstalledHosts.length && notRequiredHosts.length) {
-      notRequiredHosts.forEach(function(not_required) {
-        var index = notInstalledHosts.indexOf(not_required);
-        if (index > -1) {
-          notInstalledHosts.splice(index, 1);
-        }
-      });
-    }
-    if (notInstalledHosts.length && maintenanceHosts.length) {
-      maintenanceHosts.forEach(function(mm_host) {
-        var index = notInstalledHosts.indexOf(mm_host);
-        if (index > -1) {
-          notInstalledHosts.splice(index, 1);
-        }
-      });
-    }
-    return notInstalledHosts;
-  }.property('content.notInstalledHosts', 'notRequiredHosts', 'maintenanceHosts'),
-
-  /**
-   * @type {Array}
-   */
-  maintenanceHosts: function () {
-    return App.Host.find().filterProperty('passiveState', 'ON').mapProperty('hostName') || [];
-  }.property(''),
-
-  /**
-   * Host with no HDP component is not required to install new version
-   * @type {Array}
-   */
-  notRequiredHosts: function () {
-    var notRequiredHosts = [];
-    App.Host.find().forEach(function(host) {
-      if (!host.get('hostComponents').someProperty('isHDPComponent')) {
-        notRequiredHosts.push(host.get('hostName'));
-      }
-    });
-    return notRequiredHosts.uniq() || [];
-  }.property(''),
-
-  /**
-   * @type {Array}
-   */
-  installedHosts: function () {
-    return this.get('content.installedHosts') || [];
-  }.property('content.installedHosts'),
-
-  /**
-   * @type {Array}
-   */
-  currentHosts: function () {
-    return this.get('content.currentHosts') || [];
-  }.property('content.currentHosts')
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
deleted file mode 100644
index cb276ae..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.UpgradeVersionColumnView = App.UpgradeVersionBoxView.extend({
-  templateName: require('templates/main/admin/stack_upgrade/upgrade_version_column'),
-  isVersionColumnView: true,
-  classNames: ['version-column', 'col-md-4'],
-
-  didInsertElement: function () {
-    App.tooltip($('.out-of-sync-badge'), {title: Em.I18n.t('hosts.host.stackVersions.status.out_of_sync')});
-    App.tooltip($('.not-upgradable'), {title: Em.I18n.t('admin.stackVersions.version.service.notUpgradable')});
-    if (!this.get('content.isCompatible')) {
-      App.tooltip(this.$(".repo-version-tooltip"), {
-        title: Em.I18n.t('admin.stackVersions.version.noCompatible.tooltip')
-      });
-    }
-    this.adjustColumnWidth();
-  },
-
-  adjustColumnWidth: function() {
-    //set the width, height of each version column dynamically
-    var reposCount = App.RepositoryVersion.find().filterProperty('isVisible').get('length');
-    var widthFactor = reposCount > 3 ? 0.18: 0.31;
-    $('.version-column').width($('.versions-slides').width() * widthFactor);
-    var height = App.Service.find().get('length') > 10 ? ((App.Service.find().get('length') - 10) * 40 + 500) : 500;
-    $('.version-column').height(height);
-
-    // set the lines width of the table, line up the labels
-    $('.border-extended-table').width(reposCount * 100 + 100 + "%");
-    $('.border-extended-table').css("max-width", reposCount * 100 + 100 + "%");
-  }.observes('parentView.repoVersions.@each.isVisible'),
-
-  services: function() {
-    var originalServices = this.get('content.stackServices');
-    // sort the services in the order the same as service menu
-    return App.Service.find().map(function (service) {
-
-      var stackService = originalServices.findProperty('name', service.get('serviceName'));
-      var isAvailable = this.isStackServiceAvailable(stackService);
-
-      var notUpgradable = false;
-      if (!stackService) {
-        console.error(stackService + " definition does not exist in the stack.")
-        notUpgradable = true;
-      } else {
-        notUpgradable = this.getNotUpgradable(isAvailable, stackService.get('isUpgradable'));
-      }
-
-      return Em.Object.create({
-        displayName: service.get('displayName'),
-        name: service.get('serviceName'),
-        latestVersion: stackService ? stackService.get('latestVersion') : '',
-        isVersionInvisible: !stackService,
-        notUpgradable: notUpgradable,
-        isAvailable: isAvailable
-      });
-    }, this);
-  }.property(),
-
-  getNotUpgradable: function(isAvailable, isUpgradable) {
-    return this.get('content.isMaint') && !this.get('isUpgrading') && this.get('content.status') !== 'CURRENT' && isAvailable && !isUpgradable;
-  },
-
-
-  /**
-   * @param {Em.Object} stackService
-   * @returns {boolean}
-   */
-  isStackServiceAvailable: function(stackService) {
-    var self = this;
-    if (!stackService) {
-      return false;
-    }
-    if ( this.get('content.isCurrent') ){
-      var originalService = App.Service.find(stackService.get('name'));
-      return stackService.get('isAvailable') && originalService.get('desiredRepositoryVersionId') === this.get('content.id');
-    }
-    else{
-      return stackService.get('isAvailable')
-    }
-  },
-
-  /**
-   * on click handler for "show details" link
-   */
-  openVersionBoxPopup: function (event) {
-    var content = this.get('content');
-    var parentView = this.get('parentView');
-
-    return App.ModalPopup.show({
-      classNames: ['version-box-popup'],
-      bodyClass: App.UpgradeVersionBoxView.extend({
-        classNames: ['version-box-in-popup'],
-        content: content,
-        parentView: parentView
-      }),
-      header: Em.I18n.t('admin.stackVersions.version.column.showDetails.title'),
-      primary: Em.I18n.t('common.dismiss'),
-      secondary: null
-    });
-  }
-});
-
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
deleted file mode 100644
index 87e2adf..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
+++ /dev/null
@@ -1,520 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-App.upgradeWizardView = Em.View.extend({
-  controllerBinding: 'App.router.mainAdminStackAndUpgradeController',
-  templateName: require('templates/main/admin/stack_upgrade/stack_upgrade_wizard'),
-
-  /**
-   * @type {Array}
-   */
-  failedStatuses: ['HOLDING_FAILED', 'HOLDING_TIMEDOUT', 'FAILED', 'TIMED_OUT', 'ABORTED'],
-
-  /**
-   * @type {Array}
-   */
-  activeStatuses: ['HOLDING_FAILED', 'HOLDING_TIMEDOUT', 'FAILED', 'TIMED_OUT', 'HOLDING', 'IN_PROGRESS', 'ABORTED'],
-
-  /**
-   * update timer
-   * @type {number|null}
-   * @default null
-   */
-  updateTimer: null,
-
-  /**
-   * update timer of Upgrade Item
-   * @type {number|null}
-   * @default null
-   */
-  upgradeItemTimer: null,
-
-  /**
-   * @type {boolean}
-   */
-  isLoaded: false,
-
-  /**
-   * @type {boolean}
-   */
-  isDetailsOpened: false,
-
-  /**
-   * @type {boolean}
-   */
-  outsideView: true,
-
-  /**
-   * Downgrade should be available only if target version higher than current, so we can't downgrade
-   * when downgrade already started
-   * @type {boolean}
-   */
-  isDowngradeAvailable: Em.computed.and(
-    '!controller.isDowngrade',
-    'controller.downgradeAllowed',
-    '!controller.cantBeStarted'
-  ),
-
-  /**
-   * progress value is rounded to floor
-   * @type {number}
-   */
-  overallProgress: function () {
-    return Math.floor(this.get('controller.upgradeData.Upgrade.progress_percent'));
-  }.property('controller.upgradeData.Upgrade.progress_percent'),
-
-  /**
-   * upgrade groups, reversed and PENDING ones are hidden
-   * @type {Array}
-   */
-  upgradeGroups: function () {
-    return this.get('controller.upgradeData.upgradeGroups') || [];
-  }.property('controller.upgradeData.upgradeGroups'),
-
-  /**
-   * currently active group
-   * @type {object|undefined}
-   */
-  activeGroup: function () {
-    if (App.get('upgradeSuspended')) return;
-    return this.get('upgradeGroups').find(function (item) {
-      return this.get('activeStatuses').contains(item.get('status'));
-    }, this);
-  }.property('upgradeGroups.@each.status'),
-
-  /**
-   * if upgrade group is in progress it should have currently running item
-   * @type {object|undefined}
-   */
-  runningItem: Em.computed.findBy('activeGroup.upgradeItems', 'status', 'IN_PROGRESS'),
-
-  /**
-   * if upgrade group is failed it should have failed item
-   * @type {object|undefined}
-   */
-  failedItem: function () {
-    return this.get('activeGroup.upgradeItems') && this.get('activeGroup.upgradeItems').find(function (item) {
-      return this.get('failedStatuses').contains(item.get('status'));
-    }, this);
-  }.property('activeGroup.upgradeItems.@each.status'),
-
-  /**
-   * can skip failed item or not
-   * @type {boolean}
-   */
-  canSkipFailedItem: function () {
-    var failedItem = this.get('failedItem');
-    var associatedVersion = this.get('controller.upgradeData.Upgrade.associated_version');
-    var version = associatedVersion && App.RepositoryVersion.find().findProperty('repositoryVersion', associatedVersion);
-    var isPatchOrMaint = version && ( version.get('isPatch') || version.get('isMaint') );
-    return failedItem && failedItem.get('skippable') && !(this.get('isFinalizeItem') && isPatchOrMaint);
-  }.property('failedItem'),
-
-  /**
-   * upgrade doesn't have any failed or manual or running item
-   * @type {boolean}
-   */
-  noActiveItem: function () {
-    return (Em.isNone(this.get('failedItem')) && Em.isNone(this.get('runningItem')) && Em.isNone(this.get('manualItem'))) &&
-      !['NOT_REQUIRED', 'COMPLETED', 'ABORTED'].contains(App.get('upgradeState'));
-  }.property('failedItem', 'runningItem', 'manualItem', 'App.upgradeState'),
-
-  /**
-   * details of currently active task
-   * @type {object|null}
-   */
-  taskDetails: function () {
-    if (this.get('runningItem')) {
-      return this.get('runningItem').get('tasks').findProperty('status', 'IN_PROGRESS');
-    } else if (this.get('failedItem')) {
-      return this.get('failedItem').get('tasks').find(function (task) {
-        return this.get('failedStatuses').contains(task.get('status'));
-      }, this);
-    } else {
-      return null;
-    }
-  }.property('failedItem.tasks.@each.status', 'runningItem.tasks.@each.status'),
-
-  /**
-   * indicate whether failed item can be skipped or retried in order to continue Upgrade
-   * @type {boolean}
-   */
-  isHoldingState: function () {
-    return Boolean(this.get('failedItem.status') &&
-                  this.get('failedItem.status').contains('HOLDING') || this.get('failedItem.status') === 'ABORTED');
-  }.property('failedItem.status'),
-
-  /**
-   * @type {boolean}
-   */
-  isManualDone: false,
-
-  /**
-   * if manualItem has been switched then isManualDone flag should be reset
-   */
-  resetManualDone: function() {
-    this.set('isManualDone', false);
-  }.observes('manualItem'),
-
-  /**
-   * @type {boolean}
-   */
-  isManualProceedDisabled: Em.computed.or('!isManualDone', 'controller.requestInProgress'),
-
-  /**
-   * if upgrade group is manual it should have manual item
-   * @type {object|undefined}
-   */
-  manualItem: Em.computed.findBy('activeGroup.upgradeItems', 'status', 'HOLDING'),
-
-  /**
-   * plain manual item
-   * @type {object|undefined}
-   */
-  plainManualItem: function () {
-    return this.get('manualItem') && ![
-      this.get('controller.finalizeContext'),
-      this.get("controller.slaveFailuresContext"),
-      this.get("controller.serviceCheckFailuresContext")
-    ].contains(this.get('manualItem.context'));
-  }.property('manualItem.context'),
-
-  /**
-   * manualItem: indicate whether the step is "Slave component failures", a dialog with instructions will show up for manual steps
-   * @type {boolean}
-   */
-  isSlaveComponentFailuresItem: function () {
-    var item = this.get('activeGroup.upgradeItems') && this.get('activeGroup.upgradeItems').findProperty('context', this.get("controller.slaveFailuresContext"));
-    var status = item && item.get('status');
-    this.set('isOutOfSync', status === 'OUT_OF_SYNC');
-    return ['HOLDING', 'HOLDING_FAILED', 'OUT_OF_SYNC'].contains(status);
-  }.property('activeGroup.upgradeItems.@each.status', 'activeGroup.upgradeItems.@each.context'),
-
-  /**
-   * manualItem: indicate whether the step is "Service check failures", a dialog with instructions will show up for manual steps
-   * @type {boolean}
-   */
-  isServiceCheckFailuresItem: Em.computed.equalProperties('manualItem.context', 'controller.serviceCheckFailuresContext'),
-
-  /**
-   * manualItem: indicate whether the step is Finalize
-   * @type {boolean}
-   */
-  isFinalizeItem: Em.computed.equalProperties('manualItem.context', 'controller.finalizeContext'),
-
-  /**
-   * Upgrade of PATCH version is revertible
-   */
-  isRevertibleUpgrade: function() {
-    var associatedVersion = this.get('controller.upgradeData.Upgrade.associated_version');
-    var upgradeVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', associatedVersion);
-    return ['PATCH'].contains(upgradeVersion.get('type'));
-  }.property('controller.upgradeData.Upgrade.associated_version'),
-
-  revertibleFinalizeMessage: function() {
-    var associatedVersion = this.get('controller.upgradeData.Upgrade.associated_version');
-    var upgradeVersion = App.RepositoryVersion.find().findProperty('repositoryVersion', associatedVersion);
-    return Em.I18n.t('admin.stackUpgrade.finalize.message.revertible')
-      .format(upgradeVersion.get('type'), upgradeVersion.get('displayName'));
-  }.property('controller.upgradeData.Upgrade.associated_version'),
-
-  /**
-   * label of Upgrade status
-   * @type {string}
-   */
-  upgradeStatusLabel: function() {
-    var labelKey = null;
-    switch (this.get('controller.upgradeData.Upgrade.request_status')) {
-      case 'QUEUED':
-      case 'PENDING':
-      case 'IN_PROGRESS':
-        labelKey = 'admin.stackUpgrade.state.inProgress';
-        break;
-      case 'COMPLETED':
-        labelKey = 'admin.stackUpgrade.state.completed';
-        break;
-      case 'ABORTED':
-        labelKey = 'admin.stackUpgrade.state.paused';
-        break;
-      case 'TIMEDOUT':
-      case 'FAILED':
-      case 'HOLDING_FAILED':
-      case 'HOLDING_TIMEDOUT':
-      case 'HOLDING':
-        labelKey = 'admin.stackUpgrade.state.paused';
-        break;
-      default:
-        labelKey = 'admin.stackUpgrade.state.init';
-        break;
-    }
-    if (labelKey) {
-      labelKey += (this.get('controller.isDowngrade')) ? '.downgrade' : "";
-      return Em.I18n.t(labelKey);
-    } else {
-      return "";
-    }
-  }.property('controller.upgradeData.Upgrade.request_status', 'controller.isDowngrade'),
-
-  /**
-   * toggle details box
-   */
-  toggleDetails: function () {
-    this.toggleProperty('isDetailsOpened');
-  },
-
-  /**
-   * close details block if no active task present
-   */
-  closeDetails: function () {
-    if (this.get('noActiveItem')) {
-      this.set('isDetailsOpened', false);
-    }
-  }.observes('noActiveItem'),
-
-  /**
-   * start polling upgrade data
-   */
-  startPolling: function () {
-    var self = this;
-    if (App.get('clusterName')) {
-      this.get('controller').loadUpgradeData().done(function () {
-        self.set('isLoaded', true);
-        self.doPolling();
-      });
-    }
-  }.observes('App.clusterName'),
-
-  getSkippedServiceChecks: function () {
-    if (this.get('isFinalizeItem')) {
-      if (!this.get('controller.areSkippedServiceChecksLoaded')) {
-        var self = this;
-        App.ajax.send({
-          name: 'admin.upgrade.service_checks',
-          sender: this,
-          data: {
-            upgradeId: this.get('controller.upgradeId')
-          },
-          success: 'getSkippedServiceChecksSuccessCallback'
-        }).complete(function () {
-            self.set('controller.areSkippedServiceChecksLoaded', true);
-          });
-      }
-    } else {
-      this.set('controller.areSkippedServiceChecksLoaded', false);
-    }
-  }.observes('isFinalizeItem'),
-
-  getSkippedServiceChecksSuccessCallback: function (data) {
-    if (data.items && data.items.length) {
-      var lastItemWithChecks = data.items[data.items.length - 1];
-      if (lastItemWithChecks && lastItemWithChecks.upgrade_items && lastItemWithChecks.upgrade_items.length) {
-        var skippedServiceChecks = [];
-        lastItemWithChecks.upgrade_items.forEach(function (item) {
-          if (item.tasks && item.tasks.length) {
-            item.tasks.forEach(function (task) {
-              var detail = Em.get(task, 'Tasks.command_detail');
-              if (detail && detail.startsWith('SERVICE_CHECK ')) {
-                skippedServiceChecks.push(App.format.role(detail.replace('SERVICE_CHECK ', ''), true));
-              }
-            });
-          }
-        });
-        skippedServiceChecks = skippedServiceChecks.uniq();
-        this.set('controller.skippedServiceChecks', skippedServiceChecks);
-      }
-    }
-  },
-
-  /**
-   * get slave-component failure hosts
-   */
-  getSlaveComponentItem: function() {
-    var controller = this.get('controller');
-    if (this.get('isSlaveComponentFailuresItem')) {
-      if (!this.get('controller.areSlaveComponentFailuresHostsLoaded')) {
-        var item = this.get('activeGroup.upgradeItems') && this.get('activeGroup.upgradeItems').findProperty('context', this.get("controller.slaveFailuresContext"));
-        controller.getUpgradeItem(item, 'getSlaveComponentItemSuccessCallback').complete(function () {
-          controller.set('areSlaveComponentFailuresHostsLoaded', true);
-        });
-      }
-    } else {
-      controller.set('areSlaveComponentFailuresHostsLoaded', false);
-    }
-  }.observes('isSlaveComponentFailuresItem'),
-
-  /**
-   * get service names of Service Check failures
-   */
-  getServiceCheckItem: function() {
-    var controller = this.get('controller');
-    if (this.get('isServiceCheckFailuresItem')) {
-      if (!this.get('controller.areServiceCheckFailuresServicenamesLoaded')) {
-        controller.getUpgradeItem(this.get('manualItem'), 'getServiceCheckItemSuccessCallback').complete(function () {
-            controller.set('areServiceCheckFailuresServicenamesLoaded', true);
-          });
-      }
-    } else {
-      controller.set('areServiceCheckFailuresServicenamesLoaded', false);
-    }
-  }.observes('isServiceCheckFailuresItem'),
-
-  /**
-   * start polling upgrade data
-   */
-  willInsertElement: function () {
-    this.startPolling();
-  },
-
-  /**
-   * stop polling upgrade data
-   */
-  willDestroyElement: function () {
-    clearTimeout(this.get('updateTimer'));
-    clearTimeout(this.get('upgradeItemTimer'));
-    this.set('isLoaded', false);
-  },
-
-  /**
-   * load upgrade data with time interval
-   */
-  doPolling: function () {
-    var self = this;
-    this.set('updateTimer', setTimeout(function () {
-      self.get('controller').loadUpgradeData().done(function() {
-        self.doPolling();
-      });
-    }, App.bgOperationsUpdateInterval));
-  },
-
-  /**
-   * previous item request
-   */
-  prevItemRequest: null,
-
-  /**
-   * poll for tasks when item is expanded
-   */
-  doUpgradeItemPolling: function () {
-    var self = this;
-    var item = this.get('runningItem') || this.get('failedItem');
-    var request = this.get('prevItemRequest');
-    if ( request ) request.abort();
-    if (item && this.get('isDetailsOpened')) {
-      request = this.get('controller').getUpgradeItem(item).complete(function () {
-        self.set('upgradeItemTimer', setTimeout(function () {
-          self.doUpgradeItemPolling();
-        }, App.bgOperationsUpdateInterval));
-      });
-
-      this.set('prevItemRequest', request);
-    } else {
-      clearTimeout(this.get('upgradeItemTimer'));
-    }
-  }.observes('isDetailsOpened', 'runningItem', 'failedItem'),
-
-  /**
-   * set current upgrade item state to FAILED (for HOLDING_FAILED) or TIMED_OUT (for HOLDING_TIMED_OUT)
-   * in order to ignore fail and continue Upgrade
-   * @param {object} event
-   */
-  continue: function (event) {
-    this.get('controller').setUpgradeItemStatus(event.context, event.context.get('status').slice(8));
-    this.set('isDetailsOpened', false);
-  },
-
-  /**
-   * set current upgrade item state to PENDING in order to retry Upgrade
-   * @param {object} event
-   */
-  retry: function (event) {
-    this.get('controller').setUpgradeItemStatus(event.context, 'PENDING');
-    this.set('isDetailsOpened', false);
-  },
-
-  /**
-   * set current upgrade item state to COMPLETED in order to proceed
-   * @param {object} event
-   */
-  complete: function (event) {
-    this.get('controller').setUpgradeItemStatus(event.context, 'COMPLETED');
-    this.set('isManualDone', false);
-  },
-
-  pauseUpgrade: function() {
-    var self = this;
-    this.get('controller').suspendUpgrade().done(function() {
-      self.get('parentView').closeWizard();
-    });
-  },
-
-  /**
-   * pause upgrade confirmation popup
-   * @param {object} event
-   */
-  confirmPauseUpgrade: function () {
-    var self = this;
-    return App.showConfirmationPopup(
-        function() {
-          self.pauseUpgrade();
-        },
-        Em.I18n.t('admin.stackUpgrade.pauseUpgrade.warning').format("upgrade"),
-        null,
-        Em.I18n.t('common.warning'),
-        Em.I18n.t('admin.stackUpgrade.pauseUpgrade')
-    );
-  },
-
-  /**
-   * pause downgrade confirmation popup
-   * @param {object} event
-   */
-  confirmPauseDowngrade: function () {
-    var self = this;
-    return App.showConfirmationPopup(
-        function() {
-          self.pauseUpgrade();
-        },
-        Em.I18n.t('admin.stackUpgrade.pauseUpgrade.warning').format("downgrade"),
-        null,
-        Em.I18n.t('common.warning'),
-        Em.I18n.t('admin.stackUpgrade.pauseDowngrade')
-    );
-  },
-
-  /**
-   * @type {string}
-   */
-  failedHostsMessage: function() {
-    var count = this.get('controller.slaveComponentStructuredInfo.hosts.length') || 0;
-    return Em.I18n.t('admin.stackUpgrade.failedHosts.showHosts').format(count);
-  }.property('controller.slaveComponentStructuredInfo.hosts'),
-
-  showFailedHosts: function() {
-    return App.ModalPopup.show({
-      header: Em.I18n.t('admin.stackUpgrade.failedHosts.header'),
-      bodyClass: App.FailedHostsPopupBodyView,
-      secondary: null,
-      primary: Em.I18n.t('common.close'),
-      content: this.get('controller.slaveComponentStructuredInfo')
-    });
-  }
-});
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
deleted file mode 100644
index 3899bb1..0000000
--- a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
+++ /dev/null
@@ -1,254 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-App.MainAdminStackVersionsView = Em.View.extend({
-  templateName: require('templates/main/admin/stack_upgrade/versions'),
-
-  /**
-   * update timer
-   * @type {number|null}
-   * @default null
-   */
-  updateTimer: null,
-
-  /**
-   * @type {Array}
-   */
-  services: App.Service.find(),
-
-  /**
-   * Not Installed = the version is not installed or out of sync
-   * Upgrade Ready = the version is installed and ready for upgrade
-   * Current = the version currently being used
-   * Upgrade in Process = UPGRADING
-   * Ready to Finalize = UPGRADED
-   * Installed = All the versions that are installed BUT cannot be upgraded to (meaning: they are lower than the current)
-   * @type {Array}
-   */
-  categories: [
-    Em.Object.create({
-      labelKey: 'admin.stackVersions.filter.all',
-      value: '',
-      isSelected: true
-    }),
-    Em.Object.create({
-      labelKey: 'admin.stackVersions.filter.notInstalled',
-      value: 'NOT_INSTALLED',
-      isSelected: false
-    }),
-    Em.Object.create({
-      labelKey: 'admin.stackVersions.filter.upgradeReady',
-      value: 'UPGRADE_READY',
-      isSelected: false
-    }),
-    Em.Object.create({
-      labelKey: 'admin.stackVersions.filter.current',
-      value: 'CURRENT',
-      isSelected: false
-    }),
-    Em.Object.create({
-      labelKey: 'admin.stackVersions.filter.installed',
-      value: 'INSTALLED',
-      isSelected: false
-    }),
-    Em.Object.create({
-      labelKey: 'admin.stackVersions.filter.upgrading',
-      value: 'UPGRADING',
-      isSelected: false
-    }),
-    Em.Object.create({
-      labelKey: 'admin.stackVersions.filter.upgraded',
-      value: 'UPGRADED',
-      isSelected: false
-    })
-  ],
-
-  didInsertElement: function () {
-    this.observesCategories();
-  },
-
-  /**
-   * update categories labels
-   */
-  observesCategories: function () {
-    this.get('categories').forEach(function (category) {
-      category.set('label', Em.I18n.t(category.labelKey).format(this.filterBy(this.get('repoVersions'), category).length));
-    }, this);
-    this.filterVersions(this.get('selectedCategory'));
-  }.observes('repoVersions.@each.stackVersion.state', 'controller.isLoaded'),
-
-  /**
-   * select category
-   * @param event
-   */
-  selectCategory: function (event) {
-    this.get('categories').filterProperty('isSelected').setEach('isSelected', false);
-    event.context.set('isSelected', true);
-    this.filterVersions(event.context);
-  },
-
-  /**
-   * filter versions that match category
-   * @param {Em.Object} category
-   */
-  filterVersions: function (category) {
-    var filteredVersionIds = this.filterBy(this.get('repoVersions'), category).mapProperty('id');
-    this.get('repoVersions').forEach(function (version) {
-      version.set('isVisible', filteredVersionIds.contains(version.get('id')));
-    });
-  },
-
-  /**
-   * @type {object}
-   */
-  selectedCategory: Em.computed.findBy('categories', 'isSelected', true),
-
-  /**
-   * @type {Em.Array}
-   */
-  repoVersions: App.RepositoryVersion.find(),
-  
-  /**
-   * @type {Em.Array}
-   */
-  stackVersions: App.StackVersion.find(),
-
-  /**
-   * filter versions by category
-   * @param versions
-   * @param filter
-   * @return {Array}
-   */
-  filterBy: function (versions, filter) {
-    var currentVersion = this.get('controller.currentVersion');
-    if (filter && filter.get('value')) {
-      versions = versions.filter(function (version) {
-        var status = version.get('status');
-        var isUpgrading = this.isVersionUpgrading(version);
-        if (status === 'INSTALLED' && ['UPGRADE_READY', 'INSTALLED', 'UPGRADING'].contains(filter.get('value'))) {
-          if (filter.get('value') === 'UPGRADING') {
-            return isUpgrading;
-          } else if (filter.get('value') === 'UPGRADE_READY') {
-            return !isUpgrading &&
-              stringUtils.compareVersions(version.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) === 1;
-          } else if (filter.get('value') === 'INSTALLED') {
-            return stringUtils.compareVersions(version.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) < 1;
-          }
-        } else if (filter.get('value') === 'NOT_INSTALLED') {
-          return ['NOT_REQUIRED', 'INSTALL_FAILED', 'INSTALLING', 'OUT_OF_SYNC'].contains(status);
-        } else {
-          return status === filter.get('value');
-        }
-      }, this);
-    }
-    if (App.get('supports.displayOlderVersions') || Em.isNone(currentVersion)) {
-      return versions.filterProperty('hidden', false).toArray();
-    } else {
-      return versions.filterProperty('hidden', false).filter(function(v) {
-        if (v.get('stackVersionType') === Em.get(currentVersion, 'stack_name')) {
-          // PATCH or MAINT version should be visible even if patch number lower than current
-          return v.get('isPatch') || v.get('isMaint') || stringUtils.compareVersions(v.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) >= 0;
-        }
-        return v.get('isCompatible');
-      }).toArray();
-    }
-  },
-
-  /**
-   * is version in upgrading or downgrading state
-   * @param version
-   */
-  isVersionUpgrading: function(version) {
-    var upgradeController = App.router.get('mainAdminStackAndUpgradeController');
-    return upgradeController.get('upgradeVersion') === version.get('displayName') ||
-           upgradeController.get('fromVersion') === version.get('repositoryVersion');
-  },
-
-  /**
-   * route to versions in Admin View
-   * @return {App.ModalPopup}
-   */
-  goToVersions: function () {
-    var self = this;
-    return App.showConfirmationPopup(function () {
-      App.ajax.send({
-        name: 'ambari.service.load_server_version',
-        sender: self
-      }).then(function(data) {
-        var components = Em.get(data,'components');
-        if (Em.isArray(components)) {
-          var mappedVersions = components.map(function(component) {
-              if (Em.get(component, 'RootServiceComponents.component_version')) {
-                return Em.get(component, 'RootServiceComponents.component_version');
-              }
-            }),
-            sortedMappedVersions = mappedVersions.sort(),
-            latestVersion = sortedMappedVersions[sortedMappedVersions.length-1].replace(/[^\d.-]/g, '');
-            window.location.replace(App.appURLRoot + 'views/ADMIN_VIEW/' + latestVersion + '/INSTANCE/#/stackVersions');
-        }
-      });
-    },
-    Em.I18n.t('admin.stackVersions.manageVersions.popup.body'),
-    null,
-    Em.I18n.t('admin.stackVersions.manageVersions'));
-  },
-
-  /**
-   * load ClusterStackVersions data
-   */
-  willInsertElement: function () {
-    this.poll();
-  },
-
-  /**
-   * stop polling upgrade state
-   */
-  willDestroyElement: function () {
-    window.clearTimeout(this.get('updateTimer'));
-    App.ajax.abortRequests(this.get('controller.runningCheckRequests'));
-  },
-
-  /**
-   * set timer for polling
-   */
-  doPolling: function () {
-    var self = this;
-    this.set('updateTimer', window.setTimeout(function () {
-      self.poll.apply(self);
-    }, App.bgOperationsUpdateInterval));
-  },
-
-  /**
-   * poll data
-   */
-  poll: function () {
-    var self = this;
-    //skip call if Upgrade wizard opened
-    if (App.router.get('updateController').get('isWorking')) {
-      this.get('controller').load().done(function () {
-        self.set('controller.isLoaded', true);
-        self.doPolling();
-      });
-    }
-  }
-
-});
diff --git a/ambari-web/app/views/main/host/stack_versions_view.js b/ambari-web/app/views/main/host/stack_versions_view.js
index 62a88b4..af48580 100644
--- a/ambari-web/app/views/main/host/stack_versions_view.js
+++ b/ambari-web/app/views/main/host/stack_versions_view.js
@@ -152,13 +152,6 @@ App.MainHostStackVersionsView = App.TableView.extend({
     }
   }),
 
-  /**
-   * show progress of installation of version on host
-   */
-  showInstallProgress: function (event) {
-    App.router.get('mainAdminStackAndUpgradeController').showProgressPopup(event.context);
-  },
-
   outOfSyncInfo: Em.View.extend({
     tagName: 'i',
     classNames: ['glyphicon glyphicon-question-sign'],
diff --git a/ambari-web/app/views/main/menu.js b/ambari-web/app/views/main/menu.js
index acbd7dc..c90d4ac 100644
--- a/ambari-web/app/views/main/menu.js
+++ b/ambari-web/app/views/main/menu.js
@@ -108,14 +108,6 @@ App.MainSideMenuView = Em.CollectionView.extend({
             href: router.urlFor('main.admin.serviceGroups')
           });
         }
-        if (App.isAuthorized('CLUSTER.VIEW_STACK_DETAILS, CLUSTER.UPGRADE_DOWNGRADE_STACK') || upg) {
-          categories.push({
-            name: 'stackAndUpgrade',
-            url: 'stack',
-            label: Em.I18n.t('admin.stackUpgrade.title'),
-            href: router.urlFor('main.admin.stackAndUpgrade')
-          });
-        }
         if(App.isAuthorized('SERVICE.SET_SERVICE_USERS_GROUPS') || upg) {
           categories.push({
             name: 'adminServiceAccounts',
diff --git a/ambari-web/test/app_test.js b/ambari-web/test/app_test.js
index 2812b7d..f2089b8 100644
--- a/ambari-web/test/app_test.js
+++ b/ambari-web/test/app_test.js
@@ -412,180 +412,4 @@ describe('App', function () {
       });
     });
   });
-
-  describe('#upgradeIsRunning', function () {
-
-    Em.A([
-        {
-          upgradeState: 'IN_PROGRESS',
-          m: 'should be true (1)',
-          e: true
-        },
-        {
-          upgradeState: 'HOLDING',
-          m: 'should be true (2)',
-          e: true
-        },
-        {
-          upgradeState: 'FAKE',
-          m: 'should be false',
-          e: false
-        }
-      ]).forEach(function (test) {
-        it(test.m, function () {
-          App.set('upgradeState', test.upgradeState);
-          expect(App.get('upgradeIsRunning')).to.equal(test.e);
-        });
-      });
-
-  });
-
-  describe('#upgradeSuspended', function () {
-    var cases = [
-      {
-        upgradeState: 'NOT_REQUIRED',
-        isSuspended: false,
-        upgradeSuspended: false
-      },
-      {
-        upgradeState: 'ABORTED',
-        isSuspended: false,
-        upgradeSuspended: false
-      },
-      {
-        upgradeState: 'ABORTED',
-        isSuspended: true,
-        upgradeSuspended: true
-      }
-    ];
-
-    beforeEach(function() {
-      this.mock = sinon.stub(App.router, 'get');
-    });
-    afterEach(function() {
-      this.mock.restore();
-    });
-
-    cases.forEach(function (test) {
-      it(test.upgradeState + ", isSuspended=" + test.isSuspended, function () {
-        App.set('upgradeState', test.upgradeState);
-        this.mock.returns(test.isSuspended);
-        App.propertyDidChange('upgradeSuspended');
-        expect(App.get('upgradeSuspended')).to.equal(test.upgradeSuspended);
-      });
-    });
-  });
-
-  describe('#upgradeAborted', function () {
-
-    var cases = [
-      {
-        upgradeState: 'NOT_REQUIRED',
-        isSuspended: false,
-        upgradeAborted: false
-      },
-      {
-        upgradeState: 'ABORTED',
-        isSuspended: true,
-        upgradeAborted: false
-      },
-      {
-        upgradeState: 'ABORTED',
-        isSuspended: false,
-        upgradeAborted: true
-      }
-    ];
-
-    beforeEach(function() {
-      this.mock = sinon.stub(App.router, 'get');
-    });
-    afterEach(function() {
-      this.mock.restore();
-    });
-
-    cases.forEach(function (test) {
-      it(test.upgradeState + ", isSuspended=" + test.isSuspended, function () {
-        App.set('upgradeState', test.upgradeState);
-        this.mock.returns(test.isSuspended);
-        App.propertyDidChange('upgradeAborted');
-        expect(App.get('upgradeAborted')).to.equal(test.upgradeAborted);
-      });
-    });
-  });
-
-  describe('#wizardIsNotFinished', function () {
-    var cases = [
-      {
-        upgradeState: 'NOT_REQUIRED',
-        wizardIsNotFinished: false
-      },
-      {
-        upgradeState: 'IN_PROGRESS',
-        wizardIsNotFinished: true
-      },
-      {
-        upgradeState: 'HOLDING',
-        wizardIsNotFinished: true
-      },
-      {
-        upgradeState: 'HOLDING_TIMEDOUT',
-        wizardIsNotFinished: true
-      },
-      {
-        upgradeState: 'ABORTED',
-        wizardIsNotFinished: true
-      }
-    ];
-
-    cases.forEach(function (item) {
-      it(item.upgradeState, function () {
-        App.set('upgradeState', item.upgradeState);
-        App.propertyDidChange('wizardIsNotFinished');
-        expect(App.get('wizardIsNotFinished')).to.equal(item.wizardIsNotFinished);
-      });
-    });
-  });
-
-  describe("#upgradeHolding", function () {
-    var cases = [
-      {
-        upgradeState: 'NOT_REQUIRED',
-        upgradeAborted: false,
-        upgradeHolding: false
-      },
-      {
-        upgradeState: 'HOLDING',
-        upgradeAborted: false,
-        upgradeHolding: true
-      },
-      {
-        upgradeState: 'HOLDING_FAILED',
-        upgradeAborted: false,
-        upgradeHolding: true
-      },
-      {
-        upgradeState: 'NOT_REQUIRED',
-        upgradeAborted: true,
-        upgradeHolding: true
-      }
-    ];
-
-    beforeEach(function() {
-      this.mock = sinon.stub(App.router, 'get');
-    });
-    afterEach(function() {
-      this.mock.restore();
-    });
-
-    cases.forEach(function (test) {
-      it(test.upgradeState + ", upgradeAborted=" + test.upgradeAborted, function () {
-        App.reopen({
-          upgradeAborted: test.upgradeAborted,
-          upgradeState: test.upgradeState
-        });
-        App.propertyDidChange('upgradeHolding');
-        expect(App.get('upgradeHolding')).to.equal(test.upgradeHolding);
-      });
-    });
-  });
 });
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js b/ambari-web/test/controllers/global/cluster_controller_test.js
index 1b05fd2..947d9b7 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -244,151 +244,6 @@ describe('App.clusterController', function () {
 
   });
 
-  describe("#restoreUpgradeState()", function() {
-    var data = {upgradeData: {}};
-    var mock = {
-      done: function (callback) {
-        callback(data.upgradeData);
-      }
-    };
-    var upgradeController = Em.Object.create({
-      restoreLastUpgrade: Em.K,
-      initDBProperties: Em.K,
-      loadUpgradeData: Em.K,
-      loadCompatibleVersions: Em.K,
-      updateCurrentStackVersion: Em.K,
-      loadStackVersionsToModel: function () {
-        return {done: Em.clb};
-      }
-    });
-
-    beforeEach(function () {
-      sinon.stub(controller, 'getAllUpgrades').returns(mock);
-      sinon.spy(mock, 'done');
-      sinon.stub(App.router, 'get').returns(upgradeController);
-      sinon.stub(App.db, 'get').returns('PENDING');
-      sinon.spy(upgradeController, 'restoreLastUpgrade');
-      sinon.spy(upgradeController, 'initDBProperties');
-      sinon.spy(upgradeController, 'loadUpgradeData');
-      sinon.spy(upgradeController, 'loadStackVersionsToModel');
-      sinon.spy(upgradeController, 'loadCompatibleVersions');
-      sinon.spy(upgradeController, 'updateCurrentStackVersion');
-      sinon.stub(App.stackUpgradeHistoryMapper, 'map');
-    });
-
-    afterEach(function () {
-      mock.done.restore();
-      controller.getAllUpgrades.restore();
-      App.router.get.restore();
-      App.db.get.restore();
-      upgradeController.restoreLastUpgrade.restore();
-      upgradeController.initDBProperties.restore();
-      upgradeController.loadUpgradeData.restore();
-      upgradeController.loadStackVersionsToModel.restore();
-      upgradeController.loadCompatibleVersions.restore();
-      upgradeController.updateCurrentStackVersion.restore();
-      App.stackUpgradeHistoryMapper.map.restore();
-    });
-
-    describe("has upgrade request", function() {
-
-      beforeEach(function () {
-        data.upgradeData = {items: [
-          {
-            Upgrade: {
-              request_id: 1
-            }
-          }
-        ]};
-        controller.restoreUpgradeState();
-      });
-
-      it('getAllUpgrades is called once', function () {
-        expect(controller.getAllUpgrades.calledOnce).to.be.true;
-      });
-
-      it('restoreLastUpgrade is called with valid arguments', function () {
-        expect(upgradeController.restoreLastUpgrade.calledWith(data.upgradeData.items[0])).to.be.true;
-      });
-
-      it('loadStackVersionsToModel is called with valid arguments', function () {
-        expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
-      });
-
-      it('loadCompatibleVersions should be called', function () {
-        expect(upgradeController.loadCompatibleVersions.calledOnce).to.be.true;
-      });
-
-      it('updateCurrentStackVersion should be called', function () {
-        expect(upgradeController.updateCurrentStackVersion.calledOnce).to.be.true;
-      });
-
-      it('initDBProperties is not called', function () {
-        expect(upgradeController.initDBProperties.called).to.be.false;
-      });
-
-      it('loadUpgradeData is not called', function () {
-        expect(upgradeController.loadUpgradeData.called).to.be.false;
-      });
-
-      it('App.stackUpgradeHistoryMapper.map should be called', function () {
-        expect(App.stackUpgradeHistoryMapper.map.calledOnce).to.be.true;
-      });
-    });
-
-    describe("has completed upgrade request", function() {
-
-      beforeEach(function () {
-        data.upgradeData = {items: [
-          {
-            Upgrade: {
-              request_id: 1,
-              request_status: 'COMPLETED'
-            }
-          }
-        ]};
-        controller.restoreUpgradeState();
-      });
-
-      it('getAllUpgrades is called once', function () {
-        expect(controller.getAllUpgrades.calledOnce).to.be.true;
-      });
-
-      it('restoreLastUpgrade should not be called', function () {
-        expect(upgradeController.restoreLastUpgrade.called).to.be.false;
-      });
-
-      it('loadStackVersionsToModel should be called', function () {
-        expect(upgradeController.loadStackVersionsToModel).to.be.calledOnce;
-      });
-    });
-
-    describe("does not have upgrade request", function() {
-
-      beforeEach(function () {
-        data.upgradeData = {items: []};
-        controller.restoreUpgradeState();
-      });
-
-      it('getAllUpgrades is called once', function () {
-        expect(controller.getAllUpgrades.calledOnce).to.be.true;
-      });
-
-      it('restoreLastUpgrade is not called', function () {
-        expect(upgradeController.restoreLastUpgrade.called).to.be.false;
-      });
-
-      it('loadStackVersionsToModel is called with valid arguments', function () {
-        expect(upgradeController.loadStackVersionsToModel.calledWith(true)).to.be.true;
-      });
-
-      it('initDBProperties is called once', function () {
-        expect(upgradeController.initDBProperties.calledOnce).to.be.true;
-      });
-
-    });
-  });
-
   describe('#isRunningState()', function() {
     var testCases = [
       {
@@ -645,7 +500,6 @@ describe('App.clusterController', function () {
       sinon.stub(controller, 'loadAuthorizations');
       sinon.stub(controller, 'getAllHostNames');
       sinon.stub(controller, 'loadClusterInfo');
-      sinon.stub(controller, 'restoreUpgradeState');
       sinon.stub(controller, 'loadClusterDataToModel');
       sinon.stub(App.router.get('mainController'), 'startPolling');
       sinon.stub(App.router.get('userSettingsController'), 'getAllUserSettings');
@@ -666,7 +520,6 @@ describe('App.clusterController', function () {
       controller.loadAuthorizations.restore();
       controller.getAllHostNames.restore();
       controller.loadClusterInfo.restore();
-      controller.restoreUpgradeState.restore();
       controller.loadClusterDataToModel.restore();
     });
 
@@ -695,11 +548,6 @@ describe('App.clusterController', function () {
       expect(controller.loadClusterInfo.calledOnce).to.be.true;
     });
 
-    it('restoreUpgradeState should be called', function() {
-      controller.loadClusterData();
-      expect(controller.restoreUpgradeState.calledOnce).to.be.true;
-    });
-
     it('getUser should be called', function() {
       controller.loadClusterData();
       expect(App.router.get('wizardWatcherController').getUser.calledOnce).to.be.true;
diff --git a/ambari-web/test/controllers/global/update_controller_test.js b/ambari-web/test/controllers/global/update_controller_test.js
index 62a6bb1..a6ed0f2 100644
--- a/ambari-web/test/controllers/global/update_controller_test.js
+++ b/ambari-web/test/controllers/global/update_controller_test.js
@@ -87,7 +87,6 @@ describe('App.UpdateController', function () {
       expect(App.StompClient.subscribe.calledWith('/events/hosts')).to.be.true;
       expect(App.StompClient.subscribe.calledWith('/events/alert_definitions')).to.be.true;
       expect(App.StompClient.subscribe.calledWith('/events/alert_group')).to.be.true;
-      expect(App.StompClient.subscribe.calledWith('/events/upgrade')).to.be.true;
     });
   });
 
diff --git a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
index b14bf86..b531926 100644
--- a/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/highAvailability/progress_popup_controller_test.js
@@ -282,7 +282,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
       sinon.stub(App.HostPopup, 'initPopup');
       sinon.stub(controller, 'isRequestRunning').returns(true);
       sinon.stub(controller, 'addObserver');
-      sinon.stub(controller, 'doPolling');
       sinon.stub(spinner, 'hide');
       controller.setProperties({
         requestIds: [1],
@@ -301,7 +300,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
       App.HostPopup.initPopup.restore();
       controller.isRequestRunning.restore();
       controller.addObserver.restore();
-      controller.doPolling.restore();
       spinner.hide.restore();
     });
 
@@ -320,10 +318,6 @@ describe('App.HighAvailabilityProgressPopupController', function () {
     it("spinnerPopup.hide should be called", function() {
       expect(spinner.hide.calledOnce).to.be.true;
     });
-
-    it("doPolling should be called", function() {
-      expect(controller.doPolling.calledOnce).to.be.true;
-    });
   });
 
   describe("#calculateHostsData()", function () {
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
deleted file mode 100644
index 0ebaee8..0000000
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ /dev/null
@@ -1,3606 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-var App = require('app');
-require('controllers/main/admin/stack_and_upgrade_controller');
-require('utils/string_utils');
-var testHelpers = require('test/helpers');
-
-describe('App.MainAdminStackAndUpgradeController', function() {
-
-  var controller = App.MainAdminStackAndUpgradeController.create({
-    getDBProperty: Em.K,
-    setDBProperty: Em.K,
-    setDBProperties: Em.K,
-    getDBProperties: Em.K
-  });
-
-  controller.removeObserver('App.upgradeState', controller, 'finish');
-
-
-  describe("#realRepoUrl", function() {
-    before(function () {
-      this.mock = sinon.stub(App, 'get');
-      this.mock.withArgs('apiPrefix').returns('apiPrefix');
-    });
-    after(function () {
-      this.mock.restore();
-    });
-    it("should be valid", function() {
-      var expected = 'apiPrefix/stacks?fields=versions/repository_versions/RepositoryVersions,' +
-        'versions/repository_versions/operating_systems/*,versions/repository_versions/operating_systems/repositories/*';
-      controller.propertyDidChange('realRepoUrl');
-      expect(controller.get('realRepoUrl')).to.equal(expected);
-    });
-  });
-
-  describe("#realStackUrl", function() {
-    before(function () {
-      this.mock = sinon.stub(App, 'get');
-      this.mock.withArgs('apiPrefix').returns('apiPrefix')
-        .withArgs('clusterName').returns('clusterName');
-    });
-    after(function () {
-      this.mock.restore();
-    });
-    it("should be valid", function() {
-      controller.propertyDidChange('realStackUrl');
-      expect(controller.get('realStackUrl')).to.equal('apiPrefix/clusters/clusterName/stack_versions?fields=*,repository_versions/*,repository_versions/operating_systems/OperatingSystems/*,repository_versions/operating_systems/repositories/*');
-    });
-  });
-
-  describe("#realUpdateUrl", function() {
-    before(function () {
-      this.mock = sinon.stub(App, 'get');
-      this.mock.withArgs('apiPrefix').returns('apiPrefix')
-        .withArgs('clusterName').returns('clusterName');
-    });
-    after(function () {
-      this.mock.restore();
-    });
-    it("realUpdateUrl is valid", function() {
-      controller.propertyDidChange('realUpdateUrl');
-      expect(controller.get('realUpdateUrl')).to.equal('apiPrefix/clusters/clusterName/stack_versions?fields=ClusterStackVersions/*');
-    });
-  });
-
-  describe("#requestStatus", function() {
-
-    beforeEach(function() {
-      this.mock = sinon.stub(App, 'get');
-    });
-    afterEach(function() {
-      this.mock.restore();
-    });
-
-    it("App.upgradeSuspended is true", function() {
-      this.mock.returns(true);
-      controller.set('upgradeData', { Upgrade: {request_status: 'ABORTED'}});
-      controller.propertyDidChange('requestStatus');
-      expect(controller.get('requestStatus')).to.equal('SUSPENDED');
-    });
-
-    it("state not ABORTED", function() {
-      this.mock.returns(false);
-      controller.set('upgradeData', { Upgrade: {request_status: 'NOT_REQUIRED'}});
-      controller.propertyDidChange('requestStatus');
-      expect(controller.get('requestStatus')).to.equal('NOT_REQUIRED');
-    });
-
-    it("upgradeData is null", function() {
-      this.mock.returns(false);
-      controller.set('upgradeData', null);
-      controller.propertyDidChange('requestStatus');
-      expect(controller.get('requestStatus')).to.equal('INIT');
-    });
-  });
-
-  describe("#load()", function() {
-    beforeEach(function(){
-      sinon.stub(controller, 'loadStackVersionsToModel').returns({
-        done: Em.clb
-      });
-      sinon.stub(controller, 'loadRepoVersionsToModel').returns({
-        done: Em.clb
-      });
-      sinon.stub(controller, 'loadCompatibleVersions').returns({
-        done: Em.clb
-      });
-      sinon.stub(App.StackVersion, 'find').returns([Em.Object.create({
-        state: 'CURRENT',
-        repositoryVersion: {
-          id: '1',
-          stackVersionType: 'HDP',
-          repositoryVersion: '2.2',
-          displayName: 'HDP-2.2'
-        }
-      })]);
-      controller.load();
-    });
-    afterEach(function(){
-      controller.loadStackVersionsToModel.restore();
-      controller.loadRepoVersionsToModel.restore();
-      controller.loadCompatibleVersions.restore();
-      App.StackVersion.find.restore();
-    });
-    it('loadStackVersionsToModel called with valid arguments', function () {
-      expect(controller.loadStackVersionsToModel.calledWith(true)).to.be.true;
-    });
-    it('loadRepoVersionsToModel called once', function () {
-      expect(controller.loadRepoVersionsToModel.calledOnce).to.be.true;
-    });
-    it('loadCompatibleVersions called once', function () {
-      expect(controller.loadCompatibleVersions.calledOnce).to.be.true;
-    });
-    it('currentVersion is corrent', function () {
-      expect(controller.get('currentVersion')).to.eql({
-        "id": "1",
-        "stack_name": 'HDP',
-        "repository_version": "2.2",
-        "repository_name": "HDP-2.2"
-      });
-    });
-  });
-
-  describe("#loadUpgradeData()", function() {
-
-    it("get entire data", function() {
-      controller.set('upgradeId', 1);
-      controller.loadUpgradeData();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.data');
-      expect(args[0]).to.exists;
-      expect(args[0].sender).to.be.eql(controller);
-      expect(args[0].data).to.be.eql({
-        id: 1
-      });
-    });
-    it("get only state", function() {
-      controller.set('upgradeId', 1);
-      controller.loadUpgradeData(true);
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.state');
-      expect(args[0]).to.exists;
-      expect(args[0].sender).to.be.eql(controller);
-      expect(args[0].data).to.be.eql({
-        id: 1
-      });
-    });
-    it("upgrade id is null", function() {
-      controller.set('upgradeId', null);
-      controller.loadUpgradeData();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.state');
-      var args2 = testHelpers.findAjaxRequest('name', 'admin.upgrade.data');
-      expect(args).to.not.exists;
-      expect(args2).to.not.exists;
-    });
-  });
-
-  describe("#loadUpgradeDataSuccessCallback()", function() {
-    var retryCases = [
-      {
-        isRetryPendingInitial: true,
-        status: 'ABORTED',
-        isRetryPending: true,
-        requestInProgress: true,
-        title: 'retry request not yet applied'
-      },
-      {
-        isRetryPendingInitial: true,
-        status: 'UPGRADING',
-        isRetryPending: false,
-        requestInProgress: false,
-        title: 'retry request applied'
-      },
-      {
-        isRetryPendingInitial: false,
-        status: 'ABORTED',
-        isRetryPending: false,
-        requestInProgress: true,
-        title: 'no retry request sent'
-      },
-      {
-        isRetryPendingInitial: false,
-        status: 'UPGRADING',
-        isRetryPending: false,
-        requestInProgress: true,
-        title: 'upgrade wasn\'t aborted'
-      }
-    ];
-    beforeEach(function () {
-      sinon.stub(controller, 'updateUpgradeData', Em.K);
-      sinon.stub(controller, 'setDBProperty', Em.K);
-      sinon.stub(controller, 'finish');
-    });
-    afterEach(function () {
-      controller.updateUpgradeData.restore();
-      controller.setDBProperty.restore();
-      controller.finish.restore();
-      App.set('upgradeState', 'NOT_REQUIRED');
-    });
-
-    it("correct data", function() {
-      var data = {
-        "Upgrade": {
-          "request_status": "UPGRADED"
-        },
-        "upgrade_groups": [
-          {
-            "UpgradeGroup": {
-              "id": 1
-            },
-            "upgrade_items": []
-          }
-        ]};
-      controller.loadUpgradeDataSuccessCallback(data);
-      expect(App.get('upgradeState')).to.equal('UPGRADED');
-      expect(controller.updateUpgradeData.calledOnce).to.be.true;
-      expect(controller.setDBProperty.calledWith('upgradeState', 'UPGRADED')).to.be.true;
-    });
-
-    it("data is null", function() {
-      var data = null;
-      controller.loadUpgradeDataSuccessCallback(data);
-      expect(controller.updateUpgradeData.called).to.be.false;
-      expect(controller.setDBProperty.called).to.be.false;
-    });
-
-    it("finish should be called", function() {
-      var data = {
-        "Upgrade": {
-          "request_status": "COMPLETED"
-        }
-      };
-      controller.loadUpgradeDataSuccessCallback(data);
-      expect(controller.finish.calledOnce).to.be.true;
-    });
-
-    retryCases.forEach(function (item) {
-      it(item.title, function () {
-        var data = {
-          "Upgrade": {
-            "request_status": item.status
-          }
-        };
-        controller.setProperties({
-          isRetryPending: item.isRetryPendingInitial,
-          requestInProgress: true
-        });
-        controller.loadUpgradeDataSuccessCallback(data);
-        expect(controller.getProperties(['isRetryPending', 'requestInProgress'])).to.eql({
-          isRetryPending: item.isRetryPending,
-          requestInProgress: item.requestInProgress
-        });
-      });
-    });
-  });
-
-  describe("#getUpgradeItem()", function() {
-
-    it("default callback", function() {
-      var item = Em.Object.create({
-        request_id: 1,
-        group_id: 2,
-        stage_id: 3
-      });
-      controller.getUpgradeItem(item);
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgrade_item');
-      expect(args[0]).to.exists;
-      expect(args[0].sender).to.be.eql(controller);
-      expect(args[0].success).to.be.equal('getUpgradeItemSuccessCallback');
-      expect(args[0].data).to.be.eql({
-        upgradeId: 1,
-        groupId: 2,
-        stageId: 3
-      });
-    });
-    it("custom callback", function() {
-      var item = Em.Object.create({
-        request_id: 1,
-        group_id: 2,
-        stage_id: 3
-      });
-      controller.getUpgradeItem(item, 'customCallback');
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgrade_item');
-      expect(args[0]).to.exists;
-      expect(args[0].sender).to.be.eql(controller);
-      expect(args[0].success).to.be.equal('customCallback');
-      expect(args[0].data).to.be.eql({
-        upgradeId: 1,
-        groupId: 2,
-        stageId: 3
-      });
-    });
-  });
-
-  describe("#openUpgradeDialog()", function () {
-    var mock = {
-      observer: Em.K
-    };
-    beforeEach(function () {
-      sinon.stub(App.router, 'transitionTo', Em.K);
-      sinon.spy(mock, 'observer');
-      this.mockAuthorized = sinon.stub(App, 'isAuthorized');
-      Em.addObserver(App, 'upgradeSuspended', mock, 'observer');
-    });
-    afterEach(function () {
-      App.router.transitionTo.restore();
-      mock.observer.restore();
-      this.mockAuthorized.restore();
-      Em.removeObserver(App, 'upgradeSuspended', mock, 'observer');
-    });
-
-    it('should open dialog', function () {
-      this.mockAuthorized.returns(true);
-      controller.openUpgradeDialog();
-      expect(App.router.transitionTo.calledWith('admin.stackUpgrade')).to.be.true;
-    });
-
-    it('upgradeSuspended should receive actual value', function () {
-      this.mockAuthorized.returns(true);
-      controller.openUpgradeDialog();
-      expect(mock.observer.calledOnce).to.be.true;
-    });
-
-    it('should not open dialog', function () {
-      this.mockAuthorized.returns(false);
-      controller.openUpgradeDialog();
-      expect(App.router.transitionTo.called).to.be.false;
-    });
-
-    it('should not open dialog, isWizardRestricted=true', function () {
-      this.mockAuthorized.returns(true);
-      controller.set('isWizardRestricted', true);
-      controller.openUpgradeDialog();
-      expect(App.router.transitionTo.called).to.be.false;
-    });
-
-    it('upgradeSuspended should not receive value', function () {
-      this.mockAuthorized.returns(false);
-      controller.openUpgradeDialog();
-      expect(mock.observer.called).to.be.false;
-    });
-
-    it('upgradeSuspended should not receive value, isWizardRestricted=true', function () {
-      this.mockAuthorized.returns(true);
-      controller.set('isWizardRestricted', true);
-      controller.openUpgradeDialog();
-      expect(mock.observer.called).to.be.false;
-    });
-  });
-
-  describe("#runPreUpgradeCheck()", function() {
-    it("make ajax call", function() {
-      controller.runPreUpgradeCheck(Em.Object.create({
-        id: '1',
-        repositoryVersion: '2.2',
-        displayName: 'HDP-2.2',
-        upgradeType: 'ROLLING',
-        skipComponentFailures: false,
-        skipSCFailures: false
-      }));
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.pre_upgrade_check');
-      expect(args[0]).to.exists;
-      expect(args[0].sender).to.be.eql(controller);
-      expect(args[0].data).to.be.eql({
-        id: '1',
-        value: '2.2',
-        label: 'HDP-2.2',
-        type: 'ROLLING',
-        targetStack: "HDP-2.2",
-        skipComponentFailures: 'false',
-        skipSCFailures: 'false'
-      });
-    });
-  });
-
-  describe("#runPreUpgradeCheckSuccess()", function () {
-    var cases = [
-      {
-        check: {
-          "check": "Work-preserving RM/NM restart is enabled in YARN configs",
-          "status": "FAIL",
-          "reason": "FAIL",
-          "failed_on": [],
-          "check_type": "SERVICE"
-        },
-        showClusterCheckPopupCalledCount: 1,
-        upgradeCalledCount: 0,
-        title: 'popup is displayed if fails are present'
-      },
-      {
-        check: {
-          "check": "Configuration Merge Check",
-          "status": "WARNING",
-          "reason": "Conflict",
-          "failed_on": [],
-          "failed_detail": [
-            {
-              type: 't0',
-              property: 'p0',
-              current: 'c0',
-              new_stack_value: 'n0',
-              result_value: 'n0'
-            },
-            {
-              type: 't1',
-              property: 'p1',
-              current: 'c1',
-              new_stack_value: null,
-              result_value: 'c1'
-            },
-            {
-              type: 't2',
-              property: 'p2',
-              current: 'c2',
-              new_stack_value: null,
-              result_value: null
-            }
-          ],
-          "check_type": "CLUSTER",
-          "id": "CONFIG_MERGE"
-        },
-        showClusterCheckPopupCalledCount: 1,
-        upgradeCalledCount: 0,
-        configs: [
-          {
-            type: 't0',
-            name: 'p0',
-            currentValue: 'c0',
-            recommendedValue: 'n0',
-            resultingValue: 'n0',
-            isDeprecated: false,
-            wasModified: false,
-            willBeRemoved: false
-          },
-          {
-            type: 't1',
-            name: 'p1',
-            currentValue: 'c1',
-            recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
-            resultingValue: 'c1',
-            isDeprecated: true,
-            wasModified: false,
-            willBeRemoved: false
-          },
-          {
-            type: 't2',
-            name: 'p2',
-            currentValue: 'c2',
-            recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
-            resultingValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved'),
-            isDeprecated: true,
-            wasModified: false,
-            willBeRemoved: true
-          }
-        ],
-        title: 'popup is displayed if warnings are present; configs merge conflicts'
-      },
-      {
-        check: {
-          "check": "Work-preserving RM/NM restart is enabled in YARN configs",
-          "status": "PASS",
-          "reason": "OK",
-          "failed_on": [],
-          "check_type": "SERVICE"
-        },
-        showClusterCheckPopupCalledCount: 0,
-        upgradeCalledCount: 1,
-        title: 'upgrade is started if fails and warnings are absent'
-      }
-    ];
-    beforeEach(function () {
-      sinon.stub(App, 'showClusterCheckPopup', Em.K);
-      sinon.stub(controller, 'upgrade', Em.K);
-    });
-    afterEach(function () {
-      App.showClusterCheckPopup.restore();
-      controller.upgrade.restore();
-    });
-    cases.forEach(function (item) {
-      it(item.title, function () {
-        controller.runPreUpgradeCheckSuccess(
-          {
-            items: [
-              {
-                UpgradeChecks: item.check
-              }
-            ]
-          }, null, {
-            label: 'name'
-          }
-        );
-        expect(controller.upgrade.callCount).to.equal(item.upgradeCalledCount);
-        expect(App.showClusterCheckPopup.callCount).to.equal(item.showClusterCheckPopupCalledCount);
-        if (item.check.id === 'CONFIG_MERGE') {
-          expect(App.showClusterCheckPopup.firstCall.args[2]).to.eql(item.configs);
-        }
-      });
-    });
-  });
-
-  describe("#initDBProperties()", function() {
-    before(function () {
-      this.mock = sinon.stub(controller, 'getDBProperties');
-    });
-    after(function () {
-      this.mock.restore();
-    });
-    it("set string properties", function () {
-      this.mock.returns({prop: 'string'});
-      controller.initDBProperties();
-      expect(controller.get('prop')).to.equal('string');
-    });
-    it("set number properties", function () {
-      this.mock.returns({prop: 0});
-      controller.initDBProperties();
-      expect(controller.get('prop')).to.equal(0);
-    });
-    it("set boolean properties", function () {
-      this.mock.returns({prop: false});
-      controller.initDBProperties();
-      expect(controller.get('prop')).to.be.false;
-    });
-    it("set undefined properties", function () {
-      this.mock.returns({prop: undefined});
-      controller.set('prop', 'value');
-      controller.initDBProperties();
-      expect(controller.get('prop')).to.equal('value');
-    });
-    it("set null properties", function () {
-      this.mock.returns({prop: null});
-      controller.set('prop', 'value');
-      controller.initDBProperties();
-      expect(controller.get('prop')).to.equal('value');
-    });
-  });
-
-  describe("#init()", function() {
-    before(function () {
-      sinon.stub(controller, 'initDBProperties', Em.K);
-    });
-    after(function () {
-      controller.initDBProperties.restore();
-    });
-    it("call initDBProperties", function () {
-      controller.init();
-      expect(controller.initDBProperties.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#upgrade()", function() {
-    var callArgs;
-
-    beforeEach(function () {
-      sinon.stub(controller, 'setDBProperty', Em.K);
-      controller.set('currentVersion', {
-        repository_version: '2.2'
-      });
-      controller.upgrade({
-        value: '2.2',
-        label: 'HDP-2.2'
-      });
-      callArgs = testHelpers.findAjaxRequest('name', 'admin.upgrade.start')[0];
-    });
-
-    afterEach(function () {
-      controller.setDBProperty.restore();
-    });
-
-    it("request-data is valid", function() {
-      expect(callArgs.data).to.eql({"value": '2.2', "label": 'HDP-2.2'});
-    });
-    it('request-name is valid', function () {
-      expect(callArgs.name).to.equal('admin.upgrade.start');
-    });
-    it('request-sender is valid', function () {
-      expect(callArgs.sender).to.eql(controller);
-    });
-    it('callback is valid', function () {
-      expect(callArgs.success).to.equal('upgradeSuccessCallback');
-    });
-    it('callback is called', function () {
-      expect(callArgs.callback).to.be.called;
-    });
-    it('setDBProperty is called with valid data', function () {
-      expect(controller.setDBProperty.calledWith('currentVersion', {
-        repository_version: '2.2'
-      })).to.be.true;
-    });
-  });
-
-  describe("#upgradeSuccessCallback()", function() {
-
-    beforeEach(function () {
-      sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
-      sinon.stub(controller, 'openUpgradeDialog', Em.K);
-      sinon.stub(controller, 'setDBProperties', Em.K);
-      sinon.stub(controller, 'load', Em.K);
-      var data = {
-        resources: [
-          {
-            Upgrade: {
-              request_id: 1
-            }
-          }
-        ]
-      };
-      controller.upgradeSuccessCallback(data, {}, {label: 'HDP-2.2.1', isDowngrade: true});
-    });
-
-    afterEach(function () {
-      App.clusterStatus.setClusterStatus.restore();
-      controller.openUpgradeDialog.restore();
-      controller.setDBProperties.restore();
-      controller.load.restore();
-    });
-
-    it('load is called ocne', function() {
-      expect(controller.load.calledOnce).to.be.true;
-    });
-    it('upgradeVersion is HDP-2.2.1', function() {
-      expect(controller.get('upgradeVersion')).to.equal('HDP-2.2.1');
-    });
-    it('upgradeData is null', function() {
-      expect(controller.get('upgradeData')).to.be.null;
-    });
-    it('isDowngrade is true', function() {
-      expect(controller.get('isDowngrade')).to.be.true;
-    });
-    it('App.clusterStatus.setClusterStatus is called once', function() {
-      expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
-    });
-    it('controller.openUpgradeDialog is called once', function() {
-      expect(controller.openUpgradeDialog.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#updateUpgradeData()", function() {
-    beforeEach(function () {
-      sinon.stub(controller, 'initUpgradeData', Em.K);
-    });
-    afterEach(function () {
-      controller.initUpgradeData.restore();
-    });
-    it("data loaded first time", function() {
-      controller.set('upgradeData', null);
-      controller.updateUpgradeData({});
-      expect(controller.initUpgradeData.calledWith({})).to.be.true;
-    });
-
-    describe('upgradeData exists', function () {
-
-      var groups;
-
-      beforeEach(function() {
-        var oldData = Em.Object.create({
-          upgradeGroups: [
-            Em.Object.create({
-              group_id: 1,
-              upgradeItems: [
-                Em.Object.create({
-                  stage_id: 1
-                })
-              ]
-            }),
-            Em.Object.create({
-              group_id: 2,
-              upgradeItems: [
-                Em.Object.create({
-                  stage_id: 2
-                }),
-                Em.Object.create({
-                  stage_id: 3
-                })
-              ]
-            })
-          ]
-        });
-        var newData = {
-          Upgrade: {
-            request_id: 1
-          },
-          upgrade_groups: [
-            {
-              UpgradeGroup: {
-                group_id: 1,
-                status: 'COMPLETED',
-                display_status: 'COMPLETED',
-                progress_percent: 100,
-                completed_task_count: 3
-              },
-              upgrade_items: [
-                {
-                  UpgradeItem: {
-                    stage_id: 1,
-                    status: 'COMPLETED',
-                    display_status: 'COMPLETED',
-                    progress_percent: 100
-                  }
-                }
-              ]
-            },
-            {
-              UpgradeGroup: {
-                group_id: 2,
-                status: 'ABORTED',
-                display_status: 'ABORTED',
-                progress_percent: 50,
-                completed_task_count: 1
-              },
-              upgrade_items: [
-                {
-                  UpgradeItem: {
-                    stage_id: 2,
-                    status: 'ABORTED',
-                    display_status: 'ABORTED',
-                    progress_percent: 99
-                  }
-                },
-                {
-                  UpgradeItem: {
-                    stage_id: 3,
-                    status: 'PENDING',
-                    display_status: 'PENDING',
-                    progress_percent: 0
-                  }
-                }
-              ]
-            }
-          ]
-        };
-        controller.set('upgradeData', oldData);
-        controller.updateUpgradeData(newData);
-        groups = controller.get('upgradeData.upgradeGroups');
-      });
-
-      describe("checking 1st group", function() {
-        it('status is COMPLETED', function () {
-          expect(groups[0].get('status')).to.equal('COMPLETED');
-        });
-        it('display_status is COMPLETED', function () {
-          expect(groups[0].get('display_status')).to.equal('COMPLETED');
-        });
-        it('progress_percent is 100', function () {
-          expect(groups[0].get('progress_percent')).to.equal(100);
-        });
-        it('completed_task_count = 3', function () {
-          expect(groups[0].get('completed_task_count')).to.equal(3);
-        });
-        it('upgradeItems.0.status is COMPLETED', function () {
-          expect(groups[0].get('upgradeItems')[0].get('status')).to.equal('COMPLETED');
-        });
-        it('upgradeItems.0.display_status is COMPLETED', function () {
-          expect(groups[0].get('upgradeItems')[0].get('display_status')).to.equal('COMPLETED');
-        });
-        it('upgradeItems.0.progress_percent is 100', function () {
-          expect(groups[0].get('upgradeItems')[0].get('progress_percent')).to.equal(100);
-        });
-        it('hasExpandableItems is true', function () {
-          expect(groups[0].get('hasExpandableItems')).to.be.true;
-        });
-      });
-
-      describe('checking 2nd group', function () {
-        it('status is ABORTED', function () {
-          expect(groups[1].get('status')).to.equal('ABORTED');
-        });
-        it('display_status is ABORTED', function () {
-          expect(groups[1].get('display_status')).to.equal('ABORTED');
-        });
-        it('progress_percent is 50', function () {
-          expect(groups[1].get('progress_percent')).to.equal(50);
-        });
-        it('completed_task_count = 1', function () {
-          expect(groups[1].get('completed_task_count')).to.equal(1);
-        });
-        it('upgradeItems.[].status = ["ABORTED", "PENDING"]', function () {
-          expect(groups[1].get('upgradeItems').mapProperty('status')).to.eql(['ABORTED', 'PENDING']);
-        });
-        it('upgradeItems.[].display_status = ["ABORTED", "PENDING"]', function () {
-          expect(groups[1].get('upgradeItems').mapProperty('display_status')).to.eql(['ABORTED', 'PENDING']);
-        });
-        it('upgradeItems.[].progress_percent = [99, 0]', function () {
-          expect(groups[1].get('upgradeItems').mapProperty('progress_percent')).to.eql([99, 0]);
-        });
-        it('hasExpandableItems is false', function () {
-          expect(groups[1].get('hasExpandableItems')).to.be.false;
-        });
-      });
-
-    });
-  });
-
-  describe("#initUpgradeData()", function() {
-    beforeEach(function () {
-      sinon.stub(controller, 'setDBProperty');
-      sinon.stub(controller, 'formatMessages');
-      var newData = {
-        Upgrade: {
-          request_id: 1,
-          downgrade_allowed: false
-        },
-        upgrade_groups: [
-          {
-            UpgradeGroup: {
-              group_id: 1
-            },
-            upgrade_items: [
-              {
-                UpgradeItem: {
-                  stage_id: 1,
-                  status: 'IN_PROGRESS'
-                }
-              },
-              {
-                UpgradeItem: {
-                  stage_id: 2
-                }
-              }
-            ]
-          },
-          {
-            UpgradeGroup: {
-              group_id: 2
-            },
-            upgrade_items: []
-          },
-          {
-            UpgradeGroup: {
-              group_id: 3
-            },
-            upgrade_items: [
-              {
-                UpgradeItem: {
-                  stage_id: 3,
-                  status: 'ABORTED'
-                }
-              },
-              {
-                UpgradeItem: {
-                  stage_id: 4,
-                  status: 'PENDING'
-                }
-              }
-            ]
-          }
-        ]
-      };
-      controller.initUpgradeData(newData);
-    });
-    afterEach(function () {
-      controller.setDBProperty.restore();
-      controller.formatMessages.restore();
-    });
-    it("setDBProperty called with valid arguments", function() {
-      expect(controller.setDBProperty.calledWith('downgradeAllowed', false)).to.be.true;
-    });
-    it('downgradeAllowed is false', function () {
-      expect(controller.get('downgradeAllowed')).to.be.false;
-    });
-    it('upgradeData.Upgrade.request_id is 1', function () {
-      expect(controller.get('upgradeData.Upgrade.request_id')).to.equal(1);
-    });
-    it('upgradeData.upgradeGroups contain valid data', function () {
-      var groups = controller.get('upgradeData.upgradeGroups');
-      expect(groups.mapProperty('group_id')).to.eql([3,2,1]);
-      expect(groups[2].get('upgradeItems').mapProperty('stage_id')).to.eql([2,1]);
-      expect(groups.mapProperty('hasExpandableItems')).to.eql([false, false, true]);
-    });
-  });
-
-  describe("#confirmDowngrade()", function() {
-
-    before(function () {
-      sinon.spy(App, 'showConfirmationPopup');
-      sinon.stub(controller, 'downgrade', Em.K);
-    });
-
-    after(function () {
-      App.showConfirmationPopup.restore();
-      controller.downgrade.restore();
-    });
-
-    it("show confirmation popup", function() {
-      controller.set('currentVersion', Em.Object.create({
-        repository_version: '2.2',
-        repository_name: 'HDP-2.2'
-      }));
-      var popup = controller.confirmDowngrade();
-      expect(App.showConfirmationPopup.calledOnce).to.be.true;
-      popup.onPrimary();
-      expect(controller.downgrade.calledWith(Em.Object.create({
-        repository_version: '2.2',
-        repository_name: 'HDP-2.2'
-      }))).to.be.true;
-    });
-  });
-
-  describe("#upgradeOptions()", function() {
-    var version = Em.Object.create({displayName: 'HDP-2.2'});
-    beforeEach(function () {
-      sinon.spy(App.ModalPopup, 'show');
-      sinon.spy(App, 'showConfirmationFeedBackPopup');
-      sinon.stub(controller, 'getSupportedUpgradeTypes').returns({
-        done: function (callback) {
-          callback([1]);
-          return {
-            always: function (alwaysCallback) {
-              alwaysCallback();
-              return {};
-            }
-          };
-        }
-      });
-      sinon.stub(controller, 'runPreUpgradeCheck', Em.K);
-      sinon.stub(App.RepositoryVersion, 'find').returns([
-        Em.Object.create({
-          status: 'CURRENT'
-        })
-      ]);
-      controller.get('runningCheckRequests').clear();
-    });
-
-    afterEach(function () {
-      App.ModalPopup.show.restore();
-      App.showConfirmationFeedBackPopup.restore();
-      controller.runPreUpgradeCheck.restore();
-      controller.getSupportedUpgradeTypes.restore();
-      controller.get('upgradeMethods').setEach('selected', false);
-      App.RepositoryVersion.find.restore();
-    });
-
-    describe("show confirmation popup", function() {
-
-      beforeEach(function () {
-        controller.set('isDowngrade', false);
-        this.popup = controller.upgradeOptions(false, version);
-      });
-
-      it('popup is shown', function () {
-        expect(App.ModalPopup.show.calledOnce).to.be.true;
-      });
-
-      it('all upgradeMethods have isCheckRequestInProgress = true', function () {
-        expect(controller.get('upgradeMethods').everyProperty('isCheckRequestInProgress')).to.be.true;
-      });
-
-      it('upgradeMethods no one is selected', function () {
-        expect(controller.get('upgradeMethods').someProperty('selected')).to.be.false;
-      });
-
-      describe('#popup.onPrimary', function () {
-
-        beforeEach(function () {
-          controller.get('upgradeMethods')[0].set('selected', true);
-          this.confirmPopup = this.popup.onPrimary();
-        });
-
-        it('showConfirmationFeedBackPopup is called once', function () {
-          expect(App.showConfirmationFeedBackPopup.calledOnce).to.be.true;
-        });
-
-        describe('#confirmPopup.onPrimary', function () {
-          beforeEach(function () {
-            this.confirmPopup.onPrimary();
-          });
-
-          it('runPreUpgradeCheck is called with correct version', function () {
-            expect(controller.runPreUpgradeCheck.calledWith(version)).to.be.true;
-          });
-
-          it('runningCheckRequests has 1 item', function () {
-            expect(controller.get('runningCheckRequests')).to.have.length(1);
-          });
-
-        });
-
-      });
-
-      describe('#popup.disablePrimary', function () {
-
-        beforeEach(function() {
-          this.mock = sinon.stub(App, 'get');
-        });
-
-        afterEach(function() {
-          App.get.restore();
-        });
-
-        it('should be disabled if no method is selected', function () {
-          expect(this.popup.get('disablePrimary')).to.be.true;
-        });
-
-        it('should be disabled if preupgradecheck is supproted and isPrecheckFailed is true', function () {
-          this.mock.returns(true);
-          this.popup.set('selectedMethod', Em.Object.create({
-            selected: true,
-            isPrecheckFailed: true,
-            isCheckRequestInProgress: false
-          }));
-
-          expect(this.popup.get('disablePrimary')).to.be.true;
-        });
-
-        it('should be disabled if preupgradecheck is supproted and isCheckRequestInProgress is true', function () {
-          this.popup.set('selectedMethod', Em.Object.create({
-            selected: true,
-            isPrecheckFailed: false,
-            isCheckRequestInProgress: true
-          }));
-          this.mock.returns(true);
-          expect(this.popup.get('disablePrimary')).to.be.true;
-        });
-
-        it('should be enabled with preupgrade check', function () {
-          this.popup.set('selectedMethod', Em.Object.create({
-            selected: true,
-            isPrecheckFailed: false,
-            isCheckRequestInProgress: false
-          }));
-          this.mock.returns(true);
-          expect(this.popup.get('disablePrimary')).to.be.false;
-        });
-
-        it('should be enabled without preupgrade check', function () {
-          this.popup.set('selectedMethod', Em.Object.create({
-            selected: true
-          }));
-          this.mock.returns(false);
-          expect(this.popup.get('disablePrimary')).to.be.false;
-        });
-
-      });
-
-    });
-
-    describe("NOT show confirmation popup on Downgrade", function() {
-      beforeEach(function () {
-        controller.set('isDowngrade', true);
-        controller.upgradeOptions(false, version);
-      });
-
-      it('runningCheckRequests has 1 item', function () {
-        expect( controller.get('runningCheckRequests')).to.have.length(1);
-      });
-
-    });
-  });
-
-  describe("#confirmUpgrade()", function() {
-    before(function () {
-      sinon.stub(controller, 'upgradeOptions', Em.K);
-    });
-    after(function () {
-      controller.upgradeOptions.restore();
-    });
-    it("show show upgrade options popup window", function() {
-      var version = Em.Object.create({displayName: 'HDP-2.2'});
-      controller.confirmUpgrade(version);
-      expect(controller.upgradeOptions.calledWith(false, version)).to.be.true;
-    });
-  });
-
-  describe("#downgrade", function() {
-    beforeEach(function () {
-      sinon.stub(controller, 'abortUpgrade').returns({
-        done: function(callback) {callback()}
-      });
-      sinon.stub(controller, 'startDowngrade');
-      controller.downgrade('versionInfo');
-    });
-
-    afterEach(function () {
-      controller.abortUpgrade.restore();
-      controller.startDowngrade.restore();
-    });
-
-    it('should run abortUpgrade', function() {
-      expect(controller.abortUpgrade.calledOnce).to.be.true;
-    });
-
-  });
-
-  describe("#startDowngrade()", function() {
-    beforeEach(function () {
-      sinon.stub(App.RepositoryVersion, 'find').returns([
-        Em.Object.create({
-          displayName: 'HDP-2.3',
-          repositoryVersion: '2.3'
-        })
-      ]);
-      controller.set('upgradeVersion', 'HDP-2.3');
-      controller.set('upgradeType', 'NON_ROLLING');
-      controller.startDowngrade(Em.Object.create({
-        id: '1',
-        repository_version: '2.2',
-        repository_name: 'HDP-2.2'
-      }));
-      this.callArgs = testHelpers.findAjaxRequest('name', 'admin.downgrade.start')[0];
-    });
-
-    afterEach(function () {
-      App.RepositoryVersion.find.restore();
-    });
-
-    it('request-data is valid', function () {
-      expect(this.callArgs.data).to.eql({
-        id: '1',
-        value: '2.2',
-        label: 'HDP-2.3',
-        isDowngrade: true,
-        upgradeType: "NON_ROLLING"
-      });
-    });
-    it('request-name is valid', function () {
-      expect(this.callArgs.name).to.be.equal('admin.downgrade.start');
-    });
-    it('request-sender is valid', function () {
-      expect(this.callArgs.sender).to.be.eql(controller);
-    });
-    it('callback is valid', function () {
-      expect(this.callArgs.success).to.be.equal('upgradeSuccessCallback');
-    });
-    it('callback is called', function () {
-      expect(this.callArgs.callback).to.be.called;
-    });
-  });
-
-  describe("#installRepoVersionPopup()", function () {
-    before(function () {
-      sinon.stub(controller, 'installRepoVersion', Em.K);
-      sinon.stub(App.Service, 'find').returns(Em.Object.create({
-        isLoaded: true
-      }));
-    });
-    after(function () {
-      controller.installRepoVersion.restore();
-      App.Service.find.restore();
-    });
-    it("show confirmation popup for non standart and available services", function () {
-      var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: false, stackServices: [Em.Object.create({
-        name: 'HDFS',
-        isUpgradable: true,
-        isAvailable: true
-      })]});
-      var popup = controller.installRepoVersionPopup(repo);
-      popup.onPrimary();
-      expect(controller.installRepoVersion.calledWith(repo)).to.be.true;
-    });
-    it("show pre-check popup for non standard and empty available services", function () {
-      var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: false, stackServices: []});
-      var popup = controller.installRepoVersionPopup(repo);
-      popup.onPrimary();
-      expect(controller.installRepoVersion.calledWith(repo)).to.be.false;
-    });
-    it("show confirmation popup for standart", function () {
-      var repo = Em.Object.create({'displayName': 'HDP-2.2', isStandard: true, stackServices: []});
-      var popup = controller.installRepoVersionPopup(repo);
-      popup.onPrimary();
-      expect(controller.installRepoVersion.calledWith(repo)).to.be.true;
-    });
-  });
-
-  describe("#installRepoVersion()", function () {
-
-    it("make ajax call", function () {
-      var repo = Em.Object.create({
-        stackVersionType: 'HDP',
-        stackVersionNumber: '2.2',
-        repositoryVersion: '2.2.1',
-        repoId: 1
-      });
-      controller.installRepoVersion(repo);
-      var args = testHelpers.findAjaxRequest('name', 'admin.stack_version.install.repo_version');
-      expect(args).to.exists;
-    });
-  });
-
-  describe("#installRepoVersionSuccess()", function() {
-    var mock = Em.Object.create({
-      id: 1,
-      defaultStatus: 'NOT_REQUIRED',
-      stackVersion: {}
-    });
-    beforeEach(function () {
-      sinon.spy(mock, 'set');
-      sinon.stub(App.db, 'set', Em.K);
-      sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
-      sinon.stub(App.RepositoryVersion, 'find').returns(mock);
-      sinon.stub(App, 'showAlertPopup');
-    });
-    afterEach(function () {
-      App.db.set.restore();
-      App.clusterStatus.setClusterStatus.restore();
-      App.RepositoryVersion.find.restore();
-      mock.set.restore();
-      App.showAlertPopup.restore();
-    });
-
-    it("App.showAlertPopup should be called", function() {
-      expect(controller.installRepoVersionSuccess({statusText: 'timeout'}, {}, {id: 1})).to.be.false;
-      expect(App.showAlertPopup.calledWith(
-        Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title'),
-        Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout')
-      )).to.be.true;
-    });
-
-    it("data sdtored to the local db", function() {
-      controller.installRepoVersionSuccess({Requests: {id: 1}}, {}, {id: 1});
-      expect(App.db.set.calledWith('repoVersionInstall', 'id', [1])).to.be.true;
-    });
-
-    it('clusterStatus is updated', function () {
-      controller.installRepoVersionSuccess({Requests: {id: 1}}, {}, {id: 1});
-      expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
-    });
-
-    it('App.RepositoryVersion models have valid states', function () {
-      controller.installRepoVersionSuccess({Requests: {id: 1}}, {}, {id: 1});
-      expect(App.RepositoryVersion.find.calledWith(1)).to.be.true;
-      expect(App.RepositoryVersion.find(1).get('defaultStatus')).to.equal('INSTALLING');
-      expect(App.RepositoryVersion.find(1).get('stackVersion.state')).to.equal('INSTALLING');
-    });
-  });
-
-  describe("#setUpgradeItemStatus()", function () {
-    var item;
-    beforeEach(function () {
-      item = Em.Object.create({
-        request_id: 1,
-        stage_id: 1,
-        group_id: 1
-      });
-      controller.setUpgradeItemStatus(item, 'PENDING');
-      this.callArgs = testHelpers.findAjaxRequest('name', 'admin.upgrade.upgradeItem.setState')[0];
-    });
-
-    it('request-data is valid', function () {
-      expect(this.callArgs.data).to.be.eql({upgradeId: 1, itemId: 1, groupId: 1, status: 'PENDING'});
-    });
-    it('request-name is valid', function () {
-      expect(this.callArgs.name).to.be.equal('admin.upgrade.upgradeItem.setState');
-    });
-    it('request-sendeer is valid', function () {
-      expect(this.callArgs.sender).to.be.eql(controller);
-    });
-    it('callback is called', function () {
-      expect(this.callArgs.callback).to.be.called;
-    });
-    it('item.status is PENDING', function () {
-      expect(item.get('status')).to.equal('PENDING');
-    });
-  });
-
-  describe("#prepareRepoForSaving()", function () {
-    it("prepare date for saving", function () {
-      var repo = Em.Object.create({
-        operatingSystems: [
-          Em.Object.create({
-            osType: "redhat6",
-            isDisabled: Em.computed.not('isSelected'),
-            repositories: [Em.Object.create({
-                "baseUrl": "111121",
-                "repoId": "HDP-2.2",
-                "repoName": "HDP",
-                hasError: false
-            }),
-              Em.Object.create({
-                "baseUrl": "1",
-                "repoId": "HDP-UTILS-1.1.0.20",
-                "repoName": "HDP-UTILS",
-                hasError: false
-              })]
-           })
-        ]
-      });
-      var result = {
-        "operating_systems": [
-          {
-            "OperatingSystems": {
-              "os_type": "redhat6",
-              "ambari_managed_repositories": true
-            },
-            "repositories": [
-              {
-                "Repositories": {
-                  "base_url": "111121",
-                  "repo_id": "HDP-2.2",
-                  "repo_name": "HDP"
-                }
-              },
-              {
-                "Repositories": {
-                  "base_url": "1",
-                  "repo_id": "HDP-UTILS-1.1.0.20",
-                  "repo_name": "HDP-UTILS"
-                }
-              }
-            ]
-          }
-        ]};
-      expect(controller.prepareRepoForSaving(repo)).to.eql(result);
-    });
-  });
-
-  describe("#getStackVersionNumber()", function(){
-    it("get stack version number", function(){
-      var repo = Em.Object.create({
-        "stackVersionType": 'HDP',
-        "stackVersion": '2.3',
-        "repositoryVersion": '2.2.1'
-      });
-
-      var stackVersion = controller.getStackVersionNumber(repo);
-      expect(stackVersion).to.equal('2.3');
-    });
-
-    it("get default stack version number", function(){
-      App.set('currentStackVersion', '1.2.3');
-      var repo = Em.Object.create({
-        "stackVersionType": 'HDP',
-        "repositoryVersion": '2.2.1'
-      });
-
-      var stackVersion = controller.getStackVersionNumber(repo);
-      expect(stackVersion).to.equal('1.2.3');
-    });
-  });
-
-  describe("#saveRepoOS()", function() {
-    before(function(){
-      this.mock = sinon.stub(controller, 'validateRepoVersions');
-      sinon.stub(controller, 'prepareRepoForSaving', Em.K);
-    });
-    after(function(){
-      this.mock.restore();
-      controller.prepareRepoForSaving.restore();
-    });
-    describe("validation errors present", function() {
-
-      beforeEach(function () {
-        this.mock.returns({
-          done: function(callback) {callback([1]);}
-        });
-        controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
-        this.args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.edit.repo');
-      });
-
-      it('validateRepoVersions is called with valid arguments', function () {
-        expect(controller.validateRepoVersions.calledWith(Em.Object.create({repoVersionId: 1}), true)).to.be.true;
-      });
-
-      it('prepareRepoForSaving is not called', function () {
-        expect(controller.prepareRepoForSaving.called).to.be.false;
-      });
-
-      it('no requests are sent', function () {
-        expect(this.args).to.not.exists;
-      });
-    });
-
-    describe("no validation errors", function() {
-
-      beforeEach(function () {
-        this.mock.returns({
-          done: function(callback) {callback([]);}
-        });
-        controller.saveRepoOS(Em.Object.create({repoVersionId: 1}), true);
-      });
-      it('validateRepoVersions is called with valid arguments', function () {
-        expect(controller.validateRepoVersions.calledWith(Em.Object.create({repoVersionId: 1}), true)).to.be.true;
-      });
-      it('prepareRepoForSaving is called with valid arguments', function () {
-        expect(controller.prepareRepoForSaving.calledWith(Em.Object.create({repoVersionId: 1}))).to.be.true;
-      });
-    });
-  });
-
-  describe("#validateRepoVersions()", function () {
-
-    beforeEach(function() {
-      sinon.stub(controller, 'validationCall').returns({
-        success: function() {
-          return {error: Em.K}
-        }
-      });
-      sinon.stub(controller, 'getStackVersionNumber').returns('v1')
-    });
-
-    afterEach(function() {
-      controller.validationCall.restore();
-      controller.getStackVersionNumber.restore();
-    });
-
-
-    it("validationCall should not be called", function () {
-      controller.validateRepoVersions(Em.Object.create({repoVersionId: 1}), true);
-      expect(controller.validationCall.called).to.be.false;
-    });
-    it("validationCall should be called", function () {
-      var os = Em.Object.create({
-        isSelected: true,
-        repositories: [
-          Em.Object.create()
-        ]
-      });
-      var repo = Em.Object.create({
-        repoVersionId: 1,
-        operatingSystems: [ os ]
-      });
-      controller.validateRepoVersions(repo, false);
-      expect(controller.validationCall.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#validationCall()", function () {
-
-    it("App.ajax.send should be called", function() {
-      controller.validationCall(Em.Object.create(), Em.Object.create(), 'v1');
-      var args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.validate.repo');
-      expect(args[0]).to.exists;
-    });
-  });
-
-  describe("#getUrl()", function() {
-    beforeEach(function(){
-      controller.reopen({
-        realStackUrl: 'realStackUrl',
-        realRepoUrl: 'realRepoUrl',
-        realUpdateUrl: 'realUpdateUrl'
-      });
-    });
-
-    it("full load is true, stack is null", function() {
-      expect(controller.getUrl(null, true)).to.equal('realRepoUrl');
-    });
-    it("full load is true, stack is valid", function() {
-      expect(controller.getUrl({}, true)).to.equal('realStackUrl');
-    });
-    it("full load is false, stack is valid", function() {
-      expect(controller.getUrl({}, false)).to.equal('realUpdateUrl');
-    });
-  });
-
-  describe("#loadStackVersionsToModel()", function () {
-    before(function () {
-      sinon.stub(App.HttpClient, 'get');
-    });
-    after(function () {
-      App.HttpClient.get.restore();
-    });
-    it("HttpClient did get-request", function () {
-      controller.loadStackVersionsToModel();
-      expect(App.HttpClient.get.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#loadRepoVersionsToModel()", function () {
-    before(function () {
-      sinon.stub(App.HttpClient, 'get');
-    });
-    after(function () {
-      App.HttpClient.get.restore();
-    });
-    it("HttpClient did get-request", function () {
-      controller.loadRepoVersionsToModel();
-      expect(App.HttpClient.get.calledOnce).to.be.true;
-    });
-  });
-
-  describe('#currentVersionObserver()', function () {
-
-    var cases = [
-      {
-        stackVersionType: 'HDP',
-        repoVersion: '2.2.1.1.0-1',
-        isStormMetricsSupported: false,
-        title: 'HDP < 2.2.2'
-      },
-      {
-        stackVersionType: 'HDP',
-        repoVersion: '2.2.2.1.0-1',
-        isStormMetricsSupported: true,
-        title: 'HDP 2.2.2'
-      },
-      {
-        stackVersionType: 'HDP',
-        repoVersion: '2.2.3.1.0-1',
-        isStormMetricsSupported: true,
-        title: 'HDP > 2.2.2'
-      },
-      {
-        stackVersionType: 'BIGTOP',
-        repoVersion: '0.8.1.1.0-1',
-        isStormMetricsSupported: true,
-        title: 'not HDP'
-      }
-    ];
-
-    afterEach(function () {
-      App.RepositoryVersion.find.restore();
-    });
-
-    cases.forEach(function (item) {
-      describe(item.title, function () {
-
-        beforeEach(function () {
-          sinon.stub(App.RepositoryVersion, 'find').returns([
-            Em.Object.create({
-              status: 'CURRENT',
-              stackVersionType: item.stackVersionType
-            })
-          ]);
-          controller.set('currentVersion', {
-            repository_version: item.repoVersion
-          });
-        });
-
-        it('isStormMetricsSupported is ' + (item.isStormMetricsSupported ? '' : 'not') + ' supported', function () {
-          expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
-        });
-
-      });
-    });
-
-  });
-
-  describe('#updateFinalize', function () {
-
-    beforeEach(function() {
-      controller.set('isFinalizeItem', true);
-      this.stub = sinon.stub(App, 'get');
-    });
-
-    afterEach(function () {
-      this.stub.restore();
-    });
-
-    describe('should do ajax-request', function () {
-
-      beforeEach(function () {
-        this.stub.withArgs('upgradeState').returns('HOLDING');
-        controller.updateFinalize();
-        this.args = testHelpers.findAjaxRequest('name', 'admin.upgrade.finalizeContext');
-      });
-
-      it('request is sent', function () {
-        expect(this.args[0]).to.exists;
-      });
-
-    });
-
-    describe('shouldn\'t do ajax-request', function () {
-
-      beforeEach(function () {
-        this.stub.withArgs('upgradeState').returns('HOLDING_TIMEDOUT');
-        controller.updateFinalize();
-        this.args = testHelpers.findAjaxRequest('name', 'admin.upgrade.finalizeContext');
-      });
-
-      it('request is not sent', function () {
-        expect(this.args).to.not.exists;
-      });
-
-      it('isFinalizeItem is false', function () {
-        expect(controller.get('isFinalizeItem')).to.be.false;
-      });
-
-    });
-
-  });
-
-  describe('#updateFinalizeSuccessCallback', function () {
-
-    it('data exists and Finalize should be true', function() {
-      var data = {
-        items: [
-          {
-            upgrade_groups: [
-              {
-                upgrade_items: [
-                  {
-                    UpgradeItem: {
-                      context: controller.get('finalizeContext'),
-                      status: "HOLDING"
-                    }
-                  }
-                ]
-              }
-            ]
-          }
-        ]
-      };
-      controller.set('isFinalizeItem', false);
-      controller.updateFinalizeSuccessCallback(data);
-      expect(controller.get('isFinalizeItem')).to.be.true;
-    });
-
-    it('data exists and Finalize should be false', function() {
-      var data = {
-        upgrade_groups: [
-          {
-            upgrade_items: [
-              {
-                UpgradeItem: {
-                  context: '!@#$%^&',
-                  status: "HOLDING"
-                }
-              }
-            ]
-          }
-        ]
-      };
-      controller.set('isFinalizeItem', true);
-      controller.updateFinalizeSuccessCallback(data);
-      expect(controller.get('isFinalizeItem')).to.be.false;
-    });
-
-    it('data doesn\'t exist', function() {
-      var data = null;
-      controller.set('isFinalizeItem', true);
-      controller.updateFinalizeSuccessCallback(data);
-      expect(controller.get('isFinalizeItem')).to.be.false;
-    });
-
-  });
-
-  describe('#updateFinalizeErrorCallback', function () {
-
-    it('should set isFinalizeItem to false', function () {
-      controller.set('isFinalizeItem', true);
-      controller.updateFinalizeErrorCallback();
-      expect(controller.get('isFinalizeItem')).to.be.false;
-    });
-
-  });
-
-  describe("#suspendUpgrade()", function() {
-    beforeEach(function () {
-      sinon.stub(controller, 'abortUpgradeWithSuspend').returns({
-        done: Em.clb
-      });
-      sinon.stub(controller, 'setDBProperty', Em.K);
-      sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
-      controller.suspendUpgrade();
-    });
-    afterEach(function () {
-      controller.abortUpgradeWithSuspend.restore();
-      controller.setDBProperty.restore();
-      App.clusterStatus.setClusterStatus.restore();
-    });
-    it("upgrade aborted", function() {
-      expect(controller.abortUpgradeWithSuspend.calledOnce).to.be.true;
-    });
-    it('App.upgradeState is ABORTED', function () {
-      expect(App.get('upgradeState')).to.equal('ABORTED');
-    });
-    it('new upgradeState is saved to the localDB', function () {
-      expect(controller.setDBProperty.calledWith('upgradeState', 'ABORTED')).to.be.true;
-    });
-    it('clusterStatus is updated', function () {
-      expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#resumeUpgrade()", function() {
-    beforeEach(function () {
-      sinon.stub(controller, 'retryUpgrade').returns({
-        done: Em.clb
-      });
-      sinon.stub(controller, 'setDBProperty', Em.K);
-      sinon.stub(App.clusterStatus, 'setClusterStatus', Em.K);
-      controller.resumeUpgrade();
-    });
-    afterEach(function () {
-      controller.retryUpgrade.restore();
-      controller.setDBProperty.restore();
-      App.clusterStatus.setClusterStatus.restore();
-    });
-    it("Upgrade is retrying", function() {
-      expect(controller.retryUpgrade.calledOnce).to.be.true;
-    });
-    it('App.upgradeState is PENDING', function () {
-      expect(App.get('upgradeState')).to.equal('PENDING');
-    });
-    it('new upgradeState is saved to the localDB', function () {
-      expect(controller.setDBProperty.calledWith('upgradeState', 'PENDING')).to.be.true;
-    });
-    it('clusterStatus is updated', function () {
-      expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#runUpgradeMethodChecks()", function() {
-    beforeEach(function () {
-      sinon.stub(controller, 'runPreUpgradeCheckOnly');
-    });
-    afterEach(function () {
-      controller.runPreUpgradeCheckOnly.restore();
-      controller.get('upgradeMethods').setEach('allowed', true);
-    });
-    it("no allowed upgrade methods", function () {
-      controller.get('upgradeMethods').setEach('allowed', false);
-      controller.runUpgradeMethodChecks();
-      expect(controller.runPreUpgradeCheckOnly.called).to.be.false;
-    });
-    it("Rolling method allowed", function () {
-      controller.get('upgradeMethods').setEach('allowed', true);
-      controller.runUpgradeMethodChecks(Em.Object.create({
-        id: 1,
-        repositoryVersion: '1.2',
-        displayName: 'V1'
-      }));
-      expect(controller.runPreUpgradeCheckOnly.calledWith({
-        id: 1,
-        label: 'V1',
-        type: 'ROLLING'
-      })).to.be.true;
-    });
-  });
-
-  describe("#restoreLastUpgrade()", function () {
-
-    var data = {
-      Upgrade: {
-        associated_version: '1.1',
-        request_id: 1,
-        direction: 'UPGRADE',
-        request_status: 'PENDING',
-        upgrade_type: 'ROLLING',
-        downgrade_allowed: true,
-        skip_failures: true,
-        suspended: false,
-        skip_service_check_failures: true,
-        to_version: '1'
-      }
-    };
-
-    beforeEach(function () {
-      sinon.stub(App.RepositoryVersion, 'find').returns([Em.Object.create({
-        repositoryVersion: '1',
-        displayName: 'HDP-1'
-      })]);
-      sinon.stub(controller, 'setDBProperties');
-      sinon.stub(controller, 'loadRepoVersionsToModel', function () {
-        return {
-          done: function (callback) {
-            callback();
-          }
-        }
-      });
-      sinon.stub(controller, 'setDBProperty');
-      sinon.stub(controller, 'initDBProperties');
-      sinon.stub(controller, 'loadUpgradeData');
-      controller.restoreLastUpgrade(data);
-    });
-    afterEach(function () {
-      App.RepositoryVersion.find.restore();
-      controller.setDBProperties.restore();
-      controller.loadRepoVersionsToModel.restore();
-      controller.setDBProperty.restore();
-      controller.initDBProperties.restore();
-      controller.loadUpgradeData.restore();
-    });
-    it('proper data is saved to the localDB', function () {
-      expect(controller.setDBProperties.getCall(0).args[0]).to.eql({
-        toVersion: '1.1',
-        upgradeId: 1,
-        isDowngrade: false,
-        upgradeState: 'PENDING',
-        upgradeType: "ROLLING",
-        isWizardRestricted: false,
-        downgradeAllowed: true,
-        isSuspended: false,
-        upgradeTypeDisplayName: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.RU.title'),
-        failuresTolerance: {
-          skipComponentFailures: true,
-          skipSCFailures: true
-        }
-      });
-    });
-    it('models are saved', function () {
-      expect(controller.loadRepoVersionsToModel.calledOnce).to.be.true;
-    });
-    it('initDBProperties is called', function () {
-      expect(controller.initDBProperties.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#getServiceCheckItemSuccessCallback()", function() {
-    var testCases = [
-      {
-        title: 'no tasks',
-        data: {
-          tasks: []
-        },
-        expected: {
-          slaveComponentStructuredInfo: null,
-          serviceCheckFailuresServicenames: []
-        }
-      },
-      {
-        title: 'no structured_out property',
-        data: {
-          tasks: [
-            {
-              Tasks: {}
-            }
-          ]
-        },
-        expected: {
-          slaveComponentStructuredInfo: null,
-          serviceCheckFailuresServicenames: []
-        }
-      },
-      {
-        title: 'no failures',
-        data: {
-          tasks: [
-            {
-              Tasks: {
-                structured_out: {}
-              }
-            }
-          ]
-        },
-        expected: {
-          slaveComponentStructuredInfo: null,
-          serviceCheckFailuresServicenames: []
-        }
-      },
-      {
-        title: 'service check failures',
-        data: {
-          tasks: [
-            {
-              Tasks: {
-                structured_out: {
-                  failures: {
-                    service_check: ['HDSF', 'YARN']
-                  }
-                }
-              }
-            }
-          ]
-        },
-        expected: {
-          slaveComponentStructuredInfo: {
-            hosts: [],
-            host_detail: {}
-          },
-          serviceCheckFailuresServicenames: ['HDSF', 'YARN']
-        }
-      },
-      {
-        title: 'host-component failures',
-        data: {
-          tasks: [
-            {
-              Tasks: {
-                structured_out: {
-                  failures: {
-                    service_check: ['HDSF'],
-                    host_component: {
-                      "host1": [
-                        {
-                          component: "DATANODE",
-                          service: 'HDFS'
-                        }
-                      ]
-                    }
-                  }
-                }
-              }
-            }
-          ]
-        },
-        expected: {
-          slaveComponentStructuredInfo: {
-            hosts: ['host1'],
-            host_detail: {
-              "host1": [
-                {
-                  component: "DATANODE",
-                  service: 'HDFS'
-                }
-              ]
-            }
-          },
-          serviceCheckFailuresServicenames: ['HDSF']
-        }
-      }
-    ];
-
-    testCases.forEach(function(test) {
-      it(test.title, function() {
-        controller.set('slaveComponentStructuredInfo', null);
-        controller.set('serviceCheckFailuresServicenames', []);
-        controller.getServiceCheckItemSuccessCallback(test.data);
-        expect(controller.get('serviceCheckFailuresServicenames')).eql(test.expected.serviceCheckFailuresServicenames);
-        expect(controller.get('slaveComponentStructuredInfo')).eql(test.expected.slaveComponentStructuredInfo);
-      });
-    });
-  });
-
-  describe("#getSlaveComponentItemSuccessCallback()", function () {
-    var testCases = [
-      {
-        title: 'no tasks',
-        data: {
-          tasks: []
-        },
-        expected: {
-          slaveComponentStructuredInfo: null
-        }
-      },
-      {
-        title: 'structured_out property absent',
-        data: {
-          tasks: [
-            {
-              Tasks: {}
-            }
-          ]
-        },
-        expected: {
-          slaveComponentStructuredInfo: null
-        }
-      },
-      {
-        title: 'structured_out property present',
-        data: {
-          tasks: [
-            {
-              Tasks: {
-                "structured_out" : {
-                  "hosts" : [
-                    "host1"
-                  ],
-                  "host_detail" : {
-                    "host1" : [
-                      {
-                        "service" : "FLUME",
-                        "component" : "FLUME_HANDLER"
-                      }
-                    ]
-                  }
-                }
-              }
-            }
-          ]
-        },
-        expected: {
-          slaveComponentStructuredInfo: {
-            "hosts" : [
-              "host1"
-            ],
-            "host_detail" : {
-              "host1" : [
-                {
-                  "service" : "FLUME",
-                  "component" : "FLUME_HANDLER"
-                }
-              ]
-            }
-          }
-        }
-      }
-    ];
-
-    testCases.forEach(function (test) {
-      it(test.title, function () {
-        controller.set('slaveComponentStructuredInfo', null);
-        controller.getSlaveComponentItemSuccessCallback(test.data);
-        expect(controller.get('slaveComponentStructuredInfo')).eql(test.expected.slaveComponentStructuredInfo);
-      });
-    });
-  });
-
-  describe('#getConfigsWarnings', function () {
-
-    var cases = [
-      {
-        configs: [],
-        title: 'no warning'
-      },
-      {
-        configsMergeWarning: {},
-        configs: [],
-        title: 'empty data'
-      },
-      {
-        configsMergeWarning: {
-          UpgradeChecks: {}
-        },
-        configs: [],
-        title: 'incomplete data'
-      },
-      {
-        configsMergeWarning: {
-          UpgradeChecks: {
-            failed_detail: {}
-          }
-        },
-        configs: [],
-        title: 'invalid data'
-      },
-      {
-        configsMergeWarning: {
-          UpgradeChecks: {
-            failed_detail: []
-          }
-        },
-        configs: [],
-        title: 'empty configs array'
-      },
-      {
-        configsMergeWarning: {
-          UpgradeChecks: {
-            status: 'FAIL',
-            failed_detail: [
-              {
-                type: 't0',
-                property: 'p0',
-                current: 'c0',
-                new_stack_value: 'n0',
-                result_value: 'r0'
-              },
-              {
-                type: 't1',
-                property: 'p1',
-                current: 'c1',
-                new_stack_value: 'n1'
-              },
-              {
-                type: 't2',
-                property: 'p2',
-                current: 'c2',
-                result_value: 'r2'
-              }
-            ]
-          }
-        },
-        configs: [],
-        title: 'not a warning'
-      },
-      {
-        configsMergeWarning: {
-          UpgradeChecks: {
-            status: 'WARNING',
-            failed_detail: [
-              {
-                type: 't0',
-                property: 'p0',
-                current: 'c0',
-                new_stack_value: 'n0',
-                result_value: 'r0'
-              },
-              {
-                type: 't1',
-                property: 'p1',
-                current: 'c1',
-                new_stack_value: 'n1'
-              },
-              {
-                type: 't2',
-                property: 'p2',
-                current: 'c2',
-                result_value: 'r2'
-              }
-            ]
-          }
-        },
-        configs: [
-          {
-            type: 't0',
-            name: 'p0',
-            currentValue: 'c0',
-            recommendedValue: 'n0',
-            isDeprecated: false,
-            resultingValue: 'r0',
-            wasModified: false,
-            willBeRemoved: false
-          },
-          {
-            type: 't1',
-            name: 'p1',
-            currentValue: 'c1',
-            recommendedValue: 'n1',
-            isDeprecated: false,
-            resultingValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved'),
-            wasModified: false,
-            willBeRemoved: true
-          },
-          {
-            type: 't2',
-            name: 'p2',
-            currentValue: 'c2',
-            recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
-            isDeprecated: true,
-            resultingValue: 'r2',
-            wasModified: false,
-            willBeRemoved: false
-          }
-        ],
-        title: 'normal case'
-      },
-      {
-        configsMergeWarning: {
-          UpgradeChecks: {
-            status: 'WARNING',
-            failed_detail: [
-              {
-                type: 't0',
-                property: 'p0',
-                current: 'c0',
-                new_stack_value: 'n0',
-                result_value: 'r0'
-              },
-              {
-                type: 't1',
-                property: 'p1',
-                current: 'c1',
-                new_stack_value: 'n1'
-              },
-              {
-                type: 't2',
-                property: 'p2',
-                current: 'c2',
-                result_value: 'r2'
-              },
-              {
-                type: 't3',
-                property: 'p3',
-                current: 'c3',
-                new_stack_value: 'c2',
-                result_value: 'c3'
-              }
-            ]
-          }
-        },
-        configs: [
-          {
-            type: 't0',
-            name: 'p0',
-            currentValue: 'c0',
-            recommendedValue: 'n0',
-            isDeprecated: false,
-            resultingValue: 'r0',
-            wasModified: false,
-            willBeRemoved: false
-          },
-          {
-            type: 't1',
-            name: 'p1',
-            currentValue: 'c1',
-            recommendedValue: 'n1',
-            isDeprecated: false,
-            resultingValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.willBeRemoved'),
-            wasModified: false,
-            willBeRemoved: true
-          },
-          {
-            type: 't2',
-            name: 'p2',
-            currentValue: 'c2',
-            recommendedValue: Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.deprecated'),
-            isDeprecated: true,
-            resultingValue: 'r2',
-            wasModified: false,
-            willBeRemoved: false
-          },
-          {
-            "currentValue": "c3",
-            "isDeprecated": false,
-            "name": "p3",
-            "recommendedValue": "c2",
-            "resultingValue": "c3",
-            "type": "t3",
-            "wasModified": true,
-            "willBeRemoved": false
-          }
-        ],
-        title: 'should skip warning when current and result_value are the same'
-      }
-    ];
-
-    cases.forEach(function (item) {
-      it(item.title, function () {
-        expect(controller.getConfigsWarnings(item.configsMergeWarning)).to.eql(item.configs);
-      });
-    });
-
-  });
-
-  describe('#runPreUpgradeCheckOnly', function () {
-
-    var appGetMock,
-      upgradeMethods = controller.get('upgradeMethods'),
-      cases = [
-      {
-        supportsPreUpgradeCheck: false,
-        ru: {
-          isCheckComplete: true,
-          isCheckRequestInProgress: false,
-          action: 'a'
-        },
-        eu: {
-          isCheckComplete: true,
-          isCheckRequestInProgress: false,
-          action: 'a'
-        },
-        ajaxCallCount: 0,
-        runningCheckRequestsLength: 0,
-        title: 'pre-upgrade checks not supported'
-      },
-      {
-        supportsPreUpgradeCheck: true,
-        ru: {
-          isCheckComplete: false,
-          isCheckRequestInProgress: true,
-          action: ''
-        },
-        eu: {
-          isCheckComplete: true,
-          isCheckRequestInProgress: false,
-          action: 'a'
-        },
-        ajaxCallCount: 1,
-        type: 'ROLLING',
-        runningCheckRequestsLength: 1,
-        title: 'rolling upgrade'
-      },
-      {
-        supportsPreUpgradeCheck: true,
-        ru: {
-          isCheckComplete: true,
-          isCheckRequestInProgress: false,
-          action: 'a'
-        },
-        eu: {
-          isCheckComplete: false,
-          isCheckRequestInProgress: true,
-          action: ''
-        },
-        ajaxCallCount: 1,
-        type: 'NON_ROLLING',
-        runningCheckRequestsLength: 1,
-        title: 'express upgrade'
-      }
-    ];
-
-    beforeEach(function () {
-      appGetMock = sinon.stub(App, 'get');
-      controller.get('runningCheckRequests').clear();
-      upgradeMethods.forEach(function (method) {
-        method.setProperties({
-          isCheckComplete: true,
-          isCheckRequestInProgress: false,
-          action: 'a'
-        });
-      });
-      App.ajax.send.restore();
-      sinon.stub(App.ajax, 'send').returns({});
-    });
-
-    afterEach(function () {
-      appGetMock.restore();
-    });
-
-    cases.forEach(function (item) {
-      describe(item.title, function () {
-        var runningCheckRequests;
-        beforeEach(function () {
-          runningCheckRequests = controller.get('runningCheckRequests');
-          appGetMock.returns(item.supportsPreUpgradeCheck);
-          controller.runPreUpgradeCheckOnly({
-            type: item.type
-          });
-          this.ajaxCalls = testHelpers.filterAjaxRequests('name', 'admin.upgrade.pre_upgrade_check');
-        });
-
-        it('ROLLING properties', function () {
-          expect(upgradeMethods.findProperty('type', 'ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 'action')).to.eql(item.ru);
-        });
-
-        it('NON_ROLLING properties', function () {
-          expect(upgradeMethods.findProperty('type', 'NON_ROLLING').getProperties('isCheckComplete', 'isCheckRequestInProgress', 'action')).to.eql(item.eu);
-        });
-
-        it(item.ajaxCallCount + ' requests sent', function () {
-          expect(this.ajaxCalls.length).to.be.equal(item.ajaxCallCount);
-        });
-
-        it('runningCheckRequests length is ' + item.runningCheckRequestsLength, function () {
-          expect(runningCheckRequests).to.have.length(item.runningCheckRequestsLength);
-        });
-
-        if (item.runningCheckRequestsLength) {
-          it('runningCheckRequests.type is ' + item.type, function () {
-            expect(runningCheckRequests[0].type).to.equal(item.type);
-          });
-        }
-
-      });
-    });
-
-  });
-
-
-  describe("#openConfigsInNewWindow()", function () {
-
-    var mock = {
-      document: {
-        write: function () {}
-      },
-      focus: function () {}
-    };
-
-    beforeEach(function(){
-      sinon.stub(window, 'open', function () {
-        return mock;
-      });
-      sinon.spy(mock.document, 'write');
-      sinon.spy(mock, 'focus');
-      controller.openConfigsInNewWindow({
-        context: [
-          {
-            type: 'type1',
-            name: 'name1',
-            currentValue: 'currentValue1',
-            recommendedValue: 'recommendedValue1',
-            resultingValue: 'resultingValue1'
-          },
-          {
-            type: 'type2',
-            name: 'name2',
-            currentValue: 'currentValue2',
-            recommendedValue: 'recommendedValue2',
-            resultingValue: 'resultingValue2'
-          }
-        ]
-      });
-    });
-
-    afterEach(function(){
-      window.open.restore();
-      mock.document.write.restore();
-      mock.focus.restore();
-    });
-
-    it('new window is open', function () {
-      expect(window.open.calledOnce).to.be.true;
-    });
-
-    it('new window content is valid', function () {
-      /*eslint-disable no-useless-concat */
-      expect(mock.document.write.calledWith('<table style="text-align: left;"><thead><tr>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.configType') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.propertyName') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.currentValue') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.recommendedValue') + '</th>' +
-        '<th>' + Em.I18n.t('popup.clusterCheck.Upgrade.configsMerge.resultingValue') + '</th>' +
-        '</tr></thead><tbody>' +
-        '<tr>' +
-        '<td>' + 'type1' + '</td>' +
-        '<td>' + 'name1' + '</td>' +
-        '<td>' + 'currentValue1' + '</td>' +
-        '<td>' + 'recommendedValue1' + '</td>' +
-        '<td>' + 'resultingValue1' + '</td>' +
-        '</tr>' +
-        '<tr>' +
-        '<td>' + 'type2' + '</td>' +
-        '<td>' + 'name2' + '</td>' +
-        '<td>' + 'currentValue2' + '</td>' +
-        '<td>' + 'recommendedValue2' + '</td>' +
-        '<td>' + 'resultingValue2' + '</td>' +
-        '</tr></tbody></table>')).to.be.true;
-      /*eslint-enable no-useless-concat */
-    });
-
-    it('document.focus is called once', function () {
-      expect(mock.focus.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#formatMessages()", function () {
-
-    it("item with malformed text", function() {
-      var item = Em.Object.create({
-        text: null
-      });
-      controller.formatMessages(item);
-      expect(item.get('messages')).to.be.empty;
-      expect(item.get('text')).to.be.null;
-    });
-
-    it("item with correct text", function() {
-      var item = Em.Object.create({
-        text: '[{"message":"msg1"},{"message":"msg2"}]'
-      });
-      controller.formatMessages(item);
-      expect(item.get('messages')).to.be.eql(['msg1', 'msg2']);
-      expect(item.get('text')).to.be.equal('msg1 msg2');
-    });
-  });
-
-  describe("#getUpgradeItemSuccessCallback()", function () {
-
-    beforeEach(function() {
-      controller.set('upgradeData', Em.Object.create({
-        upgradeGroups: [
-          Em.Object.create({
-            group_id: 'g1',
-            upgradeItems: [Em.Object.create({
-              stage_id: 'i1',
-              tasks: [],
-              isTasksLoaded: false
-            })]
-          })
-        ]
-      }));
-    });
-
-    it("group has different id", function() {
-      var data = {UpgradeItem: {group_id: 'g2'}};
-      controller.getUpgradeItemSuccessCallback(data);
-      expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.false;
-    });
-
-    it("item has different id", function() {
-      var data = {UpgradeItem: {group_id: 'g1', stage_id: 'i2'}};
-      controller.getUpgradeItemSuccessCallback(data);
-      expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.false;
-    });
-
-    it("item has no tasks", function() {
-      var data = {
-        UpgradeItem: {
-          group_id: 'g1',
-          stage_id: 'i1'
-        },
-        tasks: [
-          {
-            Tasks: {id: 't1'}
-          }
-        ]
-      };
-      controller.getUpgradeItemSuccessCallback(data);
-      expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.true;
-      expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('tasks')).to.not.be.empty;
-    });
-
-    it("item has tasks", function() {
-      controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].set('tasks', [
-        Em.Object.create({
-          id: 't1',
-          status: 'OLD'
-        })
-      ]);
-      var data = {
-        UpgradeItem: {
-          group_id: 'g1',
-          stage_id: 'i1'
-        },
-        tasks: [
-          {
-            Tasks: {
-              id: 't1',
-              status: 'NEW'
-            }
-          }
-        ]
-      };
-      controller.getUpgradeItemSuccessCallback(data);
-      expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('isTasksLoaded')).to.be.true;
-      expect(controller.get('upgradeData.upgradeGroups')[0].get('upgradeItems')[0].get('tasks')[0].get('status')).to.be.equal('NEW');
-    });
-  });
-
-  describe("#abortUpgrade()", function () {
-
-    it("isDowngrade is true", function() {
-      controller.set('isDowngrade', true);
-      controller.set('upgradeId', 1);
-      controller.abortUpgrade();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.abort');
-      expect(args[0]).to.be.eql({
-        name: 'admin.upgrade.abort',
-        sender: controller,
-        data: {
-          upgradeId: 1,
-          isDowngrade: true
-        },
-        error: 'abortDowngradeErrorCallback'
-      });
-    });
-
-    it("isDowngrade is false", function() {
-      controller.set('isDowngrade', false);
-      controller.set('upgradeId', 1);
-      controller.abortUpgrade();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.abort');
-      expect(args[0]).to.be.eql({
-        name: 'admin.upgrade.abort',
-        sender: controller,
-        data: {
-          upgradeId: 1,
-          isDowngrade: false
-        },
-        error: 'abortUpgradeErrorCallback'
-      });
-    });
-  });
-
-  describe("#abortUpgradeWithSuspend()", function () {
-
-    it("isDowngrade is true", function() {
-      controller.set('isDowngrade', true);
-      controller.set('upgradeId', 1);
-      controller.abortUpgradeWithSuspend();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.suspend');
-      expect(args[0]).to.be.eql({
-        name: 'admin.upgrade.suspend',
-        sender: controller,
-        data: {
-          upgradeId: 1,
-          isDowngrade: true
-        },
-        error: 'abortDowngradeErrorCallback'
-      });
-    });
-
-    it("isDowngrade is false", function() {
-      controller.set('isDowngrade', false);
-      controller.set('upgradeId', 1);
-      controller.abortUpgradeWithSuspend();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.suspend');
-      expect(args[0]).to.be.eql({
-        name: 'admin.upgrade.suspend',
-        sender: controller,
-        data: {
-          upgradeId: 1,
-          isDowngrade: false
-        },
-        error: 'abortUpgradeErrorCallback'
-      });
-    });
-  });
-
-  describe("#abortUpgradeErrorCallback()", function () {
-    var header = Em.I18n.t('admin.stackUpgrade.state.paused.fail.header');
-    var body = Em.I18n.t('admin.stackUpgrade.state.paused.fail.body');
-
-    beforeEach(function() {
-      sinon.stub(App, 'showAlertPopup');
-    });
-
-    afterEach(function() {
-      App.showAlertPopup.restore();
-    });
-
-    it("data is null", function() {
-      controller.abortUpgradeErrorCallback(null);
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is null", function() {
-      controller.abortUpgradeErrorCallback({responseText: null});
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is incorrect", function() {
-      controller.abortUpgradeErrorCallback({responseText: "//"});
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is correct", function() {
-      controller.abortUpgradeErrorCallback({responseText: '{"message": "msg"}'});
-      expect(App.showAlertPopup.calledWith(header, body + ' msg')).to.be.true;
-    });
-  });
-
-  describe("#abortDowngradeErrorCallback()", function () {
-    var header = Em.I18n.t('admin.stackDowngrade.state.paused.fail.header');
-    var body = Em.I18n.t('admin.stackDowngrade.state.paused.fail.body');
-
-    beforeEach(function() {
-      sinon.stub(App, 'showAlertPopup');
-    });
-
-    afterEach(function() {
-      App.showAlertPopup.restore();
-    });
-
-    it("data is null", function() {
-      controller.abortDowngradeErrorCallback(null);
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is null", function() {
-      controller.abortDowngradeErrorCallback({responseText: null});
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is incorrect", function() {
-      controller.abortDowngradeErrorCallback({responseText: "//"});
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is correct", function() {
-      controller.abortDowngradeErrorCallback({responseText: '{"message": "msg"}'});
-      expect(App.showAlertPopup.calledWith(header, body + ' msg')).to.be.true;
-    });
-  });
-
-  describe("#retryUpgrade()", function () {
-
-    it("requestInProgress should be true", function() {
-      controller.retryUpgrade();
-      expect(controller.get('requestInProgress')).to.be.true;
-    });
-
-    it("isRetryPending should be true", function() {
-      controller.retryUpgrade();
-      expect(controller.get('isRetryPending')).to.be.true;
-    });
-
-    it("App.ajax.send should be called", function() {
-      controller.set('upgradeId', 1);
-      controller.retryUpgrade();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.retry');
-      expect(args[0]).to.be.eql({
-        name: 'admin.upgrade.retry',
-        sender: controller,
-        data: {
-          upgradeId: 1
-        }
-      });
-    });
-  });
-
-  describe("#upgradeErrorCallback()", function () {
-    var header = Em.I18n.t('admin.stackVersions.upgrade.start.fail.title');
-    var body = "";
-
-    beforeEach(function() {
-      sinon.stub(App, 'showAlertPopup');
-    });
-
-    afterEach(function() {
-      App.showAlertPopup.restore();
-    });
-
-    it("data is null", function() {
-      controller.upgradeErrorCallback(null);
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is null", function() {
-      controller.upgradeErrorCallback({responseText: null});
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is incorrect", function() {
-      controller.upgradeErrorCallback({responseText: "//"});
-      expect(App.showAlertPopup.calledWith(header, body)).to.be.true;
-    });
-
-    it("data.responseText is correct", function() {
-      controller.upgradeErrorCallback({responseText: '{"message": "msg"}'});
-      expect(App.showAlertPopup.calledWith(header, 'msg')).to.be.true;
-    });
-  });
-
-  describe("#updateOptionsSuccessCallback()", function () {
-
-    it("skipComponentFailures: true, skipSCFailures: true", function() {
-      var params = {
-        skipComponentFailures: 'true',
-        skipSCFailures: 'true'
-      };
-      controller.updateOptionsSuccessCallback({}, {}, params);
-      expect(controller.get('failuresTolerance')).to.be.eql(Em.Object.create({
-        skipComponentFailures: true,
-        skipSCFailures: true
-      }));
-    });
-
-    it("skipComponentFailures: false, skipSCFailures: false", function() {
-      var params = {
-        skipComponentFailures: 'false',
-        skipSCFailures: 'false'
-      };
-      controller.updateOptionsSuccessCallback({}, {}, params);
-      expect(controller.get('failuresTolerance')).to.be.eql(Em.Object.create({
-        skipComponentFailures: false,
-        skipSCFailures: false
-      }));
-    });
-  });
-
-  describe("#openUpgradeOptions()", function () {
-
-    beforeEach(function() {
-      sinon.stub(controller, 'upgradeOptions');
-    });
-
-    afterEach(function() {
-      controller.upgradeOptions.restore();
-    });
-
-    it("upgradeOptions should not be called", function() {
-      controller.set('isDowngrade', true);
-      controller.openUpgradeOptions();
-      expect(controller.upgradeOptions.called).to.be.false;
-    });
-
-    it("upgradeOptions should be called", function() {
-      controller.set('isDowngrade', false);
-      controller.openUpgradeOptions();
-      expect(controller.upgradeOptions.calledWith(true, null)).to.be.true;
-    });
-  });
-
-  describe("#getSupportedUpgradeTypes()", function () {
-
-    beforeEach(function() {
-      controller.getSupportedUpgradeTypes({});
-    });
-
-    it("App.ajax.send should be called", function() {
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.get_supported_upgradeTypes');
-      expect(args[0]).to.be.eql({
-        name: "admin.upgrade.get_supported_upgradeTypes",
-        sender: controller,
-        data: {},
-        success: "getSupportedUpgradeTypesSuccess",
-        error: "getSupportedUpgradeTypesError"
-      });
-    });
-
-    it("getSupportedUpgradeError should be empty", function() {
-      expect(controller.get('getSupportedUpgradeError')).to.be.empty;
-    });
-
-    it("isUpgradeTypesLoaded should be false", function() {
-      expect(controller.get('isUpgradeTypesLoaded')).to.be.false;
-    });
-  });
-
-  describe("#getSupportedUpgradeTypesSuccess()", function () {
-    var testCases = [
-      {
-        data: {
-          items: []
-        },
-        expected: false
-      },
-      {
-        data: {
-          items: [{
-            CompatibleRepositoryVersions: {}
-          }]
-        },
-        expected: false
-      },
-      {
-        data: {
-          items: [{
-            CompatibleRepositoryVersions: {
-              upgrade_types: []
-            }
-          }]
-        },
-        expected: false
-      },
-      {
-        data: {
-          items: [{
-            CompatibleRepositoryVersions: {
-              upgrade_types: ['t1']
-            }
-          }]
-        },
-        expected: true
-      }
-    ];
-
-    testCases.forEach(function(test) {
-      it("data: " + JSON.stringify(test.data), function() {
-        controller.set('upgradeMethods', [Em.Object.create({
-          type: 't1',
-          allowed: true
-        })]);
-        controller.getSupportedUpgradeTypesSuccess(test.data);
-        expect(controller.get('upgradeMethods')[0].get('allowed')).to.be.equal(test.expected);
-      });
-    });
-  });
-
-  describe("#getSupportedUpgradeTypesError", function () {
-
-    it("correct responseText", function() {
-      controller.getSupportedUpgradeTypesError({responseText: JSON.stringify({
-        message: 'error'
-      })});
-      expect(controller.get('getSupportedUpgradeError')).to.be.equal('error');
-    });
-
-    it("invalid responseText", function() {
-      controller.getSupportedUpgradeTypesError({
-        responseText: '',
-        statusText: 'statusError'
-      });
-      expect(controller.get('getSupportedUpgradeError')).to.be.equal('statusError');
-    });
-  });
-
-  describe("#runPreUpgradeCheckOnlySuccess()", function () {
-
-    beforeEach(function() {
-      sinon.stub(controller, 'formatPreCheckMessage').returns({precheckResultsMessage: 'formatted'});
-      sinon.stub(controller, 'updateSelectedMethod');
-      sinon.stub(controller, 'addPrecheckMessageTooltip');
-      controller.set('upgradeMethods', [Em.Object.create({
-        type: 'ROLLING'
-      })]);
-    });
-
-    afterEach(function() {
-      controller.formatPreCheckMessage.restore();
-      controller.updateSelectedMethod.restore();
-      controller.addPrecheckMessageTooltip.restore();
-    });
-
-    it("failed check", function() {
-      var data = {
-        items: [
-          {
-            UpgradeChecks: {
-              status: 'FAIL'
-            }
-          }
-        ]
-      };
-      var properties = {
-        precheckResultsTitle: Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.title'),
-        precheckResultsData: data,
-        isCheckComplete: true,
-        action: 'openMessage',
-        precheckResultsMessage: '',
-        recheckResultsMessageClass: 'GREEN',
-        isPrecheckFailed: false,
-        precheckResultsMessageIconClass: 'glyphicon glyphicon-ok',
-        bypassedFailures: false
-      };
-      controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
-      expect(controller.formatPreCheckMessage.calledWith('FAIL', data, properties)).to.be.true;
-      var msg = controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('precheckResultsMessage');
-      expect(msg).to.be.equal('formatted');
-    });
-
-    it("success check", function() {
-      var data = {
-        items: []
-      };
-      controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
-      var msg = controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('precheckResultsMessage');
-      expect(msg).to.be.equal(Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed'));
-    });
-
-    it("updateSelectedMethod should be called", function() {
-      var data = {
-        items: []
-      };
-      controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
-      expect(controller.updateSelectedMethod.calledWith(false)).to.be.true;
-    });
-
-    it("addPrecheckMessageTooltip should be called", function() {
-      var data = {
-        items: []
-      };
-      controller.runPreUpgradeCheckOnlySuccess(data, {}, {type: 'ROLLING'});
-      expect(controller.addPrecheckMessageTooltip.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#formatPreCheckMessage()", function () {
-
-    it("should return formatted message", function() {
-      var data = {
-        items: [{
-          UpgradeChecks: {
-            status: 'FAIL'
-          }
-        }]
-      };
-      expect(controller.formatPreCheckMessage('FAIL', data, {precheckResultsMessage: 'pre'})).to.be.eql({
-        "precheckResultsMessage": "1 Required pre",
-        "precheckResultsMessageClass": "RED",
-        "isPrecheckFailed": true,
-        "precheckResultsMessageIconClass": "glyphicon glyphicon-remove"
-      });
-    });
-  });
-
-  describe("#addPrecheckMessageTooltip()", function () {
-
-    beforeEach(function() {
-      sinon.stub(Em.run, 'later', function(ctx, callback) {
-        callback();
-      });
-      sinon.stub(App, 'tooltip');
-    });
-
-    afterEach(function() {
-      Em.run.later.restore();
-      App.tooltip.restore();
-    });
-
-    it("App.tooltip should be called", function() {
-      controller.addPrecheckMessageTooltip();
-      expect(App.tooltip.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#runPreUpgradeCheckOnlyError()", function () {
-
-    it("upgradeMethod should be updated", function() {
-      controller.set('upgradeMethods', [Em.Object.create({
-        type: 'ROLLING'
-      })]);
-      controller.runPreUpgradeCheckOnlyError({}, {}, '', {}, {type: 'ROLLING'});
-      expect(JSON.stringify(controller.get('upgradeMethods').findProperty('type', 'ROLLING'))).to.be.equal(JSON.stringify({
-        "type": "ROLLING",
-        "precheckResultsMessage": Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.link'),
-        "precheckResultsTitle": Em.I18n.t('admin.stackVersions.version.upgrade.upgradeOptions.preCheck.msg.failed.title'),
-        "precheckResultsMessageClass": "RED",
-        "isPrecheckFailed": true,
-        "precheckResultsMessageIconClass": "glyphicon glyphicon-warning-sign",
-        "action": "rerunCheck"
-      }));
-    });
-  });
-
-  describe("#updateSelectedMethod()", function () {
-
-    beforeEach(function() {
-      controller.set('upgradeMethods', [
-        Em.Object.create({
-          type: 'ROLLING',
-          isPrecheckFailed: false,
-          selected: true
-        }),
-        Em.Object.create({
-          type: 'NON_ROLLING',
-          isPrecheckFailed: false,
-          selected: true
-        })
-      ]);
-    });
-
-    it("should select upgrade method", function() {
-      controller.set('upgradeType', 'ROLLING');
-      controller.updateSelectedMethod(true);
-      expect(controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('selected')).to.be.true;
-    });
-
-    it("isPrecheckFailed true for ROLLING and NON_ROLLING", function() {
-      controller.updateSelectedMethod(false);
-      expect(controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('selected')).to.be.true;
-      expect(controller.get('upgradeMethods').findProperty('type', 'NON_ROLLING').get('selected')).to.be.true;
-    });
-
-    it("isPrecheckFailed false for ROLLING and NON_ROLLING", function() {
-      controller.get('upgradeMethods').setEach('isPrecheckFailed', true);
-      controller.updateSelectedMethod(false);
-      expect(controller.get('upgradeMethods').findProperty('type', 'ROLLING').get('selected')).to.be.false;
-      expect(controller.get('upgradeMethods').findProperty('type', 'NON_ROLLING').get('selected')).to.be.false;
-    });
-  });
-
-  describe("#runPreUpgradeCheckError()", function () {
-
-    it("requestInProgress should be false", function() {
-      controller.runPreUpgradeCheckError();
-      expect(controller.get('requestInProgress')).to.be.false;
-    });
-  });
-
-  describe("#confirmRetryUpgrade()", function () {
-
-    beforeEach(function() {
-      sinon.spy(App, 'showConfirmationPopup');
-      sinon.stub(controller, 'retryUpgrade');
-    });
-
-    afterEach(function() {
-      App.showConfirmationPopup.restore();
-      controller.retryUpgrade.restore();
-    });
-
-    it("App.showConfirmationPopup should be called", function() {
-      var popup = controller.confirmRetryUpgrade(Em.Object.create());
-      expect(App.showConfirmationPopup.calledOnce).to.be.true;
-      popup.onPrimary();
-      expect(controller.retryUpgrade.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#confirmRetryDowngrade()", function () {
-
-    beforeEach(function() {
-      sinon.spy(App, 'showConfirmationPopup');
-      sinon.stub(controller, 'retryUpgrade');
-    });
-
-    afterEach(function() {
-      App.showConfirmationPopup.restore();
-      controller.retryUpgrade.restore();
-    });
-
-    it("App.showConfirmationPopup should be called", function() {
-      var popup = controller.confirmRetryDowngrade(Em.Object.create());
-      expect(App.showConfirmationPopup.calledOnce).to.be.true;
-      popup.onPrimary();
-      expect(controller.retryUpgrade.calledOnce).to.be.true;
-    });
-  });
-
-  describe("#installRepoVersionError()", function () {
-    var header = Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.title');
-    var mock = Em.Object.create({
-      id: 1,
-      defaultStatus: 'NOT_REQUIRED',
-      stackVersion: {}
-    });
-
-    beforeEach(function() {
-      sinon.stub(App, 'showAlertPopup');
-      sinon.stub(App.RepositoryVersion, 'find').returns(mock);
-    });
-
-    afterEach(function() {
-      App.showAlertPopup.restore();
-      App.RepositoryVersion.find.restore();
-    });
-
-    it("responseText is incorrect", function() {
-      var data = {
-        responseText: null
-      };
-      controller.installRepoVersionError(data, null, mock);
-      expect(App.showAlertPopup.calledWith(header, "")).to.be.true;
-    });
-
-    it("statusText is timeout", function() {
-      var data = {
-        responseText: '',
-        statusText: 'timeout'
-      };
-      controller.installRepoVersionError(data, null, mock);
-      expect(App.showAlertPopup.calledWith(header, Em.I18n.t('admin.stackVersions.upgrade.installPackage.fail.timeout'))).to.be.true;
-    });
-
-    it("responseText is correct", function() {
-      var data = {
-        responseText: '{"message":"msg"}'
-      };
-      controller.installRepoVersionError(data, null, mock);
-      expect(App.showAlertPopup.calledWith(header, 'msg')).to.be.true;
-    });
-  });
-
-  describe("#showProgressPopup()", function () {
-    var mock = {
-      initPopup: Em.K
-    };
-
-    beforeEach(function() {
-      sinon.stub(App.router, 'get').withArgs('highAvailabilityProgressPopupController').returns(mock);
-      sinon.stub(mock, 'initPopup');
-      sinon.stub(controller, 'getRepoVersionInstallId').returns([1]);
-    });
-
-    afterEach(function() {
-      App.router.get.restore();
-      mock.initPopup.restore();
-      controller.getRepoVersionInstallId.restore();
-    });
-
-    it("initPopup should be called", function() {
-      controller.showProgressPopup(Em.Object.create({displayName: 'v1'}));
-      expect(mock.initPopup.calledWith(
-        Em.I18n.t('admin.stackVersions.details.install.hosts.popup.title').format('v1'),
-        [1],
-        controller
-      )).to.be.true;
-    });
-  });
-
-  describe('#getRepoVersionInstallId', function() {
-    beforeEach(function() {
-      this.mockDB = sinon.stub(App.db, 'get');
-      this.mockRequests = sinon.stub(App.router, 'get');
-    });
-    afterEach(function() {
-      this.mockDB.restore();
-      this.mockRequests.restore();
-    });
-
-    it('should return id from latest version install', function() {
-      this.mockDB.returns(null);
-      this.mockRequests.returns([Em.Object.create({
-        name: 'Install version',
-        id: 1
-      })]);
-      expect(controller.getRepoVersionInstallId()[0]).to.be.equal(1);
-    });
-    it('should return id from localDB', function() {
-      this.mockDB.returns([2]);
-      this.mockRequests.returns([Em.Object.create({
-        name: 'Install version',
-        id: 2
-      })]);
-      expect(controller.getRepoVersionInstallId()[0]).to.be.equal(2);
-    });
-    it('should return id from latest version install and ignore deprecated localDb value', function() {
-      this.mockDB.returns([2]);
-      this.mockRequests.returns([Em.Object.create({
-        name: 'Install version',
-        id: 3
-      })]);
-      expect(controller.getRepoVersionInstallId()[0]).to.be.equal(3);
-    });
-  });
-
-  describe("#finish()", function () {
-
-    beforeEach(function() {
-      sinon.stub(controller, 'setDBProperties', Em.K);
-      sinon.stub(App.clusterStatus, 'setClusterStatus');
-      sinon.stub(controller, 'initDBProperties');
-      App.set('upgradeState', 'COMPLETED');
-      controller.set('upgradeVersion', '');
-    });
-
-    afterEach(function() {
-      controller.setDBProperties.restore();
-      controller.initDBProperties.restore();
-      App.clusterStatus.setClusterStatus.restore();
-    });
-
-    it("setDBProperties should be called", function() {
-      controller.finish();
-      expect(controller.setDBProperties.calledWith({
-        fromVersion: undefined,
-        upgradeId: undefined,
-        upgradeState: 'NOT_REQUIRED',
-        upgradeVersion: undefined,
-        currentVersion: undefined,
-        upgradeTypeDisplayName: undefined,
-        upgradeType: undefined,
-        isWizardRestricted: false,
-        failuresTolerance: undefined,
-        isDowngrade: undefined,
-        downgradeAllowed: undefined
-      })).to.be.true;
-    });
-
-    it("initDBProperties should be called", function() {
-      controller.finish();
-      expect(controller.initDBProperties).to.be.calledOnce;
-    });
-
-    it("App.clusterStatus.setClusterStatus should be called", function() {
-      controller.finish();
-      expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
-    });
-
-    it("upgradeState should be NOT_REQUIRED", function() {
-      controller.finish();
-      expect(App.get('upgradeState')).to.be.equal('NOT_REQUIRED');
-    });
-
-    it("currentStackVersion should be set", function() {
-      controller.set('upgradeVersion', 'HDP-2.2');
-      controller.finish();
-      expect(controller.get('upgradeVersion')).to.be.equal('HDP-2.2');
-    });
-  });
-
-  describe("#loadRepositories()", function () {
-
-    beforeEach(function() {
-      sinon.stub(App.router, 'get').withArgs('clusterController.isLoaded').returns(true);
-    });
-
-    afterEach(function() {
-      App.router.get.restore();
-    });
-
-    it("App.ajax.send should be called", function() {
-      App.set('currentStackVersion', 'HDP-2.2');
-      controller.loadRepositories();
-      var args = testHelpers.findAjaxRequest('name', 'cluster.load_repositories');
-      expect(args[0]).to.be.eql({
-        name: 'cluster.load_repositories',
-        sender: controller,
-        data: {
-          stackName: 'HDP',
-          stackVersion: '2.2'
-        },
-        success: 'loadRepositoriesSuccessCallback',
-        error: 'loadRepositoriesErrorCallback'
-      });
-    });
-  });
-
-  describe("#loadRepositoriesSuccessCallback()", function () {
-
-    it("allRepos should be set", function() {
-      var data = {
-        items: [
-          {
-            repositories: [
-              {
-                Repositories: {
-                  os_type: 'redhat',
-                  base_url: 'base_url',
-                  repo_id: 'repo_id',
-                  repo_name: 'repo_name',
-                  stack_name: 'stack_name',
-                  stack_version: 'stack_version'
-                }
-              }
-            ]
-          }
-        ]
-      };
-      controller.loadRepositoriesSuccessCallback(data);
-      expect(controller.get('allRepos')[0].name).to.be.equal('redhat');
-      expect(JSON.stringify(controller.get('allRepos')[0].repositories[0])).to.be.equal(JSON.stringify({
-        "baseUrl": "base_url",
-        "osType": "redhat",
-        "repoId": "repo_id",
-        "repoName": "repo_name",
-        "stackName": "stack_name",
-        "stackVersion": "stack_version",
-        "isFirst": true
-      }));
-    });
-  });
-
-  describe("#loadServiceVersionFromVersionDefinitions()", function () {
-
-    it("App.ajax.send should be called", function() {
-      App.set('clusterName', 'c1');
-      controller.loadServiceVersionFromVersionDefinitions();
-      var args = testHelpers.findAjaxRequest('name', 'cluster.load_current_repo_stack_services');
-      expect(args[0]).to.be.eql({
-        name: 'cluster.load_current_repo_stack_services',
-        sender: controller,
-        data: {
-          clusterName: App.get('clusterName')
-        },
-        success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
-        error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
-      });
-    });
-  });
-
-  describe("#loadServiceVersionFromVersionDefinitionsSuccessCallback()", function () {
-    var cases;
-    beforeEach(function() {
-      this.appGetStub = sinon.stub(App, 'get');
-    });
-
-    afterEach(function() {
-      App.get.restore();
-      controller.set('serviceVersionsMap', {});
-    });
-    cases = [
-      {
-        jsonData: {
-          items: [
-            {
-              ClusterStackVersions: {
-                version: '2.3',
-                stack: 'HDP',
-                state: 'NOT_REQUIRED'
-              },
-              repository_versions: [
-                {
-                  RepositoryVersions: {
-                    stack_services: [
-                      { name: 'S3', versions: ['v3']}
-                    ]
-                  }
-                }
-              ]
-            },
-            {
-              ClusterStackVersions: {
-                version: '2.2',
-                stack: 'HDP',
-                state: 'NOT_REQUIRED'
-              },
-              repository_versions: [
-                {
-                  RepositoryVersions: {
-                    stack_services: [
-                      { name: 'S2', versions: ['v2']}
-                    ]
-                  }
-                }
-              ]
-            }
-          ]
-        },
-        currentStackData: {
-          currentStackVersionNumber: '2.2',
-          currentStackName: 'HDP'
-        },
-        m: 'should add stack services from stack version by current stack name and version number',
-        e: { "S2": "v2"}
-      }
-    ];
-
-    cases.forEach(function(test) {
-      it(test.m, function() {
-        this.appGetStub.withArgs('currentStackName').returns(test.currentStackData.currentStackName)
-          .withArgs('currentStackVersionNumber').returns(test.currentStackData.currentStackVersionNumber);
-        controller.loadServiceVersionFromVersionDefinitionsSuccessCallback(test.jsonData);
-        expect(controller.get('serviceVersionsMap')).to.be.eql(test.e);
-      })
-    });
-  });
-
-  describe("#loadCompatibleVersions()", function () {
-
-    beforeEach(function() {
-      sinon.stub(App, 'get').returns('stack');
-    });
-
-    afterEach(function() {
-      App.get.restore();
-    });
-
-    it("App.ajax.send should be called", function() {
-      controller.loadCompatibleVersions();
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.get_compatible_versions');
-      expect(args[0]).to.be.eql({
-        name: 'admin.upgrade.get_compatible_versions',
-        sender: controller,
-        data: {
-          stackName: 'stack',
-          stackVersion: 'stack'
-        },
-        success: 'loadCompatibleVersionsSuccessCallback'
-      });
-    });
-  });
-
-  describe("#loadCompatibleVersionsSuccessCallback()", function () {
-    var mock = [
-      Em.Object.create({
-        repositoryVersion: 'HDP-1',
-        isCompatible: false
-      }),
-      Em.Object.create({
-        repositoryVersion: 'HDP-2',
-        isCompatible: false
-      })
-    ];
-
-    beforeEach(function() {
-      sinon.stub(App.RepositoryVersion, 'find').returns(mock);
-    });
-
-    afterEach(function() {
-      App.RepositoryVersion.find.restore();
-    });
-
-    it("should set isCompatible property", function() {
-      var data = {
-        items: [
-          {
-            CompatibleRepositoryVersions: {
-              repository_version: 'HDP-2'
-            }
-          }
-        ]
-      };
-      controller.loadCompatibleVersionsSuccessCallback(data);
-      expect(mock.mapProperty('isCompatible')).to.be.eql([false, true])
-    });
-  });
-  
-   describe('#confirmRevertPatchUpgrade', function() {
-    beforeEach(function() {
-      sinon.stub(App.RepositoryVersion, 'find').returns(Em.Object.create());
-      sinon.stub(App.ModalPopup, 'show');
-      sinon.stub(controller, 'getServicesToBeReverted');
-    });
-    afterEach(function() {
-      App.RepositoryVersion.find.restore();
-      App.ModalPopup.show.restore();
-      controller.getServicesToBeReverted.restore();
-    });
-
-    it('App.ModalPopup.show should be called', function() {
-      controller.confirmRevertPatchUpgrade(Em.Object.create());
-      expect(App.ModalPopup.show.calledOnce).to.be.true;
-    });
-  });
-
-  describe('#getServicesToBeReverted', function() {
-    beforeEach(function() {
-      sinon.stub(App.Service, 'find').returns(Em.Object.create({isLoaded: true}));
-    });
-    afterEach(function() {
-      App.Service.find.restore();
-    });
-
-    it('should return services which will be reverted', function() {
-      var version = Em.Object.create({
-        stackServices: [
-          Em.Object.create({
-            name: 'S1',
-            isAvailable: false,
-            displayName: 's1',
-            latestVersion: '1.0'
-          }),
-          Em.Object.create({
-            name: 'S2',
-            isAvailable: true,
-            displayName: 's2',
-            latestVersion: '2.0'
-          })
-        ]
-      });
-      var currentStack = Em.Object.create({
-        stackServices: [
-          Em.Object.create({
-            name: 'S2',
-            latestVersion: '2.1'
-          })
-        ]
-      });
-      expect(controller.getServicesToBeReverted(version, currentStack)).to.be.eql([
-        {
-          displayName: 's2',
-          fromVersion: '2.0',
-          toVersion: '2.1'
-        }
-      ]);
-    });
-  });
-
-  describe('#revertPatchUpgrade', function() {
-    it('App.ajax.send should be called', function() {
-      var version = Em.Object.create({
-        repositoryVersion: '1.1',
-        id: 2,
-        displayName: '1.2',
-        upgradeType: 'EXPRESS',
-        stackVersion: Em.Object.create({
-          revertUpgradeId: 1
-        })
-      });
-      controller.revertPatchUpgrade(version);
-      expect(controller.get('requestInProgress')).to.be.true;
-      var args = testHelpers.findAjaxRequest('name', 'admin.upgrade.revert');
-      expect(args[0]).to.exists;
-      expect(args[0].data).to.be.eql({
-        upgradeId: 1,
-        isDowngrade: true,
-        id: 2,
-        value: '1.1',
-        label: '1.2'
-      });
-      args[0].callback();
-      expect(controller.get('requestInProgress')).to.be.false;
-    });
-  });
-
-  describe('#getUpgradeDowngradeHeader', function() {
-
-    it('should return downgrade header', function() {
-      expect(controller.getUpgradeDowngradeHeader('t1', 'v1', true)).to.be.equal(
-        Em.I18n.t('admin.stackUpgrade.dialog.downgrade.header').format('v1')
-      );
-    });
-    it('should return patch upgrade header', function() {
-      expect(controller.getUpgradeDowngradeHeader('t1', 'v1', false, Em.Object.create({isPatch: true}))).to.be.equal(
-        Em.I18n.t('admin.stackUpgrade.dialog.upgrade.patch.header').format('t1', 'v1')
-      );
-    });
-    it('should return maint upgrade header', function() {
-      expect(controller.getUpgradeDowngradeHeader('t1', 'v1', false, Em.Object.create({isMaint: true}))).to.be.equal(
-        Em.I18n.t('admin.stackUpgrade.dialog.upgrade.maint.header').format('t1', 'v1')
-      );
-    });
-    it('should return upgrade header', function() {
-      expect(controller.getUpgradeDowngradeHeader('t1', 'v1', false, false)).to.be.equal(
-        Em.I18n.t('admin.stackUpgrade.dialog.upgrade.header').format('t1', 'v1')
-      );
-    });
-  });
-  
-  describe('#confirmDiscardRepoVersion', function() {
-    beforeEach(function() {
-      sinon.stub(App, 'showConfirmationPopup', Em.clb);
-      sinon.stub(controller, 'discardRepoVersion');
-    });
-    afterEach(function() {
-      App.showConfirmationPopup.restore();
-      controller.discardRepoVersion.restore();
-    });
-
-    it('discardRepoVersion should be called', function() {
-      controller.confirmDiscardRepoVersion(Em.Object.create());
-      expect(App.showConfirmationPopup.calledOnce).to.be.true;
-      expect(controller.discardRepoVersion.calledWith(Em.Object.create())).to.be.true;
-    });
-  });
-
-  describe('#discardRepoVersion', function() {
-
-    it('App.ajax.send should be called', function() {
-      var version = Em.Object.create({
-        id: 2,
-        stackVersionType: 'HDP',
-        stackVersionNumber: '2.5'
-      });
-      controller.discardRepoVersion(version);
-      expect(controller.get('requestInProgress')).to.be.true;
-      var args = testHelpers.findAjaxRequest('name', 'admin.stack_versions.discard');
-      expect(args[0]).to.exists;
-      expect(args[0].data).to.be.eql({
-        id: 2,
-        stackName: 'HDP',
-        stackVersion: '2.5'
-      });
-      args[0].callback();
-      expect(controller.get('requestInProgress')).to.be.false;
-    });
-  });
-
-  describe('#showUpgradeOptions', function () {
-    before(function () {
-      sinon.stub(controller, 'upgradeOptions', Em.K);
-    });
-    after(function () {
-      controller.upgradeOptions.restore();
-    });
-    it("show upgrade options popup window", function() {
-      var version = Em.Object.create({displayName: 'HDP-2.2'});
-      controller.showUpgradeOptions(version);
-      expect(controller.upgradeOptions.calledWith(false, version, true)).to.be.true;
-    });
-
-    it("runningCheckRequests has 1 item" + Em.I18n.t('common.dismiss'), function () {
-      var version = Em.Object.create({displayName: 'HDP-2.2'});
-      var popup = controller.upgradeOptions(false, version, true);
-      expect( controller.get('runningCheckRequests')).to.have.length(1);
-    })
-  });
-});
diff --git a/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js b/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
deleted file mode 100644
index 322c04f..0000000
--- a/ambari-web/test/mappers/socket/upgrade_state_mapper_test.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-require('mappers/socket/upgrade_state_mapper');
-
-describe('App.upgradeStateMapper', function () {
-
-  describe('#map', function() {
-    var mainAdminStackAndUpgradeController = Em.Object.create({
-      restoreLastUpgrade: sinon.spy(),
-      setDBProperty: sinon.spy(),
-      upgradeId: 1
-    });
-    beforeEach(function() {
-      sinon.stub(App.router, 'get').returns(mainAdminStackAndUpgradeController)
-    });
-    afterEach(function() {
-      App.router.get.restore();
-    });
-
-    it('should call restoreLastUpgrade on CREATE event', function() {
-      var event = {
-        type: 'CREATE',
-        associated_version: "2.5.4.0-121",
-        cluster_id: 2,
-        direction: "DOWNGRADE",
-        downgrade_allowed: false,
-        end_time: -1,
-        progress_percent: 0,
-        request_id: 26,
-        request_status: "PENDING",
-        revert_allowed: false,
-        skip_failures: false,
-        skip_service_check_failures: false,
-        start_time: -1,
-        suspended: false,
-        upgrade_id: 56,
-        upgrade_type: "NON_ROLLING"
-      };
-      App.upgradeStateMapper.map(event);
-      expect(mainAdminStackAndUpgradeController.restoreLastUpgrade.getCall(0).args[0]).to.be.eql({
-        Upgrade: event
-      });
-    });
-
-    it('should set upgrade state on UPDATE event', function() {
-      var event = {
-        end_time: -1,
-        progress_percent: 0,
-        request_id: 1,
-        request_status: "PENDING",
-        start_time: -1,
-        suspended: true,
-        type: "UPDATE"
-      };
-      App.upgradeStateMapper.map(event);
-      expect(App.get('upgradeState')).to.be.equal('PENDING');
-      expect(mainAdminStackAndUpgradeController.get('isSuspended')).to.be.true;
-      expect(mainAdminStackAndUpgradeController.setDBProperty.calledWith('upgradeState', 'PENDING')).to.be.true;
-      expect(mainAdminStackAndUpgradeController.setDBProperty.calledWith('isSuspended', true)).to.be.true;
-    });
-  });
-});
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/menu_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/menu_view_test.js
deleted file mode 100644
index f118e76..0000000
--- a/ambari-web/test/views/main/admin/stack_upgrade/menu_view_test.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-var view;
-
-describe('App.MainAdminStackMenuView', function () {
-
-  beforeEach(function () {
-    view = App.MainAdminStackMenuView.create({});
-  });
-
-  describe('#content', function () {
-
-    beforeEach(function () {
-      this.stub = sinon.stub(App, 'get');
-    });
-
-    afterEach(function () {
-      App.get.restore();
-    });
-
-    Em.A([
-        {
-          stackVersionsAvailable: true,
-          m: '`versions` is visible',
-          e: false
-        },
-        {
-          stackVersionsAvailable: false,
-          m: '`versions` is invisible',
-          e: true
-        }
-      ]).forEach(function (test) {
-        it(test.m, function () {
-          this.stub.withArgs('stackVersionsAvailable').returns(test.stackVersionsAvailable);
-          view.propertyDidChange('content');
-          expect(view.get('content').findProperty('name', 'versions').get('hidden')).to.equal(test.e);
-        });
-      });
-
-  });
-
... 3428 lines suppressed ...

-- 
To stop receiving notification emails like this one, please contact
jgolieb@apache.org.

[ambari] 02/02: Captured upgrade states as constants for future use.

Posted by jg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jgolieb pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git

commit 23016727d1a8aa8d337a5468841614284a045850
Author: Jason Golieb <jg...@hortonworks.com>
AuthorDate: Wed May 16 09:37:25 2018 -0700

    Captured upgrade states as constants for future use.
---
 ambari-web/app/utils/constants.js | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/ambari-web/app/utils/constants.js b/ambari-web/app/utils/constants.js
index fcaca90..0695d3e 100644
--- a/ambari-web/app/utils/constants.js
+++ b/ambari-web/app/utils/constants.js
@@ -25,4 +25,14 @@ var App = require('app');
 //which will enable comparisons against Boolean values from code to be performed correctly against the atttributes.
 //(Otherwise, you would end up setting attributes to the string values "true" and "false", which both evaluate to Boolean true.)
 App.False = false;
-App.True = true;
\ No newline at end of file
+App.True = true;
+
+//upgrade process states
+App.UpgradeState.NotRequired = 'NOT_REQUIRED';
+App.UpgradeState.Pending = 'PENDING';
+App.UpgradeState.InProgress = 'IN_PROGRESS';
+App.UpgradeState.Holding = 'HOLDING';
+App.UpgradeState.Completed = 'COMPLETED';
+App.UpgradeState.Aborted = 'ABORTED';
+App.UpgradeState.Failed = 'HOLDING_FAILED';
+App.UpgradeState.Timeout = 'HOLDING_TIMEDOUT';
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
jgolieb@apache.org.