in ambari-web/app/views/common/filter_view.js [260:454]
getFilterByType: function(type, isGlobal){
switch (type){
case 'ambari-bandwidth':
return function(rowValue, rangeExp){
var compareChar = isNaN(rangeExp.charAt(0)) ? rangeExp.charAt(0) : false;
var compareScale = rangeExp.charAt(rangeExp.length - 1);
var compareValue = compareChar ? parseFloat(rangeExp.substr(1, rangeExp.length)) : parseFloat(rangeExp.substr(0, rangeExp.length));
var match = false;
if (rangeExp.length == 1 && compareChar !== false) {
// User types only '=' or '>' or '<', so don't filter column values
match = true;
return match;
}
switch (compareScale) {
case 'g':
compareValue *= 1073741824;
break;
case 'm':
compareValue *= 1048576;
break;
case 'k':
compareValue *= 1024;
break;
default:
//default value in GB
compareValue *= 1073741824;
}
rowValue = (jQuery(rowValue).text()) ? jQuery(rowValue).text() : rowValue;
var convertedRowValue;
if (rowValue === '<1KB') {
convertedRowValue = 1;
} else {
var rowValueScale = rowValue.substr(rowValue.length - 2, 2);
switch (rowValueScale) {
case 'KB':
convertedRowValue = parseFloat(rowValue)*1024;
break;
case 'MB':
convertedRowValue = parseFloat(rowValue)*1048576;
break;
case 'GB':
convertedRowValue = parseFloat(rowValue)*1073741824;
break;
}
}
switch (compareChar) {
case '<':
if (compareValue > convertedRowValue) match = true;
break;
case '>':
if (compareValue < convertedRowValue) match = true;
break;
case false:
case '=':
if (compareValue == convertedRowValue) match = true;
break;
}
return match;
}
break;
case 'duration':
return function (rowValue, rangeExp) {
var compareChar = isNaN(rangeExp.charAt(0)) ? rangeExp.charAt(0) : false;
var compareScale = rangeExp.charAt(rangeExp.length - 1);
var compareValue = compareChar ? parseFloat(rangeExp.substr(1, rangeExp.length)) : parseFloat(rangeExp.substr(0, rangeExp.length));
var match = false;
if (rangeExp.length == 1 && compareChar !== false) {
// User types only '=' or '>' or '<', so don't filter column values
match = true;
return match;
}
switch (compareScale) {
case 's':
compareValue *= 1000;
break;
case 'm':
compareValue *= 60000;
break;
case 'h':
compareValue *= 3600000;
break;
default:
compareValue *= 1000;
}
rowValue = (jQuery(rowValue).text()) ? jQuery(rowValue).text() : rowValue;
switch (compareChar) {
case '<':
if (compareValue > rowValue) match = true;
break;
case '>':
if (compareValue < rowValue) match = true;
break;
case false:
case '=':
if (compareValue == rowValue) match = true;
break;
}
return match;
}
break;
case 'date':
return function (rowValue, rangeExp) {
var match = false;
var timePassed = new Date().getTime() - rowValue;
switch (rangeExp) {
case 'Past 1 Day':
match = timePassed <= 86400000;
break;
case 'Past 2 Days':
match = timePassed <= 172800000;
break;
case 'Past 7 Days':
match = timePassed <= 604800000;
break;
case 'Past 14 Days':
match = timePassed <= 1209600000;
break;
case 'Past 30 Days':
match = timePassed <= 2592000000;
break;
case 'Any':
match = true;
break;
}
return match;
}
break;
case 'number':
return function(rowValue, rangeExp){
var compareChar = rangeExp.charAt(0);
var compareValue;
var match = false;
if (rangeExp.length == 1) {
if (isNaN(parseInt(compareChar))) {
// User types only '=' or '>' or '<', so don't filter column values
match = true;
return match;
}
else {
compareValue = parseFloat(parseFloat(rangeExp).toFixed(2));
}
}
else {
if (isNaN(parseInt(compareChar))) {
compareValue = parseFloat(parseFloat(rangeExp.substr(1, rangeExp.length)).toFixed(2));
}
else {
compareValue = parseFloat(parseFloat(rangeExp.substr(0, rangeExp.length)).toFixed(2));
}
}
rowValue = parseFloat((jQuery(rowValue).text()) ? jQuery(rowValue).text() : rowValue);
match = false;
switch (compareChar) {
case '<':
if (compareValue > rowValue) match = true;
break;
case '>':
if (compareValue < rowValue) match = true;
break;
case '=':
if (compareValue == rowValue) match = true;
break;
default:
if (rangeExp == rowValue) match = true;
}
return match;
}
break;
case 'multiple':
return function(origin, compareValue){
var options = compareValue.split(',');
var rowValue = origin.mapProperty('componentName').join(" ");
var str = new RegExp(compareValue, "i");
for (var i = 0; i < options.length; i++) {
if(!isGlobal) {
str = new RegExp('(\\W|^)' + options[i] + '(\\W|$)');
}
if (rowValue.search(str) !== -1) {
return true;
}
}
return false;
}
break;
case 'string':
default:
return function(origin, compareValue){
var regex = new RegExp(compareValue,"i");
return regex.test(origin);
}
}
}