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/14 17:53:07 UTC

[ambari] branch branch-feature-AMBARI-14714 updated: Removed unused code and deprecated API calls.

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


The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push:
     new 12fb707  Removed unused code and deprecated API calls.
12fb707 is described below

commit 12fb7072106c6e3d9136179061ef28381f6707e6
Author: Jason Golieb <jg...@hortonworks.com>
AuthorDate: Wed May 9 16:57:11 2018 -0400

    Removed unused code and deprecated API calls.
---
 ambari-web/app/controllers.js                      |    2 -
 .../app/controllers/global/cluster_controller.js   |   37 -
 ambari-web/app/controllers/installer.js            |  195 +---
 .../app/controllers/wizard/step1_controller.js     |  474 ---------
 .../app/controllers/wizard/step4_controller.js     |  642 ------------
 ambari-web/app/router.js                           |    8 +-
 ambari-web/app/routes/add_service_routes.js        |    4 +-
 ambari-web/app/routes/installer.js                 |   50 -
 ambari-web/app/routes/main.js                      |    4 +-
 ambari-web/app/templates/wizard/step1.hbs          |  292 ------
 .../step1/public_option_disabled_window_body.hbs   |   26 -
 .../app/templates/wizard/step1/vdf_upload.hbs      |   40 -
 .../templates/wizard/step1_addLocalRepository.hbs  |   55 -
 ambari-web/app/utils/ajax/ajax.js                  |   40 -
 ambari-web/app/views.js                            |    2 -
 .../main/admin/stack_upgrade/services_view.js      |  131 ---
 ambari-web/app/views/wizard/step1_view.js          |  290 ------
 .../controllers/global/cluster_controller_test.js  |  194 ----
 ambari-web/test/controllers/installer_test.js      |  221 +---
 ambari-web/test/controllers/wizard/step1_test.js   |  403 --------
 ambari-web/test/controllers/wizard/step4_test.js   | 1084 --------------------
 ambari-web/test/views/wizard/step1_view_test.js    |  230 -----
 ambari-web/test/views/wizard/step4_view_test.js    |   21 -
 23 files changed, 10 insertions(+), 4435 deletions(-)

diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index 46fe693..7f1b494 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -160,7 +160,6 @@ require('controllers/main/views_controller');
 require('controllers/main/views/details_controller');
 require('controllers/wizard/wizardStep_controller');
 require('controllers/wizard/step0_controller');
-require('controllers/wizard/step1_controller');
 require('controllers/wizard/step2_controller');
 require('controllers/wizard/step3_controller');
 require('controllers/wizard/configureDownload_controller');
@@ -169,7 +168,6 @@ require('controllers/wizard/customMpackRepos_controller');
 require('controllers/wizard/downloadMpacks_controller');
 require('controllers/wizard/customProductRepos_controller');
 require('controllers/wizard/verifyProducts_controller');
-require('controllers/wizard/step4_controller');
 require('controllers/wizard/step5_controller');
 require('controllers/wizard/step6_controller');
 require('controllers/wizard/step7_controller');
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 349a73c..e0122f2 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -495,43 +495,6 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
     });
   },
 
-  //TODO Replace this check with any other which is applicable to non-HDP stack
-  /**
-   * Check if HDP stack version is more or equal than 2.2.2 to determine if pluggable metrics for Storm are supported
-   * @method checkDetailedRepoVersion
-   * @returns {promise|*|promise|promise|HTMLElement|promise}
-   */
-  checkDetailedRepoVersion: function () {
-    var dfd;
-    var currentStackName = App.get('currentStackName');
-    var currentStackVersionNumber = App.get('currentStackVersionNumber');
-    if (currentStackName == 'HDP' && currentStackVersionNumber == '2.2') {
-      dfd = App.ajax.send({
-        name: 'cluster.load_detailed_repo_version',
-        sender: this,
-        success: 'checkDetailedRepoVersionSuccessCallback',
-        error: 'checkDetailedRepoVersionErrorCallback'
-      });
-    } else {
-      dfd = $.Deferred();
-      App.set('isStormMetricsSupported', currentStackName != 'HDP' || stringUtils.compareVersions(currentStackVersionNumber, '2.2') == 1);
-      dfd.resolve();
-    }
-    return dfd.promise();
-  },
-
-  checkDetailedRepoVersionSuccessCallback: function (data) {
-    var rv = (Em.getWithDefault(data, '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 version = Em.getWithDefault(rv || {}, 'repository_versions.0.RepositoryVersions.repository_version', false);
-    App.set('isStormMetricsSupported', stringUtils.compareVersions(version, '2.2.2') > -1 || !version);
-  },
-  checkDetailedRepoVersionErrorCallback: function () {
-    App.set('isStormMetricsSupported', true);
-  },
-
   /**
    * Load required data for all upgrades from API
    * @returns {$.ajax}
diff --git a/ambari-web/app/controllers/installer.js b/ambari-web/app/controllers/installer.js
index c4bc072..06c41f0 100644
--- a/ambari-web/app/controllers/installer.js
+++ b/ambari-web/app/controllers/installer.js
@@ -47,8 +47,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     "downloadMpacks",
     "customProductRepos",
     "verifyProducts",
-    //"step1",
-    //"step4",
     "step5",
     "step6",
     "step7",
@@ -182,11 +180,7 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     return jQuery.extend({}, this.get('clusterStatusTemplate'));
   },
 
-  getHosts: function () {
-    return [];
-  },
-
-  /**
+   /**
    * Remove host from model. Used at <code>Confirm hosts(step2)</code> step
    * @param hosts Array of hosts, which we want to delete
    */
@@ -200,29 +194,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
   },
 
   /**
-   * Load services data. Will be used at <code>Select services(step4)</code> step
-   */
-  loadServices: function () {
-    var dfd = $.Deferred();
-    var self = this;
-    var stackServices = App.StackService.find().mapProperty('serviceName');
-    if (!(stackServices.length && App.StackService.find().objectAt(0).get('stackVersion') === App.get('currentStackVersionNumber'))) {
-      this.loadServiceComponents().complete(function () {
-        self.set('content.services', App.StackService.find().forEach(function (item) {
-          // user the service version from VersionDefinition
-          var serviceInStack = App.Stack.find().findProperty('isSelected').get('stackServices').findProperty('name', item.get('serviceName'));
-          var serviceVersionDisplay = serviceInStack ? serviceInStack.get('latestVersion') : item.get('serviceVersion');
-          item.set('serviceVersionDisplay', serviceVersionDisplay);
-        }));
-        dfd.resolve();
-      });
-    } else {
-      dfd.resolve();
-    }
-    return dfd.promise();
-  },
-
-  /**
    * Load data for services selected from mpacks. Will be used at <code>Download Mpacks</code> step submit action.
    *
    * @param  {string} stackName
@@ -250,11 +221,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     const message = Em.I18n.t('installer.error.mpackServiceInfo');
 
     this.addError(message);
-    // App.showAlertPopup(
-    //   Em.I18n.t('common.error'), //header
-    //   message //body
-    // );
-
     return message;
     
     console.log(`${message} ${status} - ${error}`);
@@ -318,32 +284,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
 
   stacks: [],
 
-  mergeChanges: function (repos, oses, stacks) {
-    var _repos = repos || [];
-    var _oses = oses || [];
-    var _stacks = stacks || [];
-    _repos.forEach(function (repo) {
-      App.Repository.find().findProperty('id', repo.id).set('baseUrl', repo.base_url);
-    });
-    _oses.forEach(function (os) {
-      if (App.OperatingSystem.find().findProperty('id', os.id)) {
-        App.OperatingSystem.find().findProperty('id', os.id).set('isSelected', os.is_selected);
-      }
-    });
-    //should delete the record on going to step 2, on going back to step 1, still need the record
-    if (App.router.get('currentState.name') != "step1") {
-      App.OperatingSystem.find().filterProperty('isSelected', false).forEach(function (os) {
-        App.stackMapper.deleteRecord(os);
-      });
-    }
-    _stacks.forEach(function (_stack) {
-      var stack = App.Stack.find().findProperty('id', _stack.id);
-      if (stack) {
-        stack.set('useRedhatSatellite', _stack.use_redhat_satellite);
-      }
-    });
-  },
-
   setSelected: function (isStacksExistInDb) {
     if (!isStacksExistInDb) {
       var stacks = App.Stack.find();
@@ -355,50 +295,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
   },
 
   /**
-   * Get the the repo version (to install) info, this data will be POST
-   * @method startDeploy
-   */
-  getSelectedRepoVersionData: function () {
-    var vdfData = App.db.getLocalRepoVDFData();
-    var selectedStack = App.Stack.find().findProperty('isSelected', true);
-    var isXMLdata = false;
-    var data = {};
-    if (selectedStack && selectedStack.get('showAvailable')) {
-      //meaning user selected a public repo
-      data = {
-        "VersionDefinition": {
-          "available": selectedStack.get('id')
-        }
-      };
-      isXMLdata = false;
-    } else if (vdfData && validator.isValidURL(vdfData)) {
-      // meaning user uploaded a VDF via entering URL
-      data = {
-        "VersionDefinition": {
-          "version_url": vdfData
-        }
-      };
-      isXMLdata = false;
-    } else if (vdfData) {
-      // meaning user uploaded a local VDF.xml file
-      isXMLdata = true;
-      data = vdfData;
-    } else {
-      return null;
-    }
-    return {
-      isXMLdata: isXMLdata,
-      data: data
-    };
-  },
-
-  /**
-   * onError callback for loading stacks data
-   */
-  loadStacksVersionsErrorCallback: function () {
-  },
-
-  /**
    * check server version and web client version
    */
   checkServerClientVersion: function () {
@@ -436,38 +332,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
   },
 
   /**
-   * set stacks from server to content and local DB
-   */
-  setStacks: function () {
-    App.db.setStacks(App.Stack.find().slice());
-    this.set('content.stacks', App.Stack.find());
-    App.db.setOses(App.OperatingSystem.find().slice());
-    App.db.setRepos(App.Repository.find().slice());
-  },
-
-  /**
-   * Save data to model
-   * @param stepController App.WizardStep4Controller
-   */
-  saveServices: function (stepController) {
-    var selectedServiceNames = [];
-    var installedServiceNames = [];
-    stepController.filterProperty('isSelected').forEach(function (item) {
-      selectedServiceNames.push(item.get('serviceName'));
-    });
-    stepController.filterProperty('isInstalled').forEach(function (item) {
-      installedServiceNames.push(item.get('serviceName'));
-    });
-    this.set('content.services', App.StackService.find());
-    this.set('content.selectedServiceNames', selectedServiceNames);
-    this.set('content.installedServiceNames', installedServiceNames);
-    this.setDBProperties({
-      selectedServiceNames: selectedServiceNames,
-      installedServiceNames: installedServiceNames
-    });
-  },
-
-  /**
    * Save Master Component Hosts data to Main Controller
    * @param stepController App.WizardStep5Controller
    * @param  skip  {Boolean}
@@ -910,10 +774,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     this.gotoStep('step0');
   },
 
-  gotoStep1: function () {
-    this.gotoStep('step1');
-  },
-
   gotoStep2: function () {
     this.gotoStep('step2');
   },
@@ -922,10 +782,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     this.gotoStep('step3');
   },
 
-  gotoStep4: function () {
-    this.gotoStep('step4');
-  },
-
   gotoStep5: function () {
     this.gotoStep('step5');
   },
@@ -978,10 +834,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     return this.get('currentStep') == this.getStepIndex('step0');
   }.property('currentStep'),
 
-  isStep1: function () {
-    return this.get('currentStep') == this.getStepIndex('step1');
-  }.property('currentStep'),
-
   isStep2: function () {
     return this.get('currentStep') == this.getStepIndex('step2');
   }.property('currentStep'),
@@ -990,10 +842,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     return this.get('currentStep') == this.getStepIndex('step3');
   }.property('currentStep'),
 
-  isStep4: function () {
-    return this.get('currentStep') == this.getStepIndex('step4');
-  }.property('currentStep'),
-
   isStep5: function () {
     return this.get('currentStep') == this.getStepIndex('step5');
   }.property('currentStep'),
@@ -1096,47 +944,6 @@ App.InstallerController = App.WizardController.extend(App.Persist, {
     }
   },
 
-  /**
-   * Compare jdk versions used for ambari and selected stack.
-   * Validation check will fire only for non-custom jdk configuration.
-   *
-   * @param {Function} successCallback
-   * @param {Function} failCallback
-   */
-  validateJDKVersion: function (successCallback, failCallback) {
-    var selectedStack = App.Stack.find().findProperty('isSelected', true),
-        currentJDKVersion = App.router.get('clusterController.ambariProperties')['java.version'],
-        // use min as max, or max as min version, in case when some of them missed
-        minJDKVersion = selectedStack.get('minJdkVersion') || selectedStack.get('maxJdkVersion'),
-        maxJDKVersion = selectedStack.get('maxJdkVersion') || selectedStack.get('minJdkVersion'),
-        t = Em.I18n.t,
-        fCallback = failCallback || function() {},
-        sCallback = successCallback || function() {};
-
-    // Skip jdk check if min and max required version not set in stack definition.
-    if (!minJDKVersion && !maxJDKVersion) {
-      sCallback();
-      return;
-    }
-
-    if (currentJDKVersion) {
-      if (stringUtils.compareVersions(currentJDKVersion, minJDKVersion) < 0 ||
-          stringUtils.compareVersions(maxJDKVersion, currentJDKVersion) < 0) {
-        // checks and process only minor part for now
-        var versionDistance = parseInt(maxJDKVersion.split('.')[1], 10) - parseInt(minJDKVersion.split('.')[1], 10);
-        var versionsList = [minJDKVersion];
-        for (var i = 1; i < versionDistance + 1; i++) {
-          versionsList.push("" + minJDKVersion.split('.')[0] + '.' + (+minJDKVersion.split('.')[1] + i));
-        }
-        var versionsString = stringUtils.getFormattedStringFromArray(versionsList, t('or'));
-        var popupBody = t('popup.jdkValidation.body').format(selectedStack.get('stackName') + ' ' + selectedStack.get('stackVersion'), versionsString, currentJDKVersion);
-        App.showConfirmationPopup(sCallback, popupBody, fCallback, t('popup.jdkValidation.header'), t('common.proceedAnyway'), 'danger');
-        return;
-      }
-    }
-    sCallback();
-  },
-
   clearStackServices: function (deleteAll) {
     var dfd = $.Deferred();
 
diff --git a/ambari-web/app/controllers/wizard/step1_controller.js b/ambari-web/app/controllers/wizard/step1_controller.js
deleted file mode 100644
index 7e01f3f..0000000
--- a/ambari-web/app/controllers/wizard/step1_controller.js
+++ /dev/null
@@ -1,474 +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 arrayUtils = require('utils/array_utils');
-require('./wizardStep_controller');
-
-/**
- * @typedef {Em.Object} StackType
- * @property {string} stackName
- * @property {App.Stack[]} stacks
- * @property {boolean} isSelected
- */
-
-/**
- * @type {Em.Object}
- */
-var StackType = Em.Object.extend({
-  stackName: '',
-  stacks: [],
-  isSelected: Em.computed.someBy('stacks', 'isSelected', true)
-});
-
-App.WizardStep1Controller = App.WizardStepController.extend({
-
-  name: 'wizardStep1Controller',
-
-  stepName: 'step1',
-
-  /**
-   * Skip repo-validation
-   *
-   * @type {bool}
-   */
-  skipValidationChecked: false,
-
-  /**
-   * @type {App.Stack}
-   */
-  selectedStack: Em.computed.findBy('content.stacks', 'isSelected', true),
-
-  /**
-   * @type {App.ServiceSimple[]}
-   */
-  servicesForSelectedStack: Em.computed.filterBy('selectedStack.stackServices', 'isHidden', false),
-
-  /**
-   * Some network issues exist if there is no stack with <code>stackDefault</code> = false
-   *
-   * @type {boolean}
-   */
-  networkIssuesExist: Em.computed.everyBy('content.stacks', 'stackDefault', true),
-
-  /**
-   * No stacks have repo update URL section (aka "latest") defined in repoinfo.xml
-   *
-   * @type {boolean}
-   */
-  stackRepoUpdateLinkExists: Em.computed.someBy('content.stacks', 'stackRepoUpdateLinkExists', true),
-
-  optionsToSelect: {
-    'usePublicRepo': {
-      index: 0,
-      isSelected: true
-    },
-    'useLocalRepo': {
-      index: 1,
-      isSelected: false,
-      'uploadFile': {
-        index: 0,
-        name: 'uploadFile',
-        file: '',
-        hasError: false,
-        isSelected: true
-      },
-      'enterUrl': {
-        index: 1,
-        name: 'enterUrl',
-        url: '',
-        placeholder: Em.I18n.t('installer.step1.useLocalRepo.enterUrl.placeholder'),
-        hasError: false,
-        isSelected: false
-      }
-    }
-  },
-
-  /**
-   * Checks if user selected to input url or upload file but didn't do it
-   * true  - url-radio is checked but url-field is empty
-   *       - file-radio is checked but file is not selected
-   * false - otherwise
-   *
-   * @type {boolean}
-   */
-  readInfoIsNotProvided: function () {
-    var useLocalRepo = this.get('optionsToSelect.useLocalRepo');
-    if(Em.get(useLocalRepo, 'uploadFile.isSelected')) {
-      return !Em.get(useLocalRepo, 'uploadFile.file');
-    }
-    if (Em.get(useLocalRepo, 'enterUrl.isSelected')) {
-      return !Em.get(useLocalRepo, 'enterUrl.url');
-    }
-    return false;
-  }.property('optionsToSelect.useLocalRepo.isSelected', 'optionsToSelect.useLocalRepo.uploadFile.isSelected',
-    'optionsToSelect.useLocalRepo.uploadFile.file', 'optionsToSelect.useLocalRepo.enterUrl.url'),
-
-  /**
-   * List of stacks grouped by <code>stackNameVersion</code>
-   *
-   * @type {StackType[]}
-   */
-  availableStackTypes: function () {
-    var stacks = this.get('content.stacks');
-    return stacks ? stacks.mapProperty('stackNameVersion').uniq().sort().reverse().map(function (stackName) {
-      return StackType.create({
-        stackName: stackName,
-        stacks: stacks.filterProperty('stackNameVersion', stackName).sort(arrayUtils.sortByIdAsVersion).reverse()
-      })
-    }) : [];
-  }.property('content.stacks.@each.stackNameVersion'),
-
-  /**
-   * @type {StackType}
-   */
-  selectedStackType: Em.computed.findBy('availableStackTypes', 'isSelected', true),
-
-  isLoadingComplete: Em.computed.equal('wizardController.loadStacksRequestsCounter', 0),
-
-  /**
-   * Load selected file to current page content
-   */
-  readVersionInfo: function () {
-    var data = {};
-    var isXMLdata = false;
-    if (this.get("optionsToSelect.useLocalRepo.enterUrl.isSelected")) {
-      var url = this.get("optionsToSelect.useLocalRepo.enterUrl.url");
-      data = {
-        VersionDefinition: {
-          version_url: url
-        }
-      };
-      App.db.setLocalRepoVDFData(url);
-    }
-    else {
-      if (this.get("optionsToSelect.useLocalRepo.uploadFile.isSelected")) {
-        isXMLdata = true;
-        // load from file browser
-        data = this.get("optionsToSelect.useLocalRepo.uploadFile.file");
-        App.db.setLocalRepoVDFData(data);
-      }
-    }
-    return App.router.get('installerController').postVersionDefinitionFile(isXMLdata, data);
-  },
-
-  /**
-   * On click handler for removing OS
-   */
-  removeOS: function (event) {
-    if (this.get('selectedStack.useRedhatSatellite')) {
-      return;
-    }
-    var osToRemove = event.context;
-    Em.set(osToRemove, 'isSelected', false);
-  },
-
-  /**
-   * On click handler for adding new OS
-   */
-  addOS: function (event) {
-    var osToAdd = event.context;
-    Em.set(osToAdd, 'isSelected', true);
-  },
-
-  /**
-   * Use Local Repo if some network issues exist
-   */
-  onNetworkIssuesExist: function() {
-    if (this.get('networkIssuesExist')) {
-      this.get('content.stacks').forEach(function (stack) {
-        stack.setProperties({
-          usePublicRepo: false,
-          useLocalRepo: true
-        });
-        stack.cleanReposBaseUrls();
-      });
-    }
-  }.observes('networkIssuesExist'),
-
-  /**
-   * Select stack with field equal to the value
-   * Example:
-   * <pre>
-   *   selectStackBy('id', 'HDP-2.5-2.5.0.0'); // select stack with id = 'HDP-2.5-2.5.0.0'
-   *   selectStackBy('stackNameVersion', 'HDP-2.5'); // select first stack with stackNameVersion = 'HDP-2.5'
-   * </pre>
-   *
-   * @param {string} field
-   * @param {string} value
-   */
-  selectStackBy: function (field, value) {
-    this.get('content.stacks').setEach('isSelected', false);
-    this.get('content.stacks').findProperty(field, value).set('isSelected', true);
-  },
-
-  /**
-   * Restore base urls for selected stack when user select to use public repository
-   */
-  usePublicRepo: function () {
-    var selectedStack = this.get('selectedStack');
-    if (selectedStack) {
-      selectedStack.setProperties({
-        useRedhatSatellite: false,
-        usePublicRepo: true,
-        useLocalRepo: false
-      });
-      selectedStack.restoreReposBaseUrls();
-    }
-  },
-
-  /**
-   * Clean base urls for selected stack when user select to use local repository
-   */
-  useLocalRepo: function () {
-    var selectedStack = this.get('selectedStack');
-    if (selectedStack) {
-      selectedStack.setProperties({
-        usePublicRepo: false,
-        useLocalRepo: true
-      });
-      selectedStack.cleanReposBaseUrls();
-    }
-  },
-
-  /**
-   * Restores url value to be its default value.
-   * @method doRestoreDefaultValue
-   */
-  doRestoreDefaultValue: function (event) {
-    var repo = event.contexts[0];
-    repo.set('baseUrl', repo.get('baseUrlInit'));
-  },
-
-  /**
-   * Restores url value to empty string.
-   * @method doRestoreToEmpty
-   */
-  doRestoreToEmpty: function (event) {
-    var repo = event.contexts[0];
-    repo.set('baseUrl', '');
-  },
-
-  /**
-   * Click-handler for left-tabs with stack types
-   * Select first available stack with stackName equal to chosen
-   *
-   * @param {{context: StackType}} event
-   */
-  selectRepoInList: function (event) {
-    var id = this.get('availableStackTypes').findProperty('stackName', event.context.stackName).get('stacks.firstObject.id');
-    this.selectStackBy('id', id);
-  },
-
-  /**
-   * Click-handler for StackVersion-tabs
-   *
-   * @param {{context: App.Stack}} event
-   */
-  changeVersion: function (event) {
-    this.selectStackBy('id', event.context.get('id'));
-  },
-
-  /**
-   * Show popup with options to upload new version
-   *
-   * @returns {App.ModalPopup}
-   */
-  uploadVdf: function () {
-    return App.ModalPopup.show({
-
-      controller: this,
-
-      header: Em.I18n.t('installer.step1.addVersion.title'),
-
-      primary: Em.I18n.t('installer.step1.useLocalRepo.readButton'),
-
-      disablePrimary: Em.computed.alias('controller.readInfoIsNotProvided'),
-
-      'data-qa': 'vdf-modal',
-
-      /**
-       * Try to read version info from the url or file (if provided)
-       */
-      onPrimary: function () {
-        var controller = this.get('controller');
-        controller.readVersionInfo().done(function (response) {
-          // load successfully, so make this local stack repo as selectedStack
-          var newStackId = response.stackNameVersion + '-' + response.actualVersion;
-          var oldStackNameVersion = controller.get('selectedStack.stackNameVersion');
-          controller.selectStackBy('id', newStackId);
-          if (oldStackNameVersion && oldStackNameVersion !== response.stackNameVersion) {
-            App.showAlertPopup(Em.I18n.t('common.warning'), Em.I18n.t('installer.step1.addVersion.stackChanged.popup.body').format(oldStackNameVersion, response.stackNameVersion));
-          }
-          Ember.run.next(function () {
-            App.tooltip($("[rel=skip-validation-tooltip]"), {html: true, placement: 'left'});
-            $("[rel=use-redhat-tooltip]").tooltip({placement: 'right'});
-          });
-        });
-        this.restoreUploadOptions();
-        this._super();
-      },
-
-      /**
-       * Disable url/file fields on popup-close
-       */
-      onSecondary: function () {
-        this.restoreUploadOptions();
-        this._super();
-      },
-
-      /**
-       * Disable url/file fields on popup-close
-       */
-      onClose: function () {
-        this.restoreUploadOptions();
-        this._super();
-      },
-
-      /**
-       * Deselect file/url radio
-       */
-      restoreUploadOptions: function () {
-        this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', false);
-        this.set('controller.optionsToSelect.useLocalRepo.enterUrl.url', '');
-        this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', true);
-        this.set('controller.optionsToSelect.useLocalRepo.uploadFile.file', '');
-      },
-
-      bodyClass: Em.View.extend({
-
-        controller: this,
-
-        templateName: require('templates/wizard/step1/vdf_upload'),
-
-        /**
-         * Wrapper for 'upload-file' elements
-         *
-         * @type {Em.View}
-         */
-        uploadFileView: Em.View.extend({
-
-          classNames: ['clearfix'],
-
-          /**
-           * Radio button for Use local Repo > Upload VDF file
-           *
-           * @type {App.RadioButtonView}
-           */
-          uploadFileRadioButton: App.RadioButtonView.extend({
-            labelTranslate: 'installer.step1.useLocalRepo.uploadFile',
-            checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')
-          }),
-
-          /**
-           * Is File API available
-           *
-           * @type {bool}
-           */
-          isFileApi: window.File && window.FileReader && window.FileList,
-
-          /**
-           * Upload file is disabled when some stack is selected or url-field is selected
-           *
-           * @type {boolean}
-           */
-          fileBrowserDisabled: Em.computed.alias('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected'),
-
-          /**
-           * Input to select vdf-file
-           *
-           * @type {Em.View}
-           */
-          fileInputView: Em.View.extend({
-            template: Em.Handlebars.compile('<input type="file" {{bindAttr class="controller.optionsToSelect.useLocalRepo.enterUrl.isSelected:disabled"}} {{QAAttr "vdf-input"}}/>'),
-
-            change: function (e) {
-              var self = this;
-              if (e.target.files && e.target.files.length === 1) {
-                var file = e.target.files[0];
-                var reader = new FileReader();
-
-                reader.onload = (function () {
-                  return function (event) {
-                    self.set('controller.optionsToSelect.useLocalRepo.uploadFile.file', event.target.result);
-                  };
-                })(file);
-                reader.readAsText(file);
-              }
-            }
-
-          }),
-
-          click: function () {
-            if (!this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')) {
-              this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', false);
-              this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', true);
-              this.set('controller.optionsToSelect.useLocalRepo.enterUrl.hasError', false);
-              this.set('controller.optionsToSelect.useLocalRepo.uploadFile.hasError', false);
-            }
-          }
-        }),
-
-        /**
-         * Wrapper for 'enter-url' elements
-         *
-         * @type {Em.View}
-         */
-        enterUrlView: Em.View.extend({
-
-          /**
-           * Url-field is disable when some stack is selected or upload file is selected
-           *
-           * @type {boolean}
-           */
-          enterUrlFieldDisabled: Em.computed.alias('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected'),
-
-          /**
-           * Input for file upload
-           *
-           * @type {Em.TextField}
-           */
-          enterUrlField: Em.TextField.extend({
-            classNameBindings: [':input-block-level', 'controller.optionsToSelect.useLocalRepo.uploadFile.isSelected:disabled']
-          }),
-
-          /**
-           * Radio button for Use local Repo > Enter Url of VDF file
-           *
-           * @type {App.RadioButtonView}
-           */
-          enterUrlRadioButton: App.RadioButtonView.extend({
-            labelTranslate: 'installer.step1.useLocalRepo.enterUrl',
-            checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')
-          }),
-
-          click: function () {
-            if (!this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')) {
-              this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', true);
-              this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', false);
-              this.set('controller.optionsToSelect.useLocalRepo.enterUrl.hasError', false);
-              this.set('controller.optionsToSelect.useLocalRepo.uploadFile.hasError', false);
-            }
-          }
-        })
-
-      })
-    });
-  }
-
-});
diff --git a/ambari-web/app/controllers/wizard/step4_controller.js b/ambari-web/app/controllers/wizard/step4_controller.js
deleted file mode 100644
index 1ab9ef8..0000000
--- a/ambari-web/app/controllers/wizard/step4_controller.js
+++ /dev/null
@@ -1,642 +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('./wizardStep_controller');
-
-App.WizardStep4Controller = Em.ArrayController.extend({
-
-  name: 'wizardStep4Controller',
-
-  stepName: 'step4',
-
-  /**
-   * List of Services
-   * @type {Object[]}
-   */
-  content: [],
-
-  /**
-   * Check / Uncheck 'Select All' checkbox with one argument; Check / Uncheck all other checkboxes with more arguments
-   * @type {bool}
-   */
-  isAllChecked: function(key, value) {
-    if (arguments.length > 1) {
-      this.filterProperty('isDisabled', false).filterProperty('isDFS', false).setEach('isSelected', value);
-      return value;
-    }
-    return this.filterProperty('isInstalled', false).
-      filterProperty('isHiddenOnSelectServicePage', false).
-      filterProperty('isDFS', false).
-      everyProperty('isSelected', true);
-  }.property('@each.isSelected'),
-
-  /**
-   * Is Submit button disabled
-   * @type {bool}
-   */
-  isSubmitDisabled: function () {
-    return App.get('router.btnClickInProgress')
-      || (this.get('wizardController.errors') && this.get('wizardController.errors').length > 0)
-      || this.filterProperty('isSelected', true).filterProperty('isInstalled', false).length === 0;
-  }.property('@each.isSelected', 'App.router.btnClickInProgress', 'wizardController.errors'),
-
-  /**
-   * List of validation errors. Look to #createError method for information
-   * regarding object structure.
-   *
-   * @type {Object[]}
-   */
-  errorStack: [],
-
-  /**
-   * Services which are HDFS compatible
-   */
-  fileSystems: function() {
-    var fileSystems = this.filterProperty('isDFS', true);;
-    return fileSystems.map(function(fs) {
-      return App.FileSystem.create({content: fs, services: fileSystems});
-    });
-  }.property('@each.isDFS'),
-
-  /**
-   * Drop errorStack content on selected state changes.
-   */
-  clearErrors: function() {
-    if (!this.get('errorStack').someProperty('isAccepted', false)) {
-      this.set('errorStack', []);
-    }
-  }.observes('@each.isSelected'),
-
-  /**
-   * Check if multiple distributed file systems were selected
-   * @return {bool}
-   * @method multipleDFSs
-   */
-  multipleDFSs: function () {
-    return this.filterProperty('isDFS',true).filterProperty('isSelected',true).length > 1;
-  },
-
-  /**
-   * Check whether Ranger is selected and show installation requirements if yes
-   * @param {function} callback
-   * @method rangerValidation
-   */
-  rangerValidation: function (callback) {
-    var rangerService = this.findProperty('serviceName', 'RANGER');
-    if (rangerService && !rangerService.get('isInstalled')) {
-      if(rangerService.get('isSelected')) {
-        this.addValidationError({
-          id: 'rangerRequirements',
-          type: 'WARNING',
-          callback: this.rangerRequirementsPopup,
-          callbackParams: [callback]
-        });
-      }
-      else {
-        //Ranger is selected, remove the Ranger error from errorObject array
-        var rangerError = this.get('errorStack').filterProperty('id',"rangerRequirements");
-        if(rangerError)
-        {
-           this.get('errorStack').removeObject(rangerError[0]);
-        }
-      }
-    }
-  },
-
-  /**
-   * Warn user if he tries to install Spark with HDP 2.2
-   * @param {function} callback
-   * @method sparkValidation
-   */
-  sparkValidation: function (callback) {
-    var sparkService = this.findProperty('serviceName', 'SPARK');
-    if (sparkService && !sparkService.get('isInstalled') &&
-      App.get('currentStackName') === 'HDP' && App.get('currentStackVersionNumber') === '2.2') {
-      if(sparkService.get('isSelected')) {
-        this.addValidationError({
-          id: 'sparkWarning',
-          type: 'WARNING',
-          callback: this.sparkWarningPopup,
-          callbackParams: [callback]
-        });
-      }
-      else {
-        //Spark is selected, remove the Spark error from errorObject array
-        var sparkError = this.get('errorStack').filterProperty('id',"sparkWarning");
-        if(sparkError) {
-           this.get('errorStack').removeObject(sparkError[0]);
-        }
-      }
-    }
-  },
-
-  /**
-   * Onclick handler for <code>Next</code> button.
-   * Disable 'Next' button while it is already under process. (using Router's property 'nextBtnClickInProgress')
-   * @method submit
-   */
-  submit: function () {
-    if(App.get('router.nextBtnClickInProgress')) {
-      return;
-    }
-    if (!this.get('isSubmitDisabled')) {
-      this.unSelectServices();
-      this.setGroupedServices();
-      if (this.validate()) {
-        this.set('errorStack', []);
-        App.router.send('next');
-      }
-    }
-  },
-
-  /**
-   * Set isSelected based on property doNotShowAndInstall
-   */
-  unSelectServices: function () {
-    this.filterProperty('isSelected',true).filterProperty('doNotShowAndInstall', true).setEach('isSelected', false);
-  },
-
-  /**
-   * Check if validation passed:
-   *  - required file system services selected
-   *  - dependencies between services
-   *  - monitoring services selected (not required)
-   *
-   * @return {Boolean}
-   * @method validate
-   */
-  validate: function () {
-    var result;
-    var self = this;
-
-    // callback function to reset `isAccepted` needs to be called everytime when a popup from errorStack is dismissed/proceed by user action
-    var callback = function (id) {
-      var check = self.get('errorStack').findProperty('id', id);
-      if (check) {
-        check.isAccepted = true;
-      }
-    };
-    this.serviceDependencyValidation(callback);
-    this.fileSystemServiceValidation(callback);
-    if (this.get('wizardController.name') === 'installerController') {
-      this.serviceValidation(callback, 'AMBARI_METRICS', 'ambariMetricsCheck');
-      this.serviceValidation(callback, 'SMARTSENSE', 'smartSenseCheck');
-    }
-    this.dependentServiceValidation('ATLAS', 'AMBARI_INFRA_SOLR', 'ambariInfraCheck', callback);
-    this.dependentServiceValidation('LOGSEARCH', 'AMBARI_INFRA_SOLR', 'ambariLogsearchCheck', callback);
-    this.rangerValidation(callback);
-    this.sparkValidation(callback);
-    if (!!this.get('errorStack').filterProperty('isShown', false).length) {
-      var firstError = this.get('errorStack').findProperty('isShown', false);
-      this.showError(firstError);
-      result = false;
-    } else {
-      result = true;
-    }
-    return result;
-  },
-
-  /**
-   * display validation warning if dependent service not selected
-   * @param {string} selectedService
-   * @param {string} dependentService
-   * @param {string} checkId
-   * @param {Function} callback
-   */
-  dependentServiceValidation: function(selectedService, dependentService, checkId, callback) {
-    var selected = this.findProperty('serviceName', selectedService);
-    var dependent = this.findProperty('serviceName', dependentService);
-    if (selected && selected.get('isSelected') && dependent && !dependent.get('isSelected')) {
-      this.serviceValidation(callback, dependentService, checkId);
-    } else {
-      var unNeededError = this.get('errorStack').filterProperty('id', checkId);
-      if (unNeededError) {
-        this.get('errorStack').removeObject(unNeededError[0]);
-      }
-    }
-  },
-
-  /**
-   * Check whether user selected service to install and go to next step
-   * @param callback {Function}
-   * @param serviceName {string}
-   * @param id {string}
-   * @method serviceValidation
-   */
-  serviceValidation: function(callback, serviceName, id) {
-    var service = this.findProperty('serviceName', serviceName);
-    if (service) {
-      if (!service.get('isSelected')) {
-        this.addValidationError({
-          id: id,
-          type: 'WARNING',
-          callback: this.serviceCheckPopup,
-          callbackParams: [callback]
-        });
-      }
-      else {
-        //metrics is selected, remove the metrics error from errorObject array
-        var metricsError = this.get('errorStack').filterProperty('id', id);
-        if (metricsError) {
-          this.get('errorStack').removeObject(metricsError[0]);
-        }
-      }
-    }
-  },
-
-  /**
-   * Create error and push it to stack.
-   *
-   * @param {Object} errorObject - look to #createError
-   * @return {Boolean}
-   * @method addValidationError
-   */
-  addValidationError: function (errorObject) {
-    if (!this.get('errorStack').someProperty('id', errorObject.id)) {
-      this.get('errorStack').push(this.createError(errorObject));
-      return true;
-    }
-    return false;
-  },
-
-  /**
-   * Show current error by passed error object.
-   *
-   * @param {Object} errorObject
-   * @method showError
-   */
-  showError: function (errorObject) {
-    return errorObject.callback.apply(errorObject.callbackContext, errorObject.callbackParams.concat(errorObject.id));
-  },
-
-  /**
-   * Default primary button("Ok") callback for warning popups.
-   *  Change isShown state for last shown error.
-   *  Call #submit() method.
-   *
-   *  @param {function} callback
-   *  @param {string} id
-   *  @method onPrimaryPopupCallback
-   */
-  onPrimaryPopupCallback: function(callback, id) {
-    var firstError = this.get('errorStack').findProperty('isShown', false);
-    if (firstError) {
-      firstError.isShown = true;
-    }
-    if (callback) {
-      callback(id);
-    }
-    this.submit();
-  },
-
-  /**
-   * Create error object with passed options.
-   * Available options:
-   *  id - {String}
-   *  type - {String}
-   *  isShowed - {Boolean}
-   *  callback - {Function}
-   *  callbackContext
-   *  callbackParams - {Array}
-   *
-   * @param {Object} opt
-   * @return {Object}
-   * @method createError
-   */
-  createError: function(opt) {
-    var options = {
-      // {String} error identifier
-      id: '',
-      // {String} type of error CRITICAL|WARNING
-      type: 'CRITICAL',
-      // {Boolean} error was shown
-      isShown: false,
-      // {Boolean} error was accepted by user
-      isAccepted: false,
-      // {Function} callback to execute
-      callback: null,
-      // context which execute from
-      callbackContext: this,
-      // {Array} params applied to callback
-      callbackParams: []
-    };
-    $.extend(options, opt);
-    return options;
-  },
-
-  /**
-   * Checks if a filesystem is present in the Stack
-   *
-   * @method isDFSStack
-   */
-  isDFSStack: function () {
-	  var bDFSStack = false;
-    var dfsServices = ['HDFS', 'GLUSTERFS'];
-    var availableServices = this.filterProperty('isInstalled',false);
-    availableServices.forEach(function(service){
-      if (dfsServices.contains(service.get('serviceName')) || service.get('serviceType') == 'HCFS' ) {
-        bDFSStack=true;
-      }
-    },this);
-    return bDFSStack;
-  },
-
-  /**
-   * Checks if a filesystem is selected and only one filesystem is selected
-   * @param {function} callback
-   * @method isFileSystemCheckFailed
-   */
-  fileSystemServiceValidation: function(callback) {
-    if(this.isDFSStack()){
-      var primaryDFS = this.findProperty('isPrimaryDFS',true);
-      if (primaryDFS) {
-        var primaryDfsDisplayName = primaryDFS.get('displayNameOnSelectServicePage');
-        var primaryDfsServiceName = primaryDFS.get('serviceName');
-        if (this.multipleDFSs()) {
-          var dfsServices = this.filterProperty('isDFS',true).filterProperty('isSelected',true).mapProperty('serviceName');
-          var services = dfsServices.map(function (item){
-            return {
-              serviceName: item,
-              selected: item === primaryDfsServiceName
-            };
-          });
-          this.addValidationError({
-            id: 'multipleDFS',
-            callback: this.needToAddServicePopup,
-            callbackParams: [services, 'multipleDFS', primaryDfsDisplayName, callback]
-          });
-        }
-        else
-        {
-          //if multiple DFS are not selected, remove the related error from the error array
-          var fsError = this.get('errorStack').filterProperty('id',"multipleDFS");
-          if(fsError)
-          {
-             this.get('errorStack').removeObject(fsError[0]);
-          }
-        }
-      }
-    }
-  },
-
-  /**
-   * Checks if a dependent service is selected without selecting the main service.
-   * @param {function} callback
-   * @method serviceDependencyValidation
-   */
-  serviceDependencyValidation: function(callback) {
-    var selectedServices = this.filterProperty('isSelected', true);
-    var availableServices = this.get('content');
-    var missingDependencies = [];
-    selectedServices.forEach(function(service) {
-      service.collectMissingDependencies(selectedServices, availableServices, missingDependencies);
-    });
-    this.cleanExistingServiceCheckErrors();
-    this.addServiceCheckErrors(missingDependencies, callback);
-  },
-
-  cleanExistingServiceCheckErrors() {
-    var existingServiceCheckErrors = this.get('errorStack').filter(function (error) {
-      return error.id.startsWith('serviceCheck_');
-    });
-    this.get('errorStack').removeObjects(existingServiceCheckErrors);
-  },
-
-  addServiceCheckErrors(missingDependencies, callback) {
-    for(var i = 0; i < missingDependencies.length; i++) {
-      this.addValidationError({
-        id: 'serviceCheck_' + missingDependencies[i].get('serviceName'),
-        callback: this.needToAddMissingDependency,
-        callbackParams: [missingDependencies[i], 'serviceCheck', callback]
-      });
-    }
-  },
-
-  /**
-   * Select co hosted services which not showed on UI.
-   *
-   * @method setGroupedServices
-   */
-  setGroupedServices: function() {
-    this.forEach(function(service){
-      var coSelectedServices = service.get('coSelectedServices');
-      coSelectedServices.forEach(function(groupedServiceName) {
-        var groupedService = this.findProperty('serviceName', groupedServiceName);
-        if (groupedService.get('isSelected') !== service.get('isSelected')) {
-          groupedService.set('isSelected',service.get('isSelected'));
-        }
-      },this);
-    },this);
-  },
-
-  /**
-   * Select/deselect services
-   * @param {object[]|object} services array of objects
-   *  <code>
-   *    [
-   *      {
-   *        service: 'HDFS',
-   *        selected: true
-   *      },
-   *      ....
-   *    ]
-   *  </code>
-   * @param {string} i18nSuffix
-   * @param {string} serviceName
-   * @param {function} callback
-   * @param {string} id
-   * @return {App.ModalPopup}
-   * @method needToAddServicePopup
-   */
-
-  needToAddServicePopup: function (services, i18nSuffix, serviceName, callback, id) {
-    var self = this;
-    return App.ModalPopup.show({
-      'data-qa': 'need-add-service-confirmation-modal',
-      header: Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.header').format(serviceName),
-      body: Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.body').format(serviceName, serviceName),
-      onPrimary: function () {
-        Em.makeArray(services).forEach(function (service) {
-          self.findProperty('serviceName', service.serviceName).set('isSelected', service.selected);
-        });
-        self.onPrimaryPopupCallback(callback, id);
-        this.hide();
-      },
-      onSecondary: function () {
-        if (callback) {
-          callback(id);
-        }
-        this._super();
-      },
-      onClose: function () {
-        if (callback) {
-          callback(id);
-        }
-        this._super();
-      }
-    });
-  },
-
-  needToAddMissingDependency: function (missingDependency, i18nSuffix, callback, id) {
-    var self = this;
-    var displayName = missingDependency.get('displayName');
-    if (missingDependency.get('hasMultipleOptions')) {
-      return this.showDependencyPopup(
-        id,
-        Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.header').format(displayName),
-        Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.body.multiOptions').format(displayName, missingDependency.get('displayOptions')),
-        callback
-      );
-    } else {
-      return this.showDependencyPopup(
-        id,
-        Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.header').format(displayName),
-        Em.I18n.t('installer.step4.' + i18nSuffix + '.popup.body').format(displayName, missingDependency.get('serviceName')),
-        callback,
-        function () {
-          missingDependency.selectFirstCompatible();
-          self.onPrimaryPopupCallback(callback, id);
-          this.hide();
-        }
-      );
-    }
-  },
-
-  showDependencyPopup: function(id, header, body, callback, primaryAction) {
-    return App.ModalPopup.show({
-        'data-qa': 'need-add-service-confirmation-modal',
-        header: header,
-        body: body,
-        onPrimary: primaryAction || function() { this.onClose(); },
-        onSecondary: function() {
-          this.onClose();
-        },
-        onClose: function() {
-          if (callback) {
-            callback(id);
-          }
-          this._super();
-        }
-      });
-  },
-
-  /**
-   * Show popup with info about not selected service
-   * @param {function} callback
-   * @param {string} id
-   * @return {App.ModalPopup}
-   * @method serviceCheckPopup
-   */
-  serviceCheckPopup: function (callback, id) {
-    var self = this;
-    return App.ModalPopup.show({
-      header: Em.I18n.t('installer.step4.limitedFunctionality.popup.header'),
-      body: Em.I18n.t('installer.step4.' + id + '.popup.body'),
-      primary: Em.I18n.t('common.proceedAnyway'),
-      primaryClass: 'btn-warning',
-      onPrimary: function () {
-        self.onPrimaryPopupCallback(callback);
-        this.hide();
-      },
-      onSecondary: function () {
-        if (callback) {
-          callback(id);
-        }
-        this._super();
-      },
-      onClose: function () {
-        if (callback) {
-          callback(id);
-        }
-        this._super();
-      }
-    });
-  },
-
-  /**
-   * Show popup with installation requirements for Ranger service
-   * @param {function} callback
-   * @param {string} id
-   * @return {App.ModalPopup}
-   * @method rangerRequirementsPopup
-   */
-  rangerRequirementsPopup: function (callback, id) {
-    var self = this;
-    return App.ModalPopup.show({
-      'data-qa': 'ranger-requirements-modal',
-      header: Em.I18n.t('installer.step4.rangerRequirements.popup.header'),
-      bodyClass: Em.View.extend({
-        templateName: require('templates/wizard/step4/step4_ranger_requirements_popup')
-      }),
-      primary: Em.I18n.t('common.proceed'),
-      isChecked: false,
-      disablePrimary: function () {
-        return !this.get('isChecked');
-      }.property('isChecked'),
-      onPrimary: function () {
-        self.onPrimaryPopupCallback(callback);
-        this.hide();
-      },
-      onSecondary: function () {
-        if (callback) {
-          callback(id);
-        }
-        this._super();
-      },
-      onClose: function () {
-        if (callback) {
-          callback(id);
-        }
-        this._super();
-      }
-    });
-  },
-
-  /**
-   * Show popup with Spark installation warning
-   * @param {function} callback
-   * @param {string} id
-   * @return {App.ModalPopup}
-   * @method sparkWarningPopup
-   */
-  sparkWarningPopup: function (callback, id) {
-    var self = this;
-    return App.ModalPopup.show({
-      header: Em.I18n.t('common.warning'),
-      body: Em.I18n.t('installer.step4.sparkWarning.popup.body'),
-      primary: Em.I18n.t('common.proceed'),
-      onPrimary: function () {
-        self.onPrimaryPopupCallback(callback);
-        this.hide();
-      },
-      onSecondary: function () {
-        if (callback) {
-          callback(id);
-        }
-        this._super();
-      },
-      onClose: function () {
-        if (callback) {
-          callback(id);
-        }
-       this._super();
-      }
-    });
-  }
-});
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index fc754b7..c1e060f 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -238,10 +238,10 @@ App.Router = Em.Router.extend({
     this.get('addHostController').clear();
     this.get('addServiceController').clear();
     this.get('backgroundOperationsController').clear();
-    for (var i = 1; i < 11; i++) {
-      this.set('wizardStep' + i + 'Controller.hasSubmitted', false);
-      this.set('wizardStep' + i + 'Controller.isDisabled', true);
-    }
+    // for (var i = 1; i < 11; i++) {
+    //   this.set('wizardStep' + i + 'Controller.hasSubmitted', false);
+    //   this.set('wizardStep' + i + 'Controller.isDisabled', true);
+    // }
   },
 
   /**
diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js
index 7f6a05f..4ec0070 100644
--- a/ambari-web/app/routes/add_service_routes.js
+++ b/ambari-web/app/routes/add_service_routes.js
@@ -126,7 +126,7 @@ module.exports = App.WizardRoute.extend({
       controller.set('hideBackButton', true);
       controller.dataLoading().done(function () {
         controller.loadAllPriorSteps().done(function () {
-          var wizardStep4Controller = router.get('wizardStep4Controller');
+          //var wizardStep4Controller = router.get('wizardStep4Controller');
           wizardStep4Controller.set('wizardController', controller);
           controller.loadServiceVersionFromVersionDefinitions().complete(function () {
             controller.set('content.services', App.StackService.find().forEach(function (item) {
@@ -142,7 +142,7 @@ module.exports = App.WizardRoute.extend({
     },
     nextTransition: function (router) {
       var addServiceController = router.get('addServiceController');
-      var wizardStep4Controller = router.get('wizardStep4Controller');
+      //var wizardStep4Controller = router.get('wizardStep4Controller');
       addServiceController.saveServices(wizardStep4Controller);
       addServiceController.saveClients(wizardStep4Controller);
       addServiceController.setDBProperty('masterComponentHosts', undefined);
diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js
index e692873..ff9de393 100644
--- a/ambari-web/app/routes/installer.js
+++ b/ambari-web/app/routes/installer.js
@@ -519,52 +519,6 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
     }
   }),
 
-  step4: App.StepRoute.extend({
-    route: '/step4',
-    breadcrumbs: { label: Em.I18n.translations['installer.step4.header'] },
-    connectOutlets: function (router, context) {
-      console.time('step4 connectOutlets');
-      var self = this;
-      var controller = router.get('installerController');
-      var wizardStep4Controller = router.get('wizardStep4Controller');
-      wizardStep4Controller.set('wizardController', controller);
-      var newStepIndex = controller.getStepIndex('step4');
-      router.setNavigationFlow(newStepIndex);
-      controller.setCurrentStep('step4');
-      controller.loadAllPriorSteps().done(function () {
-        controller.setStepsEnable();
-        controller.connectOutlet('wizardStep4', App.StackService.find().filterProperty('isInstallable', true));
-        self.scrollTop();
-        console.timeEnd('step4 connectOutlets');
-      });
-    },
-
-    backTransition: function(router) {
-      var controller = router.get('installerController');
-      controller.clearErrors();
-      router.transitionTo('step1');
-    },
-
-    next: function (router) {
-      console.time('step4 next');
-      if (!router.get('btnClickInProgress')) {
-        App.set('router.nextBtnClickInProgress', true);
-        var controller = router.get('installerController');
-        var wizardStep4Controller = router.get('wizardStep4Controller');
-        controller.saveServices(wizardStep4Controller);
-        controller.saveClients(wizardStep4Controller);
-        router.get('wizardStep5Controller').clearRecommendations(); // Force reload recommendation between steps 4 and 5
-        controller.setDBProperties({
-          recommendations: undefined,
-          masterComponentHosts: undefined
-        });
-        controller.clearEnhancedConfigs();
-        router.transitionTo('step5');
-      }
-      console.timeEnd('step4 next');
-    }
-  }),
-
   step5: App.StepRoute.extend({
     route: '/step5',
     breadcrumbs: { label: Em.I18n.translations['installer.step5.header'] },
@@ -904,14 +858,10 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
 
   gotoStep0: Em.Router.transitionTo('step0'),
 
-  gotoStep1: Em.Router.transitionTo('step1'),
-
   gotoStep2: Em.Router.transitionTo('step2'),
 
   gotoStep3: Em.Router.transitionTo('step3'),
 
-  gotoStep4: Em.Router.transitionTo('step4'),
-
   gotoStep5: Em.Router.transitionTo('step5'),
 
   gotoStep6: Em.Router.transitionTo('step6'),
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index e20bd9d..8589b32 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -46,9 +46,7 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
               } else {
                 if (router.get('clusterInstallCompleted')) {
                   if (!App.get('isOnlyViewUser')) {
-                    clusterController.checkDetailedRepoVersion().done(function () {
-                      router.get('mainController').initialize();
-                    });
+                    router.get('mainController').initialize();
                   } else {
                     // Don't transit to Views when user already on View page
                     if (App.router.currentState.name !== 'viewDetails') {
diff --git a/ambari-web/app/templates/wizard/step1.hbs b/ambari-web/app/templates/wizard/step1.hbs
deleted file mode 100644
index c07586d..0000000
--- a/ambari-web/app/templates/wizard/step1.hbs
+++ /dev/null
@@ -1,292 +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="select-stack" class="wizard-content col-md-9" {{QAAttr "select-stack-page"}}>
-  <h4 class="step-title">{{t installer.step1.header}}</h4>
-  
-  <div class="panel panel-default">
-    <div class="panel-body">
-      <p class="step-description">{{t installer.step1.body}}</p>
-      {{#if isLoadingComplete}}
-        {{! left tabs }}
-        <div class="tabs-menu">
-          <ul class="nav nav-tabs" {{QAAttr "stack-tabs"}}>
-            {{#each stack in availableStackTypes}}
-              <li {{bindAttr class="stack.isSelected:active"}} {{QAAttr "stack-tab"}}>
-                <a {{QAAttr "stack-link-{stack.stackName}"}} {{action "selectRepoInList" stack target="controller"}}
-                  href="#">{{stack.stackName}}</a></li>
-            {{/each}}
-          </ul>
-        </div>
-        <div class="stacks-options">
-          <div class="details-panel">
-            <div class="btn-group" {{QAAttr "select-version"}}>
-              <button type="button" data-toggle="dropdown"
-                      class="btn dropdown-toggle btn-default" {{QAAttr "select-version-button"}}>{{controller.selectedStack.displayName}}
-                <span class="caret"></span></button>
-              <ul class="dropdown-menu">
-                {{#each stack in selectedStackType.stacks}}
-                  <li>
-                    {{!view view.stackRadioButton stackBinding="stack"}}
-                    <a
-                      href="#" {{action "changeVersion" stack target="controller"}} {{QAAttr "{stack.displayName}"}}>{{stack.displayName}}
-                      {{#if stack.stackDefault}}
-                        ({{t installer.step1.changeVersion.defaultVersion}})
-                      {{/if}}
-                    </a>
-                  </li>
-                {{/each}}
-                <li><a
-                  href="#" {{action "uploadVdf" target="controller"}} {{QAAttr "add-new-version"}}>{{t installer.step1.addVersion}}
-                  ...</a></li>
-              </ul>
-            </div>
-            <div class="version-contents-section">
-              {{#unless servicesForSelectedStack}}
-                <div class="alert alert-info"
-                     role="alert">{{t installer.step1.useLocalRepo.infoForm.content.empty}}</div>
-              {{/unless}}
-              <table class="table table-hover">
-                <tbody>
-                {{#each service in servicesForSelectedStack}}
-                  <tr>
-                    <td class="col-md-4">{{service.displayName}}</td>
-                    <td class="col-md-8">{{service.latestVersion}}</td>
-                  </tr>
-                {{/each}}
-                </tbody>
-              </table>
-            </div>
-          </div>
-        </div>
-        {{! left tabs end }}
-
-        {{#if App.router.nextBtnClickInProgress}}
-          {{view App.SpinnerView}}
-        {{else}}
-          <form id="repoVersionInfoForm" class="form-horizontal" role="form" name="localVersionInfoForm" novalidate>
-
-            <div class="panel panel-default repos-panel">
-              <div class="step-title">
-                <p>{{t common.repositories}}</p>
-              </div>
-              <p class="step-description">{{t installer.step1.repo.body}}</p>
-              <div class="panel-body version-contents-body">
-                <div class="row radio-group">
-                  {{! Public Repository radio }}
-                  <div {{bindAttr class=":col-sm-4 :radio :big-radio :public-radio :wizard-plain-text"}}>
-                    {{view view.usePublicRepoRadioButton classNames="display-inline-block" labelIdentifier="use-public-repo"}}
-                    {{#if stackRepoUpdateLinkExists}}
-                      {{#if networkIssuesExist}}
-                        <a id="public-disabled-link"
-                           class="display-inline-block" {{action "openPublicOptionDisabledWindow" target="view"}}>{{t installer.step1.selectUseRepoOptions.public.networkLost}}</a>
-                      {{/if}}
-                    {{/if}}
-                  </div>
-                  {{!--Local repo radio--}}
-                  {{view view.useLocalRepoRadioButton classNames="radio big-radio col-sm-4" labelIdentifier="use-local-repo"}}
-                </div>
-                <div class="alert alert-info"
-                     role="alert">{{t installer.step1.useLocalRepo.infoForm.alert.baseUrl}}</div>
-                {{#if view.showWarning}}
-                  <div
-                    class="alert alert-warning" {{QAAttr "step1-warning"}}>{{t installer.step1.attentionNeeded}}</div>
-                {{/if}}
-
-                {{! OSes and Repositories }}
-                <div class="row">
-                  <div class="table-controls row col-sm-12 pull-right">
-                    <div class="col-sm-12">
-                      {{! Add OS }}
-                      <div class="btn-group pull-right">
-                        <button
-                          type="button" {{bindAttr data-original-title="view.addOsButtonTooltip" class=":btn :btn-default :dropdown-toggle :add-os-button view.isAddOsButtonDisabled:disabled"}}
-                          {{QAAttr "add-os-button"}}
-                          data-toggle="dropdown">
-                          <i class="glyphicon glyphicon-plus"></i> {{t common.add}} &nbsp;<span class="caret"></span>
-                        </button>
-                        <ul class="dropdown-menu">
-                          {{#each operatingSystem in selectedStack.operatingSystems}}
-                            {{#unless operatingSystem.isSelected}}
-                              <li>
-                                <a {{action "addOS" operatingSystem target="controller"}} {{QAAttr "add-os-{operatingSystem.osType}"}}>{{operatingSystem.osType}}</a>
-                              </li>
-                            {{/unless}}
-                          {{/each}}
-                        </ul>
-                      </div>
-                      {{! Add OS END}}
-                    </div>
-                    <div class="span9 repo-name-url">
-                      {{#each repository in operatingSystem.repositories}}
-                        {{#if repository.showRepo}}
-                        <div {{bindAttr class=":clearfix :repo-name-url-inner repository.repoName"}}>
-                          <div class="span3">
-                            <label class="repo-name-label control-label">{{repository.repoId}}</label>
-                          </div>
-                          <div class="validation-td span1">
-                            {{#if repository.validation}}
-                              {{view view.popoverView repositoryBinding="repository"}}
-                            {{/if}}
-                          </div>
-                          <div {{bindAttr class=":span8 :repo-url repository.invalidFormatError:textfield-error repository.invalidError:textfield-error"}}>
-                            {{view view.repositoryTextField repositoryBinding="repository"}}
-                            {{#if controller.selectedStack.usePublicRepo}}
-                              {{#if repository.undo}}
-                                <i class="icon-undo" data-toggle="tooltip"
-                                  {{action "doRestoreDefaultValue" repository target="controller"}}
-                                  {{translateAttr title="common.undo"}}>
-                                </i>
-                              {{/if}}
-                            {{else}}
-                              {{#if repository.notEmpty}}
-                                <i class="icon-undo" data-toggle="tooltip"
-                                  {{action "doRestoreToEmpty" repository target="controller"}}
-                                  {{translateAttr title="common.undo"}}>
-                                </i>
-                              {{/if}}
-                            {{/if}}
-                          </div>
-                        </div>
-                        {{/if}}
-                      {{/each}}
-                    </div>
-                  </div>
-                </div>
-                <table class="table table-hover">
-                  <thead>
-                  <tr>
-                    <th class="col-sm-2">{{t common.os}}</th>
-                    <th class="col-sm-3">{{t common.name}}</th>
-                    <th class="col-sm-6">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</th>
-                    <th class="col-sm-1"></th>
-                  </tr>
-                  </thead>
-                  <tbody>
-                  {{#each operatingSystem in selectedStack.operatingSystems}}
-                    {{#if operatingSystem.isSelected}}
-                      <tr {{QAAttr "os-wrapper"}}>
-                        <td class="col-sm-2" {{QAAttr "os-type-label"}}>{{operatingSystem.osType}}</td>
-                        <td class="col-sm-9" colspan="2">
-                          <table
-                            class="table table-condensed no-borders inner-table" {{QAAttr "{operatingSystem.osType}"}}>
-                            <tbody>
-                            {{#each repository in operatingSystem.repositories}}
-                              <tr {{QAAttr "{repository.repoName}"}}>
-                                <td class="col-sm-3">{{repository.repoId}}</td>
-                                <td class="col-sm-1">
-                                  {{view view.popoverView repositoryBinding="repository" data-qaBinding="repository.validation"}}
-                                </td>
-                                <td class="col-sm-8">
-                                  <div {{bindAttr class=":repo-url repository.invalidFormatError:has-error repository.invalidError:has-error"}}>
-                                    {{view Ember.TextField placeholderBinding="repository.placeholder" valueBinding="repository.baseUrl" disabledBinding="controller.selectedStack.useRedhatSatellite" classNames="form-control" data-qa="repo-url-input"}}
-                                    {{#if controller.selectedStack.usePublicRepo}}
-                                      <i {{bindAttr class="repository.undo::invisible :icon-undo"}}
-                                        {{action "doRestoreDefaultValue" repository target="controller"}}
-                                        {{translateAttr title="common.undo"}}
-                                        {{QAAttr "undo-icon"}}>
-                                      </i>
-                                    {{else}}
-                                      <i {{bindAttr class="repository.notEmpty::invisible :icon-undo"}}
-                                        {{action "doRestoreToEmpty" repository target="controller"}}
-                                        {{translateAttr title="common.undo"}}
-                                        {{QAAttr "undo-icon"}}>
-                                      </i>
-                                    {{/if}}
-                                  </div>
-                                </td>
-                              </tr>
-                            {{/each}}
-                            </tbody>
-                          </table>
-                        </td>
-                        <td class="col-sm-1">
-                          <a class="action remove-icon"
-                             href="#" {{action "removeOS" operatingSystem target="view"}} {{QAAttr "remove-icon"}}>
-                            <span class="icon icon-minus"></span>
-                            {{t common.remove}}
-                          </a>
-                        </td>
-                      </tr>
-                    {{/if}}
-                  {{/each}}
-                  </tbody>
-                </table>
-                {{! OSes and Repositories END }}
-
-                {{! Skip Repository Base URL validation }}
-                <div id="skip-validation" {{bindAttr class="controller.selectedStack.useRedhatSatellite:disabled"}}>
-                  {{#view App.CheckboxView
-                  labelTranslate="installer.step1.advancedRepo.skipValidation.message"
-                  labelClassNamesBinding="controller.selectedStack.useRedhatSatellite:disabled"
-                  checkedBinding="skipValidationChecked"
-                  disabledBinding="controller.selectedStack.useRedhatSatellite"
-                  labelIdentifier="skip-validation"
-                  }}
-                    <i class="glyphicon glyphicon-question-sign" rel="skip-validation-tooltip"
-                       data-toggle="tooltip" {{translateAttr data-original-title="installer.step1.advancedRepo.skipValidation.tooltip"}}>
-                    </i>
-                  {{/view}}
-                  <div class="clearfix"></div>
-                </div>
-                {{! Skip Repository Base URL validation END }}
-
-                {{! Use RedHat Satellite/Spacewalk }}
-                <div id="use-redhat" class="checkbox">
-                  {{#view view.redhatCheckBoxView
-                  classNames="use-redhat-checkbox"
-                  }}
-                    <label {{bindAttr for="view.checkboxId" class=":redhat-label :display-inline-block controller.selectedStack.usePublicRepo:disabled" data-original-title="view.redhatDisabledTooltip"}}>
-                      {{t installer.step1.advancedRepo.useRedhatSatellite.message}}
-                    </label>
-                    <i class="glyphicon glyphicon-question-sign" rel="use-redhat-tooltip"
-                       data-toggle="tooltip" {{translateAttr data-original-title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}>
-                    </i>
-                  {{/view}}
-                </div>
-                {{! Use RedHat Satellite/Spacewalk END }}
-              </div>
-            </div>
-          </form>
-        {{/if}}
-        {{#if view.invalidUrlExist}}
-          <div class="alert alert-warning">
-            {{t installer.step1.invalidURLAttention}}
-            <a
-              href="javascript:void(null)" {{action "retryRepoUrls" target="view"}}>{{t installer.step1.retryRepoUrls}}</a>
-          </div>
-        {{/if}}
-      {{else}}
-        {{view App.SpinnerView}}
-      {{/if}}
-    </div>
-  </div>
-</div>
-<div class="wizard-footer col-md-12">
-  <button type="button" class="btn btn-default pull-left installer-back-btn" {{bindAttr disabled="App.router.btnClickInProgress"}} {{action back}} {{QAAttr "wizard-back"}}>
-    &larr; {{t common.back}}
-    {{#if App.router.backBtnClickInProgress}}
-      {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
-    {{/if}}
-  </button>
-  <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="view.isSubmitDisabled"}} {{action next}} {{QAAttr "wizard-next"}}>
-    {{#if App.router.nextBtnClickInProgress}}
-      {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
-    {{/if}}
-    {{t common.next}} &rarr;
-  </button>
-</div>
diff --git a/ambari-web/app/templates/wizard/step1/public_option_disabled_window_body.hbs b/ambari-web/app/templates/wizard/step1/public_option_disabled_window_body.hbs
deleted file mode 100644
index 77e4bd2..0000000
--- a/ambari-web/app/templates/wizard/step1/public_option_disabled_window_body.hbs
+++ /dev/null
@@ -1,26 +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.
-}}
-
-
-<p class="public-disabled-message">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg}}</p>
-<ul>
-  <li class="public-disabled-option">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg1}}</li>
-  <li class="public-disabled-option">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg2}}</li>
-  <li class="public-disabled-option">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg3}}</li>
-</ul>
-<p class="public-disabled-message">{{t installer.step1.selectUseRepoOptions.public.networkLost.popup.msg4}}</p>
\ No newline at end of file
diff --git a/ambari-web/app/templates/wizard/step1/vdf_upload.hbs b/ambari-web/app/templates/wizard/step1/vdf_upload.hbs
deleted file mode 100644
index 66a3b70..0000000
--- a/ambari-web/app/templates/wizard/step1/vdf_upload.hbs
+++ /dev/null
@@ -1,40 +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="clearfix register-version-options row">
-  {{#view "view.uploadFileView" class="col-md-12"}}
-    <div class="col-md-5 option-radio-button">
-      {{view view.uploadFileRadioButton classNames="radio" labelClassNames="local-option-label"}}
-    </div>
-    <div class="col-md-12">
-      {{#if view.isFileApi}}
-        {{view view.fileInputView}}
-      {{/if}}
-    </div>
-  {{/view}}
-  {{#view "view.enterUrlView" class="col-md-12"}}
-    <div class="option-radio-button col-md-12">
-      {{view view.enterUrlRadioButton classNames="radio" labelClassNames="local-option-label"}}
-    </div>
-    <div class="col-md-12 vdf-url">
-      <div {{bindAttr class="optionsToSelect.useLocalRepo.enterUrl.name optionsToSelect.useLocalRepo.enterUrl.url.hasError:has-error"}}>
-        {{view view.enterUrlField class="input-block-level" valueBinding="optionsToSelect.useLocalRepo.enterUrl.url" placeholderBinding="optionsToSelect.useLocalRepo.enterUrl.placeholder"}}
-      </div>
-    </div>
-  {{/view}}
-</div>
diff --git a/ambari-web/app/templates/wizard/step1_addLocalRepository.hbs b/ambari-web/app/templates/wizard/step1_addLocalRepository.hbs
deleted file mode 100644
index c8f1913..0000000
--- a/ambari-web/app/templates/wizard/step1_addLocalRepository.hbs
+++ /dev/null
@@ -1,55 +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.
-}}
-  <form class="form-horizontal" id="addLocalRepositoryPopup" autocomplete="off">
-    <div class="each-row">
-      <label class="control-label">{{t installer.step1.advancedRepo.localRepo.label.os}}</label>
-      <div class="btn-group">
-        <a class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
-          {{view.selectedOS.osType}}
-          <span class="caret"></span>
-        </a>
-        <ul class="dropdown-menu">
-          {{#each os in view.oses}}
-            <li>
-              <a href="#" {{action selectOS os target="view"}}>
-                {{os.osType}}
-              </a>
-            </li>
-          {{/each}}
-        </ul>
-      </div>
-    </div>
-    <div class="each-row">
-      <label class="control-label">{{t installer.step1.advancedRepo.localRepo.label.baseUrl}}</label>
-      {{view Em.TextField valueBinding="view.enteredUrl" classNames="col-md-6 form-control"}}
-    </div>
-    <div class="each-row">
-      <label class="control-label">{{t installer.step1.advancedRepo.localRepo.label.stack}}</label>
-      {{view.stackName}}
-    </div>
-
-    {{#if view.errorMessage}}
-	    <div class="alert alert-warning">
-			  <strong>{{t common.warning}}</strong>  {{view.errorMessage}}
-			</div>
-	  {{else}}
-	    <div class="alert alert-info">
-        Provide location of the local repository for the selected OS
-      </div>
-		{{/if}}
-  </form>
\ No newline at end of file
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 78105ec..fbc26ae 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1431,10 +1431,6 @@ var urls = {
     'real': '/stacks/{stackName}/versions?fields=repository_versions/operating_systems/repositories/*,repository_versions/operating_systems/OperatingSystems/*,repository_versions/RepositoryVersions/display_name&repository_versions/RepositoryVersions/repository_version={repositoryVersion}',
     'mock': ''
   },
-  'cluster.load_detailed_repo_version': {
-    'real': '/clusters/{clusterName}/stack_versions?fields=repository_versions/RepositoryVersions/repository_version,ClusterStackVersions/stack,ClusterStackVersions/version&minimal_response=true',
-    'mock': '/data/stack_versions/stack_version_all.json'
-  },
   'cluster.load_current_repo_stack_services': {
     'real': '/clusters/{clusterName}/stack_versions?fields=repository_versions/RepositoryVersions/stack_services,ClusterStackVersions/stack,ClusterStackVersions/version',
     'mock': '/data/stack_versions/stack_version_all.json'
@@ -1858,10 +1854,6 @@ var urls = {
       };
     }
   },
-  'admin.stack_versions.all': {
-    'real': '/clusters/{clusterName}/stack_versions?fields=ClusterStackVersions/*,repository_versions/RepositoryVersions/*&minimal_response=true',
-    'mock': '/data/stack_versions/stack_version_all.json'
-  },
   'admin.stack_version.install.repo_version': {
     'real': '/clusters/{clusterName}/stack_versions',
     'format': function (data) {
@@ -2040,28 +2032,7 @@ var urls = {
       }
     }
   },
-  'wizard.step1.get_repo_version_by_id': {
-    'real': '/stacks/{stackName}/versions?fields=repository_versions/operating_systems/repositories/*' +
-    ',repository_versions/RepositoryVersions/*' +
-    '&repository_versions/RepositoryVersions/id={repoId}&Versions/stack_version={stackVersion}',
-    'mock': ''
-  },
 
-  'wizard.step1.get_supported_os_types': {
-    'real': '/stacks/{stackName}/versions/{stackVersion}?fields=operating_systems/repositories/Repositories',
-    'mock': ''
-  },
-
-  'wizard.advanced_repositories.valid_url': {
-    'real': '/stacks/{stackName}/versions/{stackVersion}/operating_systems/{osType}/repositories/{repoId}',
-    'mock': '',
-    'type': 'PUT',
-    'format': function (data) {
-      return {
-        data: JSON.stringify(data.data)
-      }
-    }
-  },
   'wizard.get_version_definitions': {
     'real': '/version_definitions'
   },
@@ -2179,17 +2150,6 @@ var urls = {
     }
   },
 
-  'wizard.step8.set_local_repos': {
-    'real': '{stackVersionURL}/operating_systems/{osType}/repositories/{repoId}',
-    'mock': '',
-    'format': function (data) {
-      return {
-        type: 'PUT',
-        dataType: 'text',
-        data: data.data
-      }
-    }
-  },
   'wizard.step3.jdk_check': {
     'real': '/requests',
     'mock': '',
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index 521327a..163484e 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -383,7 +383,6 @@ require('views/main/views_view');
 
 require('views/installer');
 require('views/wizard/step0_view');
-require('views/wizard/step1_view');
 require('views/wizard/step2_view');
 require('views/wizard/step3_view');
 require('views/wizard/step3/hostLogPopupBody_view');
@@ -395,7 +394,6 @@ require('views/wizard/customMpackRepos_view');
 require('views/wizard/downloadMpacks_view');
 require('views/wizard/customProductRepos_view');
 require('views/wizard/verifyProducts_view');
-require('views/wizard/step4_view');
 require('views/wizard/step5_view');
 require('views/wizard/step6_view');
 require('views/wizard/step7_view');
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
index 25efffe..257087d 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/services_view.js
@@ -123,15 +123,6 @@ App.MainAdminStackServicesView = Em.View.extend({
   },
 
   /**
-   * Onclick handler for undo action of each repo group
-   * @method undoGroupLocalRepository
-   * @param {object} event
-   */
-  undoGroupLocalRepository: function (event) {
-    this.doActionForGroupLocalRepository(event, 'originalBaseUrl');
-  },
-
-  /**
    * Handler for clear icon click
    * @method clearGroupLocalRepository
    * @param {object} event
@@ -152,126 +143,4 @@ App.MainAdminStackServicesView = Em.View.extend({
       targetRepo.set('baseUrl', Em.isEmpty(newBaseUrlField) ? '' : Em.get(targetRepo, newBaseUrlField));
     }
   },
-
-  /**
-   * Handler when editing any repo group BaseUrl
-   * @method editGroupLocalRepository
-   */
-  editGroupLocalRepository: function () {
-    var repos = this.get('allRepos');
-    repos.forEach(function (targetRepo) {
-      targetRepo.set('undo', targetRepo.get('baseUrl') != targetRepo.get('originalBaseUrl'));
-      targetRepo.set('clearAll', targetRepo.get('baseUrl'));
-      targetRepo.set('empty-error', !targetRepo.get('baseUrl'));
-
-    });
-  }.observes('allRepos.@each.baseUrl'),
-
-  /**
-   * onSuccess callback for save Repo URL.
-   */
-  doSaveRepoUrlsSuccessCallback: function (response, request, data) {
-    var id = data.repoId + '-' + data.osType;
-    var targetRepo = this.get('allRepos').findProperty('id', id);
-    if (!targetRepo) {
-      return;
-    } else {
-
-      var modalCloseHandler = function() {
-        this.hide();
-        targetRepo.set('baseUrl', data.data.Repositories.base_url);
-        targetRepo.set('originalBaseUrl', data.data.Repositories.base_url);
-        targetRepo.set('onEdit', false);
-      };
-
-      App.ModalPopup.show({
-        header: Em.I18n.t('admin.cluster.repositories.popup.header.success'),
-        secondary: null,
-        onPrimary: modalCloseHandler,
-        onClose: modalCloseHandler,
-        message: Em.I18n.t('admin.cluster.repositories.popup.body.success'),
-        bodyClass: Em.View.extend({
-          template: Em.Handlebars.compile('<div class="alert alert-success">{{{message}}}</div>')
-        })
-      })
-    }
-  },
-
-  /**
-   * onError callback for save Repo URL.
-   */
-  doSaveRepoUrlsErrorCallback: function (request, ajaxOptions, error, data) {
-    var self = this;
-    var id = data.url.split('/')[10] + '-' + data.url.split('/')[8];
-    var targetRepo = this.get('allRepos').findProperty('id', id);
-    if (targetRepo) {
-      App.ModalPopup.show({
-        header: Em.I18n.t('admin.cluster.repositories.popup.header.fail'),
-        primary: Em.I18n.t('common.saveAnyway'),
-        secondary: Em.I18n.t('common.revert'),
-        third: Em.I18n.t('common.cancel'),
-        onPrimary: function () {
-          // save anyway: Go ahead and save with Repo URL validation turned off and close Dialog when done.
-          this.hide();
-          self.doSaveRepoUrls(id, false);
-        },
-        onSecondary: function () {
-          // Revert: Close dialog, revert URL value, go back to non-Edit mode
-          this.hide();
-          targetRepo.set('baseUrl', targetRepo.get('originalBaseUrl'));
-          targetRepo.set('onEdit', false);
-        },
-        onThird: function () {
-          // cancel: Close dialog but stay in Edit mode
-          this.hide();
-        },
-        message: Em.I18n.t('admin.cluster.repositories.popup.body.fail'),
-        bodyClass: Em.View.extend({
-          template: Em.Handlebars.compile('<div class="alert alert-warning">{{{message}}}</div>')
-        })
-      })
-    }
-  },
-
-  /**
-   * Check validation and Save the customized local urls
-   */
-  doSaveRepoUrls: function (id, verifyBaseUrl) {
-    var targetRepo = this.get('allRepos').findProperty('id', id);
-    App.ajax.send({
-      name: 'wizard.advanced_repositories.valid_url',
-      sender: this,
-      data: {
-        stackName: targetRepo.stackName,
-        stackVersion: targetRepo.stackVersion,
-        repoId: targetRepo.repoId,
-        osType: targetRepo.osType,
-        data: {
-          'Repositories': {
-            'base_url': targetRepo.baseUrl,
-            "verify_base_url": verifyBaseUrl
-          }
-        }
-      },
-      success: 'doSaveRepoUrlsSuccessCallback',
-      error: 'doSaveRepoUrlsErrorCallback'
-    });
-  },
-  /**
-   * Check validation and Save the customized local urls
-   */
-  saveRepoUrls: function (event) {
-    this.doSaveRepoUrls(event.context.get('id'), true);
-  },
-
-  /**
-   * on click handler 'Cancel' for current repo in edit mode
-   */
-  doCancel: function (event) {
-    var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
-    if (targetRepo) {
-      targetRepo.set('baseUrl', targetRepo.get('originalBaseUrl'));
-      targetRepo.set('onEdit', false);
-    }
-  }
 });
diff --git a/ambari-web/app/views/wizard/step1_view.js b/ambari-web/app/views/wizard/step1_view.js
deleted file mode 100644
index 9870079..0000000
--- a/ambari-web/app/views/wizard/step1_view.js
+++ /dev/null
@@ -1,290 +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('models/repository');
-
-App.WizardStep1View = Em.View.extend({
-
-  templateName: require('templates/wizard/step1'),
-
-  didInsertElement: function () {
-    $("[rel=skip-validation-tooltip]").tooltip({ placement: 'right'});
-    $("[rel=use-redhat-tooltip]").tooltip({ placement: 'right'});
-    $('.add-os-button,.redhat-label').tooltip();
-    this.$().on('mouseover', '.version-contents-body .table-hover > tbody > tr', function () {
-      App.tooltip($(this).find('.action .icon'), {placement: 'bottom'});
-      App.tooltip($(this).find('.icon-undo'), {placement: 'bottom'});
-    });
-    if (this.get('controller.selectedStack.showAvailable')) {
-      // first time load
-      if (this.get('controller.selectedStack.useRedhatSatellite')) {
-        // restore `use local repo` on page refresh
-        this.get('controller').useLocalRepo();
-      }
-    } else {
-      var selected = this.get('controller.content.stacks') && this.get('controller.content.stacks').findProperty('showAvailable');
-      if (!selected) {
-        // network disconnection
-        Em.trySet(this, 'controller.selectedStack.useLocalRepo', true);
-        Em.trySet(this, 'controller.selectedStack.usePublicRepo', false);
-      }
-    }
-  },
-
-  willDestroyElement: function () {
-    $("[rel=skip-validation-tooltip]").tooltip('destroy');
-    $("[rel=use-redhat-tooltip]").tooltip('destroy');
-    $('.add-os-button,.redhat-label').tooltip('destroy');
-    $('.icon-undo').tooltip('destroy');
-    $('.action .icon').tooltip('destroy');
-  },
-
-  /**
-   * Show possible reasons why Public Repo is disabled
-   *
-   * @returns {App.ModalPopup}
-   */
-  openPublicOptionDisabledWindow: function () {
-    return App.ModalPopup.show({
-      header: Em.I18n.t('installer.step1.selectUseRepoOptions.public.networkLost.popup.title'),
-      bodyClass: Ember.View.extend({
-        templateName: require('templates/wizard/step1/public_option_disabled_window_body')
-      }),
-      secondary: false
-    });
-  },
-
-  removeOS() {
-    $('.action .icon').tooltip('destroy');
-    return this.get('controller').removeOS(...arguments);
-  },
-
-  /**
-   * Disable submit button flag
-   *
-   * @type {bool}
-   */
-  isSubmitDisabled: Em.computed.or('invalidFormatUrlExist', 'isNoOsChecked', 'isAnyOsEmpty', 'controller.content.isCheckInProgress', 'App.router.btnClickInProgress', '!controller.isLoadingComplete'),
-
-  /**
-   * Show warning message flag
-   *
-   * @type {bool}
-   */
-  warningExist: Em.computed.or('invalidFormatUrlExist', 'isNoOsChecked', 'isAnyOsEmpty'),
-
-  skipVerifyBaseUrl: Em.computed.or('controller.selectedStack.skipValidationChecked', 'controller.selectedStack.useRedhatSatellite'),
-
-  verifyBaseUrl: Em.computed.not('skipVerifyBaseUrl'),
-
-  showWarning: Em.computed.and('warningExist', 'verifyBaseUrl'),
-
-  /**
-   * Onclick handler for recheck repos urls. Used in Advanced Repository Options.
-   */
-  retryRepoUrls: function () {
-    App.router.get('installerController').checkRepoURL(this.get('controller'));
-  },
-
-  /**
-   * Radio button for use Public repo
-   *
-   * @type {App.RadioButtonView}
-   */
-  usePublicRepoRadioButton: App.RadioButtonView.extend({
-    labelTranslate: 'installer.step1.selectUseRepoOptions.public',
-    checked: Em.computed.alias('controller.selectedStack.usePublicRepo'),
-
-    change: function () {
-      this.get('controller').usePublicRepo();
-    }
-  }),
-
-  /**
-   * Checkbox for use Public repo
-   *
-   * @type {App.RadioButtonView}
-   */
-  useLocalRepoRadioButton: App.RadioButtonView.extend({
-    labelTranslate: 'installer.step1.selectUseRepoOptions.local',
-    checked: Em.computed.alias('controller.selectedStack.useLocalRepo'),
-
-    change: function () {
-      this.get('controller').useLocalRepo();
-    }
-  }),
-
-  /**
-   * User already selected all OSes
-   *
-   * @type {boolean}
-   */
-  allOsesSelected: Em.computed.everyBy('controller.selectedStack.operatingSystems', 'isSelected', true),
-
-  /**
-   * Disallow adding OS if all OSes are already added or user select <code>useRedhatSatellite</code>
-   *
-   * @type {boolean}
-   */
-  isAddOsButtonDisabled: Em.computed.or('allOsesSelected', 'controller.selectedStack.useRedhatSatellite'),
-
-  /**
-   * Tooltip for Add OS Button
-   * Empty if this button is enabled
-   *
-   * @type {string}
-   */
-  addOsButtonTooltip: Em.computed.ifThenElse('allOsesSelected', Em.I18n.t('installer.step1.addOs.disabled.tooltip'), ''),
-
-  /**
-   * Tooltip for useRedhatSatellite block
-   * Empty if usage Redhat is enabled
-   *
-   * @type {string}
-   */
-  redhatDisabledTooltip: Em.computed.ifThenElse('controller.selectedStack.usePublicRepo', Em.I18n.t('installer.step1.advancedRepo.useRedhatSatellite.disabled.tooltip'), ''),
-  /**
-   * List of all repositories under selected stack operatingSystems
-   *
-   * @type {App.Repository[]}
-   */
-  allRepositories: function () {
-    return this.getWithDefault('controller.selectedStack.repositories', []);
-  }.property('controller.selectedStack.repositories.[]'),
-
-  /**
-   * Verify if some repo has invalid base-url
-   * Ignore if <code>useRedhatSatellite</code> is true for selected stack
-   *
-   * @type {bool}
-   */
-  invalidFormatUrlExist: function () {
-    var allRepositories = this.get('allRepositories');
-    if (!allRepositories) {
-      return false;
-    }
-    if (this.get('controller.selectedStack.useRedhatSatellite')) {
-      allRepositories = allRepositories.filter(this.isRedhat);
-    }
-    return allRepositories.someProperty('invalidFormatError', true);
-  }.property('controller.selectedStack.useRedhatSatellite', 'allRepositories.@each.invalidFormatError'),
-
-  /**
-   * Verify if some invalid repo-urls exist
-   * @type {bool}
-   */
-  invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', 'INVALID'),
-
-  /**
-   * If all repo links are unchecked
-   * @type {bool}
-   */
-  isNoOsChecked: Em.computed.everyBy('controller.selectedStack.operatingSystems', 'isSelected', false),
-
-  /**
-   *
-   * @param {App.Repository} item
-   * @returns {boolean}
-   */
-  isRedhat: function(item) {
-    return Boolean(item.get('osType') && item.get('osType').contains('redhat'));
-  },
-
-  /**
-   * If any OS is empty
-   * @type {bool}
-   */
-  isAnyOsEmpty: function () {
-    var operatingSystems = this.get('controller.selectedStack.operatingSystems');
-    if (Em.isNone(operatingSystems)) {
-      return false;
-    }
-    var selectedOS = operatingSystems.filterProperty('isSelected', true);
-    if (this.get('controller.selectedStack.useRedhatSatellite')) {
-      selectedOS = selectedOS.filter(this.isRedhat);
-    }
-    return selectedOS.someProperty('isNotFilled', true);
-  }.property('controller.selectedStack.operatingSystems.@each.isSelected', 'controller.selectedStack.operatingSystems.@each.isNotFilled', 'controller.selectedStack.useRedhatSatellite'),
-
-  popoverView: Em.View.extend({
-    tagName: 'i',
-    classNameBindings: ['repository.validationClassName'],
-    attributeBindings: ['repository.errorTitle:data-original-title', 'repository.errorContent:data-content'],
-    didInsertElement: function () {
-      App.popover($(this.get('element')), {
-        template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>',
-        trigger: 'hover'
-      });
-    }
-  }),
-
-  /**
-   * @type {App.CheckboxView}
-   */
-  redhatCheckBoxView: App.CheckboxView.extend({
-    checkedBinding: 'controller.selectedStack.useRedhatSatellite',
-    disabledBinding: 'controller.selectedStack.usePublicRepo',
-    click: function () {
-      if (!this.get('disabled')) {
-        this.toggleProperty('controller.selectedStack.useRedhatSatellite');
-        if (this.get('controller.selectedStack.useRedhatSatellite')) {
-          App.ModalPopup.show({
-            header: Em.I18n.t('common.important'),
-            encodeBody: false,
-            secondary: false,
-            body: Em.I18n.t('installer.step1.advancedRepo.useRedhatSatellite.warning')
-          });
-        }
-      }
-      return false;
-    }
-  }),
-
-  repositoryTextField: Ember.TextField.extend({
-    repository: null,
-    placeholderBinding: "repository.placeholder",
-    valueBinding: "repository.baseUrl",
-    disabled: function() {
-      var isRedhat = this.get('parentView').isRedhat(this.get('repository'));
-      return this.get('controller.selectedStack.useRedhatSatellite') && !isRedhat;
-    }.property('controller.selectedStack.useRedhatSatellite')
-  }),
-
-  /**
-   * Handler when editing any repo BaseUrl
-   *
-   * @method editLocalRepository
-   */
-  editLocalRepository: function () {
-    //upload to content
-    var repositories = this.get('allRepositories');
-    if (!repositories) {
-      return;
-    }
-    repositories.forEach(function (repository) {
-      if (repository.get('lastBaseUrl') !== repository.get('baseUrl')) {
-        repository.setProperties({
-          lastBaseUrl: repository.get('baseUrl'),
-          validation: 'PENDING'
-        });
-      }
-    }, this);
-  }.observes('allRepositories.@each.baseUrl')
-
-});
diff --git a/ambari-web/test/controllers/global/cluster_controller_test.js b/ambari-web/test/controllers/global/cluster_controller_test.js
index fcbad62..1b05fd2 100644
--- a/ambari-web/test/controllers/global/cluster_controller_test.js
+++ b/ambari-web/test/controllers/global/cluster_controller_test.js
@@ -234,200 +234,6 @@ describe('App.clusterController', function () {
     });
   });
 
-  describe('#checkDetailedRepoVersion()', function () {
-
-    var cases = [
-      {
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.1',
-        isStormMetricsSupported: false,
-        title: 'HDP < 2.2'
-      },
-      {
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.3',
-        isStormMetricsSupported: true,
-        title: 'HDP > 2.2'
-      },
-      {
-        currentStackName: 'BIGTOP',
-        currentStackVersionNumber: '0.8',
-        isStormMetricsSupported: true,
-        title: 'not HDP'
-      }
-    ];
-
-    afterEach(function () {
-      App.get.restore();
-    });
-
-    describe('should check detailed repo version for HDP 2.2', function () {
-
-      beforeEach(function () {
-        sinon.stub(App, 'get').withArgs('currentStackName').returns('HDP').withArgs('currentStackVersionNumber').returns('2.2');
-      });
-
-      it('request is sent', function () {
-        controller.checkDetailedRepoVersion();
-        var args = testHelpers.findAjaxRequest('name', 'cluster.load_detailed_repo_version');
-        expect(args).to.exists;
-      });
-    });
-
-    cases.forEach(function (item) {
-      describe(item.title, function () {
-
-        beforeEach(function () {
-          sinon.stub(App, 'get', function (key) {
-            return item[key] || Em.get(App, key);
-          });
-          controller.checkDetailedRepoVersion();
-        });
-
-        it('request is not sent', function () {
-          var args = testHelpers.findAjaxRequest('name', 'cluster.load_detailed_repo_version');
-          expect(args).to.not.exists;
-        });
-
-        it('App.isStormMetricsSupported is ' + item.isStormMetricsSupported, function () {
-          expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
-        });
-
-      });
-    });
-
-  });
-
-  describe('#checkDetailedRepoVersionSuccessCallback()', function () {
-    beforeEach(function () {
-      sinon.stub(App, 'get', function(key) {
-        if (key === 'currentStackName') {
-          return 'HDP';
-        }
-        if (key === 'currentStackVersionNumber') {
-          return '2.2';
-        }
-        return Em.get(App, key);
-      });
-    });
-    afterEach(function() {
-      App.get.restore();
-    });
-
-    var cases = [
-      {
-        items: [
-          {
-            ClusterStackVersions: {
-              stack: 'HDP',
-              version: '2.2'
-            },
-            repository_versions: [
-              {
-                RepositoryVersions: {
-                  repository_version: '2.1'
-                }
-              }
-            ]
-          }
-        ],
-        isStormMetricsSupported: false,
-        title: 'HDP < 2.2.2'
-      },
-      {
-        items: [
-          {
-            ClusterStackVersions: {
-              stack: 'HDP',
-              version: '2.2'
-            },
-            repository_versions: [
-              {
-                RepositoryVersions: {
-                  repository_version: '2.2.2'
-                }
-              }
-            ]
-          }
-        ],
-        isStormMetricsSupported: true,
-        title: 'HDP 2.2.2'
-      },
-      {
-        items: [
-          {
-            repository_versions: [
-              {
-                RepositoryVersions: {
-                  repository_version: '2.2.3'
-                }
-              }
-            ]
-          }
-        ],
-        isStormMetricsSupported: true,
-        title: 'HDP > 2.2.2'
-      },
-      {
-        items: null,
-        isStormMetricsSupported: true,
-        title: 'empty response'
-      },
-      {
-        items: [],
-        isStormMetricsSupported: true,
-        title: 'no items'
-      },
-      {
-        items: [{}],
-        isStormMetricsSupported: true,
-        title: 'empty item'
-      },
-      {
-        items: [{
-          repository_versions: []
-        }],
-        isStormMetricsSupported: true,
-        title: 'no versions'
-      },
-      {
-        items: [{
-          repository_versions: [{}]
-        }],
-        isStormMetricsSupported: true,
-        title: 'no version info'
-      },
-      {
-        items: [{
-          repository_versions: [
-            {
-              RepositoryVersions: {}
-            }
-          ]
-        }],
-        isStormMetricsSupported: true,
-        title: 'empty version info'
-      }
-    ];
-
-    cases.forEach(function (item) {
-      it(item.title, function () {
-        controller.checkDetailedRepoVersionSuccessCallback({
-          items: item.items
-        });
-        expect(App.get('isStormMetricsSupported')).to.equal(item.isStormMetricsSupported);
-      });
-    });
-
-  });
-
-  describe('#checkDetailedRepoVersionErrorCallback()', function () {
-    it('should set isStormMetricsSupported to default value', function () {
-      controller.checkDetailedRepoVersionErrorCallback();
-      expect(App.get('isStormMetricsSupported')).to.be.true;
-    });
-  });
-
   describe('#getAllUpgrades()', function () {
 
     it('should send request to get upgrades data', function () {
diff --git a/ambari-web/test/controllers/installer_test.js b/ambari-web/test/controllers/installer_test.js
index 9e65b76..42fc5d2 100644
--- a/ambari-web/test/controllers/installer_test.js
+++ b/ambari-web/test/controllers/installer_test.js
@@ -54,21 +54,6 @@ describe('App.InstallerController', function () {
     });
   });
 
-  describe('#getHosts', function() {
-    it ('Should return empty array', function() {
-      expect(installerController.getHosts()).to.eql([]);
-    });
-  });
-
-  describe('#loadServices', function() {
-    it ('Should resolve nothing', function() {
-      var res = installerController.loadServices();
-      res.then(function(data){
-        expect(data).to.be.undefined;
-      });
-    });
-  });
-
   describe('#checkRepoURL', function() {
     var stacks = Em.A([
       Em.Object.create({
@@ -791,31 +776,6 @@ describe('App.InstallerController', function () {
     });
   });
 
-  describe('#saveServices', function() {
-    it ('Should return correct names', function() {
-      var stepController = Em.A([
-        Em.Object.create({
-          isInstalled: true,
-          isSelected: true,
-          serviceName: 'i1'
-        }),
-        Em.Object.create({
-          isInstalled: false,
-          isSelected: true,
-          serviceName: 'i2'
-        }),
-        Em.Object.create({
-          isInstalled: true,
-          isSelected: false,
-          serviceName: 'i3'
-        })
-      ]);
-      installerController.saveServices(stepController);
-      expect(installerController.get('content.selectedServiceNames')).to.eql(['i1','i2']);
-      expect(installerController.get('content.installedServiceNames')).to.eql(['i1','i3']);
-    });
-  });
-
   describe('#saveClients', function() {
     var stepController;
 
@@ -1063,181 +1023,6 @@ describe('App.InstallerController', function () {
 
   });
 
-  describe('#validateJDKVersion', function() {
-    var tests = [
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.8'
-        },
-        successCallbackCalled: false,
-        popupCalled: true,
-        stacks: [Em.Object.create({
-          minJdkVersion: '1.6',
-          maxJdkVersion: '1.7',
-          isSelected: true
-        })],
-        m: 'JDK 1.8, stack supports 1.6-1.7 popup should be displayed'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.8'
-        },
-        successCallbackCalled: true,
-        popupCalled: false,
-        stacks: [Em.Object.create({
-          minJdkVersion: '1.6',
-          maxJdkVersion: '1.8',
-          isSelected: true
-        })],
-        m: 'JDK 1.8, stack supports 1.7-1.8 procceed installation without warning'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.5'
-        },
-        successCallbackCalled: false,
-        popupCalled: true,
-        stacks: [Em.Object.create({
-          minJdkVersion: '1.6',
-          maxJdkVersion: '1.8',
-          isSelected: true
-        })],
-        m: 'JDK 1.5, stack supports 1.6-1.8, popup should be displayed'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.5'
-        },
-        successCallbackCalled: true,
-        popupCalled: false,
-        stacks: [Em.Object.create({
-          minJdkVersion: null,
-          maxJdkVersion: null,
-          isSelected: true
-        })],
-        m: 'JDK 1.5, stack supports max and min are null, procceed installation without warning'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.5'
-        },
-        successCallbackCalled: true,
-        popupCalled: false,
-        stacks: [Em.Object.create({
-          minJdkVersion: '1.5',
-          maxJdkVersion: null,
-          isSelected: true
-        })],
-        m: 'JDK 1.5, stack supports max is missed and min is 1.5, procceed installation without warning'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.6'
-        },
-        successCallbackCalled: false,
-        popupCalled: true,
-        stacks: [Em.Object.create({
-          minJdkVersion: '1.5',
-          maxJdkVersion: null,
-          isSelected: true
-        })],
-        m: 'JDK 1.6, stack supports max is missed and min is 1.5, popup should be displayed'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.5'
-        },
-        successCallbackCalled: true,
-        popupCalled: false,
-        stacks: [Em.Object.create({
-          minJdkVersion: null,
-          maxJdkVersion: '1.5',
-          isSelected: true
-        })],
-        m: 'JDK 1.5, stack supports max 1.5 and min is missed, procceed installation without warning'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.5'
-        },
-        successCallbackCalled: false,
-        popupCalled: true,
-        stacks: [Em.Object.create({
-          minJdkVersion: null,
-          maxJdkVersion: '1.8',
-          isSelected: true
-        })],
-        m: 'JDK 1.5, stack supports max 1.8 and min is missed, popup should be displayed'
-      },
-      {
-        isCustomJDK: false,
-        ambariProperties: {
-          'java.version': '1.8'
-        },
-        successCallbackCalled: true,
-        popupCalled: false,
-        stacks: [Em.Object.create({
-          isSelected: true
-        })],
-        m: 'JDK 1.8, min, max jdk missed in stack definition, procceed installation without warning'
-      },
-      {
-        isCustomJDK: true,
-        ambariProperties: {
-          'java.version': '1.8'
-        },
-        successCallbackCalled: true,
-        popupCalled: false,
-        stacks: [Em.Object.create({
-          minJdkVersion: '1.6',
-          maxJdkVersion: '1.8',
-          isSelected: true
-        })],
-        m: 'JDK 1.8, custom jdk location used, procceed installation without warning'
-      }
-    ];
-
-    tests.forEach(function(test) {
-
-      describe(test.m, function() {
-
-        var successCallback;
-
-        beforeEach(function () {
-          sinon.stub(App.Stack, 'find').returns(test.stacks);
-          sinon.stub(App.router, 'get').withArgs('clusterController.isCustomJDK').returns(test.isCustomJDK)
-            .withArgs('clusterController.ambariProperties').returns(test.ambariProperties);
-          sinon.stub(App, 'showConfirmationPopup', Em.K);
-          successCallback = sinon.spy();
-          installerController.validateJDKVersion(successCallback);
-        });
-
-        afterEach(function () {
-          App.router.get.restore();
-          App.Stack.find.restore();
-          App.showConfirmationPopup.restore();
-        });
-
-        it('successCallback is ' + (test.successCallbackCalled ? '' : 'not') + ' called', function () {
-          expect(successCallback.called).to.be.equal(test.successCallbackCalled);
-        });
-
-        it('App.showConfirmationPopup. is ' + (test.popupCalled ? '' : 'not') + ' called', function () {
-          expect(App.showConfirmationPopup.called).to.be.equal(test.popupCalled);
-        });
-
-      });
-    });
-  });
-
   describe('#postVersionDefinitionFileErrorCallback', function () {
 
     beforeEach(function () {
@@ -1381,7 +1166,6 @@ describe('App.InstallerController', function () {
 
   describe('#getStepController', function () {
     var wizardStep0Controller = {};
-    var wizardStep1Controller = {};
     var wizardStep2Controller = {};
 
     before(function () {
@@ -1392,7 +1176,6 @@ describe('App.InstallerController', function () {
       ]);
 
       App.router.set('wizardStep0Controller', wizardStep0Controller);
-      App.router.set('wizardStep1Controller', wizardStep1Controller);
       App.router.set('wizardStep2Controller', wizardStep2Controller);
     });
 
@@ -1402,8 +1185,8 @@ describe('App.InstallerController', function () {
     });
 
     it('Should return controller for the step name provided.', function () {
-      var stepController = installerController.getStepController("step1");
-      expect(stepController).to.equal(wizardStep1Controller);
+      var stepController = installerController.getStepController("step0");
+      expect(stepController).to.equal(wizardStep0Controller);
     });
   });
 });
diff --git a/ambari-web/test/controllers/wizard/step1_test.js b/ambari-web/test/controllers/wizard/step1_test.js
deleted file mode 100644
index 88cb231..0000000
--- a/ambari-web/test/controllers/wizard/step1_test.js
+++ /dev/null
@@ -1,403 +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 wizardStep1Controller;
-
-var stacks = [
-  App.Stack.createRecord({
-    "id": "HDP-2.4",
-    "stackName": "HDP",
-    "stackVersion": "2.4"
-  }),
-  App.Stack.createRecord({
-    "id": "HDP-2.5-2.5.0.0",
-    "stackName": "HDP",
-    "stackVersion": "2.5"
-  }),
-  App.Stack.createRecord({
-    "id": "HDP-2.5",
-    "stackName": "HDP",
-    "stackVersion": "2.5"
-  }),
-  App.Stack.createRecord({
-    "id": "HDP-2.3.ECS",
-    "stackName": "HDP",
-    "stackVersion": "2.3.ECS"
-  }),
-  App.Stack.createRecord({
-    "id": "HDP-2.3",
-    "stackName": "HDP",
-    "stackVersion": "2.3"
-  }),
-  App.Stack.createRecord({
-    "id": "HDP-2.2",
-    "stackName": "HDP",
-    "stackVersion": "2.2"
-  }),
-  App.Stack.createRecord({
-    "id": "HDP-2.4-2.4.1.1-12345",
-    "stackName": "HDP",
-    "stackVersion": "2.4"
-  })
-];
-
-function getController() {
-  return App.WizardStep1Controller.create({content: Em.Object.create({stacks: stacks}), onNetworkIssuesExist: Em.K});
-}
-
-describe('App.WizardStep1Controller', function () {
-
-  beforeEach(function() {
-    wizardStep1Controller = getController();
-  });
-
-  App.TestAliases.testAsComputedFindBy(getController(), 'selectedStack', 'content.stacks', 'isSelected', true);
-
-  App.TestAliases.testAsComputedFindBy(getController(), 'selectedStackType', 'availableStackTypes', 'isSelected', true);
-
-  App.TestAliases.testAsComputedFilterBy(getController(), 'servicesForSelectedStack', 'selectedStack.stackServices', 'isHidden', false);
-
-  App.TestAliases.testAsComputedEveryBy(getController(), 'networkIssuesExist', 'content.stacks', 'stackDefault', true);
-
-  App.TestAliases.testAsComputedEqual(getController(), 'isLoadingComplete', 'wizardController.loadStacksRequestsCounter', 0);
-
-  describe('#usePublicRepo', function () {
-
-    beforeEach(function () {
-      wizardStep1Controller.get('content.stacks').findProperty('id', 'HDP-2.5-2.5.0.0').setProperties({
-        isSelected: true,
-        useRedhatSatellite: true,
-        usePublicRepo: false,
-        useLocalRepo: true,
-      });
-      wizardStep1Controller.usePublicRepo();
-    });
-
-    it('correct stack is selected', function () {
-      expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0');
-    });
-
-    it('`useRedhatSatellite` is set `false`', function () {
-      expect(wizardStep1Controller.get('selectedStack.useRedhatSatellite')).to.be.false;
-    });
-
-    it('`usePublicRepo` is set `true`', function () {
-      expect(wizardStep1Controller.get('selectedStack.usePublicRepo')).to.be.true;
-    });
-
-    it('`useLocalRepo` is set `false`', function () {
-      expect(wizardStep1Controller.get('selectedStack.useLocalRepo')).to.be.false;
-    });
-
-  });
-
-  describe('#useLocalRepo', function () {
-
-    beforeEach(function () {
-      wizardStep1Controller.get('content.stacks').findProperty('id', 'HDP-2.5-2.5.0.0').setProperties({
-        isSelected: true,
-        usePublicRepo: true,
-        useLocalRepo: false,
-      });
-      wizardStep1Controller.useLocalRepo();
-    });
-
-    it('correct stack is selected', function () {
-      expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0');
-    });
-
-    it('`usePublicRepo` is set `false`', function () {
-      expect(wizardStep1Controller.get('selectedStack.usePublicRepo')).to.be.false;
-    });
-
-    it('`useLocalRepo` is set `true`', function () {
-      expect(wizardStep1Controller.get('selectedStack.useLocalRepo')).to.be.true;
-    });
-
-  });
-
-  describe('#selectStackBy', function () {
-
-    it('select by `id`', function () {
-      wizardStep1Controller.selectStackBy('id', 'HDP-2.5-2.5.0.0');
-      expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0');
-      expect(wizardStep1Controller.get('content.stacks').filterProperty('isSelected')).to.have.property('length').equal(1);
-    });
-
-    it('select by `stackNameVersion`', function () {
-      wizardStep1Controller.selectStackBy('stackNameVersion', 'HDP-2.5');
-      expect(wizardStep1Controller.get('selectedStack.id')).to.be.equal('HDP-2.5-2.5.0.0'); // `HDP-2.5-2.5.0.0`-id is before `HDP-2.5`-id
-      expect(wizardStep1Controller.get('content.stacks').filterProperty('isSelected')).to.have.property('length').equal(1);
-    });
-
-  });
-
-  describe('#availableStackTypes', function () {
-
-    it('stack types are sorted desc', function () {
-      expect(wizardStep1Controller.get('availableStackTypes').mapProperty('stackName')).to.be.eql(['HDP-2.5', 'HDP-2.4', 'HDP-2.3.ECS', 'HDP-2.3', 'HDP-2.2']);
-    });
-
-  });
-
-  describe('#readInfoIsNotProvided', function () {
-
-    Em.A([
-      {
-        options: {
-          uploadFile: {isSelected: false},
-          enterUrl: {isSelected: false}
-        },
-        m: 'url and file are not selected',
-        e: false
-      },
-      {
-        options: {
-          uploadFile: {isSelected: false},
-          enterUrl: {isSelected: true, url: ''}
-        },
-        m: 'url is selected but not provided',
-        e: true
-      },
-      {
-        options: {
-          uploadFile: {isSelected: false},
-          enterUrl: {isSelected: true, url: ' url'}
-        },
-        m: 'url is selected and provided',
-        e: false
-      },
-      {
-        options: {
-          uploadFile: {isSelected: true, file: ''},
-          enterUrl: {isSelected: false}
-        },
-        m: 'file is selected but not provided',
-        e: true
-      },
-      {
-        options: {
-          uploadFile: {isSelected: true, file: 'path'},
-          enterUrl: {isSelected: false}
-        },
-        m: 'file is selected and provided',
-        e: false
-      }
-    ]).forEach(function (test) {
-
-      it(test.m, function () {
-        wizardStep1Controller.set('optionsToSelect.useLocalRepo', test.options);
-        expect(wizardStep1Controller.get('readInfoIsNotProvided')).to.be.equal(test.e);
-      });
-
-    });
-
-  });
-
-  describe('#uploadVdf', function () {
-
-    function getModal() {
-      var controller = getController();
-      controller.set('optionsToSelect', Em.Object.create({
-        useLocalRepo: {
-          enterUrl: {isSelected: true, url: 'apache.org'},
-          uploadFile: {isSelected: false, file: 'some_file'}
-        }
-      }));
-      return controller.uploadVdf();
-    }
-
-    beforeEach(function () {
-      this.modal = getModal();
-    });
-
-    describe('#restoreUploadOptions', function () {
-
-      beforeEach(function () {
-        wizardStep1Controller.set('optionsToSelect.useLocalRepo', {
-          enterUrl: {isSelected: true, url: 'apache.org'},
-          uploadFile: {isSelected: false, file: 'some_file'}
-        });
-        this.modal.restoreUploadOptions();
-      });
-
-      it('`enterUrl.isSelected`', function () {
-        expect(this.modal.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')).to.be.false;
-      });
-
-      it('`enterUrl.url`', function () {
-        expect(this.modal.get('controller.optionsToSelect.useLocalRepo.enterUrl.url')).to.be.equal('');
-      });
-
-      it('`uploadFile.isSelected`', function () {
-        expect(this.modal.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')).to.be.true;
-      });
-
-      it('`uploadFile.file`', function () {
-        expect(this.modal.get('controller.optionsToSelect.useLocalRepo.uploadFile.file')).to.be.equal('');
-      });
-
-    });
-
-    describe('#bodyClass', function () {
-
-      beforeEach(function () {
-        this.body = this.modal.get('bodyClass').create();
-      });
-
-      describe('#uploadFileView', function () {
-
-        beforeEach(function() {
-          this.fileView = this.body.get('uploadFileView').create();
-        });
-
-        describe('#click', function () {
-
-          beforeEach(function () {
-            this.fileView.set('controller', getController());
-            this.fileView.set('controller.optionsToSelect', {
-              useLocalRepo: {
-                enterUrl: {isSelected: true, hasError: true},
-                uploadFile: {isSelected: false, hasError: true}
-              }
-            });
-            this.fileView.click();
-          });
-
-          it('`enterUrl.isSelected`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')).to.be.false;
-          });
-
-          it('`enterUrl.hasError`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.hasError')).to.be.false;
-          });
-
-          it('`uploadFile.isSelected`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')).to.be.true;
-          });
-
-          it('`uploadFile.hasError`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.hasError')).to.be.false;
-          });
-
-        });
-
-      });
-
-      describe('#enterUrlView', function () {
-
-        beforeEach(function() {
-          this.fileView = this.body.get('enterUrlView').create();
-        });
-
-        describe('#click', function () {
-
-          beforeEach(function () {
-            this.fileView.set('controller', getController());
-            this.fileView.set('controller.optionsToSelect', {
-              useLocalRepo: {
-                enterUrl: {isSelected: false, hasError: true},
-                uploadFile: {isSelected: false, hasError: true}
-              }
-            });
-            this.fileView.click();
-          });
-
-          it('`enterUrl.isSelected`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')).to.be.true;
-          });
-
-          it('`enterUrl.hasError`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.enterUrl.hasError')).to.be.false;
-          });
-
-          it('`uploadFile.isSelected`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')).to.be.false;
-          });
-
-          it('`uploadFile.hasError`', function () {
-            expect(this.fileView.get('controller.optionsToSelect.useLocalRepo.uploadFile.hasError')).to.be.false;
-          });
-
-        });
-
-      });
-
-    });
-
-  })
-
-  describe('#removeOS', function() {
-
-    beforeEach(function () {
-      wizardStep1Controller.set('selectedStack', {useRedhatSatellite: null});
-    });
-
-    [
-      {
-        useRedhatSatellite: false,
-        e: false,
-      },
-      {
-        useRedhatSatellite: true,
-        e: true
-      }
-    ].forEach(function (test) {
-      it('useRedhatSatellite is ' + JSON.stringify(test.useRedhatSatellite), function () {
-        wizardStep1Controller.set('selectedStack.useRedhatSatellite', test.useRedhatSatellite);
-        var os = {isSelected: true};
-        wizardStep1Controller.removeOS({context: os})
-        expect(Ember.get(os, 'isSelected')).to.be.equal(test.e);
-      });
-    });
-
-  });
-
-  describe('#addOS', function() {
-
-    it('should set `isSelected` to true', function () {
-      var os = {isSelected: false};
-      wizardStep1Controller.addOS({context: os})
-      expect(Ember.get(os, 'isSelected')).to.be.true;
-    });
-
-  });
-
-  describe('#onNetworkIssuesExist', function () {
-
-    beforeEach(function () {
-      this.controller = App.WizardStep1Controller.create({content: Em.Object.create({stacks: stacks})});
-      this.controller.get('content.stacks').setEach('usePublicRepo', true);
-      this.controller.get('content.stacks').setEach('useLocalRepo', false);
-      this.controller.reopen({networkIssuesExist: true});
-      this.controller.onNetworkIssuesExist();
-    });
-
-    it('each stack has `usePublicRepo` false', function() {
-      expect(this.controller.get('content.stacks').everyProperty('usePublicRepo', false)).to.be.true;
-    });
-
-    it('each stack has `useLocalRepo` true', function() {
-      expect(this.controller.get('content.stacks').everyProperty('useLocalRepo', true)).to.be.true;
-    });
-
-  });
-
-});
diff --git a/ambari-web/test/controllers/wizard/step4_test.js b/ambari-web/test/controllers/wizard/step4_test.js
deleted file mode 100644
index 1aafb9f..0000000
--- a/ambari-web/test/controllers/wizard/step4_test.js
+++ /dev/null
@@ -1,1084 +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 Ember = require('ember');
-var App = require('app');
-var modelSetup = require('test/init_model_test');
-
-require('controllers/wizard/step4_controller');
-describe('App.WizardStep4Controller', function () {
-
-  var services = [
-    'HDFS', 'GANGLIA', 'OOZIE', 'HIVE', 'HBASE', 'PIG', 'SCOOP', 'ZOOKEEPER', 'SMARTSENSE', 'LOGSEARCH',
-    'YARN', 'MAPREDUCE2', 'FALCON', 'TEZ', 'STORM', 'AMBARI_METRICS', 'RANGER', 'SPARK', 'SLIDER', 'ATLAS', 'AMBARI_INFRA_SOLR'
-  ];
-  var controller;
-
-  beforeEach(function() {
-    controller = App.WizardStep4Controller.create();
-    services.forEach(function(serviceName) {
-      controller.pushObject(App.StackService.createRecord({
-        'serviceName':serviceName, 'isSelected': true, 'isHiddenOnSelectServicePage': false, 'isInstalled': false, 'isDisabled': 'HDFS' === serviceName, isDFS: 'HDFS' === serviceName
-      }));
-    });
-  });
-
-  var generateSelectedServicesContent = function(selectedServiceNames) {
-    var allServices = services.slice(0);
-    modelSetup.setupStackServiceComponent();
-    if (selectedServiceNames.contains('GLUSTERFS')) allServices.push('GLUSTERFS');
-    allServices = allServices.map(function(serviceName) {
-      return [App.StackService.createRecord({
-        'serviceName': serviceName,
-        'isSelected': false,
-        'canBeSelected': true,
-        'isInstalled': false,
-        isPrimaryDFS: serviceName === 'HDFS',
-        isDFS: ['HDFS','GLUSTERFS'].contains(serviceName),
-        isMonitoringService: ['GANGLIA'].contains(serviceName),
-        requiredServices: App.StackService.find(serviceName).get('requiredServices') || [],
-        displayNameOnSelectServicePage: App.format.role(serviceName, true),
-        coSelectedServices: function() {
-          return App.StackService.coSelected[this.get('serviceName')] || [];
-        }.property('serviceName')
-      })];
-    }).reduce(function(current, prev) { return current.concat(prev); });
-
-    selectedServiceNames.forEach(function(serviceName) {
-      allServices.findProperty('serviceName', serviceName).set('isSelected', true);
-    });
-
-    return allServices;
-  };
-
-  describe('#isSubmitDisabled', function () {
-    it('should return false if at least one selected service is not installed', function () {
-      expect(controller.get('isSubmitDisabled')).to.equal(false);
-    });
-    it('should return true if all selected services are already installed', function () {
-      controller.setEach('isInstalled', true);
-      controller.findProperty('serviceName', 'HDFS').set('isSelected', false);
-      expect(controller.get('isSubmitDisabled')).to.equal(true);
-    });
-  });
-
-  describe('#isAllChecked', function () {
-    it('should return true if all non DFS services are selected', function () {
-      controller.setEach('isInstalled', false);
-      controller.findProperty('serviceName', 'YARN').set('isSelected', true);
-      controller.findProperty('serviceName', 'HDFS').set('isSelected', false);
-      expect(controller.get('isAllChecked')).to.equal(true);
-    });
-
-    it('should return false if at least one service is not selected', function () {
-      controller.findProperty('serviceName', 'YARN').set('isSelected', false);
-      expect(controller.get('isAllChecked')).to.equal(false);
-    });
-  });
-
-  describe('#fileSystems', function () {
-    beforeEach(function () {
-      controller.clear();
-      controller.set('content', generateSelectedServicesContent(['HDFS', 'GLUSTERFS', 'YARN']));
-    });
-
-    it('returns only DFS services', function () {
-      expect(controller.get('fileSystems')).to.have.length(2);
-      expect(controller.get('fileSystems').mapProperty('serviceName')).to.contain('GLUSTERFS');
-      expect(controller.get('fileSystems').mapProperty('serviceName')).to.contain('HDFS');
-    });
-
-    it('allows selecting only one DFS at a time', function () {
-      var fileSystems = controller.get('fileSystems');
-      fileSystems[0].set('isSelected', true);
-      expect(fileSystems[0].get('isSelected')).to.equal(true);
-      expect(fileSystems[1].get('isSelected')).to.equal(false);
-      fileSystems[1].set('isSelected', true);
-      expect(fileSystems[0].get('isSelected')).to.equal(false);
-      expect(fileSystems[1].get('isSelected')).to.equal(true);
-    });
-  });
-  describe('#multipleDFSs()', function () {
-    it('should return true if HDFS is selected and GLUSTERFS is selected', function () {
-      controller.set('content', generateSelectedServicesContent(['HDFS', 'GLUSTERFS']));
-      expect(controller.multipleDFSs()).to.equal(true);
-    });
-    it('should return false if HDFS is not selected and GLUSTERFS is selected', function () {
-      controller.set('content', generateSelectedServicesContent(['GLUSTERFS']));
-      expect(controller.multipleDFSs()).to.equal(false);
-    });
-    it('should return false if HDFS is selected and GLUSTERFS is not selected', function () {
-      controller.set('content', generateSelectedServicesContent(['HDFS']));
-      expect(controller.multipleDFSs()).to.equal(false);
-    });
-  });
-
-/* disabling these test while waiting for a decision on coselected services
-  describe('#setGroupedServices()', function () {
-    var testCases = [
-      {
-        title: 'should set MapReduce2 isSelected to true when YARN is selected',
-        condition: {
-          'YARN': true,
-          'HBASE': true,
-          'ZOOKEEPER': true,
-          'HIVE': true,
-          'MAPREDUCE2': true
-        },
-        result: {
-          'MAPREDUCE2': true
-        }
-      },
-      {
-        title: 'should set MapReduce2 isSelected to false when YARN is not selected',
-        condition: {
-          'YARN': false,
-          'HBASE': true,
-          'ZOOKEEPER': true,
-          'HIVE': false,
-          'MAPREDUCE2': true
-        },
-        result: {
-          'MAPREDUCE2': false
-        }
-      },
-      {
-        title: 'should set MAPREDUCE2 isSelected to true when YARN is selected',
-        condition: {
-          'HBASE': true,
-          'ZOOKEEPER': true,
-          'HIVE': false,
-          'YARN': true,
-          'MAPREDUCE2': true
-        },
-        result: {
-          'MAPREDUCE2': true
-        }
-      },
-      {
-        title: 'should set MAPREDUCE2 isSelected to false when YARN is not selected',
-        condition: {
-          'HBASE': true,
-          'ZOOKEEPER': true,
-          'HIVE': true,
-          'YARN': false,
-          'MAPREDUCE2': true
-        },
-        result: {
-          'MAPREDUCE2': false
-        }
-      }
-    ];
-
-    testCases.forEach(function(testCase){
-      describe(testCase.title, function () {
-
-        beforeEach(function () {
-          controller.clear();
-          Object.keys(testCase.condition).forEach(function (id) {
-            controller.pushObject(App.StackService.createRecord({
-              serviceName: id,
-              isSelected: testCase.condition[id],
-              canBeSelected: true,
-              isInstalled: false,
-              coSelectedServices: function() {
-                return App.StackService.coSelected[this.get('serviceName')] || [];
-              }.property('serviceName')
-            }));
-          });
-          controller.setGroupedServices();
-        });
-
-        Object.keys(testCase.result).forEach(function (service) {
-          it(service, function () {
-            expect(controller.findProperty('serviceName', service).get('isSelected')).to.equal(testCase.result[service]);
-          });
-        });
-      });
-    }, this);
-  });
- */
-
-  describe('#addValidationError()', function() {
-    var tests = [
-      {
-        errorObjects: [
-          {
-            id: 'serviceCheck_ZOOKEEPER',
-            shouldBeAdded: true
-          },
-          {
-            id: 'serviceCheck_YARN',
-            shouldBeAdded: true
-          }
-        ],
-        expectedIds: ['serviceCheck_ZOOKEEPER', 'serviceCheck_YARN']
-      },
-      {
-        errorObjects: [
-          {
-            id: 'fsCheck',
-            shouldBeAdded: true
-          },
-          {
-            id: 'fsCheck',
-            shouldBeAdded: false
-          }
-        ],
-        expectedIds: ['fsCheck']
-      }
-    ];
-
-    beforeEach(function() {
-      controller.clear();
-      controller.set('errorStack', []);
-    });
-
-    tests.forEach(function(test) {
-      var message = 'Erorrs {0} thrown. errorStack property should contains ids: {1}'
-        .format(test.errorObjects.mapProperty('id').join(', '), test.expectedIds.join(', '));
-      describe(message, function() {
-
-        beforeEach(function () {
-          this.added = [];
-          test.errorObjects.forEach(function(errorObject) {
-            this.added.push(controller.addValidationError(errorObject));
-          }, this);
-        });
-
-        it('shouldBeAdded', function() {
-          expect(this.added).to.be.eql(test.errorObjects.mapProperty('shouldBeAdded'));
-        });
-
-        it('expectedIds', function() {
-          expect(controller.get('errorStack').mapProperty('id')).to.eql(test.expectedIds);
-        });
-      });
-    })
-  });
-
-  describe('#validate()', function() {
-    var tests = [
-        {
-          services: ['HDFS', 'ZOOKEEPER'],
-          errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck']
-        },
-        {
-          services: ['ZOOKEEPER'],
-          errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS'],
-          errorsExpected: ['serviceCheck_ZOOKEEPER', 'ambariMetricsCheck', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'TEZ', 'ZOOKEEPER'],
-          errorsExpected: ['serviceCheck_YARN', 'ambariMetricsCheck' , 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'ZOOKEEPER', 'FALCON'],
-          errorsExpected: ['serviceCheck_OOZIE', 'ambariMetricsCheck' , 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'ZOOKEEPER', 'GANGLIA', 'HIVE'],
-          errorsExpected: ['serviceCheck_YARN', 'ambariMetricsCheck' , 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'GLUSTERFS', 'ZOOKEEPER', 'HIVE'],
-          errorsExpected: ['serviceCheck_YARN', 'multipleDFS', 'ambariMetricsCheck', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS','ZOOKEEPER', 'GANGLIA'],
-          errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS','ZOOKEEPER', 'AMBARI_METRICS'],
-          errorsExpected: ['smartSenseCheck']
-        },
-        {
-          services: ['ZOOKEEPER', 'AMBARI_METRICS'],
-          errorsExpected: ['smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'AMBARI_METRICS'],
-          errorsExpected: ['serviceCheck_ZOOKEEPER', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'TEZ', 'ZOOKEEPER', 'AMBARI_METRICS'],
-          errorsExpected: ['serviceCheck_YARN', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'ZOOKEEPER', 'FALCON', 'AMBARI_METRICS'],
-          errorsExpected: ['serviceCheck_OOZIE', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'ZOOKEEPER', 'GANGLIA', 'HIVE', 'AMBARI_METRICS'],
-          errorsExpected: ['serviceCheck_YARN', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS', 'GLUSTERFS', 'ZOOKEEPER', 'HIVE', 'AMBARI_METRICS'],
-          errorsExpected: ['serviceCheck_YARN', 'multipleDFS', 'smartSenseCheck']
-        },
-        {
-          services: ['HDFS','ZOOKEEPER', 'GANGLIA', 'AMBARI_METRICS'],
-          errorsExpected: ['smartSenseCheck']
-        },
-        {
-          services: ['RANGER'],
-          errorsExpected: ['ambariMetricsCheck', 'smartSenseCheck', 'rangerRequirements']
-        },
-        {
-          services: ['SMARTSENSE'],
-          errorsExpected: ['ambariMetricsCheck']
-        },
-        {
-          services: ['ATLAS', 'AMBARI_METRICS', 'SMARTSENSE'],
-          errorsExpected: ['ambariInfraCheck']
-        },
-        {
-          services: ['LOGSEARCH', 'AMBARI_METRICS', 'SMARTSENSE'],
-          errorsExpected: ['ambariLogsearchCheck']
-        }
-      ],
-      controllerNames = ['installerController', 'addServiceController'],
-      wizardNames = {
-        installerController: 'Install Wizard',
-        addServiceController: 'Add Service Wizard'
-      },
-      sparkCases = [
-        {
-          currentStackName: 'HDP',
-          currentStackVersionNumber: '2.2',
-          sparkWarningExpected: true,
-          title: 'HDP 2.2'
-        },
-        {
-          currentStackName: 'HDP',
-          currentStackVersionNumber: '2.3',
-          sparkWarningExpected: false,
-          title: 'HDP 2.3'
-        },
-        {
-          currentStackName: 'BIGTOP',
-          currentStackVersionNumber: '0.8',
-          sparkWarningExpected: false,
-          title: 'Non-HDP stack'
-        }
-      ];
-
-    beforeEach(function () {
-      controller.clear();
-    });
-
-    controllerNames.forEach(function (name) {
-      tests.forEach(function(test) {
-        var errorsExpected = test.errorsExpected;
-        if (name !== 'installerController') {
-          errorsExpected = test.errorsExpected.without('ambariMetricsCheck').without('smartSenseCheck');
-        }
-        var message = '{0}, {1} selected validation should be {2}, errors: {3}'
-          .format(wizardNames[name], test.services.join(','), errorsExpected.length ? 'passed' : 'failed',
-            errorsExpected.length ? errorsExpected.join(',') : 'absent');
-        it(message, function() {
-          controller.setProperties({
-            content: generateSelectedServicesContent(test.services),
-            errorStack: [],
-            wizardController: Em.Object.create({
-              name: name
-            })
-          });
-          controller.validate();
-          expect(controller.get('errorStack').mapProperty('id')).to.eql(errorsExpected.toArray());
-        });
-      })
-    });
-
-    sparkCases.forEach(function (item) {
-      describe(item.title, function () {
-
-        beforeEach(function () {
-          sinon.stub(App, 'get').withArgs('currentStackName').returns(item.currentStackName).
-            withArgs('currentStackVersionNumber').returns(item.currentStackVersionNumber);
-          controller.set('errorStack', []);
-          controller.set('content', generateSelectedServicesContent(['SPARK']));
-          controller.validate();
-        });
-
-        afterEach(function () {
-          App.get.restore();
-        });
-
-        it('sparkWarning ' + (item.sparkWarningExpected ? 'exists' : 'not exists'), function () {
-          expect(controller.get('errorStack').someProperty('id', 'sparkWarning')).to.equal(item.sparkWarningExpected);
-        });
-      });
-    });
-
-  });
-
-  describe('#onPrimaryPopupCallback()', function() {
-    var c;
-    var tests = [
-      {
-        services: ['HDFS','ZOOKEEPER'],
-        confirmPopupCount: 0,
-        errorsExpected: []
-      },
-      {
-        services: ['ZOOKEEPER'],
-        confirmPopupCount: 0,
-        errorsExpected: []
-      },
-      {
-        services: ['HDFS', 'GLUSTERFS', 'ZOOKEEPER', 'HIVE'],
-        confirmPopupCount: 2,
-        errorsExpected: ['serviceCheck_YARN', 'serviceCheck_TEZ', 'multipleDFS']
-      },
-      {
-        services: ['HDFS','ZOOKEEPER', 'GANGLIA'],
-        confirmPopupCount: 0,
-        errorsExpected: []
-      }
-    ];
-
-    beforeEach(function() {
-      c = App.WizardStep4Controller.create({});
-      sinon.stub(App.router, 'send', Em.K);
-      sinon.stub(c, 'submit', Em.K);
-      sinon.spy(c, 'onPrimaryPopupCallback');
-    });
-
-    afterEach(function() {
-      App.router.send.restore();
-      c.submit.restore();
-      c.onPrimaryPopupCallback.restore();
-    });
-
-
-    tests.forEach(function(test) {
-      var message = 'Selected services: {0}. {1} errors should be confirmed'
-        .format(test.services.join(', '), test.confirmPopupCount);
-
-      describe(message, function() {
-        var runValidations = function() {
-          c.serviceDependencyValidation();
-          c.fileSystemServiceValidation();
-        };
-
-        beforeEach(function () {
-          c.set('content', generateSelectedServicesContent(test.services));
-          runValidations();
-        });
-
-        it('errors count validation', function () {
-          expect(c.get('errorStack.length')).to.equal(test.confirmPopupCount);
-        });
-
-        if (test.errorsExpected) {
-          describe('if errors detected than it should be shown', function () {
-            var currentErrorObject;
-            beforeEach(function () {
-              currentErrorObject = c.get('errorStack').findProperty('isShown', false);
-            });
-            test.errorsExpected.forEach(function(error) {
-              it(error, function () {
-                // validate current error
-                if (currentErrorObject) {
-                  expect(test.errorsExpected).to.contain(currentErrorObject.id);
-                  // show current error
-                  var popup = c.showError(currentErrorObject);
-                  // submit popup
-                  popup.onPrimary();
-                  // onPrimaryPopupCallback should be called
-                  expect(c.onPrimaryPopupCallback.called).to.equal(true);
-                  // submit called
-                  expect(c.submit.called).to.equal(true);
-                  if (c.get('errorStack').length) {
-                    // current error isShown flag changed to true
-                    expect(currentErrorObject.isShown).to.equal(true);
-                  }
-                  runValidations();
-                }
-              });
-            });
-          });
-        }
-      });
-    });
-
-  });
-
-  describe('#needToAddServicePopup', function() {
-
-    beforeEach(function () {
-      sinon.stub(controller, 'submit', Em.K);
-    });
-
-    afterEach(function () {
-      controller.submit.restore();
-    });
-
-    Em.A([
-        {
-          m: 'one service',
-          services: {selected: true, serviceName: 's1'},
-          content: [Em.Object.create({serviceName: 's1', isSelected: false})],
-          e: [true]
-        },
-        {
-          m: 'many services',
-          services: [{selected: true, serviceName: 's1'}, {selected: false, serviceName: 's2'}],
-          content: [Em.Object.create({serviceName: 's1', isSelected: false}),
-            Em.Object.create({serviceName: 's2', isSelected: true})],
-          e: [true, false]
-        }
-      ]).forEach(function (test) {
-        it(test.m, function () {
-          controller.set('content', test.content);
-          controller.needToAddServicePopup(test.services, '').onPrimary();
-          expect(controller.submit.calledOnce).to.equal(true);
-          expect(controller.mapProperty('isSelected')).to.eql(test.e);
-        });
-      });
-  });
-
-  describe('#submit', function() {
-    var c;
-    var tests = [
-      {
-        isSubmitDisabled: true,
-        validate: false,
-        userCanProceed: false
-      },
-      {
-        isSubmitDisabled: false,
-        validate: false,
-        userCanProceed: false
-      },
-      {
-        isSubmitDisabled: false,
-        validate: true,
-        userCanProceed: true
-      }
-    ];
-
-    beforeEach(function() {
-      c = App.WizardStep4Controller.create();
-      sinon.stub(App.router, 'send', Em.K);
-    });
-
-    afterEach(function() {
-      App.router.send.restore();
-    });
-
-    tests.forEach(function(test) {
-      var messageFormat = [
-        test.isSubmitDisabled ? 'disabled' : 'enabled',
-        test.validate ? 'success' : 'failed',
-        test.userCanProceed ? '' : 'not'
-      ];
-      var message = String.prototype.format.apply('Submit btn: {0}. Validation: {1}. Can{2} move to the next step.', messageFormat);
-
-      it(message, function() {
-        c.reopen({
-          isSubmitDisabled: test.isSubmitDisabled,
-          validate: function() { return test.validate; }
-        });
-        c.clear();
-        c.submit();
-
-        expect(App.router.send.calledOnce).to.equal(test.userCanProceed);
-      });
-
-    })
-  });
-
-  describe('#dependencies', function() {
-    var tests = [
-      {
-        services: ['HDFS'],
-        dependencies: ['ZOOKEEPER']
-      },
-      {
-        services: ['STORM'],
-        dependencies: ['ZOOKEEPER']
-      }
-    ];
-    tests.forEach(function(test) {
-      var message = '{0} dependency should be {1}'.format(test.services.join(','), test.dependencies.join(','));
-      it(message, function() {
-
-        controller.clear();
-        controller.set('content', generateSelectedServicesContent(test.services));
-
-        var dependentServicesTest = [];
-
-        test.services.forEach(function(serviceName) {
-          var service = controller.filterProperty('serviceName', serviceName);
-          service.forEach(function(item) {
-            var dependencies = item.get('requiredServices');
-            if(!!dependencies) {
-              dependentServicesTest = dependentServicesTest.concat(dependencies);
-            }
-          });
-        });
-
-        expect(dependentServicesTest).to.be.eql(test.dependencies);
-      });
-    })
-  });
-
-  describe('#serviceDependencyValidation', function () {
-
-    var cases = [
-      {
-        services: ['HBASE'],
-        dependentServices: ['HDFS', 'ZOOKEEPER'],
-        title: 'HBASE selected and HDFS not selected initially'
-      },
-      {
-        services: ['TEZ', 'HDFS'],
-        dependentServices: ['ZOOKEEPER', 'YARN'],
-        title: 'TEZ selected and ZOOKEEPER not selected initially'
-      }
-    ];
-
-    beforeEach(function() {
-      controller.clear();
-      controller.set('errorStack', []);
-    });
-
-    cases.forEach(function (item) {
-      describe(item.title, function () {
-
-        beforeEach(function () {
-          controller.set('content', generateSelectedServicesContent(item.services));
-          controller.serviceDependencyValidation();
-        });
-
-        it('check errors in the stack', function () {
-          var ids = controller.get('errorStack').mapProperty('id');
-          expect(ids.contains("serviceCheck_" + item.dependentServices[0])).to.be.true;
-          expect(ids.contains("serviceCheck_" + item.dependentServices[1])).to.be.true;
-        });
-
-        it('simulate situation where user clicks cancel on error for first dependent service and then selects it in which case', function () {
-          controller.findProperty('serviceName', item.dependentServices[0]).set('isSelected', true);
-          //serviceDependencyValidation() will be called again
-          controller.serviceDependencyValidation();
-          //error for first dependent service must be removed from errorStack array
-          var ids = controller.get('errorStack').mapProperty('id');
-          expect(ids.contains("serviceCheck_" + item.dependentServices[0])).to.be.false;
-          expect(ids.contains("serviceCheck_" + item.dependentServices[1])).to.be.true;
-        });
-
-      });
-    });
-  });
-
-  describe('#serviceValidation', function () {
-
-    var cases = [
-      {
-        services: ['HDFS'],
-        isAmbariMetricsWarning: false,
-        title: 'Ambari Metrics not available'
-      },
-      {
-        services: ['AMBARI_METRICS'],
-        isAmbariMetricsSelected: false,
-        isAmbariMetricsWarning: true,
-        title: 'Ambari Metrics not selected'
-      },
-      {
-        services: ['AMBARI_METRICS'],
-        isAmbariMetricsSelected: true,
-        isAmbariMetricsWarning: false,
-        title: 'Ambari Metrics selected'
-      }
-    ];
-
-    beforeEach(function() {
-      controller.clear();
-      controller.set('errorStack', []);
-    });
-
-    cases.forEach(function (item) {
-      it(item.title, function () {
-        controller.set('content', generateSelectedServicesContent(item.services));
-        var ams = controller.findProperty('serviceName', 'AMBARI_METRICS');
-        if (item.services.contains('AMBARI_METRICS')) {
-          ams.set('isSelected', item.isAmbariMetricsSelected);
-        } else {
-          controller.removeObject(ams);
-        }
-        controller.serviceValidation(Em.K, 'AMBARI_METRICS', 'ambariMetricsCheck');
-        expect(controller.get('errorStack').mapProperty('id').contains('ambariMetricsCheck')).to.equal(item.isAmbariMetricsWarning);
-      });
-    });
-
-  });
-
-  describe('#rangerValidation', function () {
-
-    var cases = [
-      {
-        services: ['HDFS'],
-        isRangerWarning: false,
-        title: 'Ranger not available'
-      },
-      {
-        services: ['RANGER'],
-        isRangerSelected: false,
-        isRangerInstalled: false,
-        isRangerWarning: false,
-        title: 'Ranger not selected'
-      },
-      {
-        services: ['RANGER'],
-        isRangerSelected: true,
-        isRangerInstalled: false,
-        isRangerWarning: true,
-        title: 'Ranger selected'
-      },
-      {
-        services: ['RANGER'],
-        isRangerSelected: true,
-        isRangerInstalled: true,
-        isRangerWarning: false,
-        title: 'Ranger installed'
-      }
-    ];
-
-    beforeEach(function() {
-      controller.clear();
-      controller.set('errorStack', []);
-    });
-
-    cases.forEach(function (item) {
-      it(item.title, function () {
-        controller.set('content', generateSelectedServicesContent(item.services));
-        var ranger = controller.findProperty('serviceName', 'RANGER');
-        if (item.services.contains('RANGER')) {
-          ranger.setProperties({
-            isSelected: item.isRangerSelected,
-            isInstalled: item.isRangerInstalled
-          });
-        } else {
-          controller.removeObject(ranger);
-        }
-        controller.rangerValidation();
-        expect(controller.get('errorStack').mapProperty('id').contains('rangerRequirements')).to.equal(item.isRangerWarning);
-      });
-    });
-
-  });
-
-  describe('#sparkValidation', function () {
-
-    var cases = [
-      {
-        services: ['HDFS'],
-        isSparkWarning: false,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.2',
-        title: 'HDP 2.2, Spark not available'
-      },
-      {
-        services: ['HDFS'],
-        isSparkWarning: false,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.3',
-        title: 'HDP 2.3, Spark not available'
-      },
-      {
-        services: ['HDFS'],
-        isSparkWarning: false,
-        currentStackName: 'BIGTOP',
-        currentStackVersionNumber: '0.8',
-        title: 'Non-HDP stack, Spark not available'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: false,
-        isSparkInstalled: false,
-        isSparkWarning: false,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.2',
-        title: 'HDP 2.2, Spark not selected'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: true,
-        isSparkInstalled: false,
-        isSparkWarning: true,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.2',
-        title: 'HDP 2.2, Spark selected'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: true,
-        isSparkInstalled: true,
-        isSparkWarning: false,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.2',
-        title: 'HDP 2.2, Spark installed'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: false,
-        isSparkInstalled: false,
-        isSparkWarning: false,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.3',
-        title: 'HDP 2.3, Spark not selected'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: true,
-        isSparkInstalled: false,
-        isSparkWarning: false,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.3',
-        title: 'HDP 2.3, Spark selected'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: true,
-        isSparkInstalled: true,
-        isSparkWarning: false,
-        currentStackName: 'HDP',
-        currentStackVersionNumber: '2.3',
-        title: 'HDP 2.3, Spark installed'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: false,
-        isSparkInstalled: false,
-        isSparkWarning: false,
-        currentStackName: 'BIGTOP',
-        currentStackVersionNumber: '0.8',
-        title: 'Non-HDP stack, Spark not selected'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: true,
-        isSparkInstalled: false,
-        isSparkWarning: false,
-        currentStackName: 'BIGTOP',
-        currentStackVersionNumber: '0.8',
-        title: 'Non-HDP stack, Spark selected'
-      },
-      {
-        services: ['SPARK'],
-        isSparkSelected: true,
-        isSparkInstalled: true,
-        isSparkWarning: false,
-        currentStackName: 'BIGTOP',
-        currentStackVersionNumber: '0.8',
-        title: 'Non-HDP stack, Spark installed'
-      }
-    ];
-
-    beforeEach(function() {
-      controller.clear();
-      controller.set('errorStack', []);
-      this.stub = sinon.stub(App, 'get');
-    });
-
-    afterEach(function () {
-      App.get.restore();
-    });
-
-    cases.forEach(function (item) {
-      describe(item.title, function () {
-        beforeEach(function () {
-          this.stub.withArgs('currentStackName').returns(item.currentStackName).
-            withArgs('currentStackVersionNumber').returns(item.currentStackVersionNumber);
-          controller.set('content', generateSelectedServicesContent(item.services));
-          var spark = controller.findProperty('serviceName', 'SPARK');
-          if (item.services.contains('SPARK')) {
-            spark.setProperties({
-              isSelected: item.isSparkSelected,
-              isInstalled: item.isSparkInstalled
-            });
-          } else {
-            controller.removeObject(spark);
-          }
-          controller.sparkValidation();
-        });
-
-        it('sparkWarning is ' + item.sparkWarning, function () {
-          expect(controller.get('errorStack').mapProperty('id').contains('sparkWarning')).to.equal(item.isSparkWarning);
-        });
-      });
-    });
-
-  });
-
-  describe('#clearErrors', function () {
-
-    var cases = [
-      {
-        errorStack: [{
-          isAccepted: false
-        }],
-        resultingErrorStack: [{
-          isAccepted: false
-        }],
-        title: 'error stack shouldn\'t be cleared during validation'
-      },
-      {
-        errorStack: [{
-          isAccepted: true
-        }],
-        resultingErrorStack: [],
-        title: 'error stack should be cleared'
-      }
-    ];
-
-    beforeEach(function () {
-      controller.set('errorStack', [{}]);
-    });
-
-    cases.forEach(function (item) {
-      it(item.title, function () {
-        controller.set('errorStack', item.errorStack);
-        controller.propertyDidChange('@each.isSelected');
-        expect(controller.get('errorStack')).to.eql(item.resultingErrorStack);
-      });
-    });
-
-  });
-
-  describe('Service warnings popup', function () {
-
-    var target = {
-      clb: Em.K
-    };
-    var id = 1;
-
-    beforeEach(function () {
-      sinon.spy(target, 'clb');
-      sinon.stub(controller, 'onPrimaryPopupCallback', Em.K);
-    });
-
-    afterEach(function () {
-      target.clb.restore();
-      controller.onPrimaryPopupCallback.restore();
-    });
-
-    Em.A([
-      'serviceCheckPopup',
-      'rangerRequirementsPopup',
-      'sparkWarningPopup'
-    ]).forEach(function (methodName) {
-
-      describe('#' + methodName, function () {
-
-        beforeEach(function () {
-          this.popup = controller[methodName](target.clb, id);
-        });
-
-        it('#onPrimary', function () {
-          this.popup.onPrimary();
-          expect(controller.onPrimaryPopupCallback.calledWith(target.clb)).to.be.true;
-        });
-
-        it('#onSecondary', function () {
-          this.popup.onSecondary();
-          expect(target.clb.calledWith(id)).to.be.true;
-        });
-
-        it('#onClose', function () {
-          this.popup.onClose();
-          expect(target.clb.calledWith(id)).to.be.true;
-        });
-      });
-    });
-  });
-
-  describe('#dependentServiceValidation', function() {
-
-    beforeEach(function() {
-      sinon.stub(controller, 'serviceValidation');
-    });
-
-    afterEach(function() {
-      controller.serviceValidation.restore();
-      controller.clear();
-    });
-
-    it('serviceValidation should not be called when selected service does not exist', function() {
-      controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
-      expect(controller.serviceValidation.called).to.be.false;
-    });
-
-    it('serviceValidation should not be called when service not selected', function() {
-      controller.pushObject(App.StackService.createRecord({
-        serviceName: 'S1',
-        isSelected: false
-      }));
-      controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
-      expect(controller.serviceValidation.called).to.be.false;
-    });
-
-    it('serviceValidation should not be called when dependent service does not exist', function() {
-      controller.pushObjects([
-        App.StackService.createRecord({
-          serviceName: 'S1',
-          isSelected: true
-        })
-      ]);
-      controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
-      expect(controller.serviceValidation.called).to.be.false;
-    });
-
-    it('serviceValidation should not be called when dependent service is selected', function() {
-      controller.pushObjects([
-        App.StackService.createRecord({
-          serviceName: 'S1',
-          isSelected: true
-        }),
-        Em.Object.create({
-          serviceName: 'S2',
-          isSelected: true
-        })
-      ]);
-      controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
-      expect(controller.serviceValidation.called).to.be.false;
-    });
-
-    it('serviceValidation should be called when dependent service is not selected', function() {
-      controller.pushObjects([
-        App.StackService.createRecord({
-          serviceName: 'S1',
-          isSelected: true
-        }),
-        Em.Object.create({
-          serviceName: 'S2',
-          isSelected: false
-        })
-      ]);
-      controller.dependentServiceValidation('S1', 'S2', 'check', Em.K);
-      expect(controller.serviceValidation.calledOnce).to.be.true;
-    });
-  });
-
-});
diff --git a/ambari-web/test/views/wizard/step1_view_test.js b/ambari-web/test/views/wizard/step1_view_test.js
deleted file mode 100644
index 1f48a3f..0000000
--- a/ambari-web/test/views/wizard/step1_view_test.js
+++ /dev/null
@@ -1,230 +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('views/wizard/step1_view');
-
-var view;
-
-function getView() {
-  return App.WizardStep1View.create({
-    controller: Em.Object.create()
-  });
-}
-
-describe('App.WizardStep1View', function () {
-
-  beforeEach(function () {
-    view = getView();
-  });
-
-  App.TestAliases.testAsComputedEveryBy(getView(), 'isNoOsChecked', 'controller.selectedStack.operatingSystems', 'isSelected', false);
-
-  App.TestAliases.testAsComputedOr(getView(), 'isSubmitDisabled', ['invalidFormatUrlExist', 'isNoOsChecked', 'isAnyOsEmpty', 'controller.content.isCheckInProgress', 'App.router.btnClickInProgress', '!controller.isLoadingComplete']);
-
-  App.TestAliases.testAsComputedSomeBy(getView(), 'invalidUrlExist', 'allRepositories', 'validation', 'INVALID');
-
-  describe('#editLocalRepository', function () {
-
-    var repository;
-
-    beforeEach(function () {
-      view.reopen({
-        allRepositories: [
-          Em.Object.create({
-            isSelected: true,
-            baseUrl: 'b1',
-            validation: 'icon-exclamation-sign'
-          })
-        ]
-      });
-      view.editLocalRepository();
-      repository = view.get('allRepositories.firstObject');
-    });
-
-    it('should update repository base URL', function () {
-      expect(repository.get('lastBaseUrl')).to.equal(repository.get('baseUrl'));
-    });
-
-    it('should update repository validation status', function () {
-      expect(repository.get('validation')).to.equal('PENDING');
-    });
-  });
-
-  describe('#isAnyOsEmpty', function() {
-
-    it('should be true when useRedhatSatellite is true and redhat os is empty', function() {
-      view.set('controller.selectedStack', Em.Object.create({
-        useRedhatSatellite: true,
-        operatingSystems: [
-          Em.Object.create({
-            isSelected: true,
-            isNotFilled: true,
-            osType: 'redhat'
-          })
-        ]
-      }));
-      expect(view.get('isAnyOsEmpty')).to.be.true;
-    });
-
-    it('should be false when operatingSystems is null', function() {
-      view.set('controller.selectedStack', Em.Object.create({
-        operatingSystems: null
-      }));
-      expect(view.get('isAnyOsEmpty')).to.be.false;
-    });
-
-    it('should be false when operatingSystem is filled', function() {
-      view.set('controller.selectedStack', Em.Object.create({
-        useRedhatSatellite: false,
-        operatingSystems: [
-          Em.Object.create({
-            isSelected: true,
-            isNotFilled: false
-          })
-        ]
-      }));
-      expect(view.get('isAnyOsEmpty')).to.be.false;
-    });
-
-    it('should be true when operatingSystem is not filled', function() {
-      view.set('controller.selectedStack', Em.Object.create({
-        useRedhatSatellite: false,
-        operatingSystems: [
-          Em.Object.create({
-            isSelected: true,
-            isNotFilled: true
-          }),
-          Em.Object.create({
-            isSelected: true,
-            isNotFilled: false
-          })
-        ]
-      }));
-      expect(view.get('isAnyOsEmpty')).to.be.true;
-    });
-  });
-
-  describe('#isRedhat', function() {
-
-    it('should be false when osType not specified', function() {
-      expect(view.isRedhat(Em.Object.create())).to.be.false;
-    });
-
-    it('should be false when osType not redhat', function() {
-      expect(view.isRedhat(Em.Object.create({osType: 'debian7'}))).to.be.false;
-    });
-
-    it('should be true when osType is redhat7', function() {
-      expect(view.isRedhat(Em.Object.create({osType: 'redhat7'}))).to.be.true;
-    });
-
-    it('should be true when osType is redhat-ppc7', function() {
-      expect(view.isRedhat(Em.Object.create({osType: 'redhat-ppc7'}))).to.be.true;
-    });
-  });
-
-  describe('#invalidFormatUrlExist', function () {
-
-    var testCases = [
-      {
-        title: 'no repositories',
-        allRepositories: undefined,
-        useRedhatSatellite: false,
-        result: false
-      },
-      {
-        title: 'use redhat, invalid format',
-        allRepositories: [
-          Em.Object.create({
-            osType: '',
-            invalidFormatError: false
-          }),
-          Em.Object.create({
-            osType: 'redhat',
-            invalidFormatError: true
-          })
-        ],
-        useRedhatSatellite: true,
-        result: true
-      },
-      {
-        title: 'use redhat, no invalid format',
-        allRepositories: [
-          Em.Object.create({
-            osType: '',
-            invalidFormatError: true
-          }),
-          Em.Object.create({
-            osType: 'redhat',
-            invalidFormatError: false
-          })
-        ],
-        useRedhatSatellite: true,
-        result: false
-      },
-      {
-        title: 'no use redhat, invalid format',
-        allRepositories: [
-          Em.Object.create({
-            osType: '',
-            invalidFormatError: true
-          }),
-          Em.Object.create({
-            osType: 'redhat',
-            invalidFormatError: false
-          })
-        ],
-        useRedhatSatellite: false,
-        result: true
-      },
-      {
-        title: 'no use redhat, invalid format',
-        allRepositories: [
-          Em.Object.create({
-            osType: '',
-            invalidFormatError: false
-          }),
-          Em.Object.create({
-            osType: 'redhat',
-            invalidFormatError: true
-          })
-        ],
-        useRedhatSatellite: false,
-        result: true
-      }
-    ];
-
-    testCases.forEach(function (testCase) {
-      describe(testCase.title, function () {
-        beforeEach(function () {
-          view.reopen({
-            allRepositories: testCase.allRepositories
-          });
-          view.set('controller.selectedStack', Em.Object.create({
-            useRedhatSatellite: testCase.useRedhatSatellite
-          }));
-        });
-        it('', function () {
-          expect(view.get('invalidFormatUrlExist')).to.equal(testCase.result);
-        });
-      });
-    });
-  });
-
-});
\ No newline at end of file
diff --git a/ambari-web/test/views/wizard/step4_view_test.js b/ambari-web/test/views/wizard/step4_view_test.js
deleted file mode 100644
index 971e33b..0000000
--- a/ambari-web/test/views/wizard/step4_view_test.js
+++ /dev/null
@@ -1,21 +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.
- */
-
-describe('App.WizardStep4View', function () {
-
-});

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