/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var App = require('app'); var db = require('utils/db'); /** * By Step 7, we have the following information stored in App.db and set on this * controller by the router. * * selectedServices: App.db.selectedServices (the services that the user selected in Step 4) * masterComponentHosts: App.db.masterComponentHosts (master-components-to-hosts mapping the user selected in Step 5) * slaveComponentHosts: App.db.slaveComponentHosts (slave-components-to-hosts mapping the user selected in Step 6) * */ App.InstallerStep7Controller = Em.ArrayController.extend({ name: 'installerStep7Controller', content: [], selectedService: null, slaveHostToGroup: null, isSubmitDisabled: function () { return !this.everyProperty('errorCount', 0); }.property('@each.errorCount'), // TODO: set attributes from localStorage in router selectedServiceNames: [ 'HDFS', 'MAPREDUCE', 'GANGLIA', 'NAGIOS', 'HBASE', 'PIG', 'SQOOP', 'OOZIE', 'HIVE', 'ZOOKEEPER'], masterComponentHosts: require('data/mock/master_component_hosts'), slaveComponentHosts: [], serviceConfigs: require('data/service_configs'), clearStep: function () { this.clear(); this.selectedServiceNames.clear(); this.masterComponentHosts.clear(); this.slaveComponentHosts.clear(); }, loadStep: function () { console.log("TRACE: Loading step7: Configure Services"); this.clearStep(); this.loadConfigs(); this.renderServiceConfigs(this.serviceConfigs); var storedServices = db.getServiceConfigProperties(); if (storedServices === undefined) { return; } else { var configs = new Ember.Set(); var configProperties = new Ember.Set(); this.forEach(function (_content) { _content.get('configs').forEach(function (_config) { configs.add(_config); }, this); }, this); var configProperties = new Ember.Set(); configs.forEach(function (_config) { var temp = {name: _config.get('name'), value: _config.get('value')}; configProperties.add(temp); if (storedServices.someProperty('name', _config.get('name'))) { var componentVal = storedServices.findProperty('name', _config.get('name')); _config.set('value', componentVal.value) } }, this); } }, loadConfigs: function () { // load dependent data from the database var selectedServiceNamesInDB = db.getSelectedServiceNames(); if (selectedServiceNamesInDB !== undefined) { this.set('selectedServiceNames', selectedServiceNamesInDB); } var masterComponentHostsInDB = db.getMasterComponentHosts(); if (masterComponentHostsInDB != undefined) { this.set('masterComponentHosts', masterComponentHostsInDB); } var slaveComponentHostsInDB = db.getSlaveComponentHosts(); if (slaveComponentHostsInDB != undefined) { this.set('slaveComponentHosts', slaveComponentHostsInDB); } }, renderServiceConfigs: function (serviceConfigs) { var self = this; serviceConfigs.forEach(function (_serviceConfig) { var serviceConfig = App.ServiceConfig.create({ serviceName: _serviceConfig.serviceName, displayName: _serviceConfig.displayName, configCategories: _serviceConfig.configCategories, configs: [] }); if (self.selectedServiceNames.contains(serviceConfig.serviceName) || serviceConfig.serviceName === 'MISC') { self.renderComponentConfigs(_serviceConfig, serviceConfig); } else { console.log('skipping ' + serviceConfig.serviceName); } }, this); }, renderComponentConfigs: function (_componentConfig, componentConfig) { _componentConfig.configs.forEach(function (_serviceConfigProperty) { var serviceConfigProperty = App.ServiceConfigProperty.create(_serviceConfigProperty); serviceConfigProperty.serviceConfig = componentConfig; serviceConfigProperty.initialValue(); componentConfig.configs.pushObject(serviceConfigProperty); serviceConfigProperty.validate(); }, this); console.log('pushing ' + componentConfig.serviceName); this.content.pushObject(componentConfig); this.set('selectedService', this.objectAt(0)); }, submit: function () { if (!this.get('isSubmitDisabled')) { // TODO: // save service configs in App.db (localStorage) var serviceConfigProperties = []; this.content.forEach(function (_content) { var config = []; config = _content.get('configs'); config.forEach(function (_configProperties) { var configProperty = {name: _configProperties.get('name'), value: _configProperties.get('value')}; serviceConfigProperties.push(configProperty); }, this); }, this); db.setServiceConfigProperties(serviceConfigProperties); App.router.send('next'); } }, showMasterHosts: function (event) { var serviceConfig = event.context; App.ModalPopup.show({ header: serviceConfig.category + ' Hosts', bodyClass: Ember.View.extend({ serviceConfig: serviceConfig, templateName: require('templates/installer/master_hosts_popup') }) }); }, showSlaveHosts: function (event) { var serviceConfig = event.context; App.ModalPopup.show({ header: serviceConfig.category + ' Hosts', bodyClass: Ember.View.extend({ serviceConfig: serviceConfig, templateName: require('templates/installer/slave_hosts_popup') }) }); } }) ; App.SlaveComponentGroupsController = Ember.ArrayController.extend({ name: 'slaveComponentGroupsController', contentBinding: 'App.router.installerStep7Controller.slaveComponentHosts', slaveComponentGroups: [], selectedComponentName: function () { switch (App.router.get('installerStep7Controller.selectedService.serviceName')) { case 'HDFS': return 'DataNode'; case 'MAPREDUCE': return 'TaskTracker'; case 'HBASE': return 'RegionServer'; default: return null; } }.property('App.router.installerStep7Controller.selectedService'), showAddSlaveComponentGroup: function (event) { var componentName = event.context; App.ModalPopup.show({ header: componentName + ' Groups', bodyClass: Ember.View.extend({ controllerBinding: 'App.router.slaveComponentGroupsController', templateName: require('templates/installer/slave_hosts_popup') }), onPrimary: function () { } }); }, addSlaveComponentGroup: function (event) { var componentName = event.context; var component = this.findProperty('componentName', componentName); var slaveGroups = this.get('slaveComponentGroups'); var newGroupName; console.log(slaveGroups); slaveGroups.forEach(function(group) { }); var newGroup = { groupName: "New Group" }; slaveGroups.pushObject(newGroup); console.log(slaveGroups); }, showEditSlaveComponentGroups: function (event) { this.showAddSlaveComponentGroup(event); }, hosts: function () { if (this.get('selectedComponentName') !== null && this.get('selectedComponentName') !== undefined) { var component = this.findProperty('componentName', this.get('selectedComponentName')); if (component !== undefined && component !== null) { return component.hosts; } } }.property('@each.hosts', 'selectedComponentName'), groups: function () { if (this.get('selectedComponentName') !== null) { var component = this.findProperty('componentName', this.get('selectedComponentName')); if (component !== undefined && component !== null) { return component.hosts.mapProperty('group').uniq(); } } }.property('@each.hosts', 'selectedComponentName'), getHostsGroups: function () { var slaveGroups = this.get('slaveComponentGroups'); if (slaveGroups.length == 0){ var defaultGroup = { groupName: "Default", label: "default" }; slaveGroups.pushObject(defaultGroup); } return slaveGroups; }.property('slaveComponentGroups') });