Browse Source

Revert "AMBARI-15724. Integrate Version Registration in Select Stack Page.(xiwang)"

This reverts commit 391b45e934b8d4e94cb64adab0293736671395db.
Zhe (Joe) Wang 9 years ago
parent
commit
b8ab5fa1a2

+ 0 - 556
ambari-web/app/assets/data/wizard/stack/HDP_version_definitions.json

@@ -1,556 +0,0 @@
-{
-  "href" : "http://c6401.ambari.apache.org:8080/api/v1/version_definitions?fields=operating_systems/repositories/Repositories/*,VersionDefinition/stack_services&show_available=true&VersionDefinition/stack_name=HDP",
-  "items" : [
-    {
-      "VersionDefinition" : {
-        "id" : 1,
-        "show_available": true,
-        "stack_name" : "HDP",
-        "stack_version" : "2.3",
-        "repository_version" : "2.3.4.0-3396",
-        "type" : "STANDARD",
-        "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3396.xml",
-        "release" : {
-          "build" : "3396",
-          "compatible_with" : "2.3.[0-3].0",
-          "notes" : "http://example.com",
-          "version" : "2.3.4.0"
-        },
-        "stack_services" : [
-          {
-            "name" : "HDFS",
-            "display_name" : "HDFS",
-            "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-            "versions" : [
-              "2.7.1.2.3396"
-            ]
-          },
-          {
-            "name" : "YARN",
-            "display_name" : "YARN",
-            "comment" : "",
-            "versions" : [
-              "1.7.3.3396"
-            ]
-          },
-          {
-            "name" : "ZOOKEEPER",
-            "display_name" : "ZooKeeper",
-            "comment" : "",
-            "versions" : [
-              "1.7.3.3396"
-            ]
-          }
-        ]
-      },
-      "operating_systems" : [
-        {
-          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
-          "OperatingSystems" : {
-            "os_type" : "debian7",
-            "repository_version_id" : 1,
-            "stack_name" : "HDP",
-            "stack_version" : "2.3"
-          },
-          "repositories" : [
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-2.3",
-                "repo_name" : "HDP",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            },
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-UTILS-1.1.0.20",
-                "repo_name" : "HDP-UTILS",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            }
-          ]
-        },
-        {
-          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6",
-          "OperatingSystems" : {
-            "os_type" : "redhat6",
-            "repository_version_id" : 1,
-            "stack_name" : "HDP",
-            "stack_version" : "2.3"
-          },
-          "repositories" : [
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396",
-                "mirrors_list" : "",
-                "os_type" : "redhat6",
-                "repo_id" : "HDP-2.3",
-                "repo_name" : "HDP",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            },
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "mirrors_list" : "",
-                "os_type" : "redhat6",
-                "repo_id" : "HDP-UTILS-1.1.0.20",
-                "repo_name" : "HDP-UTILS",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            }
-          ]
-        }
-      ]
-    },
-
-    {
-      "VersionDefinition" : {
-        "id" : 2,
-        "stack_name" : "HDP",
-        "stack_version" : "2.3",
-        "show_available": true,
-        "repository_version" : "2.3.4.0-3397",
-        "type" : "STANDARD",
-        "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3397.xml",
-        "release" : {
-          "build" : "3397",
-          "compatible_with" : "2.3.[0-3].0",
-          "notes" : "http://example.com",
-          "version" : "2.3.4.0"
-        },
-        "stack_services" : [
-          {
-            "name" : "HDFS",
-            "display_name" : "HDFS",
-            "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-            "versions" : [
-              "2.7.1.2-3397"
-            ]
-          },
-          {
-            "name" : "YARN",
-            "display_name" : "YARN",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-3397"
-            ]
-          },
-          {
-            "name" : "HBase",
-            "display_name" : "HBase",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-3397"
-            ]
-          },
-          {
-            "name" : "ZOOKEEPER",
-            "display_name" : "ZooKeeper",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-3397"
-            ]
-          },
-          {
-            "name" : "Hive",
-            "display_name" : "Hive",
-            "comment" : "",
-            "versions" : [
-              "1.1.0-3397"
-            ]
-          }
-        ]
-      },
-      "operating_systems" : [
-        {
-          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
-          "OperatingSystems" : {
-            "os_type" : "debian7",
-            "repository_version_id" : 1,
-            "stack_name" : "HDP",
-            "stack_version" : "2.3"
-          },
-          "repositories" : [
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-2.3",
-                "repo_name" : "HDP",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            },
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-UTILS-1.1.0.20",
-                "repo_name" : "HDP-UTILS",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            }
-          ]
-        },
-        {
-          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6",
-          "OperatingSystems" : {
-            "os_type" : "redhat6",
-            "repository_version_id" : 1,
-            "stack_name" : "HDP",
-            "stack_version" : "2.3"
-          },
-          "repositories" : [
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397",
-                "mirrors_list" : "",
-                "os_type" : "redhat6",
-                "repo_id" : "HDP-2.3",
-                "repo_name" : "HDP",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            },
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "mirrors_list" : "",
-                "os_type" : "redhat6",
-                "repo_id" : "HDP-UTILS-1.1.0.20",
-                "repo_name" : "HDP-UTILS",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            }
-          ]
-        }
-      ]
-    },
-
-    {
-      "VersionDefinition" : {
-        "id" : 5,
-        "stack_name" : "HDP",
-        "stack_version" : "2.3",
-        "show_available": true,
-        "repository_version" : "2.3.6.0-3646",
-        "type" : "STANDARD",
-        "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3646.xml",
-        "release" : {
-          "build" : "3646",
-          "compatible_with" : "2.3.[0-6].0",
-          "notes" : "http://example.com",
-          "version" : "2.3.6.0"
-        },
-        "stack_services" : [
-          {
-            "name" : "HDFS",
-            "display_name" : "HDFS",
-            "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-            "versions" : [
-              "2.7.1.2-3646"
-            ]
-          },
-          {
-            "name" : "YARN",
-            "display_name" : "YARN",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-3646"
-            ]
-          },
-          {
-            "name" : "HBase",
-            "display_name" : "HBase",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-3646"
-            ]
-          },
-          {
-            "name" : "ZOOKEEPER",
-            "display_name" : "ZooKeeper",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-3646"
-            ]
-          },
-          {
-            "name" : "Hive",
-            "display_name" : "Hive",
-            "comment" : "",
-            "versions" : [
-              "1.1.0-3646"
-            ]
-          }
-        ]
-      },
-      "operating_systems" : [
-        {
-          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
-          "OperatingSystems" : {
-            "os_type" : "debian7",
-            "repository_version_id" : 1,
-            "stack_name" : "HDP",
-            "stack_version" : "2.3"
-          },
-          "repositories" : [
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-2.3",
-                "repo_name" : "HDP",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            },
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-UTILS-1.1.0.20",
-                "repo_name" : "HDP-UTILS",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            }
-          ]
-        },
-        {
-          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6",
-          "OperatingSystems" : {
-            "os_type" : "redhat6",
-            "repository_version_id" : 1,
-            "stack_name" : "HDP",
-            "stack_version" : "2.3"
-          },
-          "repositories" : [
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646",
-                "mirrors_list" : "",
-                "os_type" : "redhat6",
-                "repo_id" : "HDP-2.3",
-                "repo_name" : "HDP",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            },
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                "mirrors_list" : "",
-                "os_type" : "redhat6",
-                "repo_id" : "HDP-UTILS-1.1.0.20",
-                "repo_name" : "HDP-UTILS",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.3"
-              }
-            }
-          ]
-        }
-      ]
-    },
-
-
-    {
-      "VersionDefinition" : {
-        "id" : 3,
-        "stack_name" : "HDP",
-        "stack_version" : "2.4",
-        "show_available": true,
-        "repository_version" : "2.4.0.0-169",
-        "type" : "STANDARD",
-        "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_169.xml",
-        "release" : {
-          "build" : "169",
-          "compatible_with" : "2.4.[0-3].0",
-          "notes" : "http://example.com",
-          "version" : "2.4.0.0"
-        },
-        "stack_services" : [
-          {
-            "name" : "HDFS",
-            "display_name" : "HDFS",
-            "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-            "versions" : [
-              "2.7.1.2-169"
-            ]
-          },
-          {
-            "name" : "YARN",
-            "display_name" : "YARN",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-169"
-            ]
-          },
-          {
-            "name" : "HBase",
-            "display_name" : "HBase",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-169"
-            ]
-          },
-          {
-            "name" : "ZOOKEEPER",
-            "display_name" : "ZooKeeper",
-            "comment" : "",
-            "versions" : [
-              "1.7.3-169"
-            ]
-          },
-          {
-            "name" : "Hive",
-            "display_name" : "Hive",
-            "comment" : "",
-            "versions" : [
-              "1.1.0-169"
-            ]
-          },
-          {
-            "name" : "MAPREDUCE2",
-            "display_name" : "MapReduce2",
-            "comment" : "service",
-            "versions" : [
-              "2.7.1.2-169"
-            ]
-          },
-          {
-            "name" : "Slider",
-            "display_name" : "Slider",
-            "comment" : "service",
-            "versions" : [
-              "2.7.1.2-169"
-            ]
-          },
-          {
-            "name" : "Pig",
-            "display_name" : "Pig",
-            "comment" : "service",
-            "versions" : [
-              "2.7.1.2-169"
-            ]
-          },
-          {
-            "name" : "Sqoop",
-            "display_name" : "Sqoop",
-            "comment" : "service",
-            "versions" : [
-              "2.7.1.2-169"
-            ]
-          }
-        ]
-      },
-      "operating_systems" : [
-        {
-          "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
-          "OperatingSystems" : {
-            "os_type" : "debian7",
-            "repository_version_id" : 1,
-            "stack_name" : "HDP",
-            "stack_version" : "2.4"
-          },
-          "repositories" : [
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-2.4",
-                "repo_name" : "HDP",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.4"
-              }
-            },
-            {
-              "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
-              "Repositories" : {
-                "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                "mirrors_list" : "",
-                "os_type" : "debian7",
-                "repo_id" : "HDP-UTILS-1.1.0.20",
-                "repo_name" : "HDP-UTILS",
-                "repository_version_id" : 1,
-                "stack_name" : "HDP",
-                "stack_version" : "2.4"
-              }
-            }
-          ]
-        }
-      ]
-    }
-  ]
-}

+ 13 - 178
ambari-web/app/controllers/installer.js

@@ -138,13 +138,8 @@ App.InstallerController = App.WizardController.extend({
     var stackServices = App.StackService.find().mapProperty('serviceName');
     if (!(stackServices && !!stackServices.length && App.StackService.find().objectAt(0).get('stackVersion') == App.get('currentStackVersionNumber'))) {
       this.loadServiceComponents().complete(function () {
-        self.loadServiceVersionFromVersionDefinitions().complete(function () {
-          self.set('content.services', App.StackService.find().forEach(function (item) {
-            // user the service version from VersionDefinition
-            item.serviceVersionDisplay = self.get('serviceVersionsMap')[item.get('serviceName')];
-          }));
-          dfd.resolve();
-        });
+        self.set('content.services', App.StackService.find());
+        dfd.resolve();
       });
     } else {
       dfd.resolve();
@@ -245,7 +240,7 @@ App.InstallerController = App.WizardController.extend({
     App.Tab.find().clear();
     this.set('stackConfigsLoaded', false);
     if (stacks && stacks.get('length')) {
-      App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('stackNameVersion'));
+      App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('id'));
       dfd.resolve(true);
     } else {
       App.ajax.send({
@@ -282,12 +277,12 @@ App.InstallerController = App.WizardController.extend({
     var requests = [];
     this.get('stackNames').forEach(function (stackName) {
       requests.push(App.ajax.send({
-        name: 'wizard.stacks_versions_definitions',
+        name: 'wizard.stacks_versions',
         sender: this,
         data: {
           stackName: stackName
         },
-        success: 'loadStacksVersionsDefinitionsSuccessCallback',
+        success: 'loadStacksVersionsSuccessCallback',
         error: 'loadStacksVersionsErrorCallback'
       }));
     }, this);
@@ -303,21 +298,21 @@ App.InstallerController = App.WizardController.extend({
   /**
    * Parse loaded data and create array of stacks objects
    */
-  loadStacksVersionsDefinitionsSuccessCallback: function (data) {
+  loadStacksVersionsSuccessCallback: function (data) {
     var stacks = App.db.getStacks();
     var isStacksExistInDb = stacks && stacks.length;
     if (isStacksExistInDb) {
       stacks.forEach(function (_stack) {
-        var stack = data.items.findProperty('VersionDefinition.repository_version', _stack.repository_version);
+        var stack = data.items.filterProperty('Versions.stack_name', _stack.stack_name).findProperty('Versions.stack_version', _stack.stack_version);
         if (stack) {
-          stack.VersionDefinition.is_selected = _stack.is_selected;
+          stack.Versions.is_selected = _stack.is_selected;
         }
       }, this);
     }
-    App.stackMapper.map(data.items, "VersionDefinition");
+    App.stackMapper.map(data);
     if (!this.decrementProperty('loadStacksRequestsCounter')) {
       if (!isStacksExistInDb) {
-        var defaultStackVersion = App.Stack.find().findProperty('stackNameVersion', App.defaultStackVersion);
+        var defaultStackVersion = App.Stack.find().findProperty('id', App.defaultStackVersion);
         if (defaultStackVersion) {
           defaultStackVersion.set('isSelected', true)
         } else {
@@ -325,7 +320,7 @@ App.InstallerController = App.WizardController.extend({
         }
       }
       this.set('content.stacks', App.Stack.find());
-      App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('stackNameVersion'));
+      App.set('currentStackVersion', App.Stack.find().findProperty('isSelected').get('id'));
     }
   },
 
@@ -409,6 +404,7 @@ App.InstallerController = App.WizardController.extend({
    * @param stepController App.WizardStep5Controller
    */
   saveMasterComponentHosts: function (stepController) {
+
     var obj = stepController.get('selectedServicesMasters'),
       hosts = this.getDBProperty('hosts');
 
@@ -509,174 +505,13 @@ App.InstallerController = App.WizardController.extend({
     this.set('content.clients', clients);
   },
 
-  /*
-   * Post version definition file (.xml) to server
-   */
-  postVersionDefinitionFile: function (isXMLdata, data) {
-    var dfd = $.Deferred();
-    var name = isXMLdata? 'wizard.step1.post_version_definition_file.xml' : 'wizard.step1.post_version_definition_file.url';
-
-    App.ajax.send({
-      name: name,
-      sender: this,
-      data: {
-        dfd: dfd,
-        data: data
-      },
-      success: 'postVersionDefinitionFileSuccessCallback',
-      error: 'postVersionDefinitionFileErrorCallback'
-    });
-    return dfd.promise();
-  },
-
-  /**
-   * onSuccess callback for postVersionDefinitionFile.
-   */
-  postVersionDefinitionFileSuccessCallback: function (response, request, data) {
-    if (response.resources.length && response.resources[0].VersionDefinition) {
-      data.dfd.resolve(
-        {
-          stackName: response.resources[0].VersionDefinition.stack_name,
-          id: response.resources[0].VersionDefinition.id,
-          stackVersion: response.resources[0].VersionDefinition.stack_version
-        });
-    }
-  },
-
-  /**
-   * onError callback for postVersionDefinitionFile.
-   */
-  postVersionDefinitionFileErrorCallback: function (request, ajaxOptions, error, data, params) {
-    params.dfd.reject(data);
-    var header = Em.I18n.t('installer.step1.useLocalRepo.uploadFile.error.title');
-    var body = "";
-    if(request && request.responseText){
-      try {
-        var json = $.parseJSON(request.responseText);
-        body = json.message;
-      } catch (err) {}
-    }
-    App.showAlertPopup(header, body);
-  },
-
-  getSupportedOSList: function (stackName, stackVersion) {
-    return  App.ajax.send({
-      name: 'wizard.step1.get_supported_os_types',
-      sender: this,
-      data: {
-        stackName: stackName,
-        stackVersion: stackVersion
-      },
-      success: 'getSupportedOSListSuccessCallback',
-      error: 'getSupportedOSListErrorCallback'
-    });
-  },
-
-  /**
-   * onSuccess callback for getSupportedOSList.
-   */
-  getSupportedOSListSuccessCallback: function (response, request, data) {
-    if (response.operating_systems) {
-      this.set('allSupportedOS', response.operating_systems);
-    }
-  },
-
-  /**
-   * onError callback for getSupportedOSList
-   */
-  getSupportedOSListErrorCallback: function (request, ajaxOptions, error, data, params) {
-    var header = Em.I18n.t('installer.step1.useLocalRepo.getSurpottedOs.error.title');
-    var body = "";
-    if(request && request.responseText){
-      try {
-        var json = $.parseJSON(request.responseText);
-        body = json.message;
-      } catch (err) {}
-    }
-    App.showAlertPopup(header, body);
-  },
-
-  /*
-   * Get the specific repo by stack name, version and id
-   */
-  getRepoById: function (repo_id, stack_name, stack_version) {
-    var dfd = $.Deferred();
-    App.ajax.send({
-      name: 'wizard.step1.get_repo_version_by_id',
-      sender: this,
-      data: {
-        dfd: dfd,
-        stackName: stack_name,
-        stackVersion: stack_version,
-        repoId: repo_id
-      },
-      success: 'getRepoByIdSuccessCallback',
-      error: 'getRepoByIdErrorCallback'
-    });
-    return dfd.promise();
-  },
-
-  /**
-   * onSuccess callback for getRepoById.
-   */
-  getRepoByIdSuccessCallback: function (data, request, dataInfo) {
-    data = data.items[0];
-    var self = this;
-    // load the data info to display for details and contents panel
-    var response = {
-      id : data.repository_versions[0].RepositoryVersions.id,
-      stackVersion : data.Versions.stack_version,
-      stackName: data.Versions.stack_name,
-      type: data.repository_versions[0].RepositoryVersions.release? data.repository_versions[0].RepositoryVersions.release.type: null,
-      stackNameVersion: data.Versions.stack_name + '-' + data.Versions.stack_version, /// HDP-2.3
-      actualVersion: data.repository_versions[0].RepositoryVersions.repository_version, /// 2.3.4.0-3846
-      version: data.repository_versions[0].RepositoryVersions.release ? data.repository_versions[0].RepositoryVersions.release.version: null, /// 2.3.4.0
-      releaseNotes: data.repository_versions[0].RepositoryVersions.release ? data.repository_versions[0].RepositoryVersions.release.release_notes: null,
-      displayName: data.repository_versions[0].RepositoryVersions.release ? data.Versions.stack_name + '-' + data.repository_versions[0].RepositoryVersions.release.version :
-      data.Versions.stack_name + '-' + data.repository_versions[0].RepositoryVersions.repository_version.split('-')[0], //HDP-2.3.4.0
-      repoVersionFullName : data.Versions.stack_name + '-' + data.repository_versions[0].RepositoryVersions.repository_version,
-      osList: data.repository_versions[0].operating_systems,
-      updateObj: data.repository_versions[0]
-    };
-    var services = [];
-    data.repository_versions[0].RepositoryVersions.services.forEach(function (service) {
-      services.push({
-        name: service.name,
-        version: service.versions[0].version,
-        components: service.versions[0].components
-      });
-    });
-    response.services = services;
-
-    // to diaplay repos panel, should map all available operating systems including empty ones
-    this.getSupportedOSList(response.stackName, response.stackVersion).complete(function () {
-      var existedOS = data.repository_versions[0].operating_systems;
-      var existedMap = {};
-      existedOS.map(function (existedOS) {
-        existedOS.isSelected = true;
-        existedMap[existedOS.OperatingSystems.os_type] = existedOS;
-      });
-      self.get('allSupportedOS').forEach(function(supportedOS) {
-        if(!existedMap[supportedOS.OperatingSystems.os_type]) {
-          supportedOS.isSelected = false;
-          supportedOS.repositories.forEach(function(repo) {
-            repo.Repositories.base_url = '';
-          });
-          existedOS.push(supportedOS);
-        }
-      });
-      App.stackMapper.map(data.repository_versions, "RepositoryVersions");
-      dataInfo.dfd.resolve(response);
-    });
-  },
-
   /**
    * Check validation of the customized local urls
    */
   checkRepoURL: function (wizardStep1Controller) {
     var selectedStack = this.get('content.stacks').findProperty('isSelected', true);
     selectedStack.set('reload', true);
-    var nameVersionCombo = selectedStack.get('stackNameVersion');
+    var nameVersionCombo = selectedStack.get('id');
     var stackName = nameVersionCombo.split('-')[0];
     var stackVersion = nameVersionCombo.split('-')[1];
     var dfd = $.Deferred();

+ 1 - 32
ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js

@@ -1794,36 +1794,5 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
     newWindow = window.open();
     newWindow.document.write(output);
     newWindow.focus();
-  },
-
-  /**
-   * load version for services to display on Choose Servoces page
-   * should load from VersionDefinition endpoint
-   */
-  loadServiceVersionFromVersionDefinitions: function () {
-    return App.ajax.send({
-      name: 'cluster.load_current_repo_stack_services',
-      sender: this,
-      data: {
-        clusterName: App.clusterName
-      },
-      success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
-      error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
-    });
-  },
-
-  serviceVersionsMap: {},
-  loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
-    var rv = jsonData.items[0].repository_versions[0].RepositoryVersions;
-    var map = this.get('serviceVersionsMap');
-    if (rv) {
-      rv.stack_services.forEach(function (item) {
-        map[item.name] = item.versions[0];
-      });
-    }
-  },
-
-  loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) {
-  },
-
+  }
 });

+ 1 - 7
ambari-web/app/controllers/main/service/add_controller.js

@@ -192,13 +192,7 @@ App.AddServiceController = App.WizardController.extend(App.AddSecurityConfigs, {
       this.setSkipSlavesStep(App.StackService.find().filterProperty('isSelected').filterProperty('isInstalled', false), 3);
     }
     this.set('serviceToInstall', null);
-    var self = this;
-    this.loadServiceVersionFromVersionDefinitions().complete(function () {
-      self.set('content.services', App.StackService.find().forEach(function (item) {
-        // user the service version from VersionDefinition
-        Ember.set(item, 'serviceVersionDisplay', self.get('serviceVersionsMap')[item.get('serviceName')]);
-      }));
-    });
+    this.set('content.services', App.StackService.find());
   },
 
   /**

+ 0 - 55
ambari-web/app/controllers/wizard.js

@@ -680,61 +680,6 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
   loadServiceComponentsErrorCallback: function (request, ajaxOptions, error) {
   },
 
-  /**
-   * load version for services to display on Choose Servoces page
-   * should load from VersionDefinition endpoint
-   */
-  loadServiceVersionFromVersionDefinitions: function () {
-    if (this.get('name') == 'addServiceController') {
-      return App.ajax.send({
-        name: 'cluster.load_current_repo_stack_services',
-        sender: this,
-        data: {
-          clusterName: App.clusterName
-        },
-        success: '_loadServiceVersionFromVersionDefinitionsSuccessCallback',
-        error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
-      });
-    } else {
-      var seletedRepo = App.Stack.find().findProperty('isSelected');
-      var name = seletedRepo.get('showAvailable') ? 'wizard.get_shown_version_definition': 'wizard.get_version_definition';
-      if (seletedRepo) {
-        return App.ajax.send({
-          name: name,
-          sender: this,
-          data: {
-            repositoryVersion: seletedRepo.get('repositoryVersion')
-          },
-          success: 'loadServiceVersionFromVersionDefinitionsSuccessCallback',
-          error: 'loadServiceVersionFromVersionDefinitionsErrorCallback'
-        });
-      }
-    }
-  },
-
-  serviceVersionsMap: {},
-  loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
-    var versionDefinitions = jsonData.items[0].VersionDefinition;
-    var map = this.get('serviceVersionsMap');
-    if (versionDefinitions) {
-      versionDefinitions.stack_services.forEach(function (item) {
-        map[item.name] = item.versions[0];
-      });
-    }
-  },
-
-  _loadServiceVersionFromVersionDefinitionsSuccessCallback: function (jsonData) {
-    var rv = jsonData.items[0].repository_versions[0].RepositoryVersions;
-    var map = this.get('serviceVersionsMap');
-    if (rv) {
-      rv.stack_services.forEach(function (item) {
-        map[item.name] = item.versions[0];
-      });
-    }
-  },
-  loadServiceVersionFromVersionDefinitionsErrorCallback: function (request, ajaxOptions, error) {
-  },
-
   /**
    * Load config groups from local DB
    */

+ 1 - 104
ambari-web/app/controllers/wizard/step1_controller.js

@@ -31,110 +31,7 @@ App.WizardStep1Controller = Em.Controller.extend({
 
   selectedStack: function() {
     return App.Stack.find().findProperty('isSelected');
-  }.property('content.stacks.@each.isSelected'),
+  }.property('content.stacks.@each.isSelected')
 
-  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: 'http://',
-        hasError: false,
-        isSelected: false
-      }
-    }
-  },
 
-  /**
-   * Used to set version definition file from FileUploader
-   * @method setVDFFile
-   * @param {string} vdf
-   */
-  setVDFFile: function (vdf) {
-    this.set("optionsToSelect.useLocalRepo.uploadFile.file", vdf);
-  },
-
-  /**
-   * Load selected file to current page content
-   */
-  readVersionInfo: function(){
-    var data = {};
-    var isXMLdata = false;
-    var loadedVersionInfo = {};
-    if (this.get("optionsToSelect.usePublicRepo.isSelected")) return;
-    if (this.get("optionsToSelect.useLocalRepo.isSelected") && this.get("optionsToSelect.useLocalRepo.enterUrl.isSelected")) {
-      var url = this.get("optionsToSelect.useLocalRepo.enterUrl.url");
-      data = {
-        "VersionDefinition": {
-          "version_url": url
-        }
-      };
-    } else if (this.get("optionsToSelect.useLocalRepo.uploadFile.isSelected")) {
-      isXMLdata = true;
-      // load from file browser
-      data = this.get("optionsToSelect.useLocalRepo.uploadFile.file");
-    }
-
-    var installerController = App.router.get('installerController');
-    var self = this;
-    installerController.postVersionDefinitionFile(isXMLdata, data).done(function (versionInfo) {
-      if (versionInfo.id && versionInfo.stackName && versionInfo.stackVersion) {
-        installerController.getRepoById(versionInfo.id, versionInfo.stackName, versionInfo.stackVersion).done(function(response) {
-          loadedVersionInfo.id = response.id;
-          loadedVersionInfo.isPatch = response.type == 'PATCH';
-          loadedVersionInfo.stackNameVersion = response.stackNameVersion;
-          loadedVersionInfo.displayName = response.displayName;
-          loadedVersionInfo.version = response.version || 'n/a';
-          loadedVersionInfo.actualVersion = response.actualVersion || 'n/a';
-          loadedVersionInfo.updateObj = response.updateObj;
-          loadedVersionInfo.upgradeStack = {
-            stack_name: response.stackName,
-            stack_version: response.stackVersion,
-            display_name: response.displayName
-          };
-          loadedVersionInfo.services = response.services || [];
-          loadedVersionInfo.repoVersionFullName = response.repoVersionFullName;
-          self.set('loadedVersionInfo', loadedVersionInfo);
-          self.set('latestSelectedLocalRepoId', response.repoVersionFullName);
-
-          Ember.run.next(function () {
-            $("[rel=skip-validation-tooltip]").tooltip({ placement: 'right'});
-            $("[rel=use-redhat-tooltip]").tooltip({ placement: 'right'});
-          });
-          // load successfully, so make this local stack repo as selectedStack
-          self.get('content.stacks').setEach('isSelected', false);
-          self.get('content.stacks').findProperty('id', response.repoVersionFullName).set('isSelected', true);
-        })
-      }
-    });
-  },
-
-  /**
-   * On click handler for removing OS
-   */
-  removeOS: function(event) {
-    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);
-  }
 });

+ 0 - 11
ambari-web/app/mappers/repository_version_mapper.js

@@ -128,17 +128,6 @@ App.repoVersionMapper = App.QuickDataMapper.create({
               serviceArray.pushObject(serviceObj);
               resultService.push(this.parseIt(serviceObj, this.get('modelService')));
             }, this);
-          } else if (item[repoVersionsKey].stack_services) {
-            item[repoVersionsKey].stack_services.forEach(function (service) {
-              var serviceObj = {
-                id: service.name,
-                name: service.name,
-                display_name: service.display_name,
-                latest_version: service.versions[0] ? service.versions[0]: ''
-              };
-              serviceArray.pushObject(serviceObj);
-              resultService.push(this.parseIt(serviceObj, this.get('modelService')));
-            }, this);
           }
           repo.operating_systems = osArray;
           repo.services = serviceArray;

+ 9 - 43
ambari-web/app/mappers/stack_mapper.js

@@ -21,14 +21,11 @@ App.stackMapper = App.QuickDataMapper.create({
   modelStack: App.Stack,
   modelOS: App.OperatingSystem,
   modelRepo: App.Repository,
-  modelServices: App.ServiceSimple,
   
   configStack: {
     id: 'id',
     stack_name: 'stack_name',
     stack_version: 'stack_version',
-    show_available: 'show_available',
-    repository_version: 'repository_version',
     active: 'active',
     parent_stack_version: 'parent_stack_version',
     min_upgrade_version: 'min_upgrade_version',
@@ -36,11 +33,6 @@ App.stackMapper = App.QuickDataMapper.create({
     max_jdk_version: 'max_jdk',
     is_selected: 'is_selected',
     config_types: 'config_types',
-    stack_services_key: 'stack_services',
-    stack_services_type: 'array',
-    stack_services: {
-      item: 'id'
-    },
     operating_systems_key: 'operating_systems',
     operating_systems_type: 'array',
     operating_systems: {
@@ -54,20 +46,12 @@ App.stackMapper = App.QuickDataMapper.create({
     stack_name: 'stack_name',
     stack_version: 'stack_version',
     stack_id: 'stack_id',
-    is_selected: 'is_selected',
     repositories_key: 'repositories',
     repositories_type: 'array',
     repositories: {
       item: 'id'
     }
   },
-
-  configService: {
-    id: 'id',
-    name: 'name',
-    display_name: 'display_name',
-    latest_version: 'latest_version'
-  },
   
   configRepository: {
     id: 'id',
@@ -83,59 +67,42 @@ App.stackMapper = App.QuickDataMapper.create({
     operating_system_id: 'os_id'
   },
   
-  map: function(json, key) {
+  map: function(json) {
     var modelStack = this.get('modelStack');
     var modelOS = this.get('modelOS');
     var modelRepo = this.get('modelRepo');
-    var modelServices = this.get('modelServices');
     var resultStack = [];
     var resultOS = [];
     var resultRepo = [];
-    var resultServices = [];
 
-    var stackVersions = json;
-    var propertiesKey = key;
-    stackVersions.sortProperty(key + '.stack_version').reverse().forEach(function(item) {
-      var stack = item[key];
+    var stackVersions = json.items.filterProperty('Versions.active');
+    stackVersions.sortProperty('Versions.stack_version').reverse().forEach(function(item) {
+      var stack = item.Versions;
       var operatingSystemsArray = [];
-      var servicesArray = [];
 
-      stack.id = stack.stack_name + "-" + stack.repository_version;
+      stack.id = stack.stack_name + "-" + stack.stack_version;
 
       item.operating_systems.forEach(function(ops) {
         var operatingSystems = ops.OperatingSystems;
 
         var repositoriesArray = [];
         ops.repositories.forEach(function(repo) {
-          repo.Repositories.id = [stack.id, repo.Repositories.os_type, repo.Repositories.repo_id].join('-');
-          repo.Repositories.os_id = [stack.id, repo.Repositories.os_type].join('-');
-          if (!repo.Repositories.latest_base_url)  repo.Repositories.latest_base_url = repo.Repositories.base_url;
+          repo.Repositories.id = [repo.Repositories.stack_name, repo.Repositories.stack_version, repo.Repositories.os_type, repo.Repositories.repo_id].join('-');
+          repo.Repositories.os_id = [repo.Repositories.stack_name, repo.Repositories.stack_version, repo.Repositories.os_type].join('-');
           resultRepo.push(this.parseIt(repo.Repositories, this.get('configRepository')));
           repositoriesArray.pushObject(repo.Repositories);
         }, this);
 
 
-        operatingSystems.id = stack.id + "-" + operatingSystems.os_type;
+        operatingSystems.id = operatingSystems.stack_name + "-" + operatingSystems.stack_version + "-" + operatingSystems.os_type;
         operatingSystems.stack_id = operatingSystems.stack_name + "-" + operatingSystems.stack_version;
         operatingSystems.repositories = repositoriesArray;
-        operatingSystems.is_selected = (ops.isSelected == true || ops.isSelected == undefined);
         resultOS.push(this.parseIt(operatingSystems, this.get('configOS')));
         operatingSystemsArray.pushObject(operatingSystems);
         
       }, this);
+      
 
-      stack.stack_services.forEach(function(service) {
-        var serviceObj = {
-          id: service.name + '-' + stack.id,
-          name: service.name,
-          display_name: service.display_name,
-          latest_version: service.versions? service.versions[0] : ''
-        };
-        resultServices.push(this.parseIt(serviceObj, this.get('configService')));
-        servicesArray.pushObject(serviceObj);
-      }, this);
-
-      stack.stack_services = servicesArray;
       stack.operating_systems = operatingSystemsArray;
       resultStack.push(this.parseIt(stack, this.get('configStack')));
       
@@ -144,7 +111,6 @@ App.stackMapper = App.QuickDataMapper.create({
     App.store.commit();
     App.store.loadMany(modelRepo, resultRepo);
     App.store.loadMany(modelOS, resultOS);
-    App.store.loadMany(modelServices, resultServices);
     App.store.loadMany(modelStack, resultStack);
   }
 });

+ 2 - 22
ambari-web/app/messages.js

@@ -543,28 +543,8 @@ Em.I18n.translations = {
   'installer.step0.clusterName.error.whitespace':'Cluster Name cannot contain whitespace',
   'installer.step0.clusterName.error.specialChar':'Cluster Name cannot contain special characters',
 
-  'installer.step1.header':'Select Version',
-  'installer.step1.body':'Select the software version and method of delivery for your cluster. Using a Public Repository requires Internet connectivity. Using a Local Repository requires you have configured the software in a repository available in your network.',
-  'installer.step1.selectUseRepoOptions.public':'Use Public Repository',
-  'installer.step1.selectUseRepoOptions.local':'Use Local Repository',
-  'installer.step1.usePublicRepo.ReposList.empty':'No other repositories',
-  'installer.step1.usePublicRepo.viewRepos':'View Repositories',
-  'installer.step1.useLocalRepo.uploadFile': 'Upload Version Definition File',
-  'installer.step1.useLocalRepo.uploadFile.error.title': 'Upload Version Definition File Error',
-  'installer.step1.useLocalRepo.getSurpottedOs.error.title': 'Cannot get supportted OS types',
-  'installer.step1.useLocalRepo.addRepo.button': 'Add Repository',
-  'installer.step1.useLocalRepo.enterUrl': 'Version Definition File URL',
-  'installer.step1.useLocalRepo.readButton': 'Read Version Info',
-  'installer.step1.useLocalRepo.infoForm.details.title': 'Details',
-  'installer.step1.useLocalRepo.infoForm.details.stackName': 'Stack Name',
-  'installer.step1.useLocalRepo.infoForm.details.displayName': 'Display Name',
-  'installer.step1.useLocalRepo.infoForm.details.version': 'Version',
-  'installer.step1.useLocalRepo.infoForm.details.actualVersion': 'Actual Version',
-  'installer.step1.useLocalRepo.infoForm.details.releaseNotes': 'Release Notes',
-  'installer.step1.useLocalRepo.infoForm.content.title': 'Contents',
-  'installer.step1.useLocalRepo.infoForm.content.empty': 'No contents to display',
-  'installer.step1.useLocalRepo.infoForm.alert.baseUrl': 'Provide Base URLs for the Operating Systems you are configuring.',
-  'installer.step1.useLocalRepo.infoForm.alert.warning': 'Some of the repositories failed validation. Make changes to the base url or skip validation if you are sure that urls are correct',
+  'installer.step1.header':'Select Stack',
+  'installer.step1.body':'Please select the service stack that you want to use to install your Hadoop cluster.',
   'installer.step1.advancedRepo.title':'Advanced Repository Options',
   'installer.step1.advancedRepo.message':'Customize the repository Base URLs for downloading the Stack software packages. If your hosts do not have access to the internet, you will have to create a local mirror of the Stack repository that is accessible by all hosts and use those Base URLs here.',
   'installer.step1.advancedRepo.importantMassage':'<b>Important:</b> When using local mirror repositories, you only need to provide Base URLs for the Operating System you are installing for your Stack. Uncheck all other repositories.',

+ 31 - 11
ambari-web/app/models/stack.js

@@ -19,20 +19,18 @@
 var App = require('app');
 
 App.Stack = DS.Model.extend({
-  id: DS.attr('string'), //  ${stackName}-${repoVersion}.
+  id: DS.attr('string'), //  ${stackName}-${stackVersion}.
   stackName: DS.attr('string'),
   stackVersion: DS.attr('string'),
-  repositoryVersion: DS.attr('string'),
-  showAvailable: DS.attr('boolean'),  // All of the instances should have this value to true. We should map only those stacks that has this flag set to true
-  stackServices: DS.hasMany('App.ServiceSimple'),
+  active: DS.attr('boolean'),  // All of the instances should have this value to true. We should map only those stacks that has active flag set to true
+  parentStackVersion: DS.attr('string'),
+  minUpgradeVersion: DS.attr('string'),
+  minJdkVersion: DS.attr('string'),
+  maxJdkVersion: DS.attr('string'),
+  configTypes: DS.attr('object'),
   operatingSystems: DS.hasMany('App.OperatingSystem'),
   isSelected: DS.attr('boolean', {defaultValue: false}),
 
-  stackNameVersion: function () {
-    //${stackName}-${stackVersion}.
-    return this.get('stackName') + '-' + this.get('stackVersion');
-  }.property('stackName', 'stackVersion'),
-
   /**
    * @return: {Array} returns supported repositories for all OperatingSystem's supported by a stack instance
    */
@@ -45,8 +43,30 @@ App.Stack = DS.Model.extend({
       }, this);
     }, this);
     return repositories;
-  }.property('id')
+  }.property('id'),
+
+  /**
+   * @return: {Array} App.StackService instances for selected stack instance. For non-selected stack instance returns empty array
+   */
+  services: function () {
+    var result = [];
+    var isStackSelected = this.get('isSelected');
+    var stackServices = App.StackService.find().get('length');
+    if (isStackSelected && stackServices) {
+      result = App.StackService.find();
+    }
+    return result;
+  }.property('isSelected'),
+
+  /**
+   * Right now there ambari-web is not fetching this information from the server as it does not need as of present.
+   * @TODO: This should return stack level configurations for selected stack instance i.e properties of cluster-env file
+   */
+  configurations: function() {
+    return [];
+  }.property('isSelected')
+
 });
 
 
-App.Stack.FIXTURES = [];
+App.Stack.FIXTURES = [];

+ 1 - 8
ambari-web/app/routes/add_service_routes.js

@@ -101,14 +101,7 @@ module.exports = App.WizardRoute.extend({
         controller.loadAllPriorSteps().done(function () {
           var wizardStep4Controller = router.get('wizardStep4Controller');
           wizardStep4Controller.set('wizardController', controller);
-          controller.loadServiceVersionFromVersionDefinitions().complete(function () {
-            controller.set('content.services', App.StackService.find().forEach(function (item) {
-              // user the service version from VersionDefinition
-              Ember.set(item, 'serviceVersionDisplay', controller.get('serviceVersionsMap')[item.get('serviceName')]);
-              //item.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[item.get('serviceName')]);
-            }));
-            controller.connectOutlet('wizardStep4', controller.get('content.services').filterProperty('isInstallable', true));
-          });
+          controller.connectOutlet('wizardStep4', controller.get('content.services').filterProperty('isInstallable', true));
         });
       });
     },

+ 0 - 177
ambari-web/app/styles/application.less

@@ -6199,183 +6199,6 @@ input[type="radio"].align-checkbox, input[type="checkbox"].align-checkbox {
   margin-left: -10px;
 }
 
-#select-stack .stack-version-selection{
-  .tabs-left {
-    border-bottom: none;
-    padding-top: 20px;
-    border-right: 1px solid #ddd;
-    min-height: 264px;
-  }
-  .tabs-left>li {
-    float: none;
-    margin-bottom: 2px;
-    margin-right: -1px;
-  }
-  .tabs-left>li.active>a,
-  .tabs-left>li.active>a:hover,
-  .tabs-left>li.active>a:focus {
-    border-color: #ddd transparent #ddd #ddd;
-  }
-  .tabs-left>li>a:hover,
-  .tabs-left>li>a:focus {
-    border-color: #eeeeee #dddddd #eeeeee #eeeeee;
-  }
-  .tabs-left>li>a {
-    border-radius: 4px 0 0 4px;
-    padding: 5px 10px;
-    margin-right: 0;
-    display:block;
-  }
-  .right-stack-info {
-    margin-left: 0px;
-    padding: 10px 20px;
-    border: 1px solid;
-    border-color: #ddd #ddd #ddd transparent;
-    .available-repos-dropdown {
-      a, a.disbled{
-        cursor: pointer;
-      }
-      a.disabled{
-        color: #999999;
-        background: none;
-      }
-    }
-    .services-list {
-      padding: 20px 20px;
-      margin-top: 10px;
-      border: 1px #ddd solid;
-      background-color: #f5f5f5;
-      height: 150px;
-      max-height: 150px;
-      overflow: auto;
-      .control-label {
-        font-weight: bold;
-        min-height: 20px;
-        line-height: 12px;
-      }
-      .version-info {
-        //padding-top: 2px;
-        line-height: 12px;
-      }
-    }
-    .badge.badge-important {
-      margin: 6px 3px;
-    }
-    a.view-repos {
-      cursor: pointer;
-      text-decoration: none;
-      padding: 5px 5px;
-    }
-
-  }
-}
-#select-stack .stack-version-selection.disabled{
-  background-color: #dddddd;
-  display: none;
-}
-
-#select-stack {
-  .big-radio {
-    font-weight: bold;
-    padding: 5px 15px;
-  }
-  #upload-definition-file-panel {
-    .register-version-options {
-      padding: 5px 0px;
-      .local-option-label {
-        margin-left: 20px;
-        padding-top: 4px;
-      }
-    }
-    .vdf-url {
-      input {
-        width: 80%;
-      }
-    }
-    .read-info-button {
-      margin: 10px 0px;
-    }
-  }
-}
-#select-stack #localVersionInfoForm {
-  .accordion-heading {
-    background-color: #f0f0f0;
-    font-weight: bold;
-    p {
-      margin-bottom: 0px;
-      display: block;
-      padding: 8px 15px;
-    }
-  }
-  .accordion-body {
-    .control-label {
-      font-weight: bold;
-      line-height: 14px;
-    }
-    .version-info {
-      padding-top: 5px;
-      line-height: 14px;
-    }
-  }
-  .details-panel .patch-icon {
-    color: #ff4500;
-  }
-  .contents-panel .version-contents-body {
-    max-height: 150px;
-    overflow: auto;
-  }
-  .repos-panel {
-    .remove-icon {
-      color: red;
-      margin: 20px 0px;
-      padding: 0px;
-      text-align: center;
-      cursor: pointer;
-    }
-    .border-bottom {
-      border-bottom: 1px solid #ebebeb;
-    }
-    .repo-table-title {
-      padding-left: 5px;
-      border-bottom: 1px solid #ebebeb;
-      label {
-        font-weight: bold;
-      }
-    }
-    .os-type-label {
-      margin-top: 27px;
-      padding-left: 10px;
-      label {
-        font-weight: bold;
-      }
-    }
-    .repo-name-label {
-      text-align: left;
-      padding-top: 10px;
-    }
-    .repo-name-url {
-      padding: 8px 0px;
-    }
-    .repo-url input {
-      width: 90%;
-      height: 24px;
-    }
-    .add-os-button {
-      margin-top:10px;
-    }
-    #skip-validation {
-      margin-top: 25px;
-    }
-    #use-redhat, #skip-validation {
-      .icon-question-sign {
-        color: #0572ff;
-      }
-      input{
-        margin: 0px 10px;
-      }
-    }
-  }
-}
 #combo_search_box {
   .VS-search {
     .VS-search-box {

+ 1 - 1
ambari-web/app/templates/main/admin/stack_upgrade/services.hbs

@@ -30,7 +30,7 @@
     {{#each service in view.services}}
     <tr>
       <td class="service-display-name">{{service.displayName}}</td>
-      <td class="service-stack-version">{{service.serviceVersionDisplay}}</td>
+      <td class="service-stack-version">{{service.serviceVersion}}</td>
       <td class="stack-version-state">
         {{#if service.isInstalled}}
           <span class="label label-success">{{t common.installed}}</span>

+ 89 - 193
ambari-web/app/templates/wizard/step1.hbs

@@ -17,213 +17,109 @@
 }}
 <div id="select-stack">
   <h2>{{t installer.step1.header}}</h2>
-  <p class="alert alert-info">{{t installer.step1.body}}</p>
+  <p class="alert alert-info">
+    {{t installer.step1.body}}
+  </p>
+  <p><b>{{t common.stacks}}</b></p>
+  <form autocomplete="off">
+    {{#each stack in view.stacks}}
+      <label class="radio">{{view view.stackRadioButton contentBinding="stack"}} {{stack.name}}</label>
+    {{/each}}
+  </form>
 
-  <label class="radio big-radio">{{view view.usePublicRepoRadioButton}} {{t installer.step1.selectUseRepoOptions.public}}</label>
 
-    <form {{bindAttr class="optionsToSelect.useLocalRepo.isSelected:disabled :stack-version-selection :row-fluid"}}>
-      <div class="span2 left-menu-tabs">
-        <ul class="nav nav-tabs tabs-left sideways">
-          {{#each stack in view.stackNames}}
-            {{#if stack.name}}
-              <li {{bindAttr class="stack.isActive:active"}}>
-                <a {{bindAttr href="stack.name"}} data-toggle="tab"
-                    {{action "selectStackNameOnTab" stack target="view"}}>{{stack.name}}</a></li>
-            {{/if}}
-          {{/each}}
-        </ul>
-      </div>
-      <div class="span9 right-stack-info">
-        <div class="repo-list-button btn-group">
-          <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
-            {{controller.selectedStack.repositoryVersion}} &nbsp;<span class="caret"></span>
-          </button>
-          <ul class="dropdown-menu available-repos-dropdown">
-            {{#if view.availableStackRepoList}}
-              {{#each repo in view.availableStackRepoList}}
-                {{#if repo.repositoryVersion}}
-                  <li><a {{action "selectRepoInList" repo target="view"}}>{{repo.repositoryVersion}}</a></li>
-                {{/if}}
-              {{/each}}
-            {{else}}
-              <li><a class="disabled">{{t installer.step1.usePublicRepo.ReposList.empty}}</a></li>
-            {{/if}}
-          </ul>
-        </div>
-        <div class="services-list">
-          {{#each service in view.selectedServices}}
-            <div class="clearfix row-fluid">
-              <label class="control-label span4">{{service.displayName}}</label>
-              <div class="version-info span8">{{service.version}}</div>
-            </div>
-          {{/each}}
-        </div>
-
-        {{#if view.showErrorsWarningCount}}
-          <span class="badge badge-important pull-right">{{view.totalErrorCnt}}</span>
-        {{/if}}
-        <a class="view-repos pull-right"{{action "viewRepositories" target="view"}}>{{t installer.step1.usePublicRepo.viewRepos}}</a>
-      </div>
-    </form>
-
-
-    {{!--Local repo loaded info below--}}
-  <label class="radio big-radio">{{view view.useLocalRepoRadioButton}} {{t installer.step1.selectUseRepoOptions.local}}</label>
-  {{#if optionsToSelect.useLocalRepo.isSelected}}
-    <div id="upload-definition-file-panel" >
-      <div class="clearfix register-version-options row-fluid">
-        <div class="span5 option-radio-button">
-          <label class="local-option-label radio">
-            {{view view.uploadFileRadioButton}} {{t installer.step1.useLocalRepo.uploadFile}}
-          </label>
-        </div>
-        <div class="span7">
-          {{#if view.isFileApi}}
-            {{view App.VersionDefinitionFileUploader disabledBinding="optionsToSelect.useLocalRepo.enterUrl.isSelected"}}
+  <div class="accordion" id="advancedRepoAccordion">
+    <div class="accordion-group">
+      <div class="accordion-heading" {{action "onToggleBlock" target="view"}}>
+        <i {{bindAttr class=":pull-left :accordion-toggle view.isRLCollapsed:icon-caret-right:icon-caret-down"}}></i>
+        <a class="accordion-toggle">
+          {{t installer.step1.advancedRepo.title}}
+          {{#if view.showErrorsWarningCount}}
+            <span class="badge badge-important">{{view.totalErrorCnt}}</span>
           {{/if}}
-        </div>
+        </a>
       </div>
-      <div class="clearfix register-version-options row-fluid">
-        <div class="span5 option-radio-button">
-          <label class="local-option-label radio">
-            {{view view.enterUrlRadioButton}} {{t installer.step1.useLocalRepo.enterUrl}}
-          </label>
-        </div>
-        <div class="span7 vdf-url">
-          <div {{bindAttr class="optionsToSelect.useLocalRepo.enterUrl.name optionsToSelect.useLocalRepo.enterUrl.url.hasError:has-error }"}}>
-            {{view Ember.TextField valueBinding="optionsToSelect.useLocalRepo.enterUrl.url" disabledBinding="optionsToSelect.useLocalRepo.uploadFile.isSelected"}}
-          </div>
-        </div>
-        <div class="span12 read-info-button">
-          <button {{bindAttr class="view.readInfoButtonDisabled:disabled :btn :btn-primary :pull-right"}}
-            {{action "readVersionInfo" target="controller"}}> {{t installer.step1.useLocalRepo.readButton}}</button>
-        </div>
-      </div>
-    </div>
+      <div class="accordion-body collapse in">
+        <div class="accordion-inner">
+          <div class="alert alert-info">{{t installer.step1.advancedRepo.message}}</div>
+          <div class="alert alert-warning">{{t installer.step1.advancedRepo.importantMassage}}</div>
 
-  {{#if loadedVersionInfo.stackNameVersion}}
-    <form id="localVersionInfoForm" class="form-horizontal" role="form" name="localVersionInfoForm" novalidate>
-      <div class="accordion-group details-panel">
-        <div class="accordion-heading">
-          <p>{{t installer.step1.useLocalRepo.infoForm.details.title}}</p>
-        </div>
-        <div class="accordion-body">
-          <div class="accordion-inner">
-            <div class="row-fluid">
-                <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.stackName}}</label>
-                <div class="version-info span7">{{loadedVersionInfo.stackNameVersion}}</div>
-                {{#if loadedVersionInfo.isPatch}}
-                    <div class="span2 patch-icon"><i class="icon-umbrella"></i>&nbsp;{{t common.patch}}</div>
-                {{/if}}
+          <div class="repositories-table">
+            <div class="thead">
+              <div class="first-th">&nbsp;</div>
+              <div class="th os-th">{{t common.os}}</div>
+              <div class="th name-th">{{t common.name}}</div>
+              <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div>
             </div>
-            <div class="row-fluid">
-                <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.displayName}}</label>
-                <div class="version-info span9">{{loadedVersionInfo.displayName}}</div>
-            </div>
-            <div class="row-fluid">
-                <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.version}}</label>
-                <div class="version-info span9">{{loadedVersionInfo.version}}</div>
-            </div>
-            <div class="row-fluid">
-                <label class="control-label span3">{{t installer.step1.useLocalRepo.infoForm.details.actualVersion}}</label>
-                <div class="version-info span9">{{loadedVersionInfo.actualVersion}}</div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div class="accordion-group contents-panel">
-        <div class="accordion-heading">
-          <p>{{t installer.step1.useLocalRepo.infoForm.content.title}}</p>
-        </div>
-        <div class="accordion-body version-contents-body">
-          <div class="accordion-inner">
-            {{#unless loadedVersionInfo.services}}
-              <div class="alert alert-info" role="alert">{{t installer.step1.useLocalRepo.infoForm.content.empty}}</div>
-            {{/unless}}
-            {{#each service in loadedVersionInfo.services}}
-              <div class="clearfix row-fluid">
-                <label class="control-label span3">{{service.name}}</label>
-                <div class="version-info span9">{{service.version}}</div>
-              </div>
-            {{/each}}
-            </div>
-        </div>
-      </div>
-      <div class="accordion-group repos-panel">
-        <div class="accordion-heading">
-          <p>{{t common.repositories}}</p>
-        </div>
-          <div class="accordion-body version-contents-body">
-            <div class="accordion-inner">
-              <div class="alert alert-info" role="alert">{{t installer.step1.useLocalRepo.infoForm.alert.baseUrl}}</div>
-              {{#if view.hasValidationErrors}}
-                <div class="alert alert-warning" role="alert">{{t installer.step1.useLocalRepo.infoForm.alert.warning}}</div>
-              {{/if}}
-
-              <div class="clearfix repo-table-title row-fluid">
-                <div class="span2"><label>{{t common.os}}</label></div>
-                <div class="span2"><label>{{t common.name}}</label></div>
-                <div class="span7"><label>{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</label></div>
-              </div>
-
+            <div class="tbody">
               {{#each operatingSystem in view.operatingSystems}}
-                {{#if operatingSystem.isSelected}}
-                  <div class="clearfix row-fluid border-bottom">
-                    <div class="span2 os-type-label">
-                      <label>{{operatingSystem.osType}}</label>
-                    </div>
-                    <div class="span9">
-                      {{#each repository in operatingSystem.repositories}}
-                        <div class="repo-name-url row-fluid" {{bindAttr class="repository.hasError:has-error"}} >
-                          <label class="repo-name-label control-label span3">{{repository.repoId}}</label>
-                          <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 Ember.TextField valueBinding="repository.baseUrl"}}
-                          </div>
+                <div class="trow">
+                  <div {{bindAttr class=":os-td operatingSystem.osType"}}>
+                    <label>
+                      {{view Ember.Checkbox checkedBinding="operatingSystem.isSelected"}}
+                      <span {{bindAttr class=":os operatingSystem.isSelected::disabled-label"}}>{{operatingSystem.osType}}</span>
+                    </label>
+                  </div>
+                  <div style="width:83%">
+                    {{#each repository in operatingSystem.repositories}}
+                      <div class="sub-trow">
+                        <div class="name-td">{{repository.repoId}}</div>
+                        <div class="validation-td">
+                          {{#if repository.validation}}
+                            {{view view.popoverView repositoryBinding="repository"}}
+                          {{/if}}
+                        </div>
+                        <div {{bindAttr class=":url-td operatingSystem.osType repository.repoId repository.invalidFormatError:textfield-error repository.invalidError:textfield-error"}}>
+                          {{view Ember.TextField valueBinding="repository.baseUrl" disabledBinding="operatingSystem.isDeselected"}}
+                        </div>
+                        <div class="clear-td">
+                          {{#if repository.clearAll}}
+                            <a {{action "clearGroupLocalRepository" repository target="view" }} {{bindAttr class="operatingSystem.isSelected::disabled-clear-button"}}>
+                              <i class="icon-remove-sign"></i>
+                            </a>
+                          {{/if}}
                         </div>
-                      {{/each}}
-                    </div>
-                    <div class="span1 remove-icon" {{action "removeOS" operatingSystem target="controller"}}><i class="icon-minus"></i>{{t common.remove}}</div>
+                        <div class="actions-td">
+                          {{#if repository.undo}}
+                            <a {{action "undoGroupLocalRepository" repository target="view" }}>
+                              <i class="icon-undo"></i>{{t common.undo}}
+                            </a>
+                          {{/if}}
+                        </div>
+                      </div>
+                    {{/each}}
                   </div>
-                {{/if}}
+                </div>
               {{/each}}
-
-              <div class="add-os-button btn-group pull-right">
-                <button class="btn dropdown-toggle" data-toggle="dropdown">
-                  <i class="icon-plus"></i> {{t common.add}} &nbsp;<span class="caret"></span>
-                </button>
-                <ul class="dropdown-menu">
-                  {{#each operatingSystem in view.operatingSystems}}
-                    {{#unless operatingSystem.isSelected}}
-                      <li><a {{action "addOS" operatingSystem target="controller"}}>{{operatingSystem.osType}}</a></li>
-                    {{/unless}}
-                  {{/each}}
-                </ul>
-              </div>
-              <div id="skip-validation">
-                <label>{{view Ember.Checkbox checkedBinding="skipValidationChecked" class="checkbox"}}{{t installer.step1.advancedRepo.skipValidation.message}}
-                  <i class="icon-question-sign" rel="skip-validation-tooltip"
-                     data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.skipValidation.tooltip"}}></i></label>
-              </div>
-              <div id="use-redhat">
-                <label>{{view Ember.Checkbox classNames="align-checkbox" checkedBinding="useRedhatSatellite"}}{{t installer.step1.advancedRepo.useRedhatSatellite.message}}
-                  <i class="icon-question-sign" rel="use-redhat-tooltip"
-                    data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}>
-                  </i>
-                </label>
-              </div>
             </div>
           </div>
+          <div id="skip-validation">
+            <label>{{view Ember.Checkbox checkedBinding="skipValidationChecked" class="checkbox"}}{{t installer.step1.advancedRepo.skipValidation.message}}
+              <i class="icon-question-sign" rel="skip-validation-tooltip"
+                 data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.skipValidation.tooltip"}}></i></label>
+          </div>
+          <div id="use-redhat">
+            <label>{{view Ember.Checkbox classNames="align-checkbox" checkedBinding="useRedhatSatellite"}}{{t installer.step1.advancedRepo.useRedhatSatellite.message}}
+              <i class="icon-question-sign" rel="use-redhat-tooltip"
+                 data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}></i></label>
+          </div>
+          {{#if view.invalidFormatUrlExist}}
+            <div class="alert">{{t installer.step1.attentionNeeded}}</div>
+          {{/if}}
+          {{#if view.invalidUrlExist}}
+            <div class="alert">
+              {{t installer.step1.invalidURLAttention}}
+              <a href="javascript:void(null)" {{action "retryRepoUrls" target="view"}}>{{t installer.step1.retryRepoUrls}}</a>
+            </div>
+          {{/if}}
+          {{#if view.allRepoUnchecked}}
+            <div class="alert">{{t installer.step1.checkAtLeastOneAttention}}</div>
+          {{/if}}
+        </div>
       </div>
-    </form>
-  {{/if}}
-  {{/if}}
+    </div>
+  </div>
 
   <a class="btn pull-left installer-back-btn" {{action back}}>&larr; {{t common.back}}</a>
   <button class="btn btn-success pull-right" {{bindAttr disabled="view.isSubmitDisabled"}} {{action next}}>{{t common.next}} &rarr;</button>
-
 </div>

+ 0 - 102
ambari-web/app/templates/wizard/step1_viewRepositories.hbs

@@ -1,102 +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="accordion" id="advancedRepoAccordion">
-  <div class="">
-    <div class="accordion-body">
-      <div class="accordion-inner">
-        <div class="alert alert-info">{{t installer.step1.advancedRepo.message}}</div>
-        <div class="alert alert-warning">{{t installer.step1.advancedRepo.importantMassage}}</div>
-
-        <div class="repositories-table">
-          <div class="thead">
-            <div class="first-th">&nbsp;</div>
-            <div class="th os-th">{{t common.os}}</div>
-            <div class="th name-th">{{t common.name}}</div>
-            <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div>
-          </div>
-          <div class="tbody">
-            {{#each operatingSystem in view.operatingSystems}}
-              <div class="trow">
-                <div {{bindAttr class=":os-td operatingSystem.osType"}}>
-                  <label>
-                    {{view Ember.Checkbox checkedBinding="operatingSystem.isSelected"}}
-                    <span {{bindAttr class=":os operatingSystem.isSelected::disabled-label"}}>{{operatingSystem.osType}}</span>
-                  </label>
-                </div>
-                <div style="width:83%">
-                  {{#each repository in operatingSystem.repositories}}
-                    <div class="sub-trow">
-                      <div class="name-td">{{repository.repoId}}</div>
-                      <div class="validation-td">
-                        {{#if repository.validation}}
-                            {{view view.popoverView repositoryBinding="repository"}}
-                        {{/if}}
-                      </div>
-                      <div {{bindAttr class=":url-td operatingSystem.osType repository.repoId repository.invalidFormatError:textfield-error repository.invalidError:textfield-error"}}>
-                        {{view Ember.TextField valueBinding="repository.baseUrl" disabledBinding="operatingSystem.isDeselected"}}
-                      </div>
-                      <div class="clear-td">
-                        {{#if repository.clearAll}}
-                          <a {{action "clearGroupLocalRepository" repository target="view" }} {{bindAttr class="operatingSystem.isSelected::disabled-clear-button"}}>
-                            <i class="icon-remove-sign"></i>
-                          </a>
-                        {{/if}}
-                      </div>
-                        <div class="actions-td">
-                          {{#if repository.undo}}
-                            <a {{action "undoGroupLocalRepository" repository target="view" }}>
-                                <i class="icon-undo"></i>{{t common.undo}}
-                            </a>
-                          {{/if}}
-                        </div>
-                    </div>
-                  {{/each}}
-                </div>
-              </div>
-            {{/each}}
-          </div>
-        </div>
-        <div id="skip-validation">
-          <label>{{view Ember.Checkbox checkedBinding="skipValidationChecked" class="checkbox"}}{{t installer.step1.advancedRepo.skipValidation.message}}
-            <i class="icon-question-sign" rel=""
-               data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.skipValidation.tooltip"}}></i></label>
-        </div>
-        {{#if App.supports.redhatSatellite}}
-          <div id="use-redhat">
-            <label>{{view Ember.Checkbox classNames="align-checkbox" checkedBinding="useRedhatSatellite"}}{{t installer.step1.advancedRepo.useRedhatSatellite.message}}
-              <i class="icon-question-sign" rel="use-redhat-tooltip"
-                   data-toggle="tooltip" {{translateAttr title="installer.step1.advancedRepo.useRedhatSatellite.tooltip"}}></i></label>
-          </div>
-        {{/if}}
-        {{#if view.invalidFormatUrlExist}}
-          <div class="alert">{{t installer.step1.attentionNeeded}}</div>
-        {{/if}}
-        {{#if view.invalidUrlExist}}
-          <div class="alert">
-            {{t installer.step1.invalidURLAttention}}
-            <a href="javascript:void(null)" {{action "retryRepoUrls" target="view"}}>{{t installer.step1.retryRepoUrls}}</a>
-          </div>
-        {{/if}}
-        {{#if view.isNoOsChecked}}
-          <div class="alert">{{t installer.step1.checkAtLeastOneAttention}}</div>
-        {{/if}}
-      </div>
-    </div>
-  </div>
-</div>

+ 1 - 1
ambari-web/app/templates/wizard/step4.hbs

@@ -40,7 +40,7 @@
           disabledBinding="isInstalled"
           checkedBinding="isSelected"}}{{displayNameOnSelectServicePage}}</label>
           </td>
-          <td>{{serviceVersionDisplay}}</td>
+          <td>{{serviceVersion}}</td>
           <td>{{{comments}}}</td>
         </tr>
       {{/unless}}

+ 0 - 52
ambari-web/app/utils/ajax/ajax.js

@@ -1371,10 +1371,6 @@ var urls = {
     'real': '/clusters/{clusterName}/stack_versions?ClusterStackVersions/state=CURRENT&fields=repository_versions/RepositoryVersions/repository_version&minimal_response=true',
     'mock': '/data/stack_versions/stack_version_all.json'
   },
-  'cluster.load_current_repo_stack_services': {
-    'real': '/clusters/{clusterName}/stack_versions?ClusterStackVersions/state=CURRENT&fields=repository_versions/RepositoryVersions/stack_services',
-    'mock': '/data/stack_versions/stack_version_all.json'
-  },
   'cluster.save_provisioning_state': {
     'real': '/clusters/{clusterName}',
     'type': 'PUT',
@@ -1862,42 +1858,6 @@ var urls = {
     }
   },
 
-  'wizard.step1.post_version_definition_file.xml': {
-    'real': '/version_definitions',
-    'mock': '',
-    'format': function (data) {
-      return {
-        headers: {
-          'X-Requested-By': 'ambari',
-          'Content-Type': 'text/xml'
-        },
-        type: 'POST',
-        data: data.data
-      }
-    }
-  },
-  'wizard.step1.post_version_definition_file.url': {
-    'real': '/version_definitions',
-    'mock': '',
-    'format': function (data) {
-      return {
-        type: 'POST',
-        data: JSON.stringify(data.data)
-      }
-    }
-  },
-  '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': '',
@@ -1908,12 +1868,6 @@ var urls = {
       }
     }
   },
-  'wizard.get_shown_version_definition': {
-    real: '/version_definitions?fields=VersionDefinition/stack_services&VersionDefinition/repository_version={repositoryVersion}&VersionDefinition/show_available=true'
-  },
-  'wizard.get_version_definition': {
-    real: '/version_definitions?fields=VersionDefinition/stack_services&VersionDefinition/repository_version={repositoryVersion}'
-  },
   'wizard.service_components': {
     'real': '{stackUrl}/services?fields=StackServices/*,components/*,components/dependencies/Dependencies/scope,artifacts/Artifacts/artifact_name',
     'mock': '/data/stacks/HDP-2.1/service_components.json'
@@ -2155,12 +2109,6 @@ var urls = {
     'real': '/stacks/{stackName}/versions?fields=Versions,operating_systems/repositories/Repositories',
     'mock': '/data/wizard/stack/{stackName}_versions.json'
   },
-
-  'wizard.stacks_versions_definitions': {
-    'real': '/version_definitions?fields=operating_systems/repositories/Repositories/*,VersionDefinition/stack_services,VersionDefinition/repository_version' +
-      '&VersionDefinition/show_available=true&VersionDefinition/stack_name={stackName}',
-    'mock': '/data/wizard/stack/{stackName}_version_definitions.json'
-  },
   'wizard.launch_bootstrap': {
     'real': '/bootstrap',
     'mock': '/data/wizard/bootstrap/bootstrap.json',

+ 3 - 8
ambari-web/app/views/main/admin/stack_upgrade/services_view.js

@@ -31,15 +31,10 @@ App.MainAdminStackServicesView = Em.View.extend({
    */
   services: function() {
     var services = App.supports.installGanglia ? App.StackService.find() : App.StackService.find().without(App.StackService.find('GANGLIA'));
-    var controller = this.get('controller');
-    controller.loadServiceVersionFromVersionDefinitions().complete(function () {
-      return services.map(function(s) {
-        s.set('serviceVersionDisplay', controller.get('serviceVersionsMap')[s.get('serviceName')]);
-        s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName')));
-        return s;
-      });
+    return services.map(function(s) {
+      s.set('isInstalled', App.Service.find().someProperty('serviceName', s.get('serviceName')));
+      return s;
     });
-    return services;
   }.property('App.router.clusterController.isLoaded'),
 
   didInsertElement: function () {

+ 122 - 348
ambari-web/app/views/wizard/step1_view.js

@@ -23,397 +23,195 @@ 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'});
-    this.set('controller.latestSelectedPublicRepoId',this.get('controller.selectedStack.id'));
-
-  },
-
   /**
-   * =========================== Option "Use Public Repository" starts from here ==================
+   * Is Repositories Accordion collapsed
+   * @type {bool}
    */
+  isRLCollapsed: true,
 
-  /**
-   * List of available stack names HDP 2.2, HDP 2.3 .etc
-   * @type {Em.Object[]}
-   */
-  stackNames: function () {
-    var stackNamesMap = {};
-    var selectedStack = this.get('controller.selectedStack');
-    return this.get('controller.content.stacks').toArray().map(function (stack) {
-      if (!stackNamesMap[stack.get('stackNameVersion')] && stack.get('showAvailable')) {
-        stackNamesMap[stack.get('stackNameVersion')] = true;
-        return Em.Object.create({
-          id: stack.get('id'),
-          name: stack.get('stackNameVersion').replace('-', ' '),
-          isActive: stack.get('stackNameVersion') == selectedStack.get('stackNameVersion')
-        });
-      } else {
-        return {};
-      }
-    });
-  }.property('controller.selectedStack'),
-
-  selectStackNameOnTab: function (event) {
-    this.get('controller.content.stacks').setEach('isSelected', false);
-    this.get('controller.content.stacks').findProperty('id', event.context.id).set('isSelected', true);
-    this.set('controller.latestSelectedPublicRepoId',event.context.id);
+  didInsertElement: function () {
+    if (this.get('isRLCollapsed')) {
+      this.$('.accordion-body').hide();
+    }
+    $("[rel=skip-validation-tooltip]").tooltip({ placement: 'right'});
   },
 
   /**
-   * List of other available stack repos within the same stack name
+   * List of available stacks
    * @type {Em.Object[]}
    */
-  availableStackRepoList: function () {
-    var selectedStack = this.get('controller.selectedStack');
-    var availableStackRepos = this.get('controller.content.stacks').filter(function (item) {
-      return item.get('showAvailable') && item.get('stackNameVersion') == selectedStack.get('stackNameVersion') && item.get('id') != selectedStack.get('id');
-    });
-    return availableStackRepos.toArray().map(function (stack) {
+  stacks: function () {
+    return this.get('controller.content.stacks').toArray().map(function (stack) {
       return Em.Object.create({
-        id: stack.get('id'),
-        repositoryVersion: stack.get('repositoryVersion'),
-        isSelected: false
+        name: stack.get('id').replace('-', ' '),
+        isSelected: stack.get('isSelected')
       });
     });
   }.property('controller.selectedStack'),
 
-  selectRepoInList: function (event) {
-    this.get('controller.content.stacks').setEach('isSelected', false);
-    this.get('controller.content.stacks').findProperty('id', event.context.id).set('isSelected', true);
-    this.set('controller.latestSelectedPublicRepoId',event.context.id);
-  },
+  operatingSystems: function () {
+    var selectedStack = this.get('controller.selectedStack');
+    return Em.isNone(selectedStack) ? [] : selectedStack.get('operatingSystems');
+  }.property('controller.selectedStack'),
 
-  selectedServices: function () {
+  /**
+   * List of all repositories under selected stack operatingSystems
+   * API and ember data model structure:
+   * stack = [{OS-1},{OS-2}]
+   * OS-1 = [{repository-1},{repository-2}]
+   * OS-2 = [{repository-3},{repository-4}]
+   * @return: [{repository-1},{repository-2},{repository-3},{repository-4}]
+   */
+  allRepositories: function () {
     var selectedStack = this.get('controller.selectedStack');
-    return Em.isNone(selectedStack) ? [] : selectedStack.get('stackServices').toArray().map(function (service) {
-      return Em.Object.create({
-        displayName: service.get('displayName'),
-        version: service.get('latestVersion')
-      });
-    });
+    return Em.isNone(selectedStack) ? [] : selectedStack.get('repositories');
   }.property('controller.selectedStack'),
 
+  /**
+   * Verify if some repo has empty base-url
+   * @type {bool}
+   */
+  invalidFormatUrlExist: Em.computed.someBy('allRepositories', 'invalidFormatError', true),
 
   /**
    * Disable submit button flag
    * @type {bool}
    */
-  isSubmitDisabled: Em.computed.or('controller.content.isCheckInProgress'),
+  isSubmitDisabled: Em.computed.or('invalidFormatUrlExist', 'isNoOsChecked', 'invalidUrlExist', 'controller.content.isCheckInProgress'),
 
   /**
    * Enable error count badge
    * @type {bool}
    */
-  showErrorsWarningCount: false,
-  totalErrorCnt: 0,
-
-  viewRepositories: function () {
-    var self = this;
-    return App.ModalPopup.show({
-      header: Em.I18n.t('installer.step1.usePublicRepo.viewRepos'),
-      primary: Em.I18n.t('common.save'),
-      onPrimary: function () {
-        self.retryRepoUrls();
-        var modal = this;
-        setTimeout(function(){
-          modal.hide();
-        }, 1500);
-      },
-      classNames: ['view-repositories-popup', 'sixty-percent-width-modal'],
-      bodyClass: Em.View.extend({
-        templateName: require('templates/wizard/step1_viewRepositories'),
-        controllerBinding: 'App.router.wizardStep1Controller',
-
-        operatingSystems: function () {
-          var selectedStack = this.get('controller.selectedStack');
-          return Em.isNone(selectedStack) ? [] : selectedStack.get('operatingSystems');
-        }.property('controller.selectedStack'),
-
-        /**
-         * List of all repositories under selected stack operatingSystems
-         */
-        allRepositories: function () {
-          var selectedStack = this.get('controller.selectedStack');
-          return Em.isNone(selectedStack) ? [] : selectedStack.get('repositories');
-        }.property('controller.selectedStack'),
-
-        /**
-         * Verify if some repo has invalid base-url
-         * @type {bool}
-         */
-        invalidFormatUrlExist: Em.computed.someBy('allRepositories', 'invalidFormatError', true),
-        /**
-         * Verify if some invalid repo-urls exist
-         * @type {bool}
-         */
-        invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', App.Repository.validation['INVALID']),
-        /**
-         * If all repo links are unchecked
-         * @type {bool}
-         */
-        isNoOsChecked: Em.computed.everyBy('operatingSystems', 'isSelected', false),
-
-        /**
-         * Overall errors count
-         * @type {number}
-         */
-        updateTotalErrorCnt: function () {
-          var invalidFormatCnt = this.get('allRepositories').filterProperty('invalidFormatError').length;
-          var invalidCnt = this.get('allRepositories').filterProperty('validation', App.Repository.validation['INVALID']).length;
-          var cnt = 0;
-          if (this.get('isNoOsChecked')) {
-            cnt = 1;
-          } else if (invalidFormatCnt || invalidCnt) {
-            cnt = invalidFormatCnt + invalidCnt;
-          }
-          self.set('totalErrorCnt', cnt);
-          self.set('showErrorsWarningCount', cnt > 0);
-        }.observes('allRepositories', 'allRepositories.@each.invalidFormatError', 'isNoOsChecked', 'allRepositories.@each.validation'),
-
-        popoverView: Em.View.extend({
-          tagName: 'i',
-          classNameBindings: ['repository.validation'],
-          attributeBindings: ['repository.errorTitle:title', 'repository.errorContent:data-content'],
-          didInsertElement: function () {
-            App.popover($(this.get('element')), {'trigger': 'hover'});
-          }
-        }),
-
-        /**
-         * Onclick handler for recheck repos urls. Used in Advanced Repository Options.
-         */
-        retryRepoUrls: function () {
-          App.router.get('installerController').checkRepoURL(this.get('controller'));
-        },
-
-        /**
-         * Onclick handler for checkbox of each repo group
-         * @method updateByCheckbox
-         */
-        updateByCheckbox: function () {
-          //upload to content
-          var operatingSystems = this.get('operatingSystems');
-          if (operatingSystems) {
-            operatingSystems.forEach(function (os) {
-              if (!os.get('isSelected')) {
-                os.get('repositories').forEach(function (repository) {
-                  repository.setProperties({
-                    baseUrl: repository.get('latestBaseUrl'),
-                    validation: App.Repository.validation['PENDING']
-                  });
-                });
-              } else {
-                os.get('repositories').forEach(function (repository) {
-                  if (this.get('controller.skipValidationChecked')) {
-                    repository.set('validation', App.Repository.validation['PENDING']);
-                  }
-                }, this);
-              }
-            }, this);
-          }
-        }.observes('operatingSystems.@each.isSelected', 'controller.skipValidationChecked'),
-
-        /**
-         * Onclick handler for undo action of each repo group
-         * @method undoGroupLocalRepository
-         * @param {object} event
-         */
-        undoGroupLocalRepository: function (event) {
-          event.context.setProperties({
-            baseUrl: event.context.get('latestBaseUrl'),
-            validation: App.Repository.validation['PENDING']
-          });
-        },
-
-        /**
-         * Handler for clear icon click
-         * @method clearGroupLocalRepository
-         * @param {object} event
-         */
-        clearGroupLocalRepository: function (event) {
-          if (!event.context.get('isSelected')) {
-            return;
-          }
-          event.context.setProperties({
-            baseUrl: '',
-            validation: App.Repository.validation['PENDING']
-          });
-        },
-
-        /**
-         * Handler when editing any repo BaseUrl
-         * @method editLocalRepository
-         */
-        editLocalRepository: function () {
-          //upload to content
-          var repositories = this.get('allRepositories');
-          repositories.forEach(function (repository) {
-            if (repository.get('lastBaseUrl') != repository.get('baseUrl')) {
-              repository.setProperties({
-                lastBaseUrl: repository.get('baseUrl'),
-                validation: App.Repository.validation['PENDING']
-              });
-            }
-          }, this);
-        }.observes('allRepositories.@each.baseUrl')
-      })
-    });
-  },
+  showErrorsWarningCount: Em.computed.and('isSubmitDisabled', 'totalErrorCnt'),
 
   /**
-   * Onclick handler for recheck repos urls. Used in Advanced Repository Options.
+   * Verify if some invalid repo-urls exist
+   * @type {bool}
    */
-  retryRepoUrls: function () {
-    App.router.get('installerController').checkRepoURL(this.get('controller'));
-  },
-
+  invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', App.Repository.validation['INVALID']),
 
   /**
-   * =========================== Option "Use Local Repository" starts from here ==================
+   * If all repo links are unchecked
+   * @type {bool}
    */
+  isNoOsChecked: Em.computed.everyBy('operatingSystems', 'isSelected', false),
 
   /**
-   * Checkbox for use Public repo
-   * @type {Ember.Checkbox}
+   * Overall errors count
+   * @type {number}
    */
-  usePublicRepoRadioButton: Em.Checkbox.extend({
-    tagName: 'input',
-    attributeBindings: [ 'type', 'checked' ],
-    classNames: [''],
-    checked: Em.computed.alias('controller.optionsToSelect.usePublicRepo.isSelected'),
-    type: 'radio',
-
-    click: function () {
-      this.set('controller.optionsToSelect.usePublicRepo.isSelected', true);
-      this.set('controller.optionsToSelect.useLocalRepo.isSelected', false);
-      var latestSelectedPublicRepoId = this.get('controller.latestSelectedPublicRepoId');
-      if (latestSelectedPublicRepoId) {
-        this.get('controller.content.stacks').setEach('isSelected', false);
-        this.get('controller.content.stacks').findProperty('id', latestSelectedPublicRepoId).set('isSelected', true);
-      }
+  totalErrorCnt: function () {
+    var invalidFormatCnt = this.get('allRepositories').filterProperty('invalidFormatError').length;
+    var invalidCnt = this.get('allRepositories').filterProperty('validation', App.Repository.validation['INVALID']).length;
+    if (this.get('isNoOsChecked')) {
+      return 1;
+    } else if (invalidFormatCnt || invalidCnt) {
+      return invalidFormatCnt + invalidCnt;
+    } else {
+      return 0;
     }
-  }),
+  }.property('allRepositories.@each.invalidFormatError', 'isNoOsChecked', 'allRepositories.@each.validation'),
 
   /**
-   * Checkbox for use Public repo
+   * Checkbox for each stack
    * @type {Ember.Checkbox}
    */
-  useLocalRepoRadioButton: Em.Checkbox.extend({
+  stackRadioButton: Em.Checkbox.extend({
     tagName: 'input',
     attributeBindings: [ 'type', 'checked' ],
-    classNames: [''],
-    checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.isSelected'),
+    checked: Em.computed.alias('content.isSelected'),
     type: 'radio',
 
     click: function () {
-      this.set('controller.optionsToSelect.useLocalRepo.isSelected', true);
-      this.set('controller.optionsToSelect.usePublicRepo.isSelected', false);
-      var latestSelectedLocalRepoId = this.get('controller.latestSelectedLocalRepoId');
-      if (latestSelectedLocalRepoId) {
-        this.get('controller.content.stacks').setEach('isSelected', false);
-        this.get('controller.content.stacks').findProperty('id', latestSelectedLocalRepoId).set('isSelected', true);
-      }
+      this.get('controller.content.stacks').setEach('isSelected', false);
+      this.get('controller.content.stacks').findProperty('id', this.get('content.name').replace(' ', '-')).set('isSelected', true);
     }
   }),
 
   /**
-   * Checkbox for Use local Repo > Upload VDF file
-   * @type {Ember.Checkbox}
+   * Popover for repo-url error indicator
+   * @type {Em.View}
    */
-  uploadFileRadioButton: Em.Checkbox.extend({
-    tagName: 'input',
-    attributeBindings: [ 'type', 'checked' ],
-    classNames: [''],
-    checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected'),
-    type: 'radio',
-
-    click: function () {
-      this.set('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected', true);
-      this.set('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected', false);
-      this.set('controller.optionsToSelect.useLocalRepo.enterUrl.hasError', false);
-      this.set('controller.optionsToSelect.useLocalRepo.uploadFile.hasError', false);
+  popoverView: Em.View.extend({
+    tagName: 'i',
+    classNameBindings: ['repository.validation'],
+    attributeBindings: ['repository.errorTitle:title', 'repository.errorContent:data-content'],
+    didInsertElement: function () {
+      App.popover($(this.get('element')), {'trigger': 'hover'});
     }
   }),
 
   /**
-   * Checkbox for Use local Repo > Enter Url of VDF file
-   * @type {Ember.Checkbox}
+   * Onclick handler for Config Group Header. Used to show/hide block
+   * @method onToggleBlock
    */
-  enterUrlRadioButton: Em.Checkbox.extend({
-    tagName: 'input',
-    attributeBindings: [ 'type', 'checked' ],
-    classNames: [''],
-    checked: Em.computed.alias('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected'),
-    type: 'radio',
-
-    click: function () {
-      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);
-    }
-  }),
-
- /*
-  * Is File API available
-  * @type {bool}
-  */
-  isFileApi: function () {
-    return window.File && window.FileReader && window.FileList;
-  }.property(),
-
-  readInfoButtonDisabled: function () {
-    if (this.get('controller.optionsToSelect.useLocalRepo.isSelected')) {
-      if(this.get('controller.optionsToSelect.useLocalRepo.uploadFile.isSelected')) {
-        return !this.get('controller.optionsToSelect.useLocalRepo.uploadFile.file');
-      } else if (this.get('controller.optionsToSelect.useLocalRepo.enterUrl.isSelected')) {
-        return !this.get('controller.optionsToSelect.useLocalRepo.enterUrl.url');
-      }
-    } else {
-      return true;
-    }
-  }.property('controller.optionsToSelect.useLocalRepo.isSelected', 'controller.optionsToSelect.useLocalRepo.uploadFile.isSelected',
-    'controller.optionsToSelect.useLocalRepo.uploadFile.file', 'controller.optionsToSelect.useLocalRepo.enterUrl.url'),
-
-  operatingSystems: function () {
-    var selectedStack = this.get('controller.selectedStack');
-    return Em.isNone(selectedStack) ? [] : selectedStack.get('operatingSystems');
-  }.property('controller.selectedStack'),
+  onToggleBlock: function () {
+    this.$('.accordion-body').toggle('blind', 500);
+    this.set('isRLCollapsed', !this.get('isRLCollapsed'));
+  },
 
   /**
-   * List of all repositories under selected stack operatingSystems
+   * Onclick handler for recheck repos urls. Used in Advanced Repository Options.
    */
-  allRepositories: function () {
-    var selectedStack = this.get('controller.selectedStack');
-    return Em.isNone(selectedStack) ? [] : selectedStack.get('repositories');
-  }.property('controller.selectedStack'),
+  retryRepoUrls: function () {
+    App.router.get('installerController').checkRepoURL(this.get('controller'));
+  },
+
 
   /**
-   * Verify if some repo has invalid base-url
-   * @type {bool}
+   * Onclick handler for checkbox of each repo group
+   * @method updateByCheckbox
    */
-  invalidFormatUrlExist: Em.computed.someBy('allRepositories', 'invalidFormatError', true),
+  updateByCheckbox: function () {
+    //upload to content
+    var operatingSystems = this.get('operatingSystems');
+    if (operatingSystems) {
+      operatingSystems.forEach(function (os) {
+        if (!os.get('isSelected')) {
+          os.get('repositories').forEach(function (repository) {
+            repository.setProperties({
+              baseUrl: repository.get('latestBaseUrl'),
+              validation: App.Repository.validation['PENDING']
+            });
+          });
+        } else {
+          os.get('repositories').forEach(function (repository) {
+            if (this.get('controller.skipValidationChecked')) {
+              repository.set('validation', App.Repository.validation['PENDING']);
+            }
+          }, this);
+        }
+      }, this);
+    }
+  }.observes('operatingSystems.@each.isSelected', 'controller.skipValidationChecked'),
+
   /**
-   * Verify if some invalid repo-urls exist
-   * @type {bool}
+   * Onclick handler for undo action of each repo group
+   * @method undoGroupLocalRepository
+   * @param {object} event
    */
-  invalidUrlExist: Em.computed.someBy('allRepositories', 'validation', App.Repository.validation['INVALID']),
+  undoGroupLocalRepository: function (event) {
+    event.context.setProperties({
+      baseUrl: event.context.get('latestBaseUrl'),
+      validation: App.Repository.validation['PENDING']
+    });
+  },
+
   /**
-   * If all repo links are unchecked
-   * @type {bool}
+   * Handler for clear icon click
+   * @method clearGroupLocalRepository
+   * @param {object} event
    */
-  isNoOsChecked: Em.computed.everyBy('operatingSystems', 'isSelected', false),
-
-  popoverView: Em.View.extend({
-    tagName: 'i',
-    classNameBindings: ['repository.validation'],
-    attributeBindings: ['repository.errorTitle:title', 'repository.errorContent:data-content'],
-    didInsertElement: function () {
-      App.popover($(this.get('element')), {'trigger': 'hover'});
+  clearGroupLocalRepository: function (event) {
+    if (!event.context.get('isSelected')) {
+      return;
     }
-  }),
+    event.context.setProperties({
+      baseUrl: '',
+      validation: App.Repository.validation['PENDING']
+    });
+  },
 
   /**
    * Handler when editing any repo BaseUrl
@@ -433,27 +231,3 @@ App.WizardStep1View = Em.View.extend({
   }.observes('allRepositories.@each.baseUrl')
 
 });
-
-
-App.VersionDefinitionFileUploader = Em.View.extend({
-  template: Em.Handlebars.compile('<input type="file" {{bindAttr disabled="view.disabled"}} />'),
-
-  classNames: ['vdf-input-indentation'],
-
-  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 (e) {
-          ////$('#sshKey').html(e.target.result);
-          self.get("controller").setVDFFile(e.target.result);
-        };
-      })(file);
-      reader.readAsText(file);
-    }
-  }
-
-});

+ 35 - 2
ambari-web/test/controllers/installer_test.js

@@ -41,6 +41,22 @@ describe('App.InstallerController', function () {
     });
   });
 
+  describe('#loadStacksVersionsSuccessCallback', function() {
+    beforeEach(function () {
+      sinon.stub(App.store, 'commit', Em.K);
+    });
+    afterEach(function () {
+      App.store.commit.restore();
+    });
+    it ('Correct data', function() {
+      installerController.set('loadStacksRequestsCounter', 1);
+      installerController.loadStacksVersionsSuccessCallback(require('test/stack'));
+      expect(installerController.get('content.stacks.length')).to.equal(2);
+      expect(installerController.get('content.stacks').everyProperty('isSelected')).to.be.false;
+      expect(installerController.get('content.stacks').mapProperty('id')).to.eql(['HDP-2.1','HDP-1.3']);
+    });
+  });
+
   describe('#getCluster', function() {
     it ('Should return merged clusterStatusTemplate', function() {
       installerController.set('clusterStatusTemplate', {
@@ -76,7 +92,6 @@ describe('App.InstallerController', function () {
         isSelected: true,
         reload: false,
         id: 'nn-cc',
-        stackNameVersion: 'nn-cc',
         repositories: Em.A([
           Em.Object.create({
             isSelected: true
@@ -112,7 +127,6 @@ describe('App.InstallerController', function () {
           "isSelected": true,
           "reload": true,
           "id": "nn-cc",
-          "stackNameVersion": 'nn-cc',
           "repositories": [
             {
               "isSelected": true
@@ -309,6 +323,25 @@ describe('App.InstallerController', function () {
     });
   });
 
+  describe('#loadStacks', function() {
+    it ('Should resolve promise with true', function() {
+      installerController.set('content.stacks', Em.Object.create({
+        length: 2
+      }));
+      var res = installerController.loadStacks();
+      res.then(function(data){
+        expect(data).to.be.true;
+      });
+    });
+    it ('Should resolve promise with false', function() {
+      installerController.set('content.stacks', null);
+      var res = installerController.loadStacks();
+      res.then(function(data){
+        expect(data).to.be.false;
+      });
+    });
+  });
+
   describe('#setLowerStepsDisable', function() {
 
     beforeEach(function () {

+ 168 - 506
ambari-web/test/mappers/stack_mapper_test.js

@@ -22,583 +22,256 @@ require('mappers/stack_mapper');
 require('models/stack');
 require('models/operating_system');
 require('models/repository');
-require('models/stack_version/service_simple');
 
 describe('App.stackMapper', function () {
 	describe("#map", function() {
+    
     var testData = {
-      "items" : [
-      {
-        "VersionDefinition" : {
-          "id" : 1,
-          "show_available": true,
-          "stack_name" : "HDP",
-          "stack_version" : "2.3",
-          "repository_version" : "2.3.4.0-3396",
-          "type" : "STANDARD",
-          "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3396.xml",
-          "release" : {
-            "build" : "3396",
-            "compatible_with" : "2.3.[0-3].0",
-            "notes" : "http://example.com",
-            "version" : "2.3.4.0"
+        items: [{
+          "Versions" : {
+            "active" : true,
+            "min_upgrade_version" : null,
+            "parent_stack_version" : "1.3.3",
+            "stack_name" : "HDP",
+            "stack_version" : "1.3"
           },
-          "stack_services" : [
-            {
-              "name" : "HDFS",
-              "display_name" : "HDFS",
-              "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-              "versions" : [
-                "2.7.1.2.3396"
-              ]
-            },
-            {
-              "name" : "YARN",
-              "display_name" : "YARN",
-              "comment" : "",
-              "versions" : [
-                "1.7.3.3396"
-              ]
-            },
+          "operating_systems" : [
             {
-              "name" : "ZOOKEEPER",
-              "display_name" : "ZooKeeper",
-              "comment" : "",
-              "versions" : [
-                "1.7.3.3396"
-              ]
-            }
-          ]
-        },
-        "operating_systems" : [
-          {
-            "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
-            "OperatingSystems" : {
-              "os_type" : "debian7",
-              "repository_version_id" : 1,
-              "stack_name" : "HDP",
-              "stack_version" : "2.3"
-            },
-            "repositories" : [
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
-                "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3396",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-2.3",
-                  "repo_name" : "HDP",
-                  "repository_version_id" : 1,
-                  "stack_name" : "HDP",
-                  "stack_version" : "2.3"
-                }
+              "OperatingSystems" : {
+                "os_type" : "redhat5",
+                "stack_name" : "HDP",
+                "stack_version" : "1.3"
               },
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
-                "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-UTILS-1.1.0.20",
-                  "repo_name" : "HDP-UTILS",
-                  "repository_version_id" : 1,
-                  "stack_name" : "HDP",
-                  "stack_version" : "2.3"
-                }
-              }
-            ]
-          },
-          {
-            "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6",
-            "OperatingSystems" : {
-              "os_type" : "redhat6",
-              "repository_version_id" : 1,
-              "stack_name" : "HDP",
-              "stack_version" : "2.3"
-            },
-            "repositories" : [
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3",
-                "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3396",
-                  "mirrors_list" : "",
-                  "os_type" : "redhat6",
-                  "repo_id" : "HDP-2.3",
-                  "repo_name" : "HDP",
-                  "repository_version_id" : 1,
-                  "stack_name" : "HDP",
-                  "stack_version" : "2.3"
-                }
-              },
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20",
-                "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "mirrors_list" : "",
-                  "os_type" : "redhat6",
-                  "repo_id" : "HDP-UTILS-1.1.0.20",
-                  "repo_name" : "HDP-UTILS",
-                  "repository_version_id" : 1,
-                  "stack_name" : "HDP",
-                  "stack_version" : "2.3"
-                }
-              }
-            ]
-          }
-        ]
-      },
-
-      {
-        "VersionDefinition" : {
-          "id" : 2,
+              "repositories" : [
+                {
+                   "Repositories" : {
+                    "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/1.x/updates/1.3.7.0",
+                    "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/1.x/updates/1.3.7.0",
+                    "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/1.x/updates/1.3.8.0",
+                    "mirrors_list" : null,
+                    "os_type" : "redhat5",
+                    "repo_id" : "HDP-1.3",
+                    "repo_name" : "HDP",
+                    "stack_name" : "HDP",
+                    "stack_version" : "1.3"
+                  }
+                },{
+                  "Repositories" : {
+                    "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos5",
+                    "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos5",
+                    "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos5",
+                    "mirrors_list" : null,
+                    "os_type" : "redhat5",
+                    "repo_id" : "HDP-UTILS-1.1.0.16",
+                    "repo_name" : "HDP-UTILS",
+                    "stack_name" : "HDP",
+                    "stack_version" : "1.3"
+                  }
+                }]
+            },{
+              "OperatingSystems" : {
+                "os_type" : "redhat6",
+                "stack_name" : "HDP",
+                "stack_version" : "1.3"
+              }, "repositories" : [
+                  {
+                    "Repositories" : {
+                      "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/1.x/updates/1.3.7.0",
+                      "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/1.x/updates/1.3.7.0",
+                      "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/1.x/updates/1.3.8.0",
+                      "mirrors_list" : null,
+                      "os_type" : "redhat6",
+                      "repo_id" : "HDP-1.3",
+                      "repo_name" : "HDP",
+                      "stack_name" : "HDP",
+                      "stack_version" : "1.3"
+                    }
+                  },
+                  {
+                    "Repositories" : {
+                      "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos6",
+                      "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos6",
+                      "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.16/repos/centos6",
+                      "mirrors_list" : null,
+                      "os_type" : "redhat6",
+                      "repo_id" : "HDP-UTILS-1.1.0.16",
+                      "repo_name" : "HDP-UTILS",
+                      "stack_name" : "HDP",
+                      "stack_version" : "1.3"
+                    }
+                  }
+                ]
+            }]
+      },{
+        "Versions" : {
+          "active" : false,
+          "min_upgrade_version" : null,
+          "parent_stack_version" : null,
           "stack_name" : "HDP",
-          "stack_version" : "2.3",
-          "show_available": true,
-          "repository_version" : "2.3.4.0-3397",
-          "type" : "STANDARD",
-          "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3397.xml",
-          "release" : {
-            "build" : "3397",
-            "compatible_with" : "2.3.[0-3].0",
-            "notes" : "http://example.com",
-            "version" : "2.3.4.0"
-          },
-          "stack_services" : [
-            {
-              "name" : "HDFS",
-              "display_name" : "HDFS",
-              "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-              "versions" : [
-                "2.7.1.2-3397"
-              ]
-            },
-            {
-              "name" : "YARN",
-              "display_name" : "YARN",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-3397"
-              ]
-            },
-            {
-              "name" : "HBase",
-              "display_name" : "HBase",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-3397"
-              ]
-            },
-            {
-              "name" : "ZOOKEEPER",
-              "display_name" : "ZooKeeper",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-3397"
-              ]
-            },
-            {
-              "name" : "Hive",
-              "display_name" : "Hive",
-              "comment" : "",
-              "versions" : [
-                "1.1.0-3397"
-              ]
-            }
-          ]
+          "stack_version" : "2.0.6"
         },
         "operating_systems" : [
           {
-            "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
             "OperatingSystems" : {
-              "os_type" : "debian7",
-              "repository_version_id" : 1,
+              "os_type" : "redhat5",
               "stack_name" : "HDP",
-              "stack_version" : "2.3"
+              "stack_version" : "2.0.6"
             },
             "repositories" : [
               {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.4.0-3397",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-2.3",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1",
+                  "mirrors_list" : null,
+                  "os_type" : "redhat5",
+                  "repo_id" : "HDP-2.0.6",
                   "repo_name" : "HDP",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.3"
+                  "stack_version" : "2.0.6"
                 }
               },
               {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-UTILS-1.1.0.20",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5",
+                  "mirrors_list" : null,
+                  "os_type" : "redhat5",
+                  "repo_id" : "HDP-UTILS-1.1.0.17",
                   "repo_name" : "HDP-UTILS",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.3"
+                  "stack_version" : "2.0.6"
                 }
-              }
-            ]
-          },
-          {
-            "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6",
+              }]
+          }, {
             "OperatingSystems" : {
               "os_type" : "redhat6",
-              "repository_version_id" : 1,
               "stack_name" : "HDP",
-              "stack_version" : "2.3"
+              "stack_version" : "2.0.6"
             },
             "repositories" : [
               {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3",
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.4.0-3397",
-                  "mirrors_list" : "",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1",
+                  "mirrors_list" : null,
                   "os_type" : "redhat6",
-                  "repo_id" : "HDP-2.3",
+                  "repo_id" : "HDP-2.0.6",
                   "repo_name" : "HDP",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.3"
+                  "stack_version" : "2.0.6"
                 }
-              },
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20",
+              }, {
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "mirrors_list" : "",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6",
+                  "mirrors_list" : null,
                   "os_type" : "redhat6",
-                  "repo_id" : "HDP-UTILS-1.1.0.20",
+                  "repo_id" : "HDP-UTILS-1.1.0.17",
                   "repo_name" : "HDP-UTILS",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.3"
+                  "stack_version" : "2.0.6"
                 }
-              }
-            ]
-          }
-        ]
-      },
-
-      {
-        "VersionDefinition" : {
-          "id" : 5,
+              }]
+          }]
+      },{
+        "Versions" : {
+          "active" : true,
+          "min_upgrade_version" : null,
+          "parent_stack_version" : null,
           "stack_name" : "HDP",
-          "stack_version" : "2.3",
-          "show_available": true,
-          "repository_version" : "2.3.6.0-3646",
-          "type" : "STANDARD",
-          "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_234-3646.xml",
-          "release" : {
-            "build" : "3646",
-            "compatible_with" : "2.3.[0-6].0",
-            "notes" : "http://example.com",
-            "version" : "2.3.6.0"
-          },
-          "stack_services" : [
-            {
-              "name" : "HDFS",
-              "display_name" : "HDFS",
-              "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-              "versions" : [
-                "2.7.1.2-3646"
-              ]
-            },
-            {
-              "name" : "YARN",
-              "display_name" : "YARN",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-3646"
-              ]
-            },
-            {
-              "name" : "HBase",
-              "display_name" : "HBase",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-3646"
-              ]
-            },
-            {
-              "name" : "ZOOKEEPER",
-              "display_name" : "ZooKeeper",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-3646"
-              ]
-            },
-            {
-              "name" : "Hive",
-              "display_name" : "Hive",
-              "comment" : "",
-              "versions" : [
-                "1.1.0-3646"
-              ]
-            }
-          ]
+          "stack_version" : "2.1"
         },
         "operating_systems" : [
           {
-            "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
             "OperatingSystems" : {
-              "os_type" : "debian7",
-              "repository_version_id" : 1,
+              "os_type" : "redhat5",
               "stack_name" : "HDP",
-              "stack_version" : "2.3"
+              "stack_version" : "2.1"
             },
             "repositories" : [
               {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.3.6.0-3646",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-2.3",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos5/2.x/updates/2.0.6.1",
+                  "mirrors_list" : null,
+                  "os_type" : "redhat5",
+                  "repo_id" : "HDP-2.1",
                   "repo_name" : "HDP",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.3"
+                  "stack_version" : "2.1"
                 }
               },
               {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-UTILS-1.1.0.20",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos5",
+                  "mirrors_list" : null,
+                  "os_type" : "redhat5",
+                  "repo_id" : "HDP-UTILS-1.1.0.17",
                   "repo_name" : "HDP-UTILS",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.3"
+                  "stack_version" : "2.1"
                 }
-              }
-            ]
-          },
-          {
-            "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6",
+              }]
+          }, {
             "OperatingSystems" : {
               "os_type" : "redhat6",
-              "repository_version_id" : 1,
               "stack_name" : "HDP",
-              "stack_version" : "2.3"
+              "stack_version" : "2.1"
             },
             "repositories" : [
               {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-2.3",
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/centos6/2.x/BUILDS/2.3.6.0-3646",
-                  "mirrors_list" : "",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.1",
+                  "mirrors_list" : null,
                   "os_type" : "redhat6",
-                  "repo_id" : "HDP-2.3",
+                  "repo_id" : "HDP-2.1",
                   "repo_name" : "HDP",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.3"
+                  "stack_version" : "2.1"
                 }
-              },
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/redhat6/repositories/HDP-UTILS-1.1.0.20",
+              }, {
                 "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6",
-                  "mirrors_list" : "",
+                  "base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6",
+                  "default_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6",
+                  "latest_base_url" : "http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.17/repos/centos6",
+                  "mirrors_list" : null,
                   "os_type" : "redhat6",
-                  "repo_id" : "HDP-UTILS-1.1.0.20",
-                  "repo_name" : "HDP-UTILS",
-                  "repository_version_id" : 1,
-                  "stack_name" : "HDP",
-                  "stack_version" : "2.3"
-                }
-              }
-            ]
-          }
-        ]
-      },
-
-
-      {
-        "VersionDefinition" : {
-          "id" : 3,
-          "stack_name" : "HDP",
-          "stack_version" : "2.4",
-          "show_available": true,
-          "repository_version" : "2.4.0.0-169",
-          "type" : "STANDARD",
-          "version_url" : "file:/Users/ncole/src/hwx/ambari/contrib/version-builder/version_169.xml",
-          "release" : {
-            "build" : "169",
-            "compatible_with" : "2.4.[0-3].0",
-            "notes" : "http://example.com",
-            "version" : "2.4.0.0"
-          },
-          "stack_services" : [
-            {
-              "name" : "HDFS",
-              "display_name" : "HDFS",
-              "comment" : "Data warehouse system for ad-hoc queries & analysis of large datasets and table & storage management service",
-              "versions" : [
-                "2.7.1.2-169"
-              ]
-            },
-            {
-              "name" : "YARN",
-              "display_name" : "YARN",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-169"
-              ]
-            },
-            {
-              "name" : "HBase",
-              "display_name" : "HBase",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-169"
-              ]
-            },
-            {
-              "name" : "ZOOKEEPER",
-              "display_name" : "ZooKeeper",
-              "comment" : "",
-              "versions" : [
-                "1.7.3-169"
-              ]
-            },
-            {
-              "name" : "Hive",
-              "display_name" : "Hive",
-              "comment" : "",
-              "versions" : [
-                "1.1.0-169"
-              ]
-            },
-            {
-              "name" : "MAPREDUCE2",
-              "display_name" : "MapReduce2",
-              "comment" : "service",
-              "versions" : [
-                "2.7.1.2-169"
-              ]
-            },
-            {
-              "name" : "Slider",
-              "display_name" : "Slider",
-              "comment" : "service",
-              "versions" : [
-                "2.7.1.2-169"
-              ]
-            },
-            {
-              "name" : "Pig",
-              "display_name" : "Pig",
-              "comment" : "service",
-              "versions" : [
-                "2.7.1.2-169"
-              ]
-            },
-            {
-              "name" : "Sqoop",
-              "display_name" : "Sqoop",
-              "comment" : "service",
-              "versions" : [
-                "2.7.1.2-169"
-              ]
-            }
-          ]
-        },
-        "operating_systems" : [
-          {
-            "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7",
-            "OperatingSystems" : {
-              "os_type" : "debian7",
-              "repository_version_id" : 1,
-              "stack_name" : "HDP",
-              "stack_version" : "2.4"
-            },
-            "repositories" : [
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-2.3",
-                "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian7/2.x/BUILDS/2.4.0.0-169",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-2.4",
-                  "repo_name" : "HDP",
-                  "repository_version_id" : 1,
-                  "stack_name" : "HDP",
-                  "stack_version" : "2.4"
-                }
-              },
-              {
-                "href" : "http://c6401.ambari.apache.org:8080/api/v1/stacks/HDP/versions/2.3/repository_versions/1/operating_systems/debian7/repositories/HDP-UTILS-1.1.0.20",
-                "Repositories" : {
-                  "base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "default_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "latest_base_url" : "http://s3.amazonaws.com/dev.hortonworks.com/HDP-UTILS-1.1.0.20/repos/debian7",
-                  "mirrors_list" : "",
-                  "os_type" : "debian7",
-                  "repo_id" : "HDP-UTILS-1.1.0.20",
+                  "repo_id" : "HDP-UTILS-1.1.0.17",
                   "repo_name" : "HDP-UTILS",
-                  "repository_version_id" : 1,
                   "stack_name" : "HDP",
-                  "stack_version" : "2.4"
+                  "stack_version" : "2.1"
                 }
-              }
-            ]
-          }
-        ]
-      }
-    ]
+              }]
+          }]
+      }] 
     };
+
     beforeEach(function () {
       App.resetDsStoreTypeMap(App.Repository);
       App.resetDsStoreTypeMap(App.OperatingSystem);
       App.resetDsStoreTypeMap(App.Stack);
-      App.resetDsStoreTypeMap(App.ServiceSimple);
       sinon.stub(App.store, 'commit', Em.K);
-      App.stackMapper.map(testData.items, "VersionDefinition");
+      App.stackMapper.map(testData);
     });
     afterEach(function(){
       App.store.commit.restore();
     });
 
-    it ('should map all Stack data', function() {
-      expect(App.Stack.find().get('length')).to.equal(4);
+    it ('should map active Stack data', function() {
+      expect(App.Stack.find().get('length')).to.equal(2);
     });
 
-    it ('all stacks are showAvailable', function() {
-      expect(App.Stack.find().everyProperty('showAvailable')).to.equal(true);
+    it ('all stacks are active', function() {
+      expect(App.Stack.find().everyProperty('active')).to.equal(true);
     });
 
     it ('no one stack is selected', function() {
@@ -606,34 +279,23 @@ describe('App.stackMapper', function () {
     });
 
     it ('stack ids are valid', function() {
-      expect(App.Stack.find().mapProperty('id')).to.eql(
-        ['HDP-2.4.0.0-169','HDP-2.3.6.0-3646', 'HDP-2.3.4.0-3397', 'HDP-2.3.4.0-3396']);
+      expect(App.Stack.find().mapProperty('id')).to.eql(['HDP-2.1','HDP-1.3']);
     });
 
-    it ('7 OSes are mapped', function() {
-      expect(App.OperatingSystem.find().get('length')).to.equal(7);
+    it ('4 OSes are mapped', function() {
+      expect(App.OperatingSystem.find().get('length')).to.equal(4);
     });
 
     it ('OSes have valid ids', function() {
-      expect(App.OperatingSystem.find().mapProperty('id')).to.eql(
-        ['HDP-2.4.0.0-169-debian7', 'HDP-2.3.6.0-3646-debian7', 'HDP-2.3.6.0-3646-redhat6', 'HDP-2.3.4.0-3397-debian7',
-        'HDP-2.3.4.0-3397-redhat6', 'HDP-2.3.4.0-3396-debian7', 'HDP-2.3.4.0-3396-redhat6']);
+      expect(App.OperatingSystem.find().mapProperty('id')).to.eql(['HDP-2.1-redhat5', 'HDP-2.1-redhat6', 'HDP-1.3-redhat5', 'HDP-1.3-redhat6']);
     });
-
-    it ('14 repositories are mapped', function() {
-      expect(App.Repository.find().get('length')).to.equal(14);
+    
+    it ('8 repositories are mapped', function() {
+      expect(App.Repository.find().get('length')).to.equal(8);
     });
 
     it ('Repositories ids are valid', function() {
-      expect(App.Repository.find().mapProperty('id')).to.eql(
-        ['HDP-2.4.0.0-169-debian7-HDP-2.4', 'HDP-2.4.0.0-169-debian7-HDP-UTILS-1.1.0.20',
-          'HDP-2.3.6.0-3646-debian7-HDP-2.3', 'HDP-2.3.6.0-3646-debian7-HDP-UTILS-1.1.0.20',
-          'HDP-2.3.6.0-3646-redhat6-HDP-2.3','HDP-2.3.6.0-3646-redhat6-HDP-UTILS-1.1.0.20',
-          'HDP-2.3.4.0-3397-debian7-HDP-2.3','HDP-2.3.4.0-3397-debian7-HDP-UTILS-1.1.0.20',
-          'HDP-2.3.4.0-3397-redhat6-HDP-2.3', 'HDP-2.3.4.0-3397-redhat6-HDP-UTILS-1.1.0.20',
-          'HDP-2.3.4.0-3396-debian7-HDP-2.3', 'HDP-2.3.4.0-3396-debian7-HDP-UTILS-1.1.0.20',
-          'HDP-2.3.4.0-3396-redhat6-HDP-2.3', 'HDP-2.3.4.0-3396-redhat6-HDP-UTILS-1.1.0.20'
-        ]);
+      expect(App.Repository.find().mapProperty('id')).to.eql(["HDP-2.1-redhat5-HDP-2.1", "HDP-2.1-redhat5-HDP-UTILS-1.1.0.17", "HDP-2.1-redhat6-HDP-2.1", "HDP-2.1-redhat6-HDP-UTILS-1.1.0.17", "HDP-1.3-redhat5-HDP-1.3", "HDP-1.3-redhat5-HDP-UTILS-1.1.0.16", "HDP-1.3-redhat6-HDP-1.3", "HDP-1.3-redhat6-HDP-UTILS-1.1.0.16"]);
     });
   });
 });

+ 24 - 1
ambari-web/test/views/main/admin/stack_upgrade/services_view_test.js

@@ -1,4 +1,4 @@
- /**
+/**
  * 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
@@ -23,6 +23,29 @@ require('views/main/admin/stack_upgrade/services_view');
 describe('App.MainAdminStackServicesView', function () {
   var view = App.MainAdminStackServicesView.create();
 
+  describe("#services", function () {
+    before(function () {
+      sinon.stub(App.StackService, 'find').returns([
+        Em.Object.create({serviceName: 'S1', isInstalled: false}),
+        Em.Object.create({serviceName: 'S2', isInstalled: false})
+      ]);
+      sinon.stub(App.Service, 'find').returns([
+        Em.Object.create({serviceName: 'S1'})
+      ]);
+    });
+    after(function () {
+      App.StackService.find.restore();
+      App.Service.find.restore();
+    });
+    it("`isInstalled`-flag depends on App.Service", function () {
+      view.propertyDidChange('services');
+      expect(view.get('services')).to.eql([
+        Em.Object.create({serviceName: 'S1', isInstalled: true}),
+        Em.Object.create({serviceName: 'S2', isInstalled: false})
+      ]);
+    });
+  });
+
   describe("#goToAddService()" , function() {
     var mock = Em.Object.create({
         checkAndStartKerberosWizard: Em.K,

+ 289 - 7
ambari-web/test/views/wizard/step1_view_test.js

@@ -28,18 +28,20 @@ function getView() {
 
 describe('App.WizardStep1View', function () {
 
+  App.TestAliases.testAsComputedAnd(getView(), 'showErrorsWarningCount', ['isSubmitDisabled', 'totalErrorCnt']);
+
   describe('#operatingSystems', function () {
     beforeEach(function () {
       sinon.stub(App.Stack, 'find', function () {
         return [
           Ember.Object.create({
-            id: 'HDP-1.3-1234',
+            id: 'HDP-1.3',
             stackName: 'HDP',
             stackVersion: '1.3',
             active: true,
             operatingSystems: [
               Ember.Object.create({
-                id: 'HDP-1.3-1234-redhat5',
+                id: 'HDP-1.3-redhat5',
                 osType: 'redhat5',
                 isSelected: false,
                 repositories: [
@@ -54,7 +56,7 @@ describe('App.WizardStep1View', function () {
                 ]
               }),
               Ember.Object.create({
-                id: 'HDP-1.3-1234-redhat6',
+                id: 'HDP-1.3-redhat6',
                 osType: 'redhat6',
                 isSelected: false,
                 repositories: [
@@ -152,9 +154,25 @@ describe('App.WizardStep1View', function () {
       App.Stack.find.restore();
     });
 
+    it('should create empty array if there is no stacks', function () {
+      controller = App.WizardStep1Controller.create({
+        content: {
+          stacks: []
+        },
+        selectedStack: []
+      });
+      view = App.WizardStep1View.create();
+      view.reopen({
+        controller: controller
+      });
+      expect(view.get('allRepositories.length')).to.equal(0);
+      expect(view.get('operatingSystems.length')).to.equal(0);
+    });
+
     describe('should create repo groups from repo list', function () {
 
       var repositories;
+
       beforeEach(function () {
         controller = App.WizardStep1Controller.create({
           content: {
@@ -166,6 +184,7 @@ describe('App.WizardStep1View', function () {
         view.set('$', function () {
           return Em.Object.create({hide: Em.K, toggle: Em.K});
         });
+
         repositories = view.get('allRepositories');
       });
 
@@ -223,15 +242,28 @@ describe('App.WizardStep1View', function () {
 
   App.TestAliases.testAsComputedEveryBy(getView(), 'isNoOsChecked', 'operatingSystems', 'isSelected', false);
 
-  App.TestAliases.testAsComputedOr(getView(), 'isSubmitDisabled', ['controller.content.isCheckInProgress']);
+  App.TestAliases.testAsComputedOr(getView(), 'isSubmitDisabled', ['invalidFormatUrlExist', 'isNoOsChecked', 'invalidUrlExist', 'controller.content.isCheckInProgress']);
+
+  describe('#stacks', function () {
 
-  describe('#stackNames', function () {
     var tests = Em.A([
+      {
+        m: 'Stack with 2 HDP',
+        stacks: [
+          Em.Object.create({isSelected: true, id: 'HDP-2.0.1'}),
+          Em.Object.create({isSelected: false, id: 'HDP-1.3.3'})
+        ],
+        e: {
+          names: ['HDP 2.0.1', 'HDP 1.3.3'],
+          selected: [true, false]
+        }
+      },
       {
         m: 'No HDP',
         stacks: [],
         e: {
-          names: []
+          names: [],
+          selected: []
         }
       }
     ]);
@@ -239,8 +271,9 @@ describe('App.WizardStep1View', function () {
     tests.forEach(function (test) {
       it(test.m, function () {
         view.set('controller.content.stacks', test.stacks);
-        var stacks = view.get('stackNames');
+        var stacks = view.get('stacks');
         expect(stacks.mapProperty('name')).to.eql(test.e.names);
+        expect(stacks.mapProperty('isSelected')).to.eql(test.e.selected);
       });
     });
 
@@ -250,6 +283,255 @@ describe('App.WizardStep1View', function () {
 
   App.TestAliases.testAsComputedSomeBy(getView(), 'invalidFormatUrlExist', 'allRepositories', 'invalidFormatError', true);
 
+  describe('#totalErrorCnt', function () {
+    var tests = Em.A([
+      {
+        allRepositories: [
+          {}
+        ],
+        m: 'isNoOsChecked',
+        isNoOsChecked: true,
+        e: 1
+      },
+      {
+        allRepositories: [
+          {'invalidFormatError': true},
+          {'invalidFormatError': true}
+        ],
+        isNoOsChecked: false,
+        m: 'two with empty-error',
+        e: 2
+      },
+      {
+        allRepositories: [
+          {'validation': 'icon-exclamation-sign'},
+          {'validation': 'icon-exclamation-sign'}
+        ],
+        isNoOsChecked: false,
+        m: 'two with validation="icon-exclamation-sign"',
+        e: 2
+      },
+      {
+        allRepositories: [
+          {'invalidFormatError': true, 'validation': 'icon-exclamation-sign'},
+          {'invalidFormatError': true, 'validation': 'icon-exclamation-sign'}
+        ],
+        isNoOsChecked: false,
+        m: 'two with empty-error, two with validation="icon-exclamation-sign"',
+        e: 4
+      },
+      {
+        allRepositories: [
+          {}
+        ],
+        isNoOsChecked: false,
+        m: 'no errors/warnings etc',
+        e: 0
+      }
+    ]);
+    tests.forEach(function (test) {
+      it(test.m, function () {
+        view = App.WizardStep1View.create();
+        view.reopen({
+          isNoOsChecked: test.isNoOsChecked,
+          allRepositories: test.allRepositories
+        });
+        expect(view.get('totalErrorCnt')).to.equal(test.e);
+      });
+    });
+  });
+
+  describe('#didInsertElement', function () {
+
+    beforeEach(function () {
+      sinon.stub($.fn, 'tooltip', Em.K);
+    });
+
+    afterEach(function () {
+      $.fn.tooltip.restore();
+    });
+
+    it('should create tooltip', function () {
+      view.set('isRLCollapsed', false);
+      view.didInsertElement();
+      expect($.fn.tooltip.calledOnce).to.equal(true);
+    });
+  });
+
+  describe('#stackRadioButton', function () {
+
+    var v;
+    beforeEach(function () {
+      v = view.get('stackRadioButton').create({
+        content: Em.Object.create({
+          name: ''
+        }),
+        controller: Em.Object.create({
+          content: Em.Object.create({
+            stacks: []
+          })
+        })
+      });
+    });
+
+    describe('#isSelected', function () {
+      it('should be equal content.isSelected', function () {
+        v.set('content.isSelected', true);
+        expect(v.get('checked')).to.equal(true);
+        v.set('content.isSelected', false);
+        expect(v.get('checked')).to.equal(false);
+      });
+    });
+
+    describe('#click', function () {
+      it('should select proper stack', function () {
+        v.set('controller.content.stacks', Em.A([Em.Object.create({id: 'n-1'}), Em.Object.create({id: 'n-2'}), Em.Object.create({id: 'n-3'})]));
+        v.set('content.name', 'n 2');
+        v.click();
+        expect(v.get('controller.content.stacks').getEach('isSelected')).to.eql([false, true, false]);
+      });
+    });
+
+  });
+
+  describe('#popoverView', function () {
+
+    var v;
+    beforeEach(function () {
+      v = view.get('popoverView').create();
+      sinon.stub(App, 'popover', Em.K);
+      view = App.WizardStep1View.create({'controller': controller});
+      view.set('$', function () {
+        return Em.Object.create({hide: Em.K, toggle: Em.K});
+      });
+    });
+
+    afterEach(function () {
+      App.popover.restore();
+    });
+
+    describe('#didInsertElement', function () {
+      it('should create popover', function () {
+        v.didInsertElement();
+        expect(App.popover.calledOnce).to.equal(true);
+      });
+    });
+
+  });
+
+  describe('#onToggleBlock', function () {
+
+    it('should toggle isRLCollapsed', function () {
+      view.set('isRLCollapsed', true);
+      view.onToggleBlock();
+      expect(view.get('isRLCollapsed')).to.equal(false);
+      view.onToggleBlock();
+      expect(view.get('isRLCollapsed')).to.equal(true);
+    });
+  });
+
+  describe('#updateByCheckbox', function () {
+
+    var operatingSystems = [
+      Em.Object.create({
+        name: 'redhat5',
+        isSelected: false,
+        repositories: [Em.Object.create({
+          id: 'id',
+          osType: 'redhat5',
+          baseUrl: 'baseUrl',
+          latestBaseUrl: 'latestBaseUrl',
+          validation: '',
+          isSelected: false
+        })
+        ]
+      })
+    ];
+
+    var ctrl = {
+      content: {
+        stacks: [
+          Em.Object.create({
+            isSelected: true,
+            operatingSystems: [
+              Em.Object.create({
+                id: 'id',
+                osType: 'redhat5',
+                baseUrl: 'baseUrl',
+                latestBaseUrl: 'latestBaseUrl',
+                validation: '',
+                isSelected: false
+              })
+            ]
+          })
+        ]
+      },
+      selectedStack: Em.Object.create({
+        isSelected: true,
+        operatingSystems: [
+          Em.Object.create({
+            id: 'id',
+            osType: 'redhat5',
+            baseUrl: 'baseUrl',
+            latestBaseUrl: 'latestBaseUrl',
+            validation: '',
+            isSelected: true
+          })
+        ]
+      }),
+      skipValidationChecked: true
+    };
+
+    it('target group isn\'t isSelected', function () {
+      view.reopen({
+        operatingSystems: operatingSystems,
+        controller: ctrl
+      });
+      view.updateByCheckbox();
+      var targetGroup = view.get('operatingSystems.firstObject.repositories.firstObject');
+      expect(targetGroup.get('baseUrl')).to.equal('latestBaseUrl');
+      expect(targetGroup.get('latestBaseUrl')).to.equal('latestBaseUrl');
+      expect(targetGroup.get('validation')).to.be.empty;
+
+    });
+
+    it('target group is isSelected, skipValidationisSelected = true', function () {
+      ctrl.content.stacks[0].operatingSystems[0].selected = true;
+      operatingSystems[0].set('isSelected', true);
+      view.reopen({
+        operatingSystems: operatingSystems,
+        controller: ctrl
+      });
+      view.updateByCheckbox();
+      var targetGroup = view.get('operatingSystems.firstObject.repositories.firstObject');
+      expect(targetGroup.get('validation')).to.be.empty;
+    });
+  });
+
+  describe('#clearGroupLocalRepository', function () {
+    var context = {'group-number': 0, id: 'HDP-redhat5', repoId: 'HDP-redhat5', baseUrl: 'baseUrl', validation: 'validation'};
+    it('should empty base url and validation', function () {
+      var event = {context: Em.Object.create(context, {isSelected: true})};
+      view.clearGroupLocalRepository(event);
+      expect(event.context.get('baseUrl')).to.be.empty;
+      expect(event.context.get('validation')).to.be.empty;
+    });
+    it('should do nothing if corresponding OS is not selected', function () {
+      var event = {context: Em.Object.create(context, {isSelected: false})};
+      view.clearGroupLocalRepository(event);
+      expect(event.context.get('baseUrl')).to.equal('baseUrl');
+      expect(event.context.get('validation')).to.equal('validation');
+    });
+  });
+
+  describe('#undoGroupLocalRepository', function () {
+    it('should reset base url and validation', function () {
+      var event = {context: Em.Object.create({'group-number': 0, id: 'HDP-redhat5', repoId: 'HDP-redhat5', latestBaseUrl: 'latestBaseUrl', validation: 'validation'})};
+      view.undoGroupLocalRepository(event);
+      expect(event.context.get('baseUrl')).to.equal(event.context.get('latestBaseUrl'));
+      expect(event.context.get('validation')).to.be.empty;
+    });
+  });
 
   describe('#editLocalRepository', function () {