in ambari-web/app/models/service_config.js [586:744]
validate: function () {
var value = this.get('value');
var valueRange = this.get('valueRange');
var values = [];//value split by "," to check UNIX users, groups list
var isError = false;
var isWarn = false;
if (typeof value === 'string' && value.length === 0) {
if (this.get('isRequired')) {
this.set('errorMessage', 'This is required');
isError = true;
} else {
return;
}
}
if (!isError) {
switch (this.get('displayType')) {
case 'int':
if (!validator.isValidInt(value)) {
this.set('errorMessage', 'Must contain digits only');
isError = true;
} else {
if(valueRange){
if(value < valueRange[0] || value > valueRange[1]){
this.set('errorMessage', 'Must match the range');
isError = true;
}
}
}
break;
case 'float':
if (!validator.isValidFloat(value)) {
this.set('errorMessage', 'Must be a valid number');
isError = true;
}
break;
case 'UNIXList':
if(value != '*'){
values = value.split(',');
for(var i = 0, l = values.length; i < l; i++){
if(!validator.isValidUNIXUser(values[i])){
if(this.get('type') == 'USERS'){
this.set('errorMessage', 'Must be a valid list of user names');
} else {
this.set('errorMessage', 'Must be a valid list of group names');
}
isError = true;
}
}
}
break;
case 'checkbox':
break;
case 'directories':
if (!validator.isValidDir(value)) {
this.set('errorMessage', 'Must be a slash at the start');
isError = true;
}
break;
case 'directory':
if (!validator.isValidDir(value)) {
this.set('errorMessage', 'Must be a slash at the start');
isError = true;
}
break;
case 'custom':
break;
case 'user':
if (!validator.isValidUserName(value)) {
this.set('errorMessage', Em.I18n.t('users.userName.validationFail'));
isError = true;
}
break;
case 'email':
if (!validator.isValidEmail(value)) {
this.set('errorMessage', 'Must be a valid email address');
isError = true;
}
break;
case 'host':
var hiveOozieHostNames = ['hive_hostname','hive_existing_mysql_host','hive_existing_oracle_host','hive_ambari_host',
'oozie_hostname','oozie_existing_mysql_host','oozie_existing_oracle_host','oozie_ambari_host']
if(hiveOozieHostNames.contains(this.get('name'))) {
if (validator.hasSpaces(value)) {
this.set('errorMessage', Em.I18n.t('host.spacesValidation'));
isError = true;
}
} else {
if (validator.isNotTrimmed(value)) {
this.set('errorMessage', Em.I18n.t('host.trimspacesValidation'));
isError = true;
}
}
break;
case 'advanced':
if(this.get('name')=='javax.jdo.option.ConnectionURL' || this.get('name')=='oozie.service.JPAService.jdbc.url') {
if (validator.isNotTrimmed(value)) {
this.set('errorMessage', Em.I18n.t('host.trimspacesValidation'));
isError = true;
}
}
break;
case 'password':
// retypedPassword is set by the retypePasswordView child view of App.ServiceConfigPasswordField
if (value !== this.get('retypedPassword')) {
this.set('errorMessage', 'Passwords do not match');
isError = true;
}
}
}
if (!isError) {
// Check if this value is already in any of the overrides
var self = this;
var isOriginalSCP = this.get('isOriginalSCP');
var parentSCP = this.get('parentSCP');
if (!isOriginalSCP) {
if (!isError && parentSCP != null) {
if (value === parentSCP.get('value')) {
this.set('errorMessage', 'Configuration overrides must have different value');
isError = true;
} else {
var overrides = parentSCP.get('overrides');
overrides.forEach(function (override) {
if (self != override && value === override.get('value')) {
self.set('errorMessage', 'Multiple configuration overrides cannot have same value');
isError = true;
}
});
}
}
}
}
var serviceValidator = this.get('serviceValidator');
if (serviceValidator!=null) {
var validationIssue = serviceValidator.validateConfig(this);
if (validationIssue) {
this.set('warnMessage', validationIssue);
isWarn = true;
}
}
if (!isWarn || isError) { // Errors get priority
this.set('warnMessage', '');
this.set('warn', false);
} else {
this.set('warn', true);
}
if (!isError) {
this.set('errorMessage', '');
this.set('error', false);
} else {
this.set('error', true);
}
}.observes('value', 'retypedPassword')