blob: e2993d82bd45825b0d5f741d4a4f935ddb2d3f06 [file] [log] [blame]
/**
* 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');
App.ServiceConfigGroup = DS.Model.extend({
/**
* @property {string}
*/
id: DS.attr('string'),
name: DS.attr('string'),
serviceName: DS.attr('string'),
description: DS.attr('string'),
hosts: DS.attr('array'),
configVersions: DS.hasMany('App.ConfigVersion'),
service: DS.belongsTo('App.Service'),
desiredConfigs: DS.attr('array', {defaultValue: []}),
/**
* define if group is persisted on server or is just UI representation
* temporary groups are deleted from store after persisting on server by <code>App.ServiceConfigGroup.deleteTemporaryRecords</code> method
* @property {boolean}
*/
isTemporary: DS.attr('boolean', {defaultValue: false}),
/**
* define if group is default
* @type {boolean}
*/
isDefault: DS.attr('boolean', {defaultValue: false}),
/**
* this flag is used for installed services' config groups
* if user make changes to them - mark this flag to true
* @default [false]
*/
isForUpdate: DS.attr('boolean', {defaultValue: false}),
/**
* mark config groups for installed services
* @default [false]
*/
isForInstalledService: DS.attr('boolean', {defaultValue: false}),
/**
* all hosts that belong to cluster
*/
clusterHostsBinding: 'App.router.manageConfigGroupsController.clusterHosts',
/**
* list of group names that shows which config
* groups should be updated as dependent when current is changed
* @type App.ServiceConfigGroup[]
*/
dependentConfigGroups: DS.attr('object', {defaultValue: {}}),
/**
* Parent configuration group for this group.
* When {@link #isDefault} is true, this value is <code>null</code>
* When {@link #isDefault} is false, this represents the configuration
* deltas that are applied on the default.
*/
parentConfigGroup: DS.belongsTo('App.ServiceConfigGroup'),
/**
* Children configuration groups for this group.
* When {@link #isDefault} is false, this value is <code>null</code>
* When {@link #isDefault} is true, this represents the various
* configuration groups that override the default.
*/
childConfigGroups: DS.hasMany('App.ServiceConfigGroup'),
hash: DS.attr('string'),
/**
* Provides a display friendly name. This includes trimming
* names to a certain length.
*/
displayName: function () {
return App.config.truncateGroupName(this.get('name'));
}.property('name'),
/**
*
*/
displayNameHosts: Em.computed.format('{0} ({1})', 'displayName', 'hosts.length'),
/**
* Provides hosts which are available for inclusion in
* non-default configuration groups.
* @type {Array}
*/
availableHosts: function () {
if (this.get('isDefault')) return [];
var unusedHostsMap = this.get('parentConfigGroup.hosts').toWickMap();
var availableHosts = [];
var sharedHosts = this.get('clusterHosts');
// parentConfigGroup.hosts(hosts from default group) - are available hosts, which don't belong to any group
sharedHosts.forEach(function (host) {
if (unusedHostsMap[host.get('id')]) {
availableHosts.pushObject(Ember.Object.create({
selected: false,
host: host,
hostComponentNames: host.get('hostComponents').mapProperty('componentName')
}));
}
});
return availableHosts;
}.property('isDefault', 'parentConfigGroup', 'childConfigGroups', 'parentConfigGroup.hosts.@each', 'clusterHosts'),
/**
* @type {boolean}
*/
isAddHostsDisabled: Em.computed.or('isDefault', '!availableHosts.length'),
/**
* @type {Array}
*/
properties: DS.attr('array', {defaultValue: []}),
/**
* @type {string}
*/
propertiesList: function () {
var result = '';
if (Array.isArray(this.get('properties'))) {
this.get('properties').forEach(function (item) {
result += item.name + " : " + item.value + '<br/>';
}, this);
}
return result;
}.property('properties.length')
});
App.ServiceConfigGroup.FIXTURES = [];
App.ServiceConfigGroup.getParentConfigGroupId = function(serviceName) {
return App.ServiceConfigGroup.groupId(serviceName, 'Default');
};
App.ServiceConfigGroup.groupId = function(serviceName, groupName) {
return serviceName + "_" + groupName;
};
App.ServiceConfigGroup.defaultGroupName = 'Default';
App.ServiceConfigGroup.deletedGroupName = 'Deleted';
/**
* Delete all records with isTemporary:true
* @method
*/
App.ServiceConfigGroup.deleteTemporaryRecords = function () {
App.ServiceConfigGroup.find().filterProperty('isTemporary').forEach(function(record){
App.configGroupsMapper.deleteRecord(record);
}, this);
};