|
@@ -0,0 +1,181 @@
|
|
|
+/**
|
|
|
+ * 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.
|
|
|
+ */
|
|
|
+module.exports = {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Launches a dialog to select hosts from the provided available hosts.
|
|
|
+ *
|
|
|
+ * Once the user clicks OK or Cancel, the callback is called with the
|
|
|
+ * array of hosts (App.Host[]) selected. If the dialog was cancelled
|
|
|
+ * or closed, <code>null</code> is provided to the callback. Else
|
|
|
+ * an array (maybe empty) will be provided to the callback.
|
|
|
+ *
|
|
|
+ * @param availableHosts {App.Host[]} List of hosts to pick from
|
|
|
+ * @param selectedHosts {App.Host[]} List of hosts already selected from the available hosts
|
|
|
+ * @param selectAtleastOneHost {boolean} If true atleast one host has to be selected
|
|
|
+ * @param validComponents {App.HostComponent[]} List of host-component types to pick from.
|
|
|
+ * @param callback Callback function which is invoked when dialog
|
|
|
+ * is closed, cancelled or OK is pressed.
|
|
|
+ */
|
|
|
+ launchHostsSelectionDialog : function(availableHosts, selectedHosts,
|
|
|
+ selectAtleastOneHost, validComponents, callback) {
|
|
|
+ App.ModalPopup.show({
|
|
|
+ classNames: [ 'sixty-percent-width-modal' ],
|
|
|
+ header: Em.I18n.t('hosts.selectHostsDialog.title'),
|
|
|
+ primary: Em.I18n.t('ok'),
|
|
|
+ secondary: Em.I18n.t('common.cancel'),
|
|
|
+ warningMessage: null,
|
|
|
+ onPrimary: function () {
|
|
|
+ console.debug('(old-selectedHosts)=', selectedHosts);
|
|
|
+ this.set('warningMessage', null);
|
|
|
+ var arrayOfSelectedHosts = [];
|
|
|
+ var selectedHosts = availableHosts.filterProperty('selected', true);
|
|
|
+ selectedHosts.forEach(function (host) {
|
|
|
+ arrayOfSelectedHosts.push(host.get('host.id'));
|
|
|
+ });
|
|
|
+ if (selectAtleastOneHost && arrayOfSelectedHosts.length<1) {
|
|
|
+ this.set('warningMessage', 'Atleast one host needs to be selected.');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ callback(arrayOfSelectedHosts);
|
|
|
+ console.debug('(new-selectedHosts)=', arrayOfSelectedHosts);
|
|
|
+ this.hide();
|
|
|
+ },
|
|
|
+ onSecondary: function () {
|
|
|
+ callback(null);
|
|
|
+ this.hide();
|
|
|
+ },
|
|
|
+ bodyClass: Ember.View.extend({
|
|
|
+ templateName: require('templates/common/configs/overrideWindow'),
|
|
|
+ controllerBinding: 'App.router.mainServiceInfoConfigsController',
|
|
|
+ filterText: '',
|
|
|
+ filterTextPlaceholder: Em.I18n.t('hosts.selectHostsDialog.filter.placeHolder'),
|
|
|
+ availableHosts: availableHosts,
|
|
|
+ filterColumn: Ember.Object.create({id: 'ip', name: 'IP Address', selected: false}),
|
|
|
+ filterColumns: Ember.A([
|
|
|
+ Ember.Object.create({id: 'ip', name: 'IP Address', selected: false}),
|
|
|
+ Ember.Object.create({id: 'cpu', name: 'CPU', selected: false}),
|
|
|
+ Ember.Object.create({id: 'memory', name: 'RAM', selected: false}),
|
|
|
+ Ember.Object.create({id: 'diskUsage', name: 'Disk Usage', selected: false}),
|
|
|
+ Ember.Object.create({id: 'loadAvg', name: 'Load Average', selected: false}),
|
|
|
+ Ember.Object.create({id: 'osArch', name: 'OS Architecture', selected: false}),
|
|
|
+ Ember.Object.create({id: 'osType', name: 'OS Type', selected: false})
|
|
|
+ ]),
|
|
|
+ showOnlySelectedHosts: false,
|
|
|
+ filterComponents: validComponents,
|
|
|
+ filterComponent: null,
|
|
|
+ filteredHosts: function () {
|
|
|
+ var hosts = this.get('availableHosts');
|
|
|
+ var filterText = this.get('filterText');
|
|
|
+ var showOnlySelectedHosts = this.get('showOnlySelectedHosts');
|
|
|
+ var filteredHosts = Ember.A([]);
|
|
|
+ var self = this;
|
|
|
+ hosts.forEach(function (host) {
|
|
|
+ var skip = false;
|
|
|
+ var ahost = host.get('host');
|
|
|
+ var filterColumn = self.get('filterColumn');
|
|
|
+ if (filterColumn == null) {
|
|
|
+ filterColumn = self.get('filterColumns').objectAt(0);
|
|
|
+ }
|
|
|
+ var value = ahost.get(filterColumn.id);
|
|
|
+ host.set('filterColumnValue', value);
|
|
|
+ if (filterText != null && filterText.length > 0) {
|
|
|
+ if ((value == null || !value.match(filterText)) && !host.get('host.publicHostName').match(filterText)) {
|
|
|
+ skip = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var filterComponent = self.get('filterComponent');
|
|
|
+ if (!skip && filterComponent != null) {
|
|
|
+ var componentFound = false;
|
|
|
+ var fcn = filterComponent.get('componentName');
|
|
|
+ var hcs = ahost.get('hostComponents');
|
|
|
+ if (hcs != null) {
|
|
|
+ hcs.forEach(function (hc) {
|
|
|
+ if (fcn === hc.get('componentName')) {
|
|
|
+ componentFound = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (!componentFound) {
|
|
|
+ skip = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!skip && showOnlySelectedHosts && !host.get('selected')) {
|
|
|
+ skip = true;
|
|
|
+ }
|
|
|
+ if (!skip) {
|
|
|
+ filteredHosts.pushObject(host);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return filteredHosts;
|
|
|
+ }.property('availableHosts', 'filterText', 'filterColumn', 'filterComponent', 'filterComponent.componentName', 'showOnlySelectedHosts'),
|
|
|
+ hostColumnValue: function (host, column) {
|
|
|
+ return host.get(column.id);
|
|
|
+ },
|
|
|
+ hostSelectMessage: function () {
|
|
|
+ var hosts = this.get('availableHosts');
|
|
|
+ var selectedHosts = hosts.filterProperty('selected', true);
|
|
|
+ return this.t('hosts.selectHostsDialog.selectedHostsLink').format(selectedHosts.get('length'), hosts.get('length'))
|
|
|
+ }.property('availableHosts.@each.selected'),
|
|
|
+ selectFilterColumn: function (event) {
|
|
|
+ if (event != null && event.context != null && event.context.id != null) {
|
|
|
+ var filterColumn = this.get('filterColumn');
|
|
|
+ if (filterColumn != null) {
|
|
|
+ filterColumn.set('selected', false);
|
|
|
+ }
|
|
|
+ event.context.set('selected', true);
|
|
|
+ this.set('filterColumn', event.context);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ selectFilterComponent: function (event) {
|
|
|
+ if (event != null && event.context != null && event.context.componentName != null) {
|
|
|
+ var currentFilter = this.get('filterComponent');
|
|
|
+ if (currentFilter != null) {
|
|
|
+ currentFilter.set('selected', false);
|
|
|
+ }
|
|
|
+ if (currentFilter != null && currentFilter.componentName === event.context.componentName) {
|
|
|
+ // selecting the same filter deselects it.
|
|
|
+ this.set('filterComponent', null);
|
|
|
+ } else {
|
|
|
+ this.set('filterComponent', event.context);
|
|
|
+ event.context.set('selected', true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ allHostsSelected: false,
|
|
|
+ toggleSelectAllHosts: function (event) {
|
|
|
+ if (this.get('allHostsSelected')) {
|
|
|
+ // Select all hosts
|
|
|
+ this.get('availableHosts').setEach('selected', true);
|
|
|
+ } else {
|
|
|
+ // Deselect all hosts
|
|
|
+ this.get('availableHosts').setEach('selected', false);
|
|
|
+ }
|
|
|
+ }.observes('allHostsSelected'),
|
|
|
+ toggleShowSelectedHosts: function () {
|
|
|
+ var currentFilter = this.get('filterComponent');
|
|
|
+ if (currentFilter != null) {
|
|
|
+ currentFilter.set('selected', false);
|
|
|
+ }
|
|
|
+ this.set('filterComponent', null);
|
|
|
+ this.set('filterText', null);
|
|
|
+ this.set('showOnlySelectedHosts', !this.get('showOnlySelectedHosts'));
|
|
|
+ }
|
|
|
+ })
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|