You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2014/05/30 17:53:02 UTC
git commit: AMBARI-5964 Integrate server-side filtering of selected
hosts. (atkach)
Repository: ambari
Updated Branches:
refs/heads/trunk 954a9cbb8 -> 38e18b371
AMBARI-5964 Integrate server-side filtering of selected hosts. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/38e18b37
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/38e18b37
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/38e18b37
Branch: refs/heads/trunk
Commit: 38e18b371e40d4d967d5f3f1c68abe96c8aa1d90
Parents: 954a9cb
Author: atkach <at...@hortonworks.com>
Authored: Fri May 30 18:50:40 2014 +0300
Committer: atkach <at...@hortonworks.com>
Committed: Fri May 30 18:50:40 2014 +0300
----------------------------------------------------------------------
ambari-web/app/controllers/main/host.js | 9 +-
ambari-web/app/data/host/categories.js | 13 --
ambari-web/app/mappers/status_mapper.js | 5 +
.../app/mixins/common/tableServerProvider.js | 22 ++-
ambari-web/app/templates/main/host.hbs | 12 +-
ambari-web/app/views/main/host.js | 154 +++++++++----------
6 files changed, 102 insertions(+), 113 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/38e18b37/ambari-web/app/controllers/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host.js b/ambari-web/app/controllers/main/host.js
index 4378256..07e7f10 100644
--- a/ambari-web/app/controllers/main/host.js
+++ b/ambari-web/app/controllers/main/host.js
@@ -115,6 +115,11 @@ App.MainHostController = Em.ArrayController.extend(App.UserPref, {
key: 'componentsInPassiveStateCount',
alias: 'host_components/HostRoles/maintenance_state',
type: 'PLAIN'
+ },
+ {
+ key: 'selected',
+ alias: 'Hosts/host_name',
+ type: 'MULTIPLE'
}
],
@@ -211,10 +216,10 @@ App.MainHostController = Em.ArrayController.extend(App.UserPref, {
savedFilterConditions.forEach(function (filter) {
var property = filterProperties.findProperty('key', colPropAssoc[filter.iColumn]);
- if (property && filter.value.length > 0) {
+ if (property && filter.value.length > 0 && !filter.skipFilter) {
queryParams.push({
key: property.alias,
- value: (filter.type === 'multiple') ? filter.value.split(',') : filter.value,
+ value: filter.value,
type: property.type
});
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/38e18b37/ambari-web/app/data/host/categories.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/host/categories.js b/ambari-web/app/data/host/categories.js
index 05f586f..cfdc092 100644
--- a/ambari-web/app/data/host/categories.js
+++ b/ambari-web/app/data/host/categories.js
@@ -76,19 +76,6 @@ module.exports = [
filterValue: 'true'
},
{
- value: Em.I18n.t('common.selected'),
- hostProperty: 'selected',
- class: '',
- isHealthStatus: false,
- healthClass: 'health-status-SELECTED',
- healthStatus: 'health-status-SELECTED',
- selected: true,
- column: 10,
- type: 'boolean',
- filterValue: true,
- isVisible: false
- },
- {
value: Em.I18n.t('common.passive_state'),
hostProperty: 'componentsInPassiveStateCount',
class: 'passive-state icon-medkit',
http://git-wip-us.apache.org/repos/asf/ambari/blob/38e18b37/ambari-web/app/mappers/status_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/status_mapper.js b/ambari-web/app/mappers/status_mapper.js
index 0f1e284..67f3dac 100644
--- a/ambari-web/app/mappers/status_mapper.js
+++ b/ambari-web/app/mappers/status_mapper.js
@@ -106,6 +106,11 @@ App.statusMapper = App.QuickDataMapper.create({
}
}, this);
+ //TODO remove when App.Host model dependencies will be replaced with server request
+ if (!App.router.get('clusterController.isLoaded')) {
+ App.hostsMapper.map(json);
+ }
+
App.cache['previousComponentStatuses'] = currentComponentStatuses;
App.cache['previousComponentPassiveStates'] = currentComponentPassiveStates;
App.cache['hostComponentsOnService'] = hostComponentsOnService;
http://git-wip-us.apache.org/repos/asf/ambari/blob/38e18b37/ambari-web/app/mixins/common/tableServerProvider.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/tableServerProvider.js b/ambari-web/app/mixins/common/tableServerProvider.js
index f1cade7..b01ddaa 100644
--- a/ambari-web/app/mixins/common/tableServerProvider.js
+++ b/ambari-web/app/mixins/common/tableServerProvider.js
@@ -85,26 +85,32 @@ App.TableServerProvider = Em.Mixin.create({
* @param type {String}
*/
updateFilter: function (iColumn, value, type) {
+ this.saveFilterConditions(iColumn, value, type, false);
+ this.refresh();
+ },
+
+ /**
+ * save filter conditions to local storage
+ * @param iColumn {Number}
+ * @param value {String|Array}
+ * @param type {String}
+ * @param skipFilter {Boolean}
+ */
+ saveFilterConditions: function (iColumn, value, type, skipFilter) {
var filterCondition = this.get('filterConditions').findProperty('iColumn', iColumn);
if (filterCondition) {
filterCondition.value = value;
+ filterCondition.skipFilter = skipFilter;
} else {
filterCondition = {
+ skipFilter: skipFilter,
iColumn: iColumn,
value: value,
type: type
};
this.get('filterConditions').push(filterCondition);
}
- this.saveFilterConditions();
- this.refresh();
- },
-
- /**
- * save filter conditions to local storage
- */
- saveFilterConditions: function () {
App.db.setFilterConditions(this.get('controller.name'), this.get('filterConditions'));
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/38e18b37/ambari-web/app/templates/main/host.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/host.hbs b/ambari-web/app/templates/main/host.hbs
index 35d862f..731e76e 100644
--- a/ambari-web/app/templates/main/host.hbs
+++ b/ambari-web/app/templates/main/host.hbs
@@ -147,13 +147,13 @@
<label>{{view.filteredContentInfo}} - <a {{action clearFilters target="view"}} href="#">{{t tableView.filters.clearAllFilters}}</a></label>
</div>
<div class="selected-hosts-info span4">
- {{#if view.selectedCategory.hostsCount}}
- {{#view view.statusFilter categoriesBinding="view.categories"}}
- <a {{action selectCategory view.parentView.selectedCategory target="view"}} href="#">
- {{view.parentView.selectedCategory.hostsCount}}
- {{pluralize view.parentView.selectedCategory.hostsCount singular="t:hosts.filters.selectedHostInfo" plural="t:hosts.filters.selectedHostsInfo"}}
+ {{#if view.showSelectedFilter}}
+ <div>
+ <a {{action filterSelected target="view"}} href="#">
+ {{view.selectedHosts.length}}
+ {{pluralize view.selectedHostsCount singular="t:hosts.filters.selectedHostInfo" plural="t:hosts.filters.selectedHostsInfo"}}
</a>
- {{/view}} - <a {{action clearSelection target="view"}} href="#">{{t hosts.filters.clearSelection}}</a>
+ </div> - <a {{action clearSelection target="view"}} href="#">{{t hosts.filters.clearSelection}}</a>
{{/if}}
</div>
<div class="items-on-page">
http://git-wip-us.apache.org/repos/asf/ambari/blob/38e18b37/ambari-web/app/views/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/host.js b/ambari-web/app/views/main/host.js
index 50e7684..f8b5c0c 100644
--- a/ambari-web/app/views/main/host.js
+++ b/ambari-web/app/views/main/host.js
@@ -36,14 +36,32 @@ App.MainHostView = App.TableView.extend(App.TableServerProvider, {
* flag responsible for updating status counters of hosts
*/
isCountersUpdating: false,
+ /**
+ * Contains all selected hosts on cluster
+ */
+ selectedHosts: [],
/**
* List of hosts in cluster
* @type {Array}
*/
- content:function () {
- return this.get('controller.content');
- }.property('controller.content.length'),
+ content: function () {
+ var selectedHosts = this.getSelectedFilter();
+ if (this.get('controller')) {
+ return this.get('controller.content').filter(function (host) {
+ host.set('selected', selectedHosts.contains(host.get('hostName')));
+ return true;
+ });
+ }
+ return [];
+ }.property('controller.content'),
+ /**
+ * flag to toggle displaying selected hosts counter
+ */
+ showSelectedFilter: function () {
+ return this.get('selectedHosts.length') > 0;
+ }.property('selectedHosts'),
+
/**
* return filtered number of all content number information displayed on the page footer bar
* @returns {String}
@@ -156,8 +174,54 @@ App.MainHostView = App.TableView.extend(App.TableServerProvider, {
else {
this.set('selectAllHosts', false);
}
+ this.combineSelectedFilter();
+ //10 is an index of selected column
+ this.saveFilterConditions(10, this.get('selectedHosts'), 'multiple', true);
+
this.addObserver('selectAllHosts', this, this.toggleAllHosts);
},
+ /**
+ * combine selected hosts on page with selected hosts which are filtered out but added to cluster
+ */
+ combineSelectedFilter: function () {
+ var previouslySelectedHosts = this.getSelectedFilter();
+ var selectedHosts = [];
+ var hostsOnPage = this.get('pageContent').mapProperty('hostName');
+ selectedHosts = this.get('pageContent').filterProperty('selected').mapProperty('hostName');
+
+ previouslySelectedHosts.forEach(function (hostName) {
+ if (!hostsOnPage.contains(hostName)) {
+ selectedHosts.push(hostName);
+ }
+ }, this);
+ this.set('selectedHosts', selectedHosts);
+ },
+
+ /**
+ * filter selected hosts
+ */
+ filterSelected: function() {
+ //10 is an index of selected column
+ this.updateFilter(10, this.get('selectedHosts'), 'multiple');
+ },
+
+ /**
+ * get selected filter previous value
+ * @return {Array}
+ */
+ getSelectedFilter: function() {
+ var filterCondition = this.get('filterConditions').findProperty('iColumn', 10);
+ var dbFilterConditions = App.db.getFilterConditions(this.get('controller.name'));
+ var selectedFilter = [];
+
+ if (filterCondition) {
+ selectedFilter = filterCondition.value;
+ }
+ else if (dbFilterConditions && dbFilterConditions.findProperty('iColumn', 10)) {
+ selectedFilter = dbFilterConditions.findProperty('iColumn', 10).value;
+ }
+ return selectedFilter;
+ },
/**
* Clear selectedFilter
@@ -166,7 +230,8 @@ App.MainHostView = App.TableView.extend(App.TableServerProvider, {
clearSelection: function() {
this.get('pageContent').setEach('selected', false);
this.set('selectAllHosts', false);
- this.clearFilters();
+ this.get('selectedHosts').clear();
+ this.filterSelected();
},
/**
@@ -340,17 +405,6 @@ App.MainHostView = App.TableView.extend(App.TableServerProvider, {
}),
/**
- * update hosts count of selected hosts category
- */
- updateSelectedCategory: function () {
- var hostsCountMap = {
- 'health-status-SELECTED': this.get('content').filterProperty('selected').length
- };
-
- this.updateHostsCount(hostsCountMap);
- }.observes('content.@each.selected'),
-
- /**
* update status counters of hosts
*/
updateStatusCounters: function () {
@@ -577,74 +631,6 @@ App.MainHostView = App.TableView.extend(App.TableServerProvider, {
}),
/**
- * view of the alert filter implemented as a category of host statuses
- */
- alertFilter: Em.View.extend({
- column: 7,
- value: null,
- classNames: ['noDisplay'],
- showClearFilter: function(){
- var mockEvent = {
- context: this.get('parentView.categories').findProperty('healthStatus', 'health-status-WITH-ALERTS')
- };
- if(this.get('value')) {
- this.get('parentView.childViews').findProperty('column', 0).selectCategory(mockEvent);
- }
- }
- }),
-
- /**
- * view of the staleConfigs filter implemented as a category of host statuses
- */
- restartFilter: Em.View.extend({
- column: 8,
- value: null,
- classNames: ['noDisplay'],
- showClearFilter: function(){
- var mockEvent = {
- context: this.get('parentView.categories').findProperty('healthStatus', 'health-status-RESTART')
- };
- if(this.get('value')) {
- this.get('parentView.childViews').findProperty('column', 0).selectCategory(mockEvent);
- }
- }
- }),
-
- /**
- * view of the maintenance filter implemented as a category of host statuses
- */
- passiveStateFilter: Em.View.extend({
- column: 9,
- value: null,
- classNames: ['noDisplay'],
- showClearFilter: function(){
- var mockEvent = {
- context: this.get('parentView.categories').findProperty('healthStatus', 'health-status-PASSIVE_STATE')
- };
- if(this.get('value')) {
- this.get('parentView.childViews').findProperty('column', 0).selectCategory(mockEvent);
- }
- }
- }),
-
- /**
- * view of the "selected" filter implemented as a category of host statuses
- */
- selectedFilter: Em.View.extend({
- column: 10,
- value: null,
- class: ['noDisplay'],
- showClearFilter: function(){
- var mockEvent = {
- context: this.get('parentView.categories').findProperty('healthStatus', 'health-status-SELECTED')
- };
- if(this.get('value')) {
- this.get('parentView.childViews').findProperty('column', 0).selectCategory(mockEvent);
- }
- }
- }),
-
- /**
* Filter view for name column
* Based on <code>filters</code> library
*/
@@ -787,7 +773,7 @@ App.MainHostView = App.TableView.extend(App.TableServerProvider, {
chosenComponents.push(item.get('id'));
});
Em.run.next(function() {
- self.set('value', chosenComponents.toString());
+ self.set('value', chosenComponents);
});
},